Real-time authorization request sent to your webhook endpoint for every JIT card transaction. Your response controls whether the transaction is approved or declined.
Use this file to discover all available pages before exploring further.
Fires synchronously when a cardholder uses a JIT-enabled card. Fyatu forwards the authorization request from the card network to your registered endpoint and waits up to 1 second for your APPROVE or DECLINE response. Your decision is then forwarded to the card network. The cardholder experiences no perceptible delay.
This event requires a response within 1 second. If your endpoint does not respond in time, Fyatu automatically approves the transaction (provided your program balance is sufficient). Design your handler to be fast — do not call slow external services in the critical path.
You receive this event only for JIT cards (isJitfEnabled: true). Pre-funded cards do not go through your authorization handler — they draw from the card’s own balance without consulting your server.
Only the first CARD_AUTHORIZATION_VERIFY endpoint registered for your business is used per authorization — register one dedicated, fast endpoint for this event.
Network or cross-border fee in dollars (may be 0.00)
currency
string
Authorization currency (ISO 4217)
merchantName
string
Merchant name from the card network
merchantMcc
string
Merchant Category Code (ISO 18245). Empty string if not provided by the network
merchantCountry
string
Two-letter country code where the merchant is located. Empty string if not provided
timestamp
string
ISO 8601 timestamp of the authorization request
The total charge to your program ledger on approval will be amount + feeAmount. When evaluating whether to approve, check your program balance against the combined total — not just amount.
After Fyatu receives your APPROVE, it reserves the funds from your program ledger and responds to the card network. You will later receive TRANSACTION_AUTHORIZED when the authorization is confirmed, and TRANSACTION_CLEARED when the transaction settles.
Your endpoint responds {"decision": "APPROVE"} within 1 second
Transaction approved
Your endpoint responds {"decision": "DECLINE", ...} within 1 second
Transaction declined
No CARD_AUTHORIZATION_VERIFY endpoint registered
Auto-approve (balance check only)
Endpoint does not respond within 1 second
Auto-approve (fail open)
Endpoint returns non-2xx HTTP status
Auto-approve (fail open)
Response body cannot be parsed
Auto-approve (fail open)
Failing open is intentional. An unexpected approval is recoverable — your program ledger is debited and you can investigate. An unexpected decline silently blocks a cardholder at the terminal and is not recoverable.If you need guaranteed blocking behaviour for a card (e.g. a terminated or suspended cardholder), use the card lifecycle endpoints (freeze, terminate) rather than relying solely on the authorization webhook.
All CARD_AUTHORIZATION_VERIFY requests are signed with the same HMAC-SHA256 mechanism as all other Fyatu webhooks. Verify the X-Fyatu-Signature header before processing:
import hmac, hashlib, timedef verify_fyatu_signature(payload_bytes, signature_header, secret): # signature_header = "t=<timestamp>,v1=<hex>" parts = dict(p.split("=", 1) for p in signature_header.split(",")) ts = parts.get("t", "") received = parts.get("v1", "") # Reject if timestamp is more than 5 minutes old if abs(time.time() - int(ts)) > 300: return False signed = f"{ts}.{payload_bytes.decode()}" expected = hmac.new(secret.encode(), signed.encode(), hashlib.sha256).hexdigest() return hmac.compare_digest(expected, received)