curl --request GET \
--url https://api.halal.sh/v1/instruments/{symbol}/financials \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.halal.sh/v1/instruments/{symbol}/financials"
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}/financials', 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}/financials",
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}/financials"
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}/financials")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.halal.sh/v1/instruments/{symbol}/financials")
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": "NVDA",
"instrument_id": "NVDA",
"name": "NVIDIA Corporation",
"currency": "USD",
"as_of": "2023-11-07T05:31:56Z",
"filing_set_summary": "10-K(2026-02-25) + 10-Q(2026-05-20)",
"metrics": {
"total_revenue": 123,
"total_assets": 123,
"total_debt": 123,
"cash_and_equivalents": 123,
"marketable_securities": 123,
"accounts_receivable": 123,
"interest_income": 123,
"market_cap": 123
},
"ratios": {
"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
}
}
},
"meta": {
"request_id": "req_abc123",
"as_of": "2023-11-07T05:31:56Z",
"methodology": "aaoifi-ss21@2026.1"
}
}{
"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 Financials
Returns the financial metrics extracted from the latest filings and the three calculated AAOIFI ratios. For per-screen provenance (the filing, its accession number and the values used) use the Evidence Packet.
curl --request GET \
--url https://api.halal.sh/v1/instruments/{symbol}/financials \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.halal.sh/v1/instruments/{symbol}/financials"
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}/financials', 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}/financials",
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}/financials"
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}/financials")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.halal.sh/v1/instruments/{symbol}/financials")
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": "NVDA",
"instrument_id": "NVDA",
"name": "NVIDIA Corporation",
"currency": "USD",
"as_of": "2023-11-07T05:31:56Z",
"filing_set_summary": "10-K(2026-02-25) + 10-Q(2026-05-20)",
"metrics": {
"total_revenue": 123,
"total_assets": 123,
"total_debt": 123,
"cash_and_equivalents": 123,
"marketable_securities": 123,
"accounts_receivable": 123,
"interest_income": 123,
"market_cap": 123
},
"ratios": {
"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
}
}
},
"meta": {
"request_id": "req_abc123",
"as_of": "2023-11-07T05:31:56Z",
"methodology": "aaoifi-ss21@2026.1"
}
}{
"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"

