{
"error": {
"code": "unauthorized",
"message": "Invalid or revoked API key."
},
"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"
}
}
Screening
Search Instruments
Search stocks and ETFs by ticker or company/fund name. Returns 200
with an empty array when nothing matches.
Every item carries a type discriminator (stock | etf). Stock items
include a compliance status; ETF items instead expose Shariah purity
(purity_percentage, badge_color) and match_coverage_percent, and
carry nostatus field. Use the types parameter to filter to one
kind, or omit it to receive both.
GET
/
search
Search instruments
curl --request GET \ --url https://api.halal.sh/v1/search \ --header 'X-API-Key: <api-key>'
{
"error": {
"code": "unauthorized",
"message": "Invalid or revoked API key."
},
"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"
}
}
Search returns stocks and ETFs. Every item has a type field to branch on:
type: "stock": has a compliance status (compliant, non-compliant
or pending) and last_analyzed_at.
type: "etf": has the fund’s Shariah purity (purity_percentage and
badge_color) and match_coverage_percent, and no status field: a fund’s
purity is a percentage, not a compliant or non-compliant verdict. For the
fund’s purity breakdown, call Get ETF.
match_coverage_percent is the share of the fund’s weight in holdings we
matched to an instrument in our catalog. A matched holding may not be
screened yet, so don’t present it as ”% screened”. purity_percentage and
badge_color are null until we have screened the fund.
Filtering by type
The optional types query parameter narrows results to one kind:
types=stock: stocks only.
types=etf: ETFs only.
Omitted: both.
types takes a comma-separated list (types=stock,etf), and any value other
than stock or etf returns 400 Bad Request.
Authorizations
X-API-Key
string
header
required
Query Parameters
q
string
required
Search query (ticker or company/fund name).
Minimum string length: 1
Example:
"nvidia"
limit
integer
default:10
Required range: 1 <= x <= 100
types
string
Comma-separated instrument-type filter. Allowed values: stock, etf. Omitted returns both. Any unrecognized value returns 400.
Example:
"stock"
Response
Search results
data
object[]
A stock search hit. Carries the compliance status.
Option 1
Option 2
Show child attributes
meta
object
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"halal.sh API","colors":{"primary":"#10B981","light":"#34D399","dark":"#059669"},"logo":{"light":"https://mintcdn.com/halalsh/ocs92VTB-mFz_J5z/logo/lockup-light.png?fit=max\u0026auto=format\u0026n=ocs92VTB-mFz_J5z\u0026q=85\u0026s=d103102d0dda569eb5de794e5aed58b0","dark":"https://mintcdn.com/halalsh/ocs92VTB-mFz_J5z/logo/lockup-dark.png?fit=max\u0026auto=format\u0026n=ocs92VTB-mFz_J5z\u0026q=85\u0026s=0ad64e8df1ddc3db612be12cca6d0679","href":"https://halal.sh"},"favicon":"https://mintcdn.com/halalsh/ocs92VTB-mFz_J5z/favicon.svg?fit=max\u0026auto=format\u0026n=ocs92VTB-mFz_J5z\u0026q=85\u0026s=b1ccd99d44c9ddc325454aa67c03393c","api":{},"navbar":{"links":[{"href":"https://halal.sh/contact","label":"Support"},{"href":"https://halal.sh/account/api","label":"Dashboard"}],"primary":{"type":"button","label":"Get API Key","href":"https://halal.sh/account/api"}},"contextual":{"options":["copy","view","chatgpt","claude","mcp"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"halalsh","hasAudioNarration":false,"actualSubdomain":"halalsh","customDomains":["docs.halal.sh"],"gitSource":{"type":"github","owner":"halal-sh","repo":"halal.sh","deployBranch":"main","contentDirectory":"developer-portal","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af2c6d4db51a3683b0319d6","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API Reference","count":18},{"language":"default","tag":"Documentation","count":14},{"language":"default","tag":"Instruments","count":6},{"language":"default","tag":"Getting Started","count":5},{"language":"default","tag":"Core Concepts","count":5},{"language":"default","tag":"Guides","count":4},{"language":"default","tag":"Account","count":3},{"language":"default","tag":"ETFs","count":3},{"language":"default","tag":"Analysis requests","count":2},{"language":"default","tag":"Methodology","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/screening/search","slug":"/api-reference/screening/search","pageMetadata":{"title":"Search Instruments","openapi":"GET /search","description":"Search stocks **and ETFs** by ticker or company/fund name. Returns `200`\nwith an empty array when nothing matches.\n\nEvery item carries a `type` discriminator (`stock` | `etf`). Stock items\ninclude a compliance `status`; ETF items instead expose Shariah purity\n(`purity_percentage`, `badge_color`) and `match_coverage_percent`, and\ncarry **no** `status` field. Use the `types` parameter to filter to one\nkind, or omit it to receive both.\n","href":"/api-reference/screening/search"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Search stocks \", _jsx(_components.strong, {\n children: \"and ETFs\"\n }), \" by ticker or company/fund name. Returns \", _jsx(_components.code, {\n children: \"200\"\n }), \"\\nwith an empty array when nothing matches.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Every item carries a \", _jsx(_components.code, {\n children: \"type\"\n }), \" discriminator (\", _jsx(_components.code, {\n children: \"stock\"\n }), \" | \", _jsx(_components.code, {\n children: \"etf\"\n }), \"). Stock items\\ninclude a compliance \", _jsx(_components.code, {\n children: \"status\"\n }), \"; ETF items instead expose Shariah purity\\n(\", _jsx(_components.code, {\n children: \"purity_percentage\"\n }), \", \", _jsx(_components.code, {\n children: \"badge_color\"\n }), \") and \", _jsx(_components.code, {\n children: \"match_coverage_percent\"\n }), \", and\\ncarry \", _jsx(_components.strong, {\n children: \"no\"\n }), \" \", _jsx(_components.code, {\n children: \"status\"\n }), \" field. Use the \", _jsx(_components.code, {\n children: \"types\"\n }), \" parameter to filter to one\\nkind, or omit it to receive both.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Note}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Search returns stocks and ETFs. Every item has a `,_jsx(_components.code,{children:`type`}),` field to branch on:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`type: \"stock\"`}),`:`]}),` has a compliance `,_jsx(_components.code,{children:`status`}),` (`,_jsx(_components.code,{children:`compliant`}),`, `,_jsx(_components.code,{children:`non-compliant`}),`\nor `,_jsx(_components.code,{children:`pending`}),`) and `,_jsx(_components.code,{children:`last_analyzed_at`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`type: \"etf\"`}),`:`]}),` has the fund’s Shariah purity (`,_jsx(_components.code,{children:`purity_percentage`}),` and\n`,_jsx(_components.code,{children:`badge_color`}),`) and `,_jsx(_components.code,{children:`match_coverage_percent`}),`, and no `,_jsx(_components.code,{children:`status`}),` field: a fund’s\npurity is a percentage, not a compliant or non-compliant verdict. For the\nfund’s purity breakdown, call `,_jsx(_components.a,{href:`/api-reference/etfs/get-etf`,children:`Get ETF`}),`.`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`match_coverage_percent`}),` is the share of the fund’s weight in holdings we\nmatched to an instrument in our catalog. A matched holding may not be\nscreened yet, so don’t present it as ”% screened”. `,_jsx(_components.code,{children:`purity_percentage`}),` and\n`,_jsx(_components.code,{children:`badge_color`}),` are `,_jsx(_components.code,{children:`null`}),` until we have screened the fund.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`filtering-by-type`,children:`Filtering by type`}),`\n`,_jsxs(_components.p,{children:[`The optional `,_jsx(_components.code,{children:`types`}),` query parameter narrows results to one kind:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`types=stock`}),`: stocks only.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`types=etf`}),`: ETFs only.`]}),`\n`,_jsx(_components.li,{children:`Omitted: both.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`types`}),` takes a comma-separated list (`,_jsx(_components.code,{children:`types=stock,etf`}),`), and any value other\nthan `,_jsx(_components.code,{children:`stock`}),` or `,_jsx(_components.code,{children:`etf`}),` returns `,_jsx(_components.code,{children:`400 Bad Request`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Search Instruments","openapi":"GET /search","description":"Search stocks **and ETFs** by ticker or company/fund name. Returns `200`\nwith an empty array when nothing matches.\n\nEvery item carries a `type` discriminator (`stock` | `etf`). Stock items\ninclude a compliance `status`; ETF items instead expose Shariah purity\n(`purity_percentage`, `badge_color`) and `match_coverage_percent`, and\ncarry **no** `status` field. Use the `types` parameter to filter to one\nkind, or omit it to receive both.\n","href":"/api-reference/screening/search"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Filtering by type","slug":"filtering-by-type","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"searchInstruments","summary":"Search instruments","description":"Search stocks **and ETFs** by ticker or company/fund name. Returns `200`\nwith an empty array when nothing matches.\n\nEvery item carries a `type` discriminator (`stock` | `etf`). Stock items\ninclude a compliance `status`; ETF items instead expose Shariah purity\n(`purity_percentage`, `badge_color`) and `match_coverage_percent`, and\ncarry **no** `status` field. Use the `types` parameter to filter to one\nkind, or omit it to receive both.\n","tags":["Screening"],"parameters":["12c0bf61-23d3-4c4d-bbd2-a6d375a53ed6","c8ee4f91-b6c1-4fbf-980f-40d0dd9b4398","89e1b603-ccc1-47e4-be40-2cdf4b92eb1a"],"responses":{"200":"a30c1d61-49fb-4d96-a2ff-c8bb3b0c5ea9","400":"1d102a11-519d-4803-ac5e-a35feaa0c98b","401":"42b7322e-90a5-4ce1-8ca2-6498cee61657","429":"4430c9fd-2733-4ede-9008-a25dc55c3846"},"method":"get","type":"path","servers":["15899acc-e487-4202-8bac-355ee205aeee"],"security":["1cb337d1-ec14-48dc-8100-f31dc0103366"],"path":"/search","baseUrlOptions":["https://api.halal.sh/v1"],"title":"Search instruments","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"12c0bf61-23d3-4c4d-bbd2-a6d375a53ed6":{"name":"q","in":"query","required":true,"description":"Search query (ticker or company/fund name).","schema":{"type":"string","minLength":1,"example":"nvidia","isRequired":true,"description":"Search query (ticker or company/fund name).","uniqueKey":"","typeLabel":"string"}},"c8ee4f91-b6c1-4fbf-980f-40d0dd9b4398":{"name":"limit","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":100,"uniqueKey":"","typeLabel":"integer"}},"89e1b603-ccc1-47e4-be40-2cdf4b92eb1a":{"name":"types","in":"query","description":"Comma-separated instrument-type filter. Allowed values: `stock`, `etf`. Omitted returns both. Any unrecognized value returns `400`.","schema":{"type":"string","example":"stock","etf":null,"description":"Comma-separated instrument-type filter. Allowed values: `stock`, `etf`. Omitted returns both. Any unrecognized value returns `400`.","uniqueKey":"","typeLabel":"string"}}},"responses":{"a30c1d61-49fb-4d96-a2ff-c8bb3b0c5ea9":{"description":"Search results","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","description":"A stock search hit. Carries the compliance `status`.","properties":{"type":{"type":"string","enum":["stock"],"example":"stock","uniqueKey":"data.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"symbol":{"type":"string","example":"NVDA","uniqueKey":"data.items.[INDEX].oneOf.0.symbol","typeLabel":"string"},"instrument_id":{"type":"string","example":"NVDA","description":"What to send to `/instruments/{symbol}` for this hit (`LON:AZN`, `HKG:2020`, or a bare US symbol).","uniqueKey":"data.items.[INDEX].oneOf.0.instrument_id","typeLabel":"string"},"name":{"type":"string","example":"NVIDIA Corporation","uniqueKey":"data.items.[INDEX].oneOf.0.name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","example":"US","uniqueKey":"data.items.[INDEX].oneOf.0.country_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"US","uniqueKey":"data.items.[INDEX].oneOf.0.country_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.0.country_code","typeLabel":"string | null"},"exchange":{"oneOf":[{"type":"string","example":"Nasdaq","uniqueKey":"data.items.[INDEX].oneOf.0.exchange.oneOf.0","typeLabel":"string"},{"type":"null","example":"Nasdaq","uniqueKey":"data.items.[INDEX].oneOf.0.exchange.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.0.exchange","typeLabel":"string | null"},"sector":{"oneOf":[{"type":"string","uniqueKey":"data.items.[INDEX].oneOf.0.sector.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.items.[INDEX].oneOf.0.sector.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.0.sector","typeLabel":"string | null"},"industry":{"oneOf":[{"type":"string","uniqueKey":"data.items.[INDEX].oneOf.0.industry.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.items.[INDEX].oneOf.0.industry.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.0.industry","typeLabel":"string | null"},"status":{"type":"string","enum":["compliant","non-compliant","pending"],"description":"Compliance determination. `pending` means there is no published\ndetermination: we have not analyzed the instrument yet, or we hold the\nverdict back (`determination.withheld` says why). This enum may gain\nvalues in future; treat any unknown value as `pending`.\n","uniqueKey":"data.items.[INDEX].oneOf.0.status","typeLabel":"enum\u003cstring>"},"last_analyzed_at":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"data.items.[INDEX].oneOf.0.last_analyzed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"data.items.[INDEX].oneOf.0.last_analyzed_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.0.last_analyzed_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"data.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"An ETF search hit. It has a Shariah purity percentage instead of a compliance `status`: the public API does not reduce an ETF's purity to compliant or non-compliant.","properties":{"type":{"type":"string","enum":["etf"],"example":"etf","uniqueKey":"data.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"symbol":{"type":"string","example":"HLAL","uniqueKey":"data.items.[INDEX].oneOf.1.symbol","typeLabel":"string"},"name":{"type":"string","example":"Wahed FTSE USA Shariah ETF","uniqueKey":"data.items.[INDEX].oneOf.1.name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","example":"US","uniqueKey":"data.items.[INDEX].oneOf.1.country_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"US","uniqueKey":"data.items.[INDEX].oneOf.1.country_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.1.country_code","typeLabel":"string | null"},"exchange":{"oneOf":[{"type":"string","example":"Nasdaq","uniqueKey":"data.items.[INDEX].oneOf.1.exchange.oneOf.0","typeLabel":"string"},{"type":"null","example":"Nasdaq","uniqueKey":"data.items.[INDEX].oneOf.1.exchange.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.1.exchange","typeLabel":"string | null"},"fund_family":{"oneOf":[{"type":"string","example":"Wahed","uniqueKey":"data.items.[INDEX].oneOf.1.fund_family.oneOf.0","typeLabel":"string"},{"type":"null","example":"Wahed","uniqueKey":"data.items.[INDEX].oneOf.1.fund_family.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.1.fund_family","typeLabel":"string | null"},"match_coverage_percent":{"oneOf":[{"type":"number","description":"Percent of fund weight whose holdings we matched to an instrument in our catalog. A matched holding may not be analyzed yet, so do not present this as \"% screened\".","example":99.2,"uniqueKey":"data.items.[INDEX].oneOf.1.match_coverage_percent.oneOf.0","typeLabel":"number"},{"type":"null","description":"Percent of fund weight whose holdings we matched to an instrument in our catalog. A matched holding may not be analyzed yet, so do not present this as \"% screened\".","example":99.2,"uniqueKey":"data.items.[INDEX].oneOf.1.match_coverage_percent.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.1.match_coverage_percent","typeLabel":"number | null"},"purity_percentage":{"oneOf":[{"type":"number","description":"Shariah purity: the percent of holdings, by weight, that are compliant, from the latest purity snapshot. `null` when the ETF has not been screened yet.","example":97.1,"uniqueKey":"data.items.[INDEX].oneOf.1.purity_percentage.oneOf.0","typeLabel":"number"},{"type":"null","description":"Shariah purity: the percent of holdings, by weight, that are compliant, from the latest purity snapshot. `null` when the ETF has not been screened yet.","example":97.1,"uniqueKey":"data.items.[INDEX].oneOf.1.purity_percentage.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.1.purity_percentage","typeLabel":"number | null"},"badge_color":{"oneOf":[{"type":"string","enum":["green","amber","grey"],"description":"Badge color derived from the latest purity snapshot.","example":"green","uniqueKey":"data.items.[INDEX].oneOf.1.badge_color.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["green","amber","grey"],"description":"Badge color derived from the latest purity snapshot.","example":"green","uniqueKey":"data.items.[INDEX].oneOf.1.badge_color.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].oneOf.1.badge_color","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"data.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data","typeLabel":"object[]"},"meta":{"type":"object","properties":{"request_id":{"type":"string","description":"Unique ID for this request. Include it in support requests.","example":"req_abc123","uniqueKey":"meta.request_id","typeLabel":"string"},"as_of":{"type":"string","format":"date-time","description":"When this response was generated.","uniqueKey":"meta.as_of","typeLabel":"string\u003cdate-time>"},"methodology":{"type":"string","description":"Methodology used, as `id@version`. Present on compliance responses.\n`aaoifi-ss21` for an operating company; `aaoifi-ss57`, `aaoifi-ss20` or\n`halal-sh-etf-taxonomy` for a pooled vehicle decided on its structure\n(see `screens.structural` on the compliance resource).\n","example":"aaoifi-ss21@2026.1","uniqueKey":"meta.methodology","typeLabel":"string"},"total":{"type":"integer","uniqueKey":"meta.total","typeLabel":"integer"},"query":{"type":"string","uniqueKey":"meta.query","typeLabel":"string"}},"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":[{"type":"stock","symbol":"NVDA","instrument_id":"NVDA","name":"NVIDIA Corporation","country_code":"US","exchange":"Nasdaq","sector":"\u003cstring>","industry":"\u003cstring>","status":"compliant","last_analyzed_at":"2023-11-07T05:31:56Z"}],"meta":{"request_id":"req_abc123","as_of":"2023-11-07T05:31:56Z","methodology":"aaoifi-ss21@2026.1","total":123,"query":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"1d102a11-519d-4803-ac5e-a35feaa0c98b":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["bad_request","unauthorized","sandbox_restricted","plan_required","not_found","already_analyzed","listing_not_active","no_filings","stale_filings","withheld","rate_limit_exceeded","analysis_limit_reached","service_unavailable","internal_error"],"example":"not_found","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"Stock with identifier 'XYZ' not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds until you can retry (only on 429).","uniqueKey":"error.retry_after","typeLabel":"integer"},"limit_type":{"type":"string","enum":["daily","in_progress"],"description":"On `analysis_limit_reached`: which part of the allowance is used up, the day's analyses or those running at once.","uniqueKey":"error.limit_type","typeLabel":"enum\u003cstring>"},"limit":{"type":"integer","description":"On `analysis_limit_reached`: the allowance.","uniqueKey":"error.limit","typeLabel":"integer"},"current":{"type":"integer","description":"On `analysis_limit_reached`: how many you have used.","uniqueKey":"error.current","typeLabel":"integer"},"reset_at":{"type":"string","format":"date-time","description":"On `analysis_limit_reached`: when you can ask again.","uniqueKey":"error.reset_at","typeLabel":"string\u003cdate-time>"},"instrument_id":{"type":"string","description":"On `already_analyzed` for a secondary share class: the primary, whose result applies.","uniqueKey":"error.instrument_id","typeLabel":"string"},"status":{"type":"string","description":"On `listing_not_active`: the listing's status, such as `delisted`.","uniqueKey":"error.status","typeLabel":"string"},"delisted_at":{"oneOf":[{"type":"string","format":"date-time","description":"On `listing_not_active`: the date of the delisting.","uniqueKey":"error.delisted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"On `listing_not_active`: the date of the delisting.","uniqueKey":"error.delisted_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.delisted_at","typeLabel":"string\u003cdate-time> | null"},"upgrade":{"type":"object","description":"The paid plans that remove a sandbox limit, with their prices. Present\non every `sandbox_restricted` 403 and on a sandbox caller's 429, and\nabsent for a caller already on a paid plan.\n","required":["plan","price_usd_monthly","url","commercial_plan","commercial_price_usd_monthly","commercial_url"],"properties":{"plan":{"type":"string","enum":["plus"],"description":"The plan for your own use: live keys, the full universe, MCP.","isRequired":true,"uniqueKey":"error.upgrade.plan","typeLabel":"enum\u003cstring>"},"price_usd_monthly":{"type":"number","example":7,"isRequired":true,"uniqueKey":"error.upgrade.price_usd_monthly","typeLabel":"number"},"url":{"type":"string","format":"uri","example":"https://halal.sh/plans?source=api_refusal","isRequired":true,"uniqueKey":"error.upgrade.url","typeLabel":"string\u003curi>"},"commercial_plan":{"type":"string","enum":["developer"],"description":"The plan for showing results in your own product.","isRequired":true,"uniqueKey":"error.upgrade.commercial_plan","typeLabel":"enum\u003cstring>"},"commercial_price_usd_monthly":{"type":"number","example":99,"isRequired":true,"uniqueKey":"error.upgrade.commercial_price_usd_monthly","typeLabel":"number"},"commercial_url":{"type":"string","format":"uri","example":"https://halal.sh/developers","isRequired":true,"uniqueKey":"error.upgrade.commercial_url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.upgrade","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","properties":{"request_id":{"type":"string","description":"Unique ID for this request. Include it in support requests.","example":"req_abc123","uniqueKey":"meta.request_id","typeLabel":"string"},"as_of":{"type":"string","format":"date-time","description":"When this response was generated.","uniqueKey":"meta.as_of","typeLabel":"string\u003cdate-time>"},"methodology":{"type":"string","description":"Methodology used, as `id@version`. Present on compliance responses.\n`aaoifi-ss21` for an operating company; `aaoifi-ss57`, `aaoifi-ss20` or\n`halal-sh-etf-taxonomy` for a pooled vehicle decided on its structure\n(see `screens.structural` on the compliance resource).\n","example":"aaoifi-ss21@2026.1","uniqueKey":"meta.methodology","typeLabel":"string"}},"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"bad_request","message":"Maximum 50 symbols per request."},"meta":{"request_id":"req_abc123"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"bad_request","message":"Maximum 50 symbols per request."},"meta":{"request_id":"req_abc123"}}}},"exampleType":"examples"}},"exampleType":"examples"},"42b7322e-90a5-4ce1-8ca2-6498cee61657":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["bad_request","unauthorized","sandbox_restricted","plan_required","not_found","already_analyzed","listing_not_active","no_filings","stale_filings","withheld","rate_limit_exceeded","analysis_limit_reached","service_unavailable","internal_error"],"example":"not_found","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"Stock with identifier 'XYZ' not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds until you can retry (only on 429).","uniqueKey":"error.retry_after","typeLabel":"integer"},"limit_type":{"type":"string","enum":["daily","in_progress"],"description":"On `analysis_limit_reached`: which part of the allowance is used up, the day's analyses or those running at once.","uniqueKey":"error.limit_type","typeLabel":"enum\u003cstring>"},"limit":{"type":"integer","description":"On `analysis_limit_reached`: the allowance.","uniqueKey":"error.limit","typeLabel":"integer"},"current":{"type":"integer","description":"On `analysis_limit_reached`: how many you have used.","uniqueKey":"error.current","typeLabel":"integer"},"reset_at":{"type":"string","format":"date-time","description":"On `analysis_limit_reached`: when you can ask again.","uniqueKey":"error.reset_at","typeLabel":"string\u003cdate-time>"},"instrument_id":{"type":"string","description":"On `already_analyzed` for a secondary share class: the primary, whose result applies.","uniqueKey":"error.instrument_id","typeLabel":"string"},"status":{"type":"string","description":"On `listing_not_active`: the listing's status, such as `delisted`.","uniqueKey":"error.status","typeLabel":"string"},"delisted_at":{"oneOf":[{"type":"string","format":"date-time","description":"On `listing_not_active`: the date of the delisting.","uniqueKey":"error.delisted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"On `listing_not_active`: the date of the delisting.","uniqueKey":"error.delisted_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.delisted_at","typeLabel":"string\u003cdate-time> | null"},"upgrade":{"type":"object","description":"The paid plans that remove a sandbox limit, with their prices. Present\non every `sandbox_restricted` 403 and on a sandbox caller's 429, and\nabsent for a caller already on a paid plan.\n","required":["plan","price_usd_monthly","url","commercial_plan","commercial_price_usd_monthly","commercial_url"],"properties":{"plan":{"type":"string","enum":["plus"],"description":"The plan for your own use: live keys, the full universe, MCP.","isRequired":true,"uniqueKey":"error.upgrade.plan","typeLabel":"enum\u003cstring>"},"price_usd_monthly":{"type":"number","example":7,"isRequired":true,"uniqueKey":"error.upgrade.price_usd_monthly","typeLabel":"number"},"url":{"type":"string","format":"uri","example":"https://halal.sh/plans?source=api_refusal","isRequired":true,"uniqueKey":"error.upgrade.url","typeLabel":"string\u003curi>"},"commercial_plan":{"type":"string","enum":["developer"],"description":"The plan for showing results in your own product.","isRequired":true,"uniqueKey":"error.upgrade.commercial_plan","typeLabel":"enum\u003cstring>"},"commercial_price_usd_monthly":{"type":"number","example":99,"isRequired":true,"uniqueKey":"error.upgrade.commercial_price_usd_monthly","typeLabel":"number"},"commercial_url":{"type":"string","format":"uri","example":"https://halal.sh/developers","isRequired":true,"uniqueKey":"error.upgrade.commercial_url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.upgrade","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","properties":{"request_id":{"type":"string","description":"Unique ID for this request. Include it in support requests.","example":"req_abc123","uniqueKey":"meta.request_id","typeLabel":"string"},"as_of":{"type":"string","format":"date-time","description":"When this response was generated.","uniqueKey":"meta.as_of","typeLabel":"string\u003cdate-time>"},"methodology":{"type":"string","description":"Methodology used, as `id@version`. Present on compliance responses.\n`aaoifi-ss21` for an operating company; `aaoifi-ss57`, `aaoifi-ss20` or\n`halal-sh-etf-taxonomy` for a pooled vehicle decided on its structure\n(see `screens.structural` on the compliance resource).\n","example":"aaoifi-ss21@2026.1","uniqueKey":"meta.methodology","typeLabel":"string"}},"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"unauthorized","message":"Invalid or revoked API key."},"meta":{"request_id":"req_abc123"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"Invalid or revoked API key."},"meta":{"request_id":"req_abc123"}}}},"exampleType":"examples"}},"exampleType":"examples"},"4430c9fd-2733-4ede-9008-a25dc55c3846":{"description":"Rate limit exceeded: your plan's daily or per-minute allowance, or a\nper-IP limit (600 a minute on every request before its key is checked,\n60 a minute on the index and the OpenAPI document). Developer limits\nare per account: every live key, connected app and signed-in session on\nthe account shares them. On the Plus plan, limits apply to each live key separately.\n`Retry-After` and `error.retry_after` give the wait in seconds\nwhichever limit refused. A sandbox caller's 429 also has\n`error.upgrade`, and its `message` says what the Plus plan includes\nand costs.\n","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window (a day for your plan's allowance, a minute for the per-IP limits)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"ISO 8601 timestamp when the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["bad_request","unauthorized","sandbox_restricted","plan_required","not_found","already_analyzed","listing_not_active","no_filings","stale_filings","withheld","rate_limit_exceeded","analysis_limit_reached","service_unavailable","internal_error"],"example":"not_found","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"Stock with identifier 'XYZ' not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds until you can retry (only on 429).","uniqueKey":"error.retry_after","typeLabel":"integer"},"limit_type":{"type":"string","enum":["daily","in_progress"],"description":"On `analysis_limit_reached`: which part of the allowance is used up, the day's analyses or those running at once.","uniqueKey":"error.limit_type","typeLabel":"enum\u003cstring>"},"limit":{"type":"integer","description":"On `analysis_limit_reached`: the allowance.","uniqueKey":"error.limit","typeLabel":"integer"},"current":{"type":"integer","description":"On `analysis_limit_reached`: how many you have used.","uniqueKey":"error.current","typeLabel":"integer"},"reset_at":{"type":"string","format":"date-time","description":"On `analysis_limit_reached`: when you can ask again.","uniqueKey":"error.reset_at","typeLabel":"string\u003cdate-time>"},"instrument_id":{"type":"string","description":"On `already_analyzed` for a secondary share class: the primary, whose result applies.","uniqueKey":"error.instrument_id","typeLabel":"string"},"status":{"type":"string","description":"On `listing_not_active`: the listing's status, such as `delisted`.","uniqueKey":"error.status","typeLabel":"string"},"delisted_at":{"oneOf":[{"type":"string","format":"date-time","description":"On `listing_not_active`: the date of the delisting.","uniqueKey":"error.delisted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"On `listing_not_active`: the date of the delisting.","uniqueKey":"error.delisted_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.delisted_at","typeLabel":"string\u003cdate-time> | null"},"upgrade":{"type":"object","description":"The paid plans that remove a sandbox limit, with their prices. Present\non every `sandbox_restricted` 403 and on a sandbox caller's 429, and\nabsent for a caller already on a paid plan.\n","required":["plan","price_usd_monthly","url","commercial_plan","commercial_price_usd_monthly","commercial_url"],"properties":{"plan":{"type":"string","enum":["plus"],"description":"The plan for your own use: live keys, the full universe, MCP.","isRequired":true,"uniqueKey":"error.upgrade.plan","typeLabel":"enum\u003cstring>"},"price_usd_monthly":{"type":"number","example":7,"isRequired":true,"uniqueKey":"error.upgrade.price_usd_monthly","typeLabel":"number"},"url":{"type":"string","format":"uri","example":"https://halal.sh/plans?source=api_refusal","isRequired":true,"uniqueKey":"error.upgrade.url","typeLabel":"string\u003curi>"},"commercial_plan":{"type":"string","enum":["developer"],"description":"The plan for showing results in your own product.","isRequired":true,"uniqueKey":"error.upgrade.commercial_plan","typeLabel":"enum\u003cstring>"},"commercial_price_usd_monthly":{"type":"number","example":99,"isRequired":true,"uniqueKey":"error.upgrade.commercial_price_usd_monthly","typeLabel":"number"},"commercial_url":{"type":"string","format":"uri","example":"https://halal.sh/developers","isRequired":true,"uniqueKey":"error.upgrade.commercial_url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.upgrade","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","properties":{"request_id":{"type":"string","description":"Unique ID for this request. Include it in support requests.","example":"req_abc123","uniqueKey":"meta.request_id","typeLabel":"string"},"as_of":{"type":"string","format":"date-time","description":"When this response was generated.","uniqueKey":"meta.as_of","typeLabel":"string\u003cdate-time>"},"methodology":{"type":"string","description":"Methodology used, as `id@version`. Present on compliance responses.\n`aaoifi-ss21` for an operating company; `aaoifi-ss57`, `aaoifi-ss20` or\n`halal-sh-etf-taxonomy` for a pooled vehicle decided on its structure\n(see `screens.structural` on the compliance resource).\n","example":"aaoifi-ss21@2026.1","uniqueKey":"meta.methodology","typeLabel":"string"}},"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"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"}},"examples":{"Example":{"title":"Example","value":{"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"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"1cb337d1-ec14-48dc-8100-f31dc0103366":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"apiKey"}}},"servers":{"15899acc-e487-4202-8bac-355ee205aeee":{"url":"https://api.halal.sh/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"apiKey"},"schema":{"title":"X-API-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"X-API-Key"}],"title":"apiKey"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"halalsh","siteName":"halal.sh API","title":"Search Instruments - halal.sh API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-04T18:54:46.067Z","originalFileLocation":"api-reference/screening/search.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Search stocks and ETFs by ticker or company/fund name. Returns 200 with an empty array when nothing matches. Every item carries a type discriminator (stock | etf). Stock items include a compliance status; ETF items instead expose Shariah purity (purity_percentage, badge_color) and match_coverage_percent, and carry no status field. Use the types parameter to filter to one kind, or omit it to receive both.\">\u003cmeta data-mint-head name=\"application-name\" content=\"halal.sh API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Search Instruments - halal.sh API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Search stocks and ETFs by ticker or company/fund name. Returns 200 with an empty array when nothing matches. Every item carries a type discriminator (stock | etf). Stock items include a compliance status; ETF items instead expose Shariah purity (purity_percentage, badge_color) and match_coverage_percent, and carry no status field. Use the types parameter to filter to one kind, or omit it to receive both.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"halal.sh API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.halal.sh/api-reference/screening/search\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://halalsh.mintlify.site/_mintlify/api/og/v2?division=Screening\u0026amp;title=Search+Instruments\u0026amp;description=Search+stocks+**and+ETFs**+by+ticker+or+company%2Ffund+name.+Returns+%60200%60%0Awith+an+empty+array+when+nothing+matches.%0A%0AEvery+item+carries+a+%60type%60+discriminator+%28%60\u0026amp;theme=bbdb80069bd511c76de41818\u0026amp;signature=6bc7039e69a857728808a711053703c8c3ed84d64654aa077e9d7e7a20f73571\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Search Instruments - halal.sh API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Search stocks and ETFs by ticker or company/fund name. Returns 200 with an empty array when nothing matches. Every item carries a type discriminator (stock | etf). Stock items include a compliance status; ETF items instead expose Shariah purity (purity_percentage, badge_color) and match_coverage_percent, and carry no status field. Use the types parameter to filter to one kind, or omit it to receive both.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://halalsh.mintlify.site/_mintlify/api/og/v2?division=Screening\u0026amp;title=Search+Instruments\u0026amp;description=Search+stocks+**and+ETFs**+by+ticker+or+company%2Ffund+name.+Returns+%60200%60%0Awith+an+empty+array+when+nothing+matches.%0A%0AEvery+item+carries+a+%60type%60+discriminator+%28%60\u0026amp;theme=bbdb80069bd511c76de41818\u0026amp;signature=6bc7039e69a857728808a711053703c8c3ed84d64654aa077e9d7e7a20f73571\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/halalsh/zs1PzLowpP5JRZI4/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"halal.sh API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#10B981\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.halal.sh/api-reference/screening/search\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/screening/search.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.halal.sh/#organization\",\"name\":\"halal.sh API\",\"url\":\"https://docs.halal.sh\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/halalsh/ocs92VTB-mFz_J5z/logo/lockup-light.png?fit=max\u0026auto=format\u0026n=ocs92VTB-mFz_J5z\u0026q=85\u0026s=d103102d0dda569eb5de794e5aed58b0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.halal.sh#website\",\"name\":\"halal.sh API\",\"url\":\"https://docs.halal.sh\",\"publisher\":{\"@id\":\"https://docs.halal.sh/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.halal.sh/api-reference/screening/search#webpage\",\"url\":\"https://docs.halal.sh/api-reference/screening/search\",\"name\":\"Search Instruments\",\"description\":\"Search stocks and ETFs by ticker or company/fund name. Returns 200 with an empty array when nothing matches. Every item carries a type discriminator (stock | etf). Stock items include a compliance status; ETF items instead expose Shariah purity (purity_percentage, badge_color) and match_coverage_percent, and carry no status field. Use the types parameter to filter to one kind, or omit it to receive both.\",\"dateModified\":\"2026-10-04T18:54:46.067Z\",\"isPartOf\":{\"@id\":\"https://docs.halal.sh#website\"},\"breadcrumb\":{\"@id\":\"https://docs.halal.sh/api-reference/screening/search#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.halal.sh/api-reference/screening/search#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Screening\",\"item\":\"https://docs.halal.sh/api-reference/screening/screen\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Search Instruments\",\"item\":\"https://docs.halal.sh/api-reference/screening/search\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.halal.sh/api-reference/screening/search#apireference\",\"headline\":\"Search Instruments\",\"name\":\"Search Instruments\",\"description\":\"Search stocks and ETFs by ticker or company/fund name. Returns 200 with an empty array when nothing matches. Every item carries a type discriminator (stock | etf). Stock items include a compliance status; ETF items instead expose Shariah purity (purity_percentage, badge_color) and match_coverage_percent, and carry no status field. Use the types parameter to filter to one kind, or omit it to receive both.\",\"url\":\"https://docs.halal.sh/api-reference/screening/search\",\"mainEntityOfPage\":{\"@id\":\"https://docs.halal.sh/api-reference/screening/search#webpage\"},\"dateModified\":\"2026-10-04T18:54:46.067Z\",\"publisher\":{\"@id\":\"https://docs.halal.sh/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.halal.sh#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"halal.sh API\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"halal.sh API\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/screening/search.md","siteName":"halal.sh API","nav":{"global":null,"dropdowns":[{"dropdown":"Documentation","icon":"book","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"},{"title":"Authentication","href":"/authentication"},{"title":"Licensing","href":"/licensing"},{"title":"MCP server","href":"/mcp-server"}]},{"group":"Core Concepts","pages":[{"title":"Instrument identifiers","href":"/concepts/instrument-identifiers"},{"title":"Compliance screening","href":"/concepts/compliance"},{"title":"Evidence Packets","href":"/concepts/evidence-packets"},{"title":"Methodology versioning","href":"/concepts/methodology-versioning"},{"title":"Stability metrics","href":"/concepts/stability-metrics"}]},{"group":"Guides","pages":[{"title":"Screen a portfolio","href":"/guides/screen-a-portfolio"},{"title":"Embed a compliance badge","href":"/guides/embed-compliance-badge"},{"title":"Handle pending analysis","href":"/guides/handle-pending-analysis"},{"title":"ETF purification","href":"/guides/etf-purification"}]}]},{"dropdown":"API Reference","icon":"code","groups":[{"group":"Instruments","pages":[{"title":"Get Instrument","openapi":"GET /instruments/{symbol}","href":"/api-reference/instruments/get-instrument"},{"title":"Get Compliance","openapi":"GET /instruments/{symbol}/compliance","href":"/api-reference/instruments/get-compliance"},{"title":"Get Financials","openapi":"GET /instruments/{symbol}/financials","href":"/api-reference/instruments/get-financials"},{"title":"Get Evidence Packet","openapi":"GET /instruments/{symbol}/evidence","href":"/api-reference/instruments/get-evidence"},{"title":"Get Compliance History","openapi":"GET /instruments/{symbol}/history","href":"/api-reference/instruments/get-history"},{"title":"Get Financial Health","openapi":"GET /instruments/{symbol}/health","href":"/api-reference/instruments/get-health"}]},{"group":"Analysis requests","pages":[{"title":"Request an Analysis","openapi":"POST /analysis-requests","href":"/api-reference/analysis-requests/request-analysis"},{"title":"Get an Analysis Request","openapi":"GET /analysis-requests/{request_id}","href":"/api-reference/analysis-requests/get-analysis-request"}]},{"group":"Screening","pages":[{"title":"Screen Instruments","openapi":"POST /screen","description":"Screen stocks in one request. Provide either:\n\n- `symbols`: up to 50 specific stock tickers (available on every plan), or\n- filters (`status`, `sector`, `market_cap`, `health`, `country`, ordered\n by `sort`) to discover matching stocks across the universe (requires\n the Plus or Developer plan). `country` and `sort` apply to filter mode only.\n\nThis endpoint screens **equities**. Fund tickers don't resolve here: they\ncome back in `meta.not_found`, and the ones we cover are named in\n`meta.etfs`; use `GET /etfs/{symbol}` for those. Commodity and crypto\ntrusts we screen under AAOIFI directly, such as GLD, IAU, SLV, IBIT and\nUSO, do return a determination here.\n\nReturns `200` with an empty array when nothing matches.\n","href":"/api-reference/screening/screen"},{"title":"Search Instruments","openapi":"GET /search","href":"/api-reference/screening/search"}]},{"group":"ETFs","pages":[{"title":"Get ETF","openapi":"GET /etfs/{symbol}","description":"Returns fund identity and the current Shariah purity: the percentage of\nholdings (by weight) that are compliant, with a breakdown of compliant,\nnon-compliant, and not-yet-analyzed holdings.\n","href":"/api-reference/etfs/get-etf"},{"title":"Get ETF Holdings","openapi":"GET /etfs/{symbol}/holdings","href":"/api-reference/etfs/get-holdings"},{"title":"Get ETF Purity History","openapi":"GET /etfs/{symbol}/purity/history","href":"/api-reference/etfs/get-purity-history"}]},{"group":"Methodology","pages":[{"title":"List Methodologies","openapi":"GET /methodologies","href":"/api-reference/methodology/list-methodologies"},{"title":"Get Methodology","openapi":"GET /methodologies/{id}","href":"/api-reference/methodology/get-methodology"}]},{"group":"Account","pages":[{"title":"Who am I","openapi":"GET /me","href":"/api-reference/account/get-me"},{"title":"API index","openapi":"GET /","href":"/api-reference/account/get-index"},{"title":"OpenAPI document","openapi":"GET /openapi.json","href":"/api-reference/account/get-openapi"}]}]},{"dropdown":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Search Instruments - halal.sh API","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}