Quickstart
Three steps: create a key, send a string, key everything else on the ID that comes back. Everything else in the documentation is a parameter around those three.
Create a key
Sign up on the Developer plan — no card, 2,500 credits a month, hard stop rather than a bill. You get two keys. spk_test_ reads the full graph and is never billed; spk_live_ bills. Start with the resolve and read scopes and add more when you need them.
Keys are secrets. Never put a spk_live_ key in client-side code, a mobile binary or a public repository. If one leaks, mail security@spotit.ai — we revoke it immediately and do not bill the calls it made.
Send a string
One field in. q takes whatever your source system holds — a legal name, a trade name, a name with an address glued to it, a name in the wrong case with the legal form abbreviated.
$ export SPOTIT_KEY=spk_test_8f2c... $ curl -s https://api.spotit.ai/v1/resolve \ -H "Authorization: Bearer $SPOTIT_KEY" \ -H "Content-Type: application/json" \ -d '{"q":"nordwind logistik hamburg"}'
{ "match": { "entity_id": "ent_01JR8K3F5T2QW9", "confidence": 0.987, "decision": "auto_accept", "alternatives": 2 }, "entity": { "name": "Nordwind Logistik GmbH", "register": "HRB 148902", "authority": "Amtsgericht Hamburg", "status": "active", "lei": "529900NWLG7K2XQF4T81" } }
Key on the ID, not the name
entity_id is the point of the call. Store it next to your own record and every later read is cheap, stable and free of matching: reads cost 0.2 credits, and lineage, history and relations cost nothing.
A name is not an identifier. Nordwind Logistik GmbH was Nordwind Spedition GmbH until April 2019, and the register kept the same HRB 148902 throughout. If you keyed on the name you now have two rows; if you keyed on the ID you have one row with a rename in its history.
$ curl -s https://api.spotit.ai/v1/entities/ent_01JR8K3F5T2QW9 \ -H "Authorization: Bearer $SPOTIT_KEY" $ curl -s https://api.spotit.ai/v1/entities/ent_01JR8K3F5T2QW9/lineage \ -H "Authorization: Bearer $SPOTIT_KEY" # free, on every plan
Hints, and what each one buys
Every hint you can pass narrows the candidate set before scoring. They are optional and they are worth passing when you have them.
| Hint | Effect on top-1 | When to pass it |
|---|---|---|
| country | +4.1 pt | Always, if you know it |
| address or postcode | +2.8 pt | Any address fragment helps |
| register or VAT number | +9.4 pt | Skips scoring entirely on an exact hit |
| domain | +3.2 pt | Strongest signal for trade names |
| as_of | — | When the record is historical |
Handle the three outcomes
decision is the field to branch on. It is calibrated per jurisdiction, so the same threshold means the same thing in Germany and in Poland.
- auto_accept — take the ID. On SPOT-Bench v4 this band is right 99.4% of the time.
- review — a human should look. alternatives carries up to 10 candidates with the field-level evidence for each.
- no_match — nothing crossed the floor. You are not billed for a miss.
Thresholds, the four scorers behind the score, and how to pick a review band for your own cost of error are in the matching guide.
Next
- Batch and files — resolve a CSV of 40M rows rather than one string.
- Watch and webhooks — get told when a register changes something you hold.
- Point-in-time reads — ask what the register said on a past date.
- The full API reference — every endpoint, error and rate limit.
Try it against your own data
The Developer plan is free forever and needs no card. 2,500 credits is enough to answer the only question that matters: does it resolve your records.