curl --request GET \
--url https://api.halal.sh/v1/instruments/{symbol}/compliance \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.halal.sh/v1/instruments/{symbol}/compliance"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.halal.sh/v1/instruments/{symbol}/compliance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.halal.sh/v1/instruments/{symbol}/compliance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.halal.sh/v1/instruments/{symbol}/compliance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.halal.sh/v1/instruments/{symbol}/compliance")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.halal.sh/v1/instruments/{symbol}/compliance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"symbol": "AAPL",
"instrument_id": "AAPL",
"name": "Apple Inc.",
"methodology": "aaoifi-ss21@2026.1",
"as_of": "2023-11-07T05:31:56Z",
"determination": {
"status": "compliant",
"confidence": 0.95,
"explanation": "<string>",
"withheld": {
"reason": "screen_unresolved",
"analysed": true,
"since": "2026-09-16"
}
},
"screens": {
"business_activity": {
"result": "pass",
"activities": [
"<string>"
],
"prohibited_activities": [
"<string>"
],
"concerns": [
"<string>"
],
"segments": [
{
"name": "iPhone",
"revenue_percentage": 50,
"prohibited_revenue_impact": "negligible",
"significance": "major"
}
]
},
"debt_to_market_cap": {
"result": "pass",
"value": 0.020616,
"threshold": 0.3,
"operator": "<=",
"buffer": 27.9384
},
"cash_to_market_cap": {
"result": "pass",
"value": 0.020616,
"threshold": 0.3,
"operator": "<=",
"buffer": 27.9384
},
"prohibited_revenue": {
"result": "pass",
"value": 0.020616,
"threshold": 0.3,
"operator": "<=",
"buffer": 27.9384
},
"structural": {
"standard": "AAOIFI SS 57 (Gold and Its Trading Controls)",
"instrument_type": "physical_gold_etc",
"wrapper": "grantor_trust",
"criteria": [
{
"key": "no_lending",
"name": "No lending of deposited metal",
"result": "pass",
"evidence": "<string>",
"source": "Base Prospectus, Condition 5",
"note": "<string>"
}
]
}
},
"revenue": {
"total": 451442000000,
"total_income": 456010490000,
"permissible": {
"amount": 451442000000,
"percentage": 98.998
},
"prohibited": {
"amount": 4568490000,
"percentage": 1.002,
"breakdown": {
"interest_income": 4568490000,
"gambling": 0,
"alcohol": 0,
"weapons": 0,
"tobacco": 0,
"adult_entertainment": 0,
"other": 0
}
}
},
"purification": {
"required": true,
"percentage": 1.012,
"amount_per_1000": 10.12
},
"stability": {
"rating": "stable",
"drivers": [
{
"code": "COMFORTABLE_BUFFERS",
"message": "All financial ratios are well within limits",
"severity": "info"
}
]
},
"filing": {
"summary": "10-K(2025-10-31) + 10-Q(2026-05-01)",
"as_of": "2023-11-07T05:31:56Z",
"hash": "<string>",
"filings": [
{
"type": "10-K",
"period_end": "2023-12-25",
"filing_date": "2023-12-25",
"accession_number": "0000320193-25-000079"
}
]
}
},
"meta": {
"request_id": "req_abc123",
"as_of": "2023-11-07T05:31:56Z",
"methodology": "aaoifi-ss21@2026.1",
"analysis_status": "pending",
"etf": {
"symbol": "SPY",
"endpoint": "/v1/etfs/SPY"
}
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or revoked API key."
},
"meta": {
"request_id": "req_abc123"
}
}{
"error": {
"code": "sandbox_restricted",
"message": "Symbol 'COST' is not available in the sandbox. The sandbox includes AAPL, MSFT, NVDA, GOOGL, JPM, GS, META, TSLA, JNJ and AMZN, and the ETFs SPY and HLAL. Full access needs a live key, which the Plus plan includes for $7 a month: https://halal.sh/plans?source=api_refusal. To show results in your own product, you need the Developer plan, at $99 a month: https://halal.sh/developers.",
"upgrade": {
"plan": "plus",
"price_usd_monthly": 7,
"url": "https://halal.sh/plans?source=api_refusal",
"commercial_plan": "developer",
"commercial_price_usd_monthly": 99,
"commercial_url": "https://halal.sh/developers"
}
},
"meta": {
"request_id": "req_abc123"
}
}{
"error": {
"code": "not_found",
"message": "Stock with identifier 'XYZ' not found"
},
"meta": {
"request_id": "req_abc123"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Daily limit of 100 requests reached. It resets at midnight UTC. The Plus plan includes up to 2,000 requests a day on every stock and ETF we cover, for $7 a month: https://halal.sh/plans?source=api_refusal. To show results in your own product, you need the Developer plan, at $99 a month: https://halal.sh/developers.",
"retry_after": 3600,
"upgrade": {
"plan": "plus",
"price_usd_monthly": 7,
"url": "https://halal.sh/plans?source=api_refusal",
"commercial_plan": "developer",
"commercial_price_usd_monthly": 99,
"commercial_url": "https://halal.sh/developers"
}
},
"meta": {
"request_id": "req_abc123"
}
}Get Compliance
Returns the full AAOIFI Standard 21 determination for a stock: the business-activity screen, all three financial-ratio screens with their thresholds, the revenue breakdown, purification, and a stability signal.
If the stock has not been analyzed yet, determination.status is
pending and screens, revenue, purification, stability, and
filing are null.
curl --request GET \
--url https://api.halal.sh/v1/instruments/{symbol}/compliance \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.halal.sh/v1/instruments/{symbol}/compliance"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.halal.sh/v1/instruments/{symbol}/compliance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.halal.sh/v1/instruments/{symbol}/compliance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.halal.sh/v1/instruments/{symbol}/compliance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.halal.sh/v1/instruments/{symbol}/compliance")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.halal.sh/v1/instruments/{symbol}/compliance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"symbol": "AAPL",
"instrument_id": "AAPL",
"name": "Apple Inc.",
"methodology": "aaoifi-ss21@2026.1",
"as_of": "2023-11-07T05:31:56Z",
"determination": {
"status": "compliant",
"confidence": 0.95,
"explanation": "<string>",
"withheld": {
"reason": "screen_unresolved",
"analysed": true,
"since": "2026-09-16"
}
},
"screens": {
"business_activity": {
"result": "pass",
"activities": [
"<string>"
],
"prohibited_activities": [
"<string>"
],
"concerns": [
"<string>"
],
"segments": [
{
"name": "iPhone",
"revenue_percentage": 50,
"prohibited_revenue_impact": "negligible",
"significance": "major"
}
]
},
"debt_to_market_cap": {
"result": "pass",
"value": 0.020616,
"threshold": 0.3,
"operator": "<=",
"buffer": 27.9384
},
"cash_to_market_cap": {
"result": "pass",
"value": 0.020616,
"threshold": 0.3,
"operator": "<=",
"buffer": 27.9384
},
"prohibited_revenue": {
"result": "pass",
"value": 0.020616,
"threshold": 0.3,
"operator": "<=",
"buffer": 27.9384
},
"structural": {
"standard": "AAOIFI SS 57 (Gold and Its Trading Controls)",
"instrument_type": "physical_gold_etc",
"wrapper": "grantor_trust",
"criteria": [
{
"key": "no_lending",
"name": "No lending of deposited metal",
"result": "pass",
"evidence": "<string>",
"source": "Base Prospectus, Condition 5",
"note": "<string>"
}
]
}
},
"revenue": {
"total": 451442000000,
"total_income": 456010490000,
"permissible": {
"amount": 451442000000,
"percentage": 98.998
},
"prohibited": {
"amount": 4568490000,
"percentage": 1.002,
"breakdown": {
"interest_income": 4568490000,
"gambling": 0,
"alcohol": 0,
"weapons": 0,
"tobacco": 0,
"adult_entertainment": 0,
"other": 0
}
}
},
"purification": {
"required": true,
"percentage": 1.012,
"amount_per_1000": 10.12
},
"stability": {
"rating": "stable",
"drivers": [
{
"code": "COMFORTABLE_BUFFERS",
"message": "All financial ratios are well within limits",
"severity": "info"
}
]
},
"filing": {
"summary": "10-K(2025-10-31) + 10-Q(2026-05-01)",
"as_of": "2023-11-07T05:31:56Z",
"hash": "<string>",
"filings": [
{
"type": "10-K",
"period_end": "2023-12-25",
"filing_date": "2023-12-25",
"accession_number": "0000320193-25-000079"
}
]
}
},
"meta": {
"request_id": "req_abc123",
"as_of": "2023-11-07T05:31:56Z",
"methodology": "aaoifi-ss21@2026.1",
"analysis_status": "pending",
"etf": {
"symbol": "SPY",
"endpoint": "/v1/etfs/SPY"
}
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or revoked API key."
},
"meta": {
"request_id": "req_abc123"
}
}{
"error": {
"code": "sandbox_restricted",
"message": "Symbol 'COST' is not available in the sandbox. The sandbox includes AAPL, MSFT, NVDA, GOOGL, JPM, GS, META, TSLA, JNJ and AMZN, and the ETFs SPY and HLAL. Full access needs a live key, which the Plus plan includes for $7 a month: https://halal.sh/plans?source=api_refusal. To show results in your own product, you need the Developer plan, at $99 a month: https://halal.sh/developers.",
"upgrade": {
"plan": "plus",
"price_usd_monthly": 7,
"url": "https://halal.sh/plans?source=api_refusal",
"commercial_plan": "developer",
"commercial_price_usd_monthly": 99,
"commercial_url": "https://halal.sh/developers"
}
},
"meta": {
"request_id": "req_abc123"
}
}{
"error": {
"code": "not_found",
"message": "Stock with identifier 'XYZ' not found"
},
"meta": {
"request_id": "req_abc123"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Daily limit of 100 requests reached. It resets at midnight UTC. The Plus plan includes up to 2,000 requests a day on every stock and ETF we cover, for $7 a month: https://halal.sh/plans?source=api_refusal. To show results in your own product, you need the Developer plan, at $99 a month: https://halal.sh/developers.",
"retry_after": 3600,
"upgrade": {
"plan": "plus",
"price_usd_monthly": 7,
"url": "https://halal.sh/plans?source=api_refusal",
"commercial_plan": "developer",
"commercial_price_usd_monthly": 99,
"commercial_url": "https://halal.sh/developers"
}
},
"meta": {
"request_id": "req_abc123"
}
}Path Parameters
Stock ticker. A US listing is the bare symbol (AAPL, NVDA).
A non-US listing takes a Google-Finance-style exchange prefix:
PAR:AI (Euronext Paris), LON:AZN (London), TYO:7203 (Tokyo),
FRA:AIXA (Frankfurt), AMS:BESI (Amsterdam), MIL:TPRO (Milan),
CPH:VWS (Copenhagen), KRX:005930 (Korea), NSE:RELIANCE (India),
HKG:0669 (Hong Kong), IST:THYAO (Istanbul). The prefix names the listing venue, whatever
the company's domicile: a Cayman-registered company listed in Hong Kong
is HKG:2020. Common alternative spellings of a venue resolve too
(EPA:AI, HKEX:0669, LSE:AZN, NZX:FPH, BME:AMS, NASDAQ:AAPL),
and a Hong Kong code answers to any zero-padding (HKG:992, HKG:0992).
A Yahoo-style vendor suffix (AI.PA) is not an identifier here and
resolves to nothing; the error names the prefixed form to use instead.
Every instrument and search response carries instrument_id, the exact
string to send here.
A dotted share class is written with a dash or a dot (BRK-B, BRK.B);
both resolve.
1 - 20"PAR:AI"

