DocsCheckout sessions

Checkout sessions

Checkout sessions are the primary way to accept payments through Skiro. Create a session server-side, then redirect your customer to the returned URL.

Create a session

POST /v1/checkout

Parameters

FieldTypeDescription
amountnumberRequired. Amount to charge, in the smallest unit of the currency. For USD, this is dollars (e.g. 49.99).
currencystringRequired. ISO 4217 currency code. Supported: USD, EUR, GBP, CAD, AUD.
payout_currencystringRequired. The crypto you want to receive. Supported: USDT, USDC, BTC, ETH.
customer_emailstringOptional. Pre-fills the email field on checkout.
metadataobjectOptional. Up to 50 key/value pairs for your records. Returned in webhook payloads.
redirect_urlstringOptional. Where to send the customer after a successful payment.
webhook_urlstringOptional. Override your default webhook URL for this session.

Example request

curl https://api.skiro.io/v1/checkout \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 49.99,
    "currency": "USD",
    "payout_currency": "USDT",
    "customer_email": "buyer@example.com",
    "metadata": {
      "order_id": "ORD-2847",
      "product": "premium-license"
    },
    "redirect_url": "https://yoursite.com/order/success",
    "webhook_url": "https://yoursite.com/api/webhooks/skiro"
  }'

Example response

{
  "id": "cs_8f2a91c...",
  "url": "https://pay.skiro.io/cs_8f2a91c...",
  "amount": 49.99,
  "currency": "USD",
  "payout_currency": "USDT",
  "status": "pending",
  "metadata": {
    "order_id": "ORD-2847",
    "product": "premium-license"
  },
  "redirect_url": "https://yoursite.com/order/success",
  "webhook_url": "https://yoursite.com/api/webhooks/skiro",
  "expires_at": "2026-05-29T15:02:00Z",
  "created_at": "2026-05-29T14:32:00Z"
}
Sessions expire after 1 hour
If a customer doesn't complete the checkout in time, the session moves to expired state and can't be used. Just create a new one.

Retrieve a session

GET /v1/checkout/{id}

Useful for confirming the session status server-side, especially if you don't want to rely solely on webhooks.

const session = await skiro.checkout.retrieve('cs_8f2a91c...')
console.log(session.status) // 'pending' | 'completed' | 'failed' | 'expired'

Expire a session

POST /v1/checkout/{id}/expire

Manually expires a session before its 1-hour timeout. Useful if the customer abandons their cart and you want to free up the order ID.

await skiro.checkout.expire('cs_8f2a91c...')

The session object

FieldTypeDescription
idstringUnique identifier (cs_...).
urlstringHosted checkout URL. Send the customer here.
amountnumberThe amount you charged.
currencystringThe fiat currency for the charge.
payout_currencystringThe crypto that will be sent to your wallet.
statusstringOne of pending, completed, failed, expired.
metadataobjectThe key/value pairs you attached.
expires_atstringISO 8601 timestamp. After this, the session can't be paid.
created_atstringISO 8601 timestamp.
Last updated: May 30, 2026