POST
/api/v1/identify Public keySubmits a signal report collected by a client SDK. The response carries the complete verdict. There is no second call to make.
Headers
x-api-keystringrequiredA public key, or a secret key from a server.Idempotency-KeystringUp to 255 characters. Makes retries safe. See Idempotency.Content-Encodingstringgzipto send a compressed body.
Body
sdkobjectrequiredThe SDK that collected the report.2 child fields
platformstringweb,ios,android, or a bridge such asreact-native-ios.versionstringThe SDK version.
signalsobjectrequiredThe signal report the SDK collected. Its contents are produced by the SDKs and are not a public contract.tagstringYour own reference for this identification, echoed on the event and in webhooks.
Response
request_idstringIdentifies this identification. A UUIDv7.deferred_tokenstringA capability for sending this request's deferred report within 24 hours. Omitted on duplicates.duplicatebooleantruewhen thisIdempotency-Keywas already answered. Onlyrequest_idis meaningful then.visitor_idstringThe stable visitor identifier: 20 letters and digits. Always present on a new identification.visitor_is_newbooleanWhether your organization is seeing this visitor for the first time.identifiablebooleanfalsewhen the report carried too little to identify anyone. The request is still scored.visitor_confidenceintegerFrom 0 to 100.100: seen before exactly.85to99: recognised after the device changed.0: a new visitor ID.statestringenriched, orunavailablewhen the network lookup could not run.reasonstringA short token explaining anunavailablestate. Omitted otherwise.suspect_scoreintegerThe weighted sum of the signals that fired. Omitted when the request was not scored, which is different from0.suspect_levelstringtriggersarrayEach signal that fired, heaviest first. Omitted when none did.4 child fields
signalstringThe signal, such astororautomation.groupstringThe signal's group, such asbotforautomation.weightintegerThe weight the signal added, from the weights in force.confidencestringlow,mediumorhigh.
Response headers
Fingerly-Balance-MicrosintegerYour remaining balance in millionths of a US dollar. Reflects production traffic.RateLimit-LimitintegerYour organization's rate limit, per second.RateLimit-RemainingintegerWhat remained of the limit when the request was admitted.Retry-AfterintegerOn429, seconds to wait before retrying.
These headers can be read from browser JavaScript as well as from servers and proxies.
Billing
A production identification costs $0.003, or $0.0005 when identifiable is false. Development and staging keys, duplicates, refused requests and requests whose state is unavailable are free. See billing.
Errors
| Status | Code | When |
|---|---|---|
401 | unauthorized | The key did not authenticate from this origin or platform. |
402 | billing_blocked | The organization is not accepting traffic. |
402 | no_credit | The balance is used up. |
413 | payload_too_large | The body is over 1 MiB. |
422 | idempotency_key_too_long | The key is over 255 characters. |
422 | invalid_visitor_metadata | A proxy forwarded malformed visitor details. |
429 | rate_limited | Over the organization's rate limit. |
503 | service_unavailable | Retry with the same Idempotency-Key. |