ShieldLabs · AsyncAPI Specification
Shieldlabs Webhooks
Version
View Spec
View on GitHub
Fraud DetectionAbuse PreventionVisitor IdentificationDevice FingerprintingBot Detectionvpn-proxy-detectionRisk ScoringIdentitySecurityWebhookAnti-Fraudtraffic-qualityAsyncAPIEvents
AsyncAPI Specification
generated: '2026-09-04'
method: searched
source: https://docs.shieldlabs.ai/api/webhooks
derived_from: openapi/_original/shieldlabs-openapi.yaml
spec_type: Webhooks
asyncapi_published: false
note: >-
ShieldLabs publishes NO AsyncAPI document — probed /asyncapi.yaml and /asyncapi.json on every host
and searched the GitHub org, which holds no event spec. It does, however, publish a real and unusually
well-specified webhook contract: the event surface is modelled with the OpenAPI 3.1 top-level
`webhooks` object in the provider's own spec, AND a standalone JSON Schema 2020-12 document derived
1:1 from the live production code, AND a signature-verification guide with reference handlers.
This webhook catalog is captured here rather than fabricating an AsyncAPI. Re-probed 2026-09-04:
/asyncapi.yaml and /asyncapi.json still 404 on every host and the GitHub organization still holds
no event specification, so the position is unchanged. The webhook JSON Schema WAS updated by the
provider on 2026-09-02 — internal Go type names were stripped from its descriptions — and the
re-fetched copy is saved verbatim.
DELIVERY MODEL MATTERS HERE: delivery is AT-MOST-ONCE WITH NO RETRIES. There is exactly one attempt
per identification. If the consumer's endpoint is down, that score is not redelivered — it must be
recovered by reading the History API by request_id. That is the single most consequential fact on
this surface and it is easy to miss.
transport: HTTPS POST to customer-registered endpoints
registration: per domain, in the dashboard Webhooks tab; multiple endpoints per domain supported
security:
signature_header: 'X-Shield-Signature: sha256=<hex>'
algorithm: HMAC-SHA256 over the RAW request body
key: per-endpoint signing secret, format whsec_…
key_note: NOT the Secret Key — each registered endpoint gets its own secret
verification: constant-time compare; reject with 401 on mismatch
transport_requirement: the callback URL must be HTTPS
docs: https://docs.shieldlabs.ai/security
delivery:
guarantee: at-most-once
retries: false
replay_endpoint: null
reversibility: >-
A delivery cannot be replayed or redelivered — the provider publishes no such endpoint. Recovery
is a History API read by request_id, not a retry. See conventions/shieldlabs-conventions.yml.
latency: >-
waits up to 60 seconds for an optional follow-up network check, then always delivers
ack: return 200 quickly
idempotency_key: data.request_id
recovery_path: >-
GET /api/v1/history/request_id/{request_id} on account.shieldlabs.ai — free, does not consume
request balance
billing: webhook deliveries are never billed
envelope:
schema: openapi/_original/shieldlabs-openapi.yaml#/components/schemas/WebhookEvent
json_schema: json-schema/shieldlabs-identification-scored.schema.json
example: examples/shieldlabs-identification-scored-example.json
fields: [event_type, schema_version, created_at, data]
schema_version: '2026-06-01'
signature_in_body: false
events:
- name: identification.scored
description: >-
One signed envelope per scored visit, carrying the identifiers, the 0-100 Risk Score, the weighted
signals that produced it, 18 denormalized detection flags, public and local IP with country,
device/browser/OS, and traffic-source attribution.
payload_schema: openapi/_original/shieldlabs-openapi.yaml#/components/schemas/WebhookScoredData
required_fields: [request_id, visitor_id, device_id, risk_score, signals, detection_flags, observed_at]
cardinality: one per identification
- name: webhook.ping
description: >-
Test/verification delivery with no `data` object. Sent by the dashboard Verify action; when the
endpoint answers 2xx its status flips to Active. A "Send test event" action delivers a sample
risk event at any time.
payload_schema: null
cardinality: on demand
consumer_requirements:
- Verify X-Shield-Signature against HMAC-SHA256 of the RAW bytes before parsing — re-serializing the body breaks the signature.
- Deduplicate on request_id; handlers must be idempotent.
- Short-circuit on event_type == "webhook.ping" before touching data.
- Guard for risk_score > 100 — a 999 is a gateway rate-limit ban marker, not a maximum-risk visitor.
probes:
- url: https://docs.shieldlabs.ai/asyncapi.yaml
status: 404
- url: https://shieldlabs.ai/asyncapi.yaml
status: 404
- url: https://api.shieldlabs.ai/asyncapi.json
status: 404
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/shieldlabs-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.