curl --request GET \
--url https://api.halal.sh/v1/instruments/{symbol} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.halal.sh/v1/instruments/{symbol}"
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}', 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}",
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}"
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}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.halal.sh/v1/instruments/{symbol}")
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.",
"country_code": "US",
"exchange": "Nasdaq",
"sector": "Technology",
"industry": "Consumer Electronics",
"stock_status": "active",
"delisted_at": "2023-11-07T05:31:56Z",
"market_data": {
"price": 315.05,
"currency": "USD",
"change_24h": 8.09,
"change_percent_24h": 2.6355,
"market_cap": 4109006116320,
"as_of": "2023-11-07T05:31:56Z"
},
"compliance": {
"status": "compliant",
"confidence": 0.95,
"has_analysis": true,
"methodology": "aaoifi-ss21@2026.1",
"withheld": {
"reason": "screen_unresolved",
"analysed": true,
"since": "2026-09-16"
}
},
"health": {
"status": "fragile",
"has_analysis": true
},
"ethical_screening": {
"status": "flagged",
"severity": "critical",
"flagged_areas": [
"occupation"
],
"area_severities": {
"occupation": "low"
},
"source_count": 1,
"last_verified": "2023-11-07T05:31:56Z"
}
},
"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 Instrument
Returns identity, current market data, a compliance summary, and a health summary for a stock. Use the dedicated endpoints for the full compliance determination, extracted financials, or health ratios.
curl --request GET \
--url https://api.halal.sh/v1/instruments/{symbol} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.halal.sh/v1/instruments/{symbol}"
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}', 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}",
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}"
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}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.halal.sh/v1/instruments/{symbol}")
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.",
"country_code": "US",
"exchange": "Nasdaq",
"sector": "Technology",
"industry": "Consumer Electronics",
"stock_status": "active",
"delisted_at": "2023-11-07T05:31:56Z",
"market_data": {
"price": 315.05,
"currency": "USD",
"change_24h": 8.09,
"change_percent_24h": 2.6355,
"market_cap": 4109006116320,
"as_of": "2023-11-07T05:31:56Z"
},
"compliance": {
"status": "compliant",
"confidence": 0.95,
"has_analysis": true,
"methodology": "aaoifi-ss21@2026.1",
"withheld": {
"reason": "screen_unresolved",
"analysed": true,
"since": "2026-09-16"
}
},
"health": {
"status": "fragile",
"has_analysis": true
},
"ethical_screening": {
"status": "flagged",
"severity": "critical",
"flagged_areas": [
"occupation"
],
"area_severities": {
"occupation": "low"
},
"source_count": 1,
"last_verified": "2023-11-07T05:31:56Z"
}
},
"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"

