Current scope. 0xkey currently supports the
ACTIVITY_UPDATES subscription. This emits activity lifecycle events such as activity.completed and activity.failed. Balance and transaction subscriptions are not yet enabled.Create an endpoint
You can create and manage webhook endpoints from the Dashboard under Webhooks. For API-based setup, submit aACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT activity:
https://. Local development accepts http://localhost and http://127.0.0.1.
Update or delete an endpoint
Update supports the endpoint URL, display name, and active status:Delivery payload
0xkey sends a JSON POST body:eventId is stable across retries. Use it as your idempotency key.
Delivery headers
Every signed webhook delivery includes theseX-0xkey-* headers:
X-0xkey-Organization-Id: the organization that owns the event.X-0xkey-Event-Type: the event type, for exampleactivity.completed.X-0xkey-Timestamp: Unix timestamp in milliseconds for this delivery attempt.X-0xkey-Signature-Version: signature contract version. Current value:v1.X-0xkey-Event-Id: stable event ID, unchanged across retries.X-0xkey-Signature-Key-Id:kidfor selecting the JWKS verification key.X-0xkey-Signature-Algorithm: current value:ed25519.X-0xkey-Signature: lowercase hex-encoded Ed25519 signature.
Verify signatures
Fetch the public verification keys from:X-0xkey-Signature-Key-Id to the JWK kid. If the kid is unknown, refetch JWKS once before rejecting the delivery.
The signed message is the UTF-8 prefix followed by the exact raw request body bytes:
versionis theX-0xkey-Signature-Versionheader (currentlyv1).algorithmis theX-0xkey-Signature-Algorithmheader (currentlyed25519).key_idis theX-0xkey-Signature-Key-Idheader.timestamp_msis the rawX-0xkey-Timestampheader string (Unix milliseconds).event_idis theX-0xkey-Event-Idheader.raw_bodyis the exact UTF-8 request body bytes received by your server.
@0xkey-io/crypto:
Retries and idempotency
0xkey uses the delivery backend for retry and fanout. Your receiver should:- Return any
2xxstatus only after the event is durably accepted. - Treat duplicate
eventIdvalues as successful no-ops. - Keep processing fast; enqueue long-running work and respond quickly.
- Prefer HTTPS endpoints with stable DNS and TLS certificates.