Docs

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

Charge status flow
verification_in_progress  (only when penny validation runs)
   ├── pending
   │     ├── processing
   │     │     ├── confirmed
   │     │     │     └── chargeback
   │     │     ├── declined
   │     │     └── chargeback
   │     └── canceled
   └── canceled

These 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.

Note:

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.