Ticker and company-name resolution with simplified, human-readable names.
Coverage counts refresh nightly. Source: status.json - regenerated by GitHub Actions from the public /stats endpoint.
GET https://mgkjwvuvndqruhfpgzwa.supabase.co/functions/v1/resolve-name
Every request must send an API key in the x-api-key header. Keys are issued by MOI Global. Contact john@manualofideas.com to request one.
| Parameter | Type | Description |
|---|---|---|
ticker | string | Case-insensitive ticker symbol. Takes precedence when both are supplied. |
name | string | Company name. Resolved via exact match on official name, then simplified name, then trigram fuzzy match (similarity >= 0.35). |
exchange | string | Restrict a ticker lookup to a specific exchange when the ticker exists on more than one market. Accepts shorthand (US, ASX) or MIC codes (XNAS, XNYS, XASX, etc.). Case-insensitive. |
country | string | Alternative to exchange. Accepts ISO 3166-1 alpha-2 or alpha-3 (US, USA, AU, AUS). Ignored if exchange is also supplied. |
At least one of ticker or name is required. Some tickers (e.g. RSG) exist on both the US and ASX; the endpoint returns HTTP 300 with a candidate list when the ticker is ambiguous and no exchange/country is supplied.
curl "https://mgkjwvuvndqruhfpgzwa.supabase.co/functions/v1/resolve-name?ticker=BRK-B" \
-H "x-api-key: moi_..."
Response:
{
"company_id": 5,
"cik": "0001067983",
"official_name": "BERKSHIRE HATHAWAY INC",
"simplified_name": "BERKSHIRE HATHAWAY",
"country": "US",
"exchange": "US",
"all_tickers": ["BRK-A", "BRK-B"],
"all_listings": [
{ "ticker": "BRK-A", "exchange": "US" },
{ "ticker": "BRK-B", "exchange": "US" }
],
"source": "rule",
"rule_version": "v1.5",
"confidence": null,
"matched_on": "ticker"
}
Ambiguous example (ticker exists on multiple exchanges):
curl "https://mgkjwvuvndqruhfpgzwa.supabase.co/functions/v1/resolve-name?ticker=RSG" \
-H "x-api-key: moi_..."
HTTP/1.1 300 Multiple Choices
{
"error": "ambiguous_ticker",
"message": "Add ?exchange= or ?country= to disambiguate.",
"ticker": "RSG",
"candidates": [
{ "company_id": 1871, "official_name": "REPUBLIC SERVICES INC", "country": "US", "exchange": "US", "cik": "0001060391" },
{ "company_id": 17601, "official_name": "RESOLUTE MINING LIMITED", "country": "AU", "exchange": "ASX", "cik": null }
]
}
curl "https://mgkjwvuvndqruhfpgzwa.supabase.co/functions/v1/resolve-name?ticker=RSG&exchange=ASX"
| Field | Type | Description |
|---|---|---|
company_id | integer | Stable internal identifier. |
cik | string | null | SEC 10-digit Central Index Key. Null for non-US companies. |
official_name | string | Registered filing name. |
simplified_name | string | null | Short human-readable form. May be null in rare edge cases. |
country | string | null | ISO 3166-1 alpha-2 country of the company (e.g. US, AU). |
exchange | string | null | Exchange of the matched ticker (e.g. US, ASX). |
all_tickers | string[] | All tickers for this company, sorted. Retained for backward compatibility. |
all_listings | object[] | All (ticker, exchange) pairs for this company. Each element is {"ticker": string, "exchange": string}. |
source | string | Origin of the simplified name: rule, admin, or llm. |
rule_version | string | null | Rule engine version when source=rule. |
confidence | number | null | Confidence score (0-1) when source indicates a probabilistic match. |
matched_on | string | How the query resolved: ticker, name_exact, simplified_name, or name_fuzzy. |
| Status | Body | Meaning |
|---|---|---|
| 300 | {"error":"ambiguous_ticker", "ticker":"RSG", "candidates":[...]} | Ticker exists on multiple exchanges. Re-request with ?exchange= or ?country=. |
| 400 | {"error":"missing_params"} | Neither ticker nor name supplied. |
| 400 | {"error":"unknown_exchange_or_country"} | The exchange or country value did not match any supported code. |
| 401 | {"error":"invalid_api_key"} | Missing or invalid x-api-key header. |
| 404 | {"error":"not_found"} | Company not in database. |
| 405 | {"error":"method_not_allowed"} | Only GET is supported. |
The simplified name is a short, human-readable form derived from the company's official filing name. The transformation strips corporate boilerplate (legal suffixes such as Inc, Corp, PLC, AG; share-class markers such as Class A, ADR, ADS; parentheticals; leading "The"; and trailing descriptors such as Holdings, Group, International when a meaningful word remains before them). The current rule version is v1.5.
country=US, exchange=US).country=AU, exchange=ASX).exchange or country filter return HTTP 300 with the full candidate list.official_name in any legal, filing, or trading context.openapi.json - OpenAPI 3.1 specification of the API surface.
status.json - live coverage counts, refreshed nightly.
To request an API key, report an issue, or ask about coverage of a specific security, email john@manualofideas.com.