Test fire vendor webhook subscription
Send a test delivery for a webhook subscription.
Webhooks
/api/v1/scent/webhooks/{id}/test-fireSynthesizes a sample payload for the given (already-subscribed) event type and dispatches it through the SAME delivery path — including HMAC signing and the SSRF guardrails — a real event would use. No capability required — ownership is the only gate.
Path parameters
idstring (uuid)RequiredBody parameters
eventTypestring (enum)RequiredCarries the scent. product segment after the vendor. plane prefix, matching the platform’s product-scoped naming convention. vendor.scent.order.assigned requires the Orders capability to subscribe to; vendor.scent.offer.review-decision requires Offers — independently of each other.
Response
idstring (uuid)eventTypestring (enum)Carries the scent. product segment after the vendor. plane prefix, matching the platform’s product-scoped naming convention. vendor.scent.order.assigned requires the Orders capability to subscribe to; vendor.scent.offer.review-decision requires Offers — independently of each other.
idempotencyKeystringStable across every retry attempt of the SAME logical event — the same value that appears as eventId in the delivered envelope. Use it to dedupe.
attemptNumberintegerhttpStatusintegersentAtstring (date-time)succeededbooleanerrorSummarystringdeadLetteredAtstring (date-time)nextAttemptAtstring (date-time)Other responses
400The subscription isn’t subscribed to that event type.401No bearer token (UNAUTHORIZED_MISSING_TOKEN), an invalid token (UNAUTHORIZED_INVALID_TOKEN) or an expired one (UNAUTHORIZED_TOKEN_EXPIRED — mint a new token). UPSTREAM_AUTH_FAILED is different: a dependent service refused the Gateway itself. That is a server-side fault — retry later and do NOT re-mint your token. See the Rate limits & errors guide.403The route is not available to your credential (FORBIDDEN).404Unknown subscription id.415The request body is not sent as application/json (UNSUPPORTED_MEDIA_TYPE).429Too many requests. Retry after the Retry-After header (seconds).502A dependent service returned an invalid response (BAD_GATEWAY). Retry with backoff.503The service is temporarily unavailable (SERVICE_UNAVAILABLE). Retry with backoff.504A dependent service did not respond in time (GATEWAY_TIMEOUT). Retry with backoff.curl --request POST \ --url https://api-omni-vendors.linra.net/api/v1/scent/webhooks/5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b/test-fire \ --header 'Authorization: Bearer $TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "eventType": "vendor.scent.order.assigned" }'const res = await fetch('https://api-omni-vendors.linra.net/api/v1/scent/webhooks/5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b/test-fire', { method: 'POST', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ eventType: 'vendor.scent.order.assigned' }),});const { payload } = await res.json();var response = await httpClient.PostAsJsonAsync( "https://api-omni-vendors.linra.net/api/v1/scent/webhooks/5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b/test-fire", new { eventType = "vendor.scent.order.assigned" });
var envelope = await response.Content.ReadFromJsonAsync<ApiResponse<VendorWebhookDeliveryResponse>>();Response
{ "state": "SUCCESS", "payload": { "id": "5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b", "eventType": "vendor.scent.order.assigned", "idempotencyKey": "string", "attemptNumber": 0, "httpStatus": 0, "sentAt": "2026-08-22T09:14:03Z", "succeeded": true, "errorSummary": "string", "deadLetteredAt": "2026-08-22T09:14:03Z", "nextAttemptAt": "2026-08-22T09:14:03Z" }, "details": null}
