Skip to main content

Overview

Webhooks let your application react to events in real time without polling. When something happens in Arcus — an order is confirmed, a payment is received, a shipment is created, an inventory adjustment is posted — Arcus sends an HTTP POST to your endpoint with a signed JSON payload. All webhook requests are signed with HMAC-SHA256. You verify the signature using the signing secret returned at endpoint creation.

Event structure

Every webhook payload uses this envelope:

Registering an endpoint

The response includes a secret in whsec_<hex> format. Store it securely — it is shown once and cannot be retrieved again. Use it to verify every incoming request.
Field name: use enabled_events (Stripe convention) in all requests and responses. The legacy alias events is accepted for backward compatibility but is deprecated and will be removed in API v2.

Wildcard subscriptions

Subscribe to an entire event family with order.*, or all events with *:
Valid wildcard patterns are <family>.* (14 families) or * (all 118 events).

Duplicate endpoint guard

Registering the same URL + mode combination twice returns HTTP 409 with error: "duplicate_url" and the existing_id of the already-active endpoint.

Verifying signatures

Every webhook request includes an Arcus-Signature header. Always verify it before processing the payload. The signature is an HMAC-SHA256 of <timestamp>.<raw_body> using your signing secret, with a 5-minute replay window. Header format: Arcus-Signature: t=<unix_epoch>,v1=<hex_hmac_sha256>

Webhook request headers

Every delivery includes these headers:

Responding to webhooks

Return a 2xx response within 5 seconds. If your endpoint takes longer, respond immediately and process the event asynchronously. Arcus retries on any non-2xx response or connection failure, with exponential backoff: After 6 failed attempts, no more retries are made for that delivery. An endpoint that accumulates 10 consecutive permanent failures is automatically disabled.

Deduplication

Events may be delivered more than once (network timeouts, retries). Always deduplicate on event.id before processing:

Rotating signing secrets

The response returns a new signing_secret. Update your environment variable immediately. The old secret is invalidated at rotation — there is no grace period.

Sending a test event

Send a webhook.test event to verify your endpoint is reachable:

Event catalog

Arcus emits 118 event types across 14 families. Subscribe to individual events, a whole family (order.*), or everything (*).

account (12 events)

product (21 events)

order (16 events)

invoice (9 events)

payment (8 events)

inventory (7 events)

purchase_order (8 events)

vendor_bill (8 events)

journal_entry and period (5 events)

fulfillment (7 events)

return (5 events)

connector (7 events)

migration (10 events)

Migration events are registered but only fire when the API-RESOURCE-MIGRATION feature is complete. Until then, subscribers see zero migration.* deliveries.

webhook (1 event)