Entity Resolution
Resolve a company name
/v3/entity-resolution/async Starts a resolution job and returns immediately with a job ID. Research typically takes one
to five minutes; poll GET /v3/runs/{run_id} for the result.
Resolution finds the company through government registries and live web research, then
anchors it to an official registration. Use context to say which company you mean when
a name is ambiguous.
Also accepts GET with the same parameters as a query string.
Request body
namestring requiredCompany name, legal or brand. At least 2 characters.locationstringFree-text location hint: city, state, country, or any combination. Narrows an ambiguous name considerably.contextstringFree text describing which company you mean: industry, products, customers, anything distinguishing. Used only to choose between same-name candidates. It never overrides government-registry evidence and never changes what is searched.
name=Deltaon its own is ambiguous.name=Deltawithcontext=major commercial passenger airlineresolves to Delta Air Lines, Inc.custom_idstringYour own identifier for this request — an order id, an account id, a row id. Returned on this
202, on everyGET /v3/runs/{run_id}, and on the webhook event, so you can match our response to your record without keeping arun_idtable.A label only: it does not route the webhook, does not have to be unique, and cannot be used to look a request up. Rejected with
400rather than trimmed if it is too long or contains anything outside printable ASCII.includestring (enum)basisSet to
basisto attach the provenance plane to the result: per-field confidence, reasoning, and citations back to the sources.Pass it on the poll as well. Asking here is what makes the job record provenance; asking again on
GET /v3/runs/{run_id}is what puts it in the response body. A job kicked off withoutbasiscannot gain it later, and a poll withoutbasisomits the plane even when the job recorded one.
Responses
202 Job accepted.
statusstring (enum)pendingrun_idstringThe run's identifier, and what you poll with. Distinct fromrequest_id, which identifies a single HTTP call: a run outlives the call that started it.custom_idstringYourcustom_idfrom the request that started this job. Absent if you did not send one.
400 Invalid or missing parameters.
errorobjectShow 2 nested fieldsHide nested fields
typestringStable, machine-readable error code.messagestringHuman-readable explanation. Do not match on this.
401 Missing or invalid API key.
errorobjectShow 2 nested fieldsHide nested fields
typestringStable, machine-readable error code.messagestringHuman-readable explanation. Do not match on this.
402 Credit balance exhausted.
errorobjectShow 2 nested fieldsHide nested fields
typestringStable, machine-readable error code.messagestringHuman-readable explanation. Do not match on this.
403 This account is not enabled for the v3 API.
errorobjectShow 2 nested fieldsHide nested fields
typestringStable, machine-readable error code.messagestringHuman-readable explanation. Do not match on this.
429 Rate limit exceeded.
errorobjectShow 2 nested fieldsHide nested fields
typestringStable, machine-readable error code.messagestringHuman-readable explanation. Do not match on this.
500 Something went wrong on our side.
errorobjectShow 2 nested fieldsHide nested fields
typestringStable, machine-readable error code.messagestringHuman-readable explanation. Do not match on this.
Example request
curl --request POST \
--url 'https://api.savvyiq.ai/v3/entity-resolution/async' \
--header 'apikey: YOUR_API_KEY' \
--header 'content-type: application/json' \
--data '{"name":"Datadog","location":"New York, NY","context":"cloud monitoring and security platform","custom_id":"order_88213","include":"basis"}' Example response
{
"status": "pending",
"run_id": "run_344tSxhAVACWbuENINJ9D",
"custom_id": "order_88213"
}