Create a Refund

Issues a refund against a checkout session. By default the refund applies to the single refundable transaction on the session; when a session has more than one refundable transaction, use `originalTransactionId` to specify which one. Refunds may be full or partial. The `refundValue` object carries the amount in minor units, with an ISO 4217 currency that must match the original transaction. CrissCross executes refunds in one of two ways depending on what the originating provider supports: a **provider refund** through the provider's native refund API, or a **payout refund** that returns the funds via a payout to the original destination. The latter is used when the originating provider does not expose a refund API — common for mobile money, and applicable to bank methods when full account details are held. Both paths are tracked against the original transaction so the refundable balance is enforced uniformly. See the [Refunds guide](/full-and-partial-refunds) for details. Refunds are processed asynchronously. The response returns `status: PENDING`; track completion by polling [Retrieve a Refund](#operation/getRefund) with the returned `transactionId`, or by subscribing to the `refund.succeeded` and `refund.failed` webhook events.

Request

This endpoint expects an object.
sessionIdstringRequiredformat: "uuid"
Identifier of the checkout session the refund is being issued against. UUID v7.
refundValueobjectRequired
originalTransactionIdstringOptionalformat: "uuid"

Optional. Identifier of the specific original transaction within the session to refund. Required only when the session has more than one refundable transaction; otherwise the single refundable transaction on the session is used. UUID v7.

reasonstringOptional

Optional free-form reason for the refund, recorded for reporting and dispute defense.

Response

Refund accepted for asynchronous processing. The returned record will have status: PENDING.

statusenum

Current status of the refund. Newly created refunds always start in PENDING and transition to a terminal state asynchronously. Retrieve the refund or listen for the refund.succeeded / refund.failed webhook events to observe the transition.

Allowed values:
transactionIdstringformat: "uuid"
Unique identifier of the refund. UUID v7.
messagestring

Human-readable status message.

sessionIdstringformat: "uuid"
Identifier of the checkout session the refund was issued against. UUID v7.
originalTransactionIdstringformat: "uuid"

Identifier of the original transaction that was refunded. Returned even when the request omitted originalTransactionId, so the caller knows which transaction on the session was selected. UUID v7.

refundValueobject

Errors

400
Bad Request Error
401
Unauthorized Error
404
Not Found Error
409
Conflict Error
422
Unprocessable Entity Error