API Reference

Map messy company names to stock tickers from any backend.

Authentication

All public API requests require a Bearer token in the Authorization header.

Authorization: Bearer tm_live_xxxxxxxxxxxxxxxxxx

Generate API keys in your dashboard.

POST/api/v1/map

Map a single company name to a stock ticker.

Request body

{
  "name": "LOCKHEED MARTIN AERONAUTICS COMPANY",  // required
  "country": "US",                                 // optional
  "source": "sam.gov",                             // optional
  "context": { "naics": "336411" }                 // optional
}

Response

{
  "input": "LOCKHEED MARTIN AERONAUTICS COMPANY",
  "matched_company": "Lockheed Martin Corporation",
  "ticker": "LMT",
  "exchange": "NYSE",
  "confidence": 1.0,
  "match_type": "exact_alias",
  "is_public": true,
  "needs_review": false,
  "reason": "Matched a known alias.",
  "response_ms": 12
}

Names that are not publicly traded (private companies, government entities, non-profits) return ticker: null, is_public: false, and a reason. Every returned ticker is verified to be a live US-listed security before it is returned.

curl example

curl -X POST https://tickkermapper.vercel.app/api/v1/map \
  -H "Authorization: Bearer tm_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"name": "LOCKHEED MARTIN AERONAUTICS COMPANY"}'
POST/api/v1/bulk-map

Map multiple company names in a single request.

Request body

{
  "items": [
    { "name": "LOCKHEED MARTIN AERONAUTICS COMPANY" },
    { "name": "Amazon Web Services Inc." },
    { "name": "Palantir USG Inc" }
  ]
}

Response

{
  "results": [
    { "input": "...", "ticker": "LMT", "confidence": 1.0, ... },
    { "input": "...", "ticker": "AMZN", "confidence": 1.0, ... },
    { "input": "...", "ticker": "PLTR", "confidence": 1.0, ... }
  ],
  "total": 3,
  "response_ms": 45
}
POST/api/v1/compare

Validate a list of name/ticker pairs. For each row we tell you whether the name is a publicly traded company and whether the ticker you supplied is the correct one. Ideal for auditing an existing dataset.

Request body

{
  "items": [
    { "name": "Lockheed Martin Aeronautics Company", "ticker": "LMT" },
    { "name": "Peraton Inc.", "ticker": "PRT" },
    { "name": "Apple", "ticker": "MSFT" }
  ]
}

Response

{
  "results": [
    {
      "name": "Lockheed Martin Aeronautics Company",
      "provided_ticker": "LMT",
      "is_public": true,
      "matched_ticker": "LMT",
      "matched_company": "Lockheed Martin Corporation",
      "match_correct": true,
      "verdict": "correct",
      "reason": "LMT correctly maps to Lockheed Martin Corporation."
    },
    {
      "name": "Peraton Inc.",
      "provided_ticker": "PRT",
      "is_public": false,
      "matched_ticker": null,
      "provided_ticker_company": "PermRock Royalty Trust",
      "match_correct": false,
      "verdict": "not_public",
      "reason": "Peraton is a private company. The ticker PRT you supplied actually belongs to PermRock Royalty Trust."
    },
    {
      "name": "Apple",
      "provided_ticker": "MSFT",
      "is_public": true,
      "matched_ticker": "AAPL",
      "match_correct": false,
      "verdict": "incorrect",
      "reason": "\"Apple\" maps to AAPL (Apple Inc.), not MSFT."
    }
  ],
  "summary": { "total": 3, "correct": 1, "incorrect": 1, "not_public": 1, "no_ticker_provided": 0 },
  "response_ms": 120
}

verdict is one of correct, incorrect, not_public, or no_ticker_provided (when you omit the ticker and just want our best match). Each item counts as one request against your quota.

GET/api/v1/usage

Get your current period usage and plan limits.

{
  "plan": "starter",
  "monthly_limit": 25000,
  "used_this_month": 1842,
  "remaining": 23158,
  "period_start": "2026-04-01T00:00:00.000Z"
}

Rate limiting

Monthly request limits are enforced per plan. Each response includes rate limit headers:

X-RateLimit-Limit: 25000
X-RateLimit-Remaining: 23158
X-RateLimit-Used: 1842

When you exceed your limit, the API returns 429 Too Many Requests.

Confidence scores

ScoreMeaningneeds_review
1.00Exact verified alias matchfalse
0.99Exact company name matchfalse
0.85–0.98Strong fuzzy matchfalse
0.70–0.84AI-assisted matchfalse
< 0.70Low confidence / needs reviewtrue
0.00No match foundtrue

Error codes

StatusMeaning
401Missing or invalid API key
400Invalid request body (see details field)
429Monthly request limit exceeded
500Internal server error