Skip to content
ripper docs Open the console

Holds

When ripper cannot verify the amount a page asked for, it does not charge: it reserves the amount and asks you to confirm. The shopper reads "Authorised, pending merchant confirmation — we've reserved £42.00 on your card; Acme Coffee will confirm your order within 5 days and only then will the money leave your account." collect() resolves status: 'authorised'.

const result = await ripper.collect({ amount: 4200, currency: 'GBP' });
if (result.status === 'authorised') {
  // confirm or decline the hold in the console or in chat, before the deadline
}

The merchant reads (GET /v1/payments/{id}, the webhook body, the session read) carry hold:

field values
status pending_review, escalated, captured, voided
reason no_price_list, mismatch
detail amount_mismatch, unknown_item, currency_mismatch, overflow, or null
deadline ISO 8601 — an undecided hold is voided automatically after it
decided_by / decided_at policy, agent, merchant, or sweep when the deadline passed; null until decided
operation_refusal { kind, sequence, reason, decline_code, at } or null — a capture or void the gateway refused; merchant-facing, the shopper render ignores it

Webhooks: payment.captured (an immediate sale AND a later capture of a held payment), payment.held, payment.voided, payment.declined, payment.failed.