POST
https://your-server.example.com/webhooks/fingerly Signed by FingerlySent when Fingerly refuses identify requests for a reason you can fix. Visitors whose requests are refused are not identified, so this is the event to alert on.
At most one is sent per second for each reason in an environment. Refusals of the same reason inside that second are not sent separately; the next event counts them in suppressed. A client far past its rate limit therefore sends you one event a second, not one per request.
Body
idstringThe event's ID, a UUIDv7. The same on every retry: deduplicate on it. Also sent asX-Fingerly-Event-ID.typestringAlwaysidentification.refused.versionintegerThe envelope version,1.organization_idstringYour organization.environmentstringlivefor production traffic,testfor staging and development.created_atstringWhen the underlying fact happened, RFC 3339 in UTC. Not when it was delivered.dataobjectThe refusal.6 child fields
request_idstringAn ID for the refused request.sdk_key_idstringThe key that was used.reasonstringWhy it was refused. See below.statusintegerThe HTTP status the client received.retry_after_secondsintegerForrate_limited: seconds until the client may retry. Omitted otherwise.suppressedintegerRefusals of the same reason since the previousidentification.refusedthat were not sent as events of their own. Zero when there were none.
Reasons
| `reason` | `status` | What to do |
|---|---|---|
expired_key | 401 | Issue a new key and deploy it. |
revoked_key | 401 | A revoked key is still in use somewhere. Deploy its replacement. |
origin_not_allowed | 401 | Add the site to the key's allowed origins, or find who is using your key. |
billing_blocked | 402 | Resolve billing in the dashboard. |
no_credit | 402 | Add funds, or turn on auto top-up. |
rate_limited | 429 | Traffic exceeded your rate limit. Contact support if it is expected. |