/v1, we only ever add fields, endpoints, and
enum values — see Versioning.
Cross-listing resolution and smarter search matching
- Cross-listings and secondary share classes now resolve to their company’s
data. Compliance results, health analyses and filings are stored once
against a company’s canonical listing. Requesting a different listing of the
same company — an ADR, a foreign line, or a second share class — previously
read that listing’s own (empty) rows, so
GET /instruments/{symbol}/healthand/historycould return404for a company we had fully analysed. Both now resolve to the canonical company and return the same answer for every listing of it. Responses still echo the symbol and name you asked for. Fixes-only: no field or shape changed. GET /instruments/{symbol}/evidencenow honours the exchange prefix. It previously ignored the country part of the identifier, so a prefixed symbol that collides with a US ticker (TYO:GS— GS Yuasa, not Goldman Sachs) could return the wrong company’s packet. Cached packets are keyed per listing.GET /searchmatches multi-word queries word-by-word. A query whose words are separated in the target name now matches:Technology fundfinds Vanguard Information Technology Index Fund, where it previously returned nothing. Whole-phrase matches still rank above scattered-word matches, so existing single-word queries return the same results in the same order.%and_in a search query are now literal characters, not SQL wildcards.a%ereturns funds and companies actually containing “a%e” rather than three unrelated tickers.
Search now returns ETFs
GET /searchnow returns ETFs alongside stocks. Every result carries atypediscriminator (stock|etf). Stock items are unchanged; ETF items expose Shariah purity (purity_percentage,badge_color) andmatch_coverage_percentinstead of a compliancestatus. This is additive — existing stock-only integrations keep working and can ignore ETF rows bytype.- New
typesfilter. Passtypes=stock(ortypes=etf) to narrow to one kind; omit it for both. Any value outside the{stock, etf}allow-list returns400. - The MCP
search_instrumentstool returns the mixed results automatically and tags each hit with itstype.
Personal API, MCP, and filter screening included with Plus
- Personal API, MCP, and universe-filter screening are now included with Plus ($8/mo). Live keys, full MCP access, and filter-mode screening all come with the single paid tier.
- The previously-planned consumer Pro tier is discontinued. (Building a product on halal.sh remains the separate developer plan.)
Key dashboard moved to halal.sh/account/api
- Key management has a new home. Create and revoke keys at halal.sh/account/api; halal.sh/developers is now the commercial overview page. Live keys come with the halal.sh Plus plan.
- The MCP setup guide moved to /mcp-server, because
docs.halal.sh/mcpis the hosted docs-MCP endpoint itself. - Setup guides for ChatGPT, Claude, Gemini CLI, Cursor, and VS Code on the MCP server page. The ChatGPT and Claude apps connect by signing in with a halal.sh account; no key handling needed.
v1 surface finalized
The
/v1 API surface is finalized and stable:- Instruments — overview, compliance, financials, Evidence Packet, compliance history, and financial health.
- Screening — batch screening by symbol, and search.
- ETFs — purity, paginated holdings with per-holding compliance, and purity history.
- Methodology — list and detail for
aaoifi-ss21@2026.1.
- New endpoint announcements
- Methodology version bumps (e.g.
aaoifi-ss21@2026.1→2026.2) - Breaking-change notices with migration guides (new major versions only)
- Coverage-expansion updates

