MOI Investing Database API

Ticker and company-name resolution with simplified, human-readable names.

Status: Phase 1 live Scope: US-listed equities Rule engine: v1.1 Last verified: 2026-07-26

Coverage (live)

Companies
8,004
Tickers
10,418
Rule-simplified
7,972
Admin overrides
32

Coverage counts refresh nightly. Source: status.json - regenerated by GitHub Actions from the public /stats endpoint.

Endpoint

GET https://mgkjwvuvndqruhfpgzwa.supabase.co/functions/v1/resolve-name

Authentication

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.

Query parameters

ParameterTypeDescription
tickerstringCase-insensitive ticker symbol. Takes precedence when both are supplied.
namestringCompany name. Resolved via exact match on official name, then simplified name, then trigram fuzzy match (similarity >= 0.35).

At least one of ticker or name is required.

Example

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",
  "all_tickers": ["BRK-A", "BRK-B"],
  "source": "rule",
  "rule_version": "v1.1",
  "confidence": null,
  "matched_on": "ticker"
}

Response fields

FieldTypeDescription
company_idintegerStable internal identifier.
cikstringSEC 10-digit Central Index Key (source of truth).
official_namestringCompany's registered SEC filing name.
simplified_namestring | nullShort human-readable form. May be null in rare edge cases.
all_tickersstring[]All tickers associated with this company, sorted.
sourcestringOrigin of the simplified name: rule, admin, or llm.
rule_versionstring | nullRule engine version (e.g. v1.1) when source=rule.
confidencenumber | nullConfidence score (0-1) when source indicates a probabilistic match.
matched_onstringHow the query resolved: ticker, name_exact, simplified_name, or name_fuzzy.

Error responses

StatusBodyMeaning
400{"error":"missing_params"}Neither ticker nor name supplied.
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.

Simplified name behavior

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.1.

Guardrail: if the transformation would produce a result shorter than 3 characters or without any letter, the API returns a curated value from the admin override table instead. This handles genuine short names such as HP, 3M, BP, and RH.

Scope and limitations

Machine-readable spec

openapi.json - OpenAPI 3.1 specification of the API surface.

status.json - live coverage counts, refreshed nightly.

Support

To request an API key, report an issue, or ask about coverage of a specific security, email john@manualofideas.com.