Slash Payment Processing is in beta and not enabled for all accounts. Contact
support@joinslash.com to get access.
url, the expiry window, and page configuration, while the payment
intent inside it tracks the money.
Create one session per buyer checkout with
POST /checkout-session and mount
its url with the @slashfi/checkout-js
SDK. Treat the url as single-use — mint a fresh session each time a
buyer reaches your checkout rather than reusing one across buyers.
Statuses
A session’s status is derived from its payment intent: it is
complete
exactly when the intent is succeeded. A payment that is in flight when
the expiry passes still settles — an open session with a processing
intent stays open until the payment resolves.
Idempotency and expiry
POST /checkout-sessionrequires anX-Idempotency-Keyheader, unique per session you intend to create. Retrying with the same key returns the existing session; reusing a key with different parameters is rejected with a400.expiresAtdefaults to 24 hours after creation and must be between 30 minutes and 7 days out.
Metadata
customMetadata is echoed back on reads and on the
checkout_session.completed webhook — use it to carry your own order
reference (for example { "orderId": "ord_123" }) so fulfillment can
correlate the webhook to the right order without extra lookups.
Payment methods
Card payments are always enabled. Apple Pay and Google Pay are enabled by default and can be disabled per session from your backend withconfig.paymentMethods, for example
{ "paymentMethods": { "applePay": false } } inside config.
Updating a session
While a session isopen you can change its amount, expiry, or page
configuration with
PATCH /checkout-session/{id}.
Send only the fields you want to change.
The session keeps its id and hosted url, so a buyer who already has
the checkout open picks up the new amount in place.
Updates only apply to open sessions. Once the buyer’s payment is in
flight the update is rejected with 409, and complete or expired
sessions cannot be updated at all.
Fulfillment
Fulfill from thecheckout_session.completed webhook, or poll
GET /checkout-session/{id}
and check for status: "complete". The SDK’s onComplete callback is a
browser signal for updating the UI — never grant goods or services on it
alone.