Skip to content

Getting Started

Welcome to Islamic Open Finance™! This guide will help you get started with our Shariah-native financial infrastructure platform.

Islamic Open Finance™ provides a comprehensive API platform for building Islamic financial products. Our platform includes:

  • 144 Specialized Rails - Purpose-built APIs for contracts, KYC, compliance, AML, treasury, ledger, governance, and more
  • Shariah Compliance - Built-in AAOIFI-compliant contract types and validation
  • Enterprise Security - SOC2-grade security with RBAC/ABAC authorization
  • Multi-Jurisdiction - Support for GCC, Southeast Asia, UK, and other markets

Before you begin, you’ll need:

  1. An Islamic Open Finance™ account
  2. An API key (available from your dashboard)
  3. Basic understanding of REST APIs
  1. Log in to your IOF Dashboard
  2. Navigate to Settings > API Keys
  3. Click Create API Key
  4. Copy your API key and store it securely

::: caution Never expose your API key in client-side code or commit it to version control. :::

Choose your preferred language and install the SDK:

Terminal window
npm install @iof/sdk
Terminal window
pnpm add @iof/sdk
Terminal window
yarn add @iof/sdk
Terminal window
pip install iof-sdk
Terminal window
go get github.com/Islamic-Open-Finance/iof-sdk-go

:::

import { IOFClient } from "@iof/sdk";
const client = new IOFClient({
apiKey: process.env.IOF_API_KEY,
environment: "sandbox", // or 'production'
});
import os
from iof import IOFClient
client = IOFClient(
api_key=os.environ["IOF_API_KEY"],
environment="sandbox" # or 'production'
)
import "github.com/Islamic-Open-Finance/iof-sdk-go"
client := iof.NewClient(
iof.WithAPIKey(os.Getenv("IOF_API_KEY")),
iof.WithEnvironment(iof.Sandbox),
)

:::

Let’s fetch the available contract types:

// List available contract types
const contractTypes = await client.metadata.contractTypes.list();
console.log("Available contract types:");
for (const type of contractTypes.data) {
console.log(`- ${type.name}: ${type.description}`);
}
# List available contract types
contract_types = client.metadata.contract_types.list()
print("Available contract types:")
for ct in contract_types.data:
print(f"- {ct.name}: {ct.description}")

:::

Now let’s create a simple Murabaha contract:

const contract = await client.contracts.create({
type: "murabaha",
jurisdiction: "SA", // Saudi Arabia
parties: {
financier: { entityId: "ent_financier_123" },
customer: { entityId: "ent_customer_456" },
},
asset: {
description: "Toyota Camry 2024",
category: "vehicle",
costPrice: { amount: 120000, currency: "SAR" },
profitMargin: 0.08, // 8% profit margin
},
terms: {
paymentSchedule: "monthly",
numberOfInstallments: 60,
gracePeriodDays: 30,
},
});
console.log(`Contract created: ${contract.id}`);
console.log(`Status: ${contract.status}`);
console.log(`Monthly payment: ${contract.payment.monthlyAmount} SAR`);
contract = client.contracts.create(
type="murabaha",
jurisdiction="SA", # Saudi Arabia
parties={
"financier": {"entity_id": "ent_financier_123"},
"customer": {"entity_id": "ent_customer_456"},
},
asset={
"description": "Toyota Camry 2024",
"category": "vehicle",
"cost_price": {"amount": 120000, "currency": "SAR"},
"profit_margin": 0.08, # 8% profit margin
},
terms={
"payment_schedule": "monthly",
"number_of_installments": 60,
"grace_period_days": 30,
}
)
print(f"Contract created: {contract.id}")
print(f"Status: {contract.status}")
print(f"Monthly payment: {contract.payment.monthly_amount} SAR")

:::

Now that you’ve created your first contract, explore these topics: