Skip to content

Stripe

PropertyValue
AlgorithmHMAC-SHA256
HeaderStripe-Signature
Formatt=timestamp,v1=signature
Timestamp tolerance300 seconds (5 minutes)

Signing formula:

HMAC-SHA256("timestamp.payload", webhook_secret)

Transyt parses the Stripe-Signature header, extracts the t (timestamp) and v1 (signature) values, then computes the expected signature using the stored webhook secret. The timestamp is validated to be within 5 minutes of the current time to prevent replay attacks.

  1. Go to Developers > Webhooks in your Stripe Dashboard
  2. Click Add endpoint
  3. Set the endpoint URL to:
    https://ingest.transyt.com/stripe/{your-account-slug}
  4. Select the events you want to receive
  5. Copy the Signing secret (starts with whsec_)
  6. Create the account in Transyt with the signing secret
Terminal window
curl -X POST https://ingest.transyt.com/admin/accounts \
-H "X-Admin-Token: YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"provider": "stripe",
"account_slug": "my-app",
"app_key": "my-app",
"signing_secret_current": "whsec_..."
}'

Transyt normalizes Stripe event types to a consistent format:

Stripe EventTransyt Event
charge.succeededpayment.completed
charge.failedpayment.failed
charge.refundedpayment.refunded
charge.disputedpayment.disputed
invoice.paidinvoice.paid
invoice.payment_failedinvoice.payment_failed
invoice.createdinvoice.created
invoice.finalizedinvoice.finalized
customer.subscription.createdsubscription.created
customer.subscription.updatedsubscription.updated
customer.subscription.deletedsubscription.cancelled
customer.subscription.trial_will_endsubscription.trial_ending
payment_method.attachedpayment_method.attached
payment_method.detachedpayment_method.detached
checkout.session.completedcheckout.completed
checkout.session.expiredcheckout.expired

The original Stripe event type is always preserved in the event_type_raw field.

The Stripe event ID (evt_xxxxx) is used as the external ID for deduplication.