Direct Debit · Reference
Charge statuses
Every status a charge or instrument can have, and what the ownership verification result means.
Charge statuses
Charges move through the following statuses from creation to final result.
| Status | Description |
|---|---|
verification_in_progress |
Penny validation is checking the instrument’s ownership. The charge waits for the result. |
pending |
The charge has been created and accepted by the platform. It is queued for submission to the banking network at the next processing cutoff. |
processing |
The charge was included in a file sent to the bank. It is waiting for the bank’s response. |
confirmed |
The banking network has confirmed the charge. The amount has been collected from the customer’s account. |
declined |
The banking network declined the charge. No funds were collected. See the declined_reason and declined_reason_rail fields, or the Error Codes reference for details. |
canceled |
The charge was canceled before it was sent to the bank, for example by penny validation or the risk engine. |
chargeback |
A previously confirmed charge has been reversed by the customer’s issuing bank. The amount has been deducted from the merchant’s balance. Delivered via a charge_result webhook event with charge_result: "chargeback". |
Status flow
verification_in_progress (only when penny validation runs)
├── pending
│ ├── processing
│ │ ├── confirmed
│ │ │ └── chargeback
│ │ ├── declined
│ │ └── chargeback
│ └── canceled
└── canceledThese are the only transitions. declined, canceled and chargeback are final. A confirmed charge can still become chargeback. Charges can’t be canceled through the API.
Instrument statuses
| Status | Description |
|---|---|
verification_in_progress |
Penny validation is running. The instrument can’t be charged yet. |
active |
The instrument is available for use in charge requests. It is active when penny validation returns matched, or right away when penny validation is not enabled for your organization. |
errored |
Penny validation returned any result other than matched. The instrument can’t be charged. |
inactive |
Reserved. The platform does not set this status today. |
A charge on an instrument that is not active is rejected with 400 and instrument_in_invalid_state. See Penny validation.
Instrument ownership verification
The ownership_verification_result field reflects the outcome of penny validation.
| Value | Description |
|---|---|
| (null) | Penny validation has not yet completed, or did not run. |
matched |
The account holder matches the customer. The instrument becomes active. |
no_match |
The account holder does not match the customer. |
errored |
The validation could not be completed. |
account_canceled |
The bank reported that the account is canceled. |
account_does_not_exist |
The bank reported that the account does not exist. |
Every value other than matched makes the instrument errored, and it can’t be charged. The instrument_ownership_verification_result webhook event is sent when penny validation completes.
account_canceled and account_does_not_exist are returned by the service but are not yet in the OpenAPI VerificationResult enum.
Risk status
Charges also carry a risk_status:
| Value | Description |
|---|---|
pending |
The risk engine has not evaluated the charge yet. This is the value when a charge is created. |
ok |
The risk engine approved the charge. |
cancelled_by_risk |
The risk engine blocked the charge, and it is canceled. |
The API returns the stored value, which can also be null on older charges. Webhooks only report ok or cancelled_by_risk. See Webhook events.