type field that identifies what happened and a data object with details specific to that event.
Collection events
Collection events fire when the status of an incoming payment changes.collection.succeeded
collection.succeeded
When it fires: A payment was completed and funds were received in full.
| Field | Type | Description |
|---|---|---|
reference | string | Your payment reference. |
status | string | Always "success". |
amount | string | Amount received, formatted for the currency. |
currency | string | ISO 4217 currency code (e.g., "USD", "NGN"). |
settlement_amount | string | Amount credited to your balance after fees. |
settlement_currency | string | Currency of your settlement. |
customer | object | Customer details (e.g., email). |
completed_at | string | ISO 8601 timestamp when the payment completed. |
collection.failed
collection.failed
When it fires: A payment attempt was declined or could not be processed.
| Field | Type | Description |
|---|---|---|
reference | string | Your payment reference. |
status | string | Always "failed". |
amount | string | Amount that was attempted. |
currency | string | ISO 4217 currency code. |
customer | object | Customer details. |
failed_at | string | ISO 8601 timestamp when the failure was recorded. |
collection.abandoned
collection.abandoned
When it fires: A customer started but did not complete a checkout before it expired or was abandoned.
| Field | Type | Description |
|---|---|---|
reference | string | Your payment reference. |
status | string | Always "abandoned". |
amount | string | Amount that was requested. |
currency | string | ISO 4217 currency code. |
customer | object | Customer details. |
collection.underpaid
collection.underpaid
When it fires: A payment was received, but the amount was less than the amount requested. This can occur with crypto payments that support partial delivery.
| Field | Type | Description |
|---|---|---|
reference | string | Your payment reference. |
status | string | Always "underpaid". |
amount | string | Amount requested. |
amount_received | string | Amount actually received. |
currency | string | ISO 4217 currency code. |
customer | object | Customer details. |
Payout events
Payout events fire when the status of an outgoing payment changes.payout.created
payout.created
When it fires: A payout was created and accepted for processing.
| Field | Type | Description |
|---|---|---|
payout_id | string | Syncgram Pay payout ID. |
status | string | Always "created". |
payout_amount | string | Amount being sent, formatted for the currency. |
payout_currency | string | Currency of the payout. |
created_at | string | ISO 8601 timestamp when the payout was created. |
payout.paid
payout.paid
When it fires: A payout was successfully delivered to the destination.
| Field | Type | Description |
|---|---|---|
payout_id | string | Syncgram Pay payout ID. |
status | string | Always "paid". |
payout_amount | string | Amount delivered. |
payout_currency | string | Currency of the payout. |
completed_at | string | ISO 8601 timestamp when delivery was confirmed. |
payout.failed
payout.failed
When it fires: A payout could not be delivered to the destination.
| Field | Type | Description |
|---|---|---|
payout_id | string | Syncgram Pay payout ID. |
status | string | Always "failed". |
payout_amount | string | Amount that was attempted. |
payout_currency | string | Currency of the payout. |
failed_at | string | ISO 8601 timestamp when the failure was recorded. |
Refund events
Refund events fire when the status of a refund changes.refund.created
refund.created
When it fires: A refund was initiated.
| Field | Type | Description |
|---|---|---|
refund_id | string | Syncgram Pay refund ID. |
status | string | Always "created". |
amount | string | Refund amount. |
currency | string | ISO 4217 currency code. |
reference | string | Original payment reference. |
refund.paid
refund.paid
When it fires: A refund was successfully returned to the customer.
| Field | Type | Description |
|---|---|---|
refund_id | string | Syncgram Pay refund ID. |
status | string | Always "paid". |
amount | string | Refund amount. |
currency | string | ISO 4217 currency code. |
reference | string | Original payment reference. |
completed_at | string | ISO 8601 timestamp when the refund was delivered. |
refund.failed
refund.failed
When it fires: A refund could not be delivered to the customer.
| Field | Type | Description |
|---|---|---|
refund_id | string | Syncgram Pay refund ID. |
status | string | Always "failed". |
amount | string | Refund amount. |
currency | string | ISO 4217 currency code. |
reference | string | Original payment reference. |
Conversion events
Conversion events fire when a currency conversion changes status.conversion.completed
conversion.completed
When it fires: A currency conversion was executed successfully.
| Field | Type | Description |
|---|---|---|
from_amount | string | Amount debited in the source currency. |
from_currency | string | Source currency code. |
to_amount | string | Amount credited in the destination currency. |
to_currency | string | Destination currency code. |
completed_at | string | ISO 8601 timestamp when the conversion completed. |
conversion.failed
conversion.failed
When it fires: A currency conversion could not be completed.
| Field | Type | Description |
|---|---|---|
from_amount | string | Amount that was attempted. |
from_currency | string | Source currency code. |
to_currency | string | Destination currency code. |
failed_at | string | ISO 8601 timestamp when the failure was recorded. |
All event types
| Event type | Category | Description |
|---|---|---|
collection.succeeded | Collection | Payment completed and funds received. |
collection.failed | Collection | Payment attempt was declined or failed. |
collection.abandoned | Collection | Checkout was not completed before expiry. |
collection.underpaid | Collection | Payment received for less than the requested amount. |
payout.created | Payout | Payout accepted and queued for delivery. |
payout.paid | Payout | Payout successfully delivered to the destination. |
payout.failed | Payout | Payout delivery failed. |
refund.created | Refund | Refund initiated. |
refund.paid | Refund | Refund successfully returned to the customer. |
refund.failed | Refund | Refund delivery failed. |
conversion.completed | Conversion | Currency conversion executed successfully. |
conversion.failed | Conversion | Currency conversion could not be completed. |
Full production payload example
The following is a completecollection.succeeded payload as delivered to your endpoint in production:
The
id field on test events delivered via POST /api/v1/notifications/webhooks/test is always evt_test_webhook. Use this to distinguish test events from live events in your handler.