EnglishWebhooksSetting up

Setting up the webhook

INFI sends an HTTP POST notification to your server when a charge or withdrawal status changes. You can configure up to 6 URLs, each receiving specific event categories (or everything).

Diagram

Each URL only receives the events it matches. Multiple URLs can match the same event — all receive it in parallel.

Registration

In the INFI dashboard, under Webhooks → Configuration:

  1. Click Add webhook.
  2. Enter the HTTPS URL (HTTP is rejected — security).
  3. Choose what this URL receives:
    • All events (catch-all).
    • Select categories: check one or more of cashin, cashout, refund, dispute, chargeback. See the full list in Events.
  4. Mark active and save.

Limit: 6 active webhooks per account. To change, remove one before adding another.

Legacy configuration (single URL)

Accounts created before May/2026 may have a legacy URL that receives all events. It still works as a fallback if none of the new webhooks match the event. When configuring per-category URLs, consider removing the legacy one (the “remove” button in the dashboard).

Configuration example: 3 URLs by purpose

URL 1: https://api.yourcompany.com/webhooks/infi-cashin
       → category "cashin"
       → receives transaction.paid, transaction.failed, transaction.cancelled, transaction.expired

URL 2: https://api.yourcompany.com/webhooks/infi-cashout
       → category "cashout"
       → receives all transfer.* (10 events)

URL 3: https://api.yourcompany.com/webhooks/infi-refund
       → category "refund" + "chargeback"
       → receives transaction.refunded, transaction.partially_refunded, transaction.chargeback

Request headers

HeaderDescription
Content-Typeapplication/json
X-Infi-EventCanonical name of the event (e.g., transaction.paid).
X-Infi-TimestampUnix timestamp in seconds, part of the signature.
X-Infi-Signaturesha256=<hex> — HMAC-SHA256. See Signature.
X-Infi-Event-IdUnique event ID (e.g., evt_1715000000000_abcdef12). Same across fanout URLs and manual resends — use it for dedup.

Body

{
  "event": "transaction.paid",
  "eventId": "evt_1715000000000_abcdef12",
  "transactionId": "Q4t9aV...",
  "status": "paid",
  "amountCents": 1000,
  "feeCents": 10,
  "netCents": 990,
  "paidAt": "2026-05-06T14:35:12.000Z",
  "timestamp": "1715000000"
}
FieldDescription
eventCanonical event name. See Events.
eventIdUnique event identifier. Shared across fanout URLs and manual resends — use it for dedup.
transactionIdIdentifies the transaction.
statusNew status. See Status.
amountCents, feeCents, netCentsAmounts in cents.
paidAtISO 8601 UTC when the final status is paid; null otherwise.
timestampEcho of X-Infi-Timestamp for cross-validation.
Single delivery — no automatic retry

INFI delivers the webhook in a single automatic attempt, with an 8-second timeout. If your application does not respond, the event is not redelivered automatically. Recommended strategy:

Expected response

  • Return any 2xx within 8 seconds.
  • Do heavy processing in background (worker, queue). Acknowledge receipt and enqueue.

Next