Webhooks
Lynq delivers outbound HTTPS POST requests to URLs you register. Payloads use a Stripe-style envelope signed with HMAC-SHA256.
Subscribe
POST /webhooks with your HTTPS URL. Response 201 Created includes:
id— webhook subscription ULIDsecret— shown once; store in your secrets manager
{
"url": "https://your-company.example.com/webhooks/lynq",
"description": "Production listener",
"event_filters": []
}
Empty event_filters receives all catalog events. Otherwise only listed types are delivered.
Headers
| Header | Purpose |
|---|---|
X-Lynq-Signature | t=<unix>,v1=<hex> over {t}.{raw_body} |
X-Lynq-Event | Event type (mirrors JSON type) |
Content-Type | application/json |
Verification algorithm
- Read the raw body bytes (before JSON parsing re-serialization).
- Parse
tandv1fromX-Lynq-Signature. - Compute
HMAC-SHA256(secret, "{t}.{raw_body}")as lowercase hex. - Compare with
v1using a constant-time compare.
Use the Tools page or verification snippets for reference implementations.
Envelope shape
{
"id": "01EVTEXAMPLE0000000000000001",
"object": "event",
"created": 1715000000,
"livemode": false,
"type": "order.delivered",
"data": {
"object": {
"id": "01ORDER…",
"status": "delivered"
}
}
}
Retries and idempotency
Failed deliveries retry with backoff. The same logical event reuses the same envelope id. Record processed IDs to prevent duplicate fulfillment in your OMS.
Test and replay
POST /webhooks/\{id\}/test— syntheticwebhook.testevent- Replay endpoints (see API reference) enqueue historical events for backfill
Event catalog
Autogenerated reference pages live under Webhook Events.