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 Type | When It Fires |
|---|---|
payment_created | A new payment is created (checkout initiated) |
payment_status_updated | A 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
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
payloadobject is the exact same data as the getPayment API response — includingmetadatas,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:
| Status | Description |
|---|---|
INITIATION | Payment created, waiting for payer action |
CHECKOUT_PENDING | Payer is preparing the payment |
CHECKOUT_SUCCESS | Payer has successfully paid |
PAYMENT_RECEIVED | Funds received by the banking provider |
PAYMENT_SUCCESS | Funds received in the user's account |
PAYMENT_FAILED | Payment failed |
PARTIAL_REFUNDED | Partial refund completed |
FULLY_REFUNDED | Full refund completed |
REFUND_PENDING | Refund is being processed |
REFUND_FAILED | Refund 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.
Updated about 20 hours ago