Skip to content

Push Delivery

Push delivery is the recommended way to receive webhooks from Transyt. When an event is ingested, Transyt immediately POSTs it to your configured delivery_url.

  1. A webhook arrives at Transyt from a provider
  2. Transyt verifies the signature and deduplicates the event
  3. If a delivery_url is configured, Transyt POSTs the event to your app
  4. Your app returns a 2xx status code to acknowledge receipt
  5. If delivery fails, Transyt retries with exponential backoff

Transyt sends a POST request with:

Headers:

Content-Type: application/json
X-Gateway-Signature: {HMAC-SHA256 hex digest}
X-Gateway-Timestamp: {unix timestamp}

Body:

{
"event_id": "550e8400-e29b-41d4-a716-446655440000",
"provider": "stripe",
"account_slug": "my-app",
"event_type": "charge.succeeded",
"external_id": "evt_1234567890",
"payload": { "...full original webhook payload..." }
}

Transyt considers delivery successful when your app returns any of these status codes:

  • 200 OK
  • 201 Created
  • 202 Accepted
  • 204 No Content

Any other status code (or a connection error) triggers a retry.

You can set delivery URLs at two levels:

  1. Account-level delivery_url — Specific to this provider account (takes precedence)
  2. Project-level project_delivery_url — Shared fallback across accounts in the same project

The same cascading applies to delivery secrets (delivery_secret vs project_delivery_secret).

This lets you configure a single delivery URL for all providers in a project, while overriding it for specific accounts that need different handling.

Delivery requests have a 30-second timeout. If your app doesn’t respond within 30 seconds, the delivery is marked as failed and will be retried.

Always verify the X-Gateway-Signature header. See Verifying Signatures for implementation details.