Void a Payment

Cancel a payment before it settles so it is never finalized

Voiding cancels a payment before it settles, releasing the hold on the customer's card. Use it to cancel an approved authorization or an approved sale that hasn't settled yet, for example when an item is out of stock or the customer changes their mind. Because no funds have moved, a void leaves no charge on the customer's statement and avoids the fees of capturing and then refunding. For the full field list, jump to the Request reference.

Once a payment has settled, you can no longer void it; issue a Refund instead.

Common use cases

  • Cancel an authorization when an order can't be fulfilled
  • Reverse an approved payment your risk checks reject after the fact
  • Cancel the duplicate when a customer is authorized twice
  • Cancel a same-day sale before the batch closes

Make your first void

Voiding is a single DELETE against the payment's id. First confirm the payment hasn't settled (its status is Approved, not Settled), then void it.

DELETE /checkout/v3/payment/4100000000869748

The void returns a 204 No Content with an empty body. Confirm the result by retrieving the payment: its status is now Voided.

GET /checkout/v3/payment/4100000000869748

{
  "id": 4100000000869748,
  "status": "Voided",
  "amount": "33.33",
  "type": "Sale",
  "reference": "600607253032"
}

The endpoint is documented at DELETE /checkout/v3/payment/{id}. To void a payment that has already settled, pass force=true (this issues a return).


When to void

Every void is the same API call; the business context only decides when you void. Void whenever a payment is approved but not yet settled and you need to cancel it.

SituationActionWhy void instead of refund
Authorization placed, item out of stockVoid the authorizationNo funds moved; nothing appears on the statement
Authorization approved, risk checks reject the orderVoid the authorizationReleases the hold before any chargeback risk
Customer authorized twice (double-click)Void the duplicatePrevents a double charge; use idempotency to prevent recurrence
Customer cancels a sale the same day, before batch closeVoid the saleAvoids interchange on both a charge and a later refund
Unused hold after a partial captureVoid the authorizationReleases the remaining hold immediately
📘

Check settlement state first. If the payment's status is already Settled, a plain void fails because the funds have left the issuer. Issue a Refund instead, or void with force=true to issue a return.


Track the payment

Confirm a void by retrieving the payment with GET /checkout/v3/payment/{id}; the status changes to Voided. The full status model and settlement flow are in Payment Lifecycle.


Request reference

ParameterRequiredDescription
id (path)The id of the payment to void, from the original authorization or sale response.
force (query)OptionalIf true, void even if the payment has settled (issues a return). Default false.

Validation

PCE checks the void synchronously; if it fails, nothing changes on the payment. Submission checks:

  • The id resolves to a real payment for your merchant account.
  • The payment has not settled (unless you pass force=true).

A void attempted on an already-settled payment (without force) returns an error. See Handling Declines and Payment Response Codes.


Statuses

A voided payment moves to Voided, and no funds are transferred. Voids apply only before settlement; a Settled payment must be refunded. Accept Payments uses the shared Payment Lifecycle for every status.


Go live

The shared pre-production checklist (production credentials, webhooks, idempotency, sandbox testing) is in Getting Started. Specific to voids, also confirm:

  • Voiding an unsettled authorization and an unsettled sale both return 204 and show Voided on a follow-up GET.
  • Voiding a settled payment without force returns an error, and your code falls back to the refund flow.
  • Your integration checks the payment status before attempting a void.

Best practices

General practices (idempotency, webhooks, sandbox testing) are in Getting Started. Specific to voids:

PracticeDescription
Check settlement state firstRetrieve the payment and confirm status is Approved, not Settled, before voiding.
Void, don't refund, pre-settlementA void avoids interchange fees and leaves no charge on the statement; a refund posts a charge and a credit.
Void promptlyCancel as soon as you decide, so the pending hold doesn't linger on the cardholder's statement.
Prevent duplicates at sourceUse a unique replayId on the original payment so retries don't create duplicate authorizations to clean up.
Log the void reasonStore why you voided (out-of-stock, fraud, duplicate, customer request) with the id for reconciliation.

Next steps

See also



Did this page help you?
.readme-logo { display: none !important; }