Event Types & Payloads

Inflow sends webhook notifications as HTTP POST requests to your registered endpoint. The payload mirrors the getPayment API response.

Event Types

Inflow fires two event types:

Event TypeWhen It Fires
payment_createdA new payment is created (checkout initiated)
payment_status_updatedA payment's status changes

Webhook Payload Format

Every webhook delivery has this shape:

{
  "data": [
    {
      "eventType": "payment_created",
      "payload": {
        "id": "pay_abc123",
        "amountInCents": 4999,
        "currency": "EUR",
        "status": "INITIATION",
        "customerEmail": "[email protected]",
        "customerId": null,
        "products": [{ "name": "Product", "price": 4999, "quantity": 1 }],
        "metadatas": { "orderId": "order_12345" },
        "subscriptionId": null,
        "taxCountry": null,
        "amountTaxesIncluded": null,
        "depositStatus": null,
        "lastDepositAttempt": null,
        "taxRateInPercentage": null,
        "timeline": [
          { "status": "INITIATION", "timestamp": "2025-01-15T10:30:00.000Z" }
        ],
        "depositAttempts": [],
        "transactionSummary": null,
        "createdAt": "2025-01-15T10:30:00.000Z",
        "updatedAt": "2025-01-15T10:30:00.000Z"
      }
    }
  ]
}

payment_status_updated Example

{
  "data": [
    {
      "eventType": "payment_status_updated",
      "payload": {
        "id": "pay_abc123",
        "amountInCents": 4999,
        "currency": "EUR",
        "status": "CHECKOUT_SUCCESS",
        "customerEmail": "[email protected]",
        "customerId": "cust_xyz789",
        "products": [{ "name": "Product", "price": 4999, "quantity": 1 }],
        "metadatas": { "orderId": "order_12345" },
        "subscriptionId": null,
        "taxCountry": "FR",
        "amountTaxesIncluded": 5999,
        "taxRateInPercentage": 20,
        "depositStatus": "succeeded",
        "lastDepositAttempt": {
          "status": "succeeded",
          "amount": 5999,
          "paymentMethod": "CARD",
          "error": null,
          "attemptedAt": "2025-01-15T10:31:00.000Z"
        },
        "timeline": [
          { "status": "INITIATION", "timestamp": "2025-01-15T10:30:00.000Z" },
          { "status": "CHECKOUT_SUCCESS", "timestamp": "2025-01-15T10:31:00.000Z" }
        ],
        "depositAttempts": [],
        "transactionSummary": null,
        "createdAt": "2025-01-15T10:30:00.000Z",
        "updatedAt": "2025-01-15T10:31:00.000Z"
      }
    }
  ]
}

The payload object is the exact same data as the getPayment API response — including metadatas, timeline, lastDepositAttempt, subscriptionId, etc. You do not need to make an additional API call to get the payment details; everything is already in the webhook event.

Payment Statuses

These are the status values you will receive in the status field and in timeline[].status:

StatusDescription
INITIATIONPayment created, waiting for payer action
CHECKOUT_PENDINGPayer is preparing the payment
CHECKOUT_SUCCESSPayer has successfully paid
PAYMENT_RECEIVEDFunds received by the banking provider
PAYMENT_SUCCESSFunds received in the user's account
PAYMENT_FAILEDPayment failed
PARTIAL_REFUNDEDPartial refund completed
FULLY_REFUNDEDFull refund completed
REFUND_PENDINGRefund is being processed
REFUND_FAILEDRefund failed

Identifying Payment Failures

When a payment fails, the lastDepositAttempt object contains the error code:

{
  "lastDepositAttempt": {
    "status": "failed",
    "amount": 4999,
    "paymentMethod": "CARD",
    "error": "card_declined",
    "attemptedAt": "2025-01-15T10:31:00.000Z"
  }
}

See Error Handling for a full list of error codes.

Subscription Payments

For subscription-related payments, the subscriptionId field is populated:

{
  "data": [
    {
      "eventType": "payment_status_updated",
      "payload": {
        "id": "pay_sub_001",
        "status": "PAYMENT_SUCCESS",
        "subscriptionId": "sub_xyz789",
        "amountInCents": 2999,
        "currency": "EUR"
      }
    }
  ]
}

Use subscriptionId to link payment events to specific subscriptions in your system.