Skip to content
ripper docs Open the console

Integration parameters

An integration is one named way you take payments. default and hosted_page exist from sign-up; the console (or the update_checkout_integration tool in chat) sets:

field values runtime behaviour
allowed_origins exact origins a session created from any other origin answers origin_not_allowed
theme light / dark / auto auto follows prefers-color-scheme
mode auto / test test forces the simulated form
amount_trust_policy allow_unverified / require_verified unverified amounts render the pre-pay disclosure and a "Reserve" button, or are refused
hold_duration_days 1–5, default 5 the authorised copy: "{merchant} will confirm within N days"
signals_capture_enabled boolean, default on behavioural signals ride the confirm body; off = no listeners, no storage
confirmation_behaviour show_confirmation / resolve_only resolve_only resolves collect() without the rendered state (the hosted page ignores it)
confirmation_url an absolute https:// URL, or unset after a paid or authorised outcome the shopper is taken there; a session may override it; unset leaves them on ripper's confirmation
defaults amount, currency, items used when the page passes none
presentation brand, layout, copy, extensions, custom_css see Layout

Selecting an integration for a call:

const result = await ripper.collect({ amount: 4200, currency: 'GBP', integration: 'default' });

Your confirmation page #

Set confirmation_url and the checkout takes the shopper to your own page once the payment is paid or authorised. Two query parameters are added, and only these two:

https://shop.example/thanks?payment_id=pay_8f3k20a4b1c2d3e4f5a6b7c8&order_reference=ORD-1042

order_reference is absent when the session has none. Nothing else travels in the URL — no email, no card detail, no session secret. Look the order up on your server from the payment ID or your own reference; never trust the query alone as proof of payment.

The URL must be absolute https://, at most 512 characters, with no credentials, no #fragment, and neither payment_id nor order_reference already in its query — the checkout appends those two and will not overwrite yours. Saving anything else is refused; if such a URL ever reached the checkout it would be ignored and the shopper would stay on ripper's confirmation.

A session your server creates can carry its own confirmation URL, and it wins over the integration's — useful when one integration serves several shops or one checkout needs a different landing page.

Ours is the fallback. A browser gives no signal that a navigation succeeded, so if the page has not left within about a second the checkout keeps the shopper where they are and shows a Continue to {shop} link, a ten-second countdown and a Stay on this page control that stops it for good. A slow confirmation page can therefore show that panel for a moment before it lands — that is deliberate, and better than a shopper left on a page that has stopped talking to them.

Two cases never redirect: confirmation_behaviour: resolve_only (your page owns the outcome), and a shopper who comes back to the checkout after paying — pressing Back must not throw them forwards again.