Last updated

Payloads

Every webhook delivery is an HTTP POST with Content-Type: application/json. The body wraps the transaction inside an event envelope.

Envelope fields

FieldTypeDescription
idstring (UUID)Unique event ID. Use this for idempotency.
typestringEvent type, e.g. transaction.auth.approved
versionstringPayload schema version, e.g. v1
occurredAtstring (ISO-8601 UTC)When the event occurred
dataobjectTransaction data object (see below)

Transaction data object

FieldTypeDescription
idstring (UUID)requiredUnique transaction identifier
productTypestringrequiredcredit_line or self_funded
transactionTypestringrequireddebit or credit
transactionDatestring (ISO-8601)requiredDate and time of the transaction
transactionAmountnumberrequiredAmount in the billing currency
transactionCurrencystringrequiredISO-4217 code (e.g. USD, BRL)
settlementDatestringoptionalSettlement date. Present on transaction.settled.
localAmountnumberoptionalAmount in the merchant's local currency
localCurrencystringoptionalISO-4217 code of the local currency
descriptionstringoptionalHuman-readable transaction description
relatedTransactionIdstring (UUID)optionalID of the related transaction (e.g. original auth for a reversal)
companyobjectrequired{ id, name }
userobjectrequired{ id, name, email }
cardobjectrequiredSee Card object below
merchantobjectrequiredSee Merchant object below

Card object

FieldTypeDescription
idstring (UUID)requiredCard identifier
namestringoptionalCard display name
typestringrequiredvirtual or physical
lastFourDigitsstringrequiredLast 4 digits of the PAN
metadataobjectoptionalCustom key-value metadata on the card
restrictionsobjectoptional{ spendLimit, activeDateRangeUTC, maxTransactionCount, merchantCategory }

Merchant object

FieldTypeDescription
namestringrequiredMerchant name
merchantCategoryCodestringrequired4-digit ISO 18245 MCC (zero-padded)
merchantCategoryCodeDescriptionstringoptionalHuman-readable MCC description

Full example payload

{
  "id":          "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "type":        "transaction.auth.approved",
  "version":     "v1",
  "occurredAt":  "2026-04-20T10:00:00.000Z",
  "data": {
    "id":                  "txn-uuid-1234-5678-abcd",
    "productType":         "credit_line",
    "transactionType":     "debit",
    "transactionDate":     "2026-04-20T10:00:00.000Z",
    "transactionAmount":   150.00,
    "transactionCurrency": "USD",
    "localAmount":         820.50,
    "localCurrency":       "BRL",
    "description":         "Hotel booking - Marriott Sao Paulo",
    "company":   { "id": "co-uuid-5678", "name": "Acme Corp" },
    "user":      { "id": "u-uuid-9012", "name": "John Doe", "email": "john@acme.com" },
    "card": {
      "id":             "card-uuid-3456",
      "name":           "Travel Card",
      "type":           "virtual",
      "lastFourDigits": "1234",
      "metadata":       { "itineraryId": "ITIN-993235" },
      "restrictions":   { "spendLimit": 500.00, "maxTransactionCount": 3 }
    },
    "merchant": {
      "name":                           "Marriott Hotels",
      "merchantCategoryCode":           "3509",
      "merchantCategoryCodeDescription": "Marriott Hotels"
    }
  }
}

Delivery headers

Every webhook request from Jeeves carries these HTTP headers:

HeaderExampleDescription
X-Webhook-Event-Ida1b2c3d4-…Unique event ID — use as your idempotency key
X-Webhook-Delivery-Idd9e8f7a6-…Unique delivery attempt ID
X-Webhook-Event-Typetransaction.auth.approvedThe event type
X-Webhook-Timestamp1745143200When the event occurred (Unix seconds)
X-Webhook-Signaturesha256=abc123…HMAC-SHA256 of the raw request body
X-Webhook-Retryfalsetrue if this is a retry attempt
X-Webhook-Retry-Reasonautomaticautomatic or manual — only on retries
X-Webhook-TesttruePresent only on test deliveries
Content-Typeapplication/jsonAlways application/json