Skip to main content

Quote expiry and partial settlement

Start with scenario setup. Confirm less than the quote's full quantity, for example 10 against a quote for 25. Ensure no deposit remains pending. The request is PART_PAID and the payment is RECEIVED.

1. Expire the quote

Send POST /v1/collections/simulate-expiry:

{
"paymentRequestReference": "ORDER-10045",
"target": "CRYPTO_QUOTE",
"quotePaymentId": "49122879-6ca4-40d3-a20d-e011501cd185"
}

Both quoteExpiresAt and displayExpiresAt are moved into the past. Refresh checkout to see how it handles the expired quote. The payment request's expiry is unchanged. This call does not create settlement, credit the wallet or queue payment.completed.

2. Settle the received funds

Use the deposit's returned paymentId with completion. This simulates the provider settling the received portion, then credits the wallet. Expect COMPLETE, a payment.completed event and the request to remain PART_PAID.

Completion checks the amount received for this specific quote. If that amount is less than the quote requires, you must expire the quote first. This also applies if payments for another quote have already covered the remaining request balance. A pending deposit must be confirmed before settlement; expiry alone does not make pending funds available.

3. Continue the remaining balance

Return to checkout. If the payment request still allows payments, follow the steps to get a new quote for the remaining balance. Save the new quote response for your next simulation. Expiring a quote does not extend or reopen the payment request.

For an unfunded quote, omit the deposit step and expire the quote directly. Check that checkout shows the expired quote and offers the expected retry option; there are no received funds to complete. A new deposit on a closed quote is rejected. An already detected deposit can still be confirmed using its original ID and amount. Repeating the expiry call does not extend the quote's expiry time.