Skip to main content
This page tracks new endpoints, breaking changes, methodology version updates, and coverage expansion. Within /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}/health and /history could return 404 for 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}/evidence now 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 /search matches multi-word queries word-by-word. A query whose words are separated in the target name now matches: Technology fund finds 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%e returns funds and companies actually containing “a%e” rather than three unrelated tickers.
Search now returns ETFs
  • GET /search now returns ETFs alongside stocks. Every result carries a type discriminator (stock | etf). Stock items are unchanged; ETF items expose Shariah purity (purity_percentage, badge_color) and match_coverage_percent instead of a compliance status. This is additive — existing stock-only integrations keep working and can ignore ETF rows by type.
  • New types filter. Pass types=stock (or types=etf) to narrow to one kind; omit it for both. Any value outside the {stock, etf} allow-list returns 400.
  • The MCP search_instruments tool returns the mixed results automatically and tags each hit with its type.
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/mcp is 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.
Sandbox keys are live for the curated universe. This changelog will record all changes once live keys are generally available.
What to expect going forward
  • New endpoint announcements
  • Methodology version bumps (e.g. aaoifi-ss21@2026.12026.2)
  • Breaking-change notices with migration guides (new major versions only)
  • Coverage-expansion updates