Bearer token authentication. Pass your API key as Authorization: Bearer sk_.... See Authentication for keys, scopes, and sandbox vs production.
Body
application/json
Option 1
Option 2
Checkout with a cart of catalog products (each item may override its price via pricing).
product_cart
object[]
required
Catalog products to include in this checkout session. Mutually exclusive with pricing.
Required array length: 1 - 20 elements
Show child attributes
billing_currency
string | null
Optional checkout billing currency. If omitted, defaults to product pricing currency.
Example:
"USD"
payment_method_types
string[] | null
Restricts the checkout to specific payment methods. Values are exact payment-method corridors, not payment types: USD_CARD and NGN_CARD are separate corridors, as is each of the nine mobile money corridors. Valid values: USD_CARD (US card, USD), NGN_CARD (Nigerian card, NGN), NGN_BANK_TRANSFER (Nigerian bank transfer, NGN), MOMO_GHS (Ghana mobile money), MOMO_KES (Kenya mobile money), MOMO_TZS (Tanzania mobile money), MOMO_UGX (Uganda mobile money), MOMO_XAF (Central Africa CFA mobile money), MOMO_XOF (West Africa CFA mobile money), MOMO_RWF (Rwanda mobile money), MOMO_MWK (Malawi mobile money), MOMO_ZMW (Zambia mobile money), and CRYPTO (all supported crypto assets). A corridor you leave out is not offered. Restricting only narrows what the customer sees: it never adds a corridor your account is not already enabled for. If the restriction leaves no payable method, the request is rejected.
Example:
["USD_CARD", "NGN_BANK_TRANSFER"]
cancel_url
string<uri> | null
Where to send the customer if they cancel or abandon the checkout. Returned on the checkout so the hosted page can route back to it.
Example:
"https://shop.example.com/cart"
return_url
string<uri> | null
deprecated
Deprecated alias for success_url, kept for backward compatibility. If both are set, success_url wins.
Example:
"https://shop.example.com/thanks"
success_url
string
Where to redirect the customer after a successful payment. Bachs appends ?checkout_id=<id>. This is the primary success-redirect field.
Example:
"https://shop.example.com/success"
customer
object
Customer for the checkout. Optional for a standard one-time hosted checkout, which can collect buyer details as customer_details. Required for recurring checkout. Supply customer_id for an existing customer, or email for a new customer; name is optional. Send customer_creation: always to create a customer record from details collected on the hosted page.
Option 1
Option 2
Show child attributes
metadata
object | null
Optional metadata (max 20 keys, max 10KB total).
pricing
object | null
Raw pricing for a product-less (pure) checkout. Mutually exclusive with product_cart.
Show child attributes
platform_fee
string | null
The platform's cut of this sale, in the base currency of the sale, taken from the merchant's proceeds rather than from Bachs's processing fee. On a destination charge, this is one of two ways to state the split: the account receives the gross minus this amount. Mutually exclusive with transfer_data.amount. A destination charge needs one of the two; a direct charge can set this alone to move part of its own charge up to the platform. See Platform fees.
Example:
"20000.00"
transfer_data
object | null
Names the account this checkout pays out to. Its presence, on its own, is what makes this a destination charge belonging to your platform rather than the account. A destination charge needs a split term: either platform_fee on the request root, or transfer_data.amount here. Omit transfer_data entirely, and act as the account with X-Account-Id instead, for a direct charge. See Destination charges.
Show child attributes
reference
string | null
Your own reference for this session, unique per account. Omit it and the session has none; use the session's id to track it.
Maximum string length: 128
Example:
"order_9876"
expires_in_minutes
integer
default:60
Minutes until the checkout session expires. Defaults to 60. After expiry the checkout URL is invalid.
Required range: 1 <= x <= 1440
Example:
60
customer_creation
enum<string>
default:if_required
Whether a buyer who identifies themselves on the hosted page also becomes a customer record. Applies only when you omit customer. if_required (default) keeps them out of your directory: customer stays null, no customer.created or customer.updated webhook fires, and their email and name reach you on customer_details instead. Their purchases still group together in your dashboard. always adds them to your directory, matched by email to a customer you already hold where one exists, and returns it on customer. That match is on the email alone, and an email typed on the checkout page is not verified, so a buyer who knows one of your customers' addresses has their purchase recorded against that customer. Ignored for a subscription or setup checkout, which always create a customer. See Whether a guest becomes a customer.
Available options:
always,
if_required
Example:
"if_required"
save_payment_method
boolean
default:false
Save the customer's card so you can charge it later without them present. Send it with a price and the customer pays now and the card is kept. Send it with no pricing and the checkout collects a card and charges nothing, which needs an existing customer (customer.customer_id) for the card to belong to. Only cards can be charged again, so a checkout that offers none is refused with CHECKOUT_CANNOT_SAVE_PAYMENT_METHOD.
Response
Success - Checkout session created successfully
Response containing checkout session details and hosted checkout URL.
checkout_id
string
Checkout identifier. Treat it as an opaque string.
Example:
"chk_1M2N3o4P5q6R7s8T"
checkout_url
string<uri>
Hosted checkout URL where your customer can complete payment.
Example:
"https://checkout.bachs.io/c/Mz9wDp3sVn7QaTf"
status
enum<string>
Current checkout status. open: awaiting customer payment, where every new session starts. completed: payment succeeded, a terminal state. expired: the session window elapsed before payment, a terminal state. cancelled: cancelled before completion, a terminal state.
Available options:
open,
completed,
expired,
cancelled
Example:
"open"
expires_at
string<date-time>
ISO 8601 timestamp indicating when the checkout will expire. After this time, customers cannot complete payment through this checkout.
Example:
"2026-01-24T15:30:00.000Z"
created_at
string<date-time>
ISO 8601 timestamp indicating when the checkout was created.
Example:
"2026-01-24T14:30:00.000Z"
reference
string | null
Your own reference for this checkout, echoed back unchanged. null when you did not supply one.
Example:
"order_9876"
platform_fee
string | null
The platform's cut of this sale, echoed back from the request, in the base currency of the sale. The key is always present; it reads null, not "0.00", on a checkout that carries no fee, and on a checkout that split the sale with transfer_data.amount instead. See Platform fees.
Example:
"20000.00"
destination_amount
string | null
The seller's contracted share of this sale, echoed back from transfer_data.amount, in the base currency of the sale. Null on a checkout that carries no split, and on one that split the sale with platform_fee instead.
Example:
"80000.00"
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Bachs","description":"Payments and billing infrastructure for internet businesses. Accept payments globally through hosted or overlay checkout, run subscriptions and free trials, and settle in your currency. REST API with a full sandbox.","colors":{"primary":"#5266eb","light":"#8fb6fb","dark":"#5266eb"},"logo":{"light":"https://mintcdn.com/bachs/8QOZkInmSDP5Ad7N/logo.png?fit=max\u0026auto=format\u0026n=8QOZkInmSDP5Ad7N\u0026q=85\u0026s=9d4369b7a7ceeb9d196f647822f4ea01","dark":"https://mintcdn.com/bachs/8QOZkInmSDP5Ad7N/logo-dark.png?fit=max\u0026auto=format\u0026n=8QOZkInmSDP5Ad7N\u0026q=85\u0026s=a6ad42659c02e7126806019cafab7bae"},"favicon":"https://mintcdn.com/bachs/OmvT4wSHNg_ay0Sy/favicon.png?fit=max\u0026auto=format\u0026n=OmvT4wSHNg_ay0Sy\u0026q=85\u0026s=fa1681d092d772a654316ae4012045fb","api":{"openapi":"docs/openapi/openapi.json","playground":{"display":"interactive"},"examples":{"defaults":"all","languages":["bash","javascript","python","go"],"prefill":true,"autogenerate":true}},"appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#fbfcfd","dark":"#1e1e2a"}},"navbar":{"links":[{"href":"https://cal.com/bolu-dada/bachs","label":"Book a Demo"}],"primary":{"type":"button","label":"Get Started","href":"https://app.bachs.io/signup"}},"footer":{"socials":{"x":"https://x.com/bachs_hq","website":"https://bachs.io"},"links":[{"header":"Bachs","items":[{"label":"Dashboard","href":"https://app.bachs.io"},{"label":"llms.txt","href":"https://docs.bachs.io/llms.txt"},{"label":"Support","href":"mailto:support@bachs.io"}]}]},"seo":{"metatags":{"google-site-verification":"xCFt-c27YambrzzvRTU4CiqeElNFKGVJZw_8o9IgpdA"}},"fonts":{"heading":{"family":"Geist","weight":600},"body":{"family":"Geist"}},"styling":{"codeblocks":"dark","latex":true},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"variables":{"api-url":"https://api.bachs.io"},"markdown":{"instructions":["Money is always a decimal string at the currency's precision (for example \"29.00\"), paired with an ISO 4217 currency field. Never use minor units.","Build against the sandbox first: base URL https://sandbox-api.bachs.io with sk_sandbox_ keys. Production is https://api.bachs.io with sk_live_ keys; going live is a key swap.","Treat webhooks (for example collection.succeeded) as the source of truth for fulfilment, never client-side events or redirects.","Subscriptions are created by completing a checkout for a recurring product. There is no direct create-subscription endpoint.","IDs carry resource prefixes (cust_, prod_, sub_, chk_, inv_, ref_) and timestamps are ISO 8601 UTC."]},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bachs","hasAudioNarration":false,"actualSubdomain":"bachs","customDomains":["docs.bachs.io"],"gitSource":{"type":"github","owner":"bachsdev","repo":"bachs-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af7a15776407ecc270c8b4c","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API reference","count":98},{"language":"default","tag":"Developers","count":60},{"language":"default","tag":"Webhooks","count":46},{"language":"default","tag":"Connect (Sub accounts)","count":37},{"language":"default","tag":"Get started","count":31},{"language":"default","tag":"Events","count":29},{"language":"default","tag":"Payments","count":26},{"language":"default","tag":"Payouts","count":16},{"language":"default","tag":"Subscriptions","count":14},{"language":"default","tag":"Endpoint API","count":14}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"@import url(\"https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600\u0026display=swap\");@font-face{font-family:\"Geist Pixel\";src:url(\"/fonts/GeistPixel-Square.woff2\") format(\"woff2\");font-weight:400;font-display:swap}code,pre,kbd,samp,.font-mono{font-family:\"Geist Mono\", ui-monospace, Consolas, monospace}.pixel{font-family:\"Geist Pixel\", \"Geist Mono\", monospace;font-weight:400;letter-spacing:0.01em}#navbar img{height:24px;width:auto}.section-cover{border-radius:1rem;width:100%;max-width:600px;height:auto;display:block}.home-hero{background:#5266eb url(\"/images/home/pixels.svg\") center / cover no-repeat;color:#fff;border-radius:1.5rem}.home-hero h1,.home-hero p{color:#fff}.home-btn{display:inline-block;background:#1e1e2a;color:#fff!important;font-weight:600;border-radius:0.6rem;padding:0.8rem 1.3rem;text-decoration:none!important}.home-btn:hover{background:#0b1a6e}.home-btn-ghost{background:rgba(255, 255, 255, 0.14);border:1px solid rgba(255, 255, 255, 0.4)}.home-btn-ghost:hover{background:rgba(255, 255, 255, 0.24)}body:has(.home) #header{display:none}.home{max-width:1160px;margin:0 auto;padding:1.5rem 1.5rem 5rem}.home>h2{margin:3.5rem 0 1.25rem;font-size:1.75rem;font-weight:600;letter-spacing:-0.01em;color:#1e1e2a}.dark .home>h2{color:#f4f5f9}.home{overflow-x:clip}.home-hero{display:grid;grid-template-columns:1fr 1fr;gap:2rem;align-items:center;padding:3.5rem 3rem;overflow:hidden}.home-eyebrow{font-family:\"Geist Mono\", monospace;font-size:0.8rem;letter-spacing:0.12em;text-transform:uppercase;opacity:0.8;margin:0 0 1rem}.home-hero h1{font-size:3rem;line-height:1.08;font-weight:600;letter-spacing:-0.02em;margin:0 0 1.25rem}.home-hero h1 .pixel{font-size:0.92em}.home-copy>p:not(.home-eyebrow){font-size:1.125rem;line-height:1.6;opacity:0.92;margin:0 0 1.75rem;max-width:34rem}.home-actions{display:flex;gap:0.75rem;flex-wrap:wrap}.home-collage{position:relative;height:400px}.shot{position:absolute;border-radius:12px;box-shadow:0 24px 60px rgba(11, 26, 110, 0.45);background:#fff center / cover no-repeat}.shot-checkout{right:0;bottom:0;width:80%;aspect-ratio:1200 / 788;background-image:url(\"/images/home/hero-checkout.webp\")}.shot-event{right:-3%;top:0;width:34%;aspect-ratio:620 / 941;opacity:0.78;background-image:url(\"/images/home/hero-event.webp\")}.shot-balance{left:0;top:5%;width:44%;aspect-ratio:900 / 725;opacity:0.78;background-image:url(\"/images/home/hero-balance.webp\")}@media (min-width: 1280px){body:not(:has(.home)) #content-container{max-width:1080px}}.shot-row{display:grid;grid-template-columns:1fr 1.5fr;gap:2.5rem;align-items:center}.shot-row>div>:first-child{margin-top:0}.mdx-content img[src*=\"images/product/\"]{max-width:820px;margin-left:auto;margin-right:auto}.shot-row img{margin:0;width:100%;height:auto!important;aspect-ratio:auto!important}.shot-row [data-as=\"p\"],.build [data-as=\"p\"]{display:block;margin:0 0 1rem}.card.rounded-2xl{border-radius:0.6rem}.card .px-6.py-5{padding:1rem 1.25rem}.card h2.not-prose{color:#5266eb;font-weight:500;font-size:0.95rem}.dark .card h2.not-prose{color:#8f9cf7}.card .prose{font-size:0.875rem;line-height:1.45}@media (max-width: 760px){.shot-row{grid-template-columns:minmax(0, 1fr)}}.home-tasks,.home-products{display:grid;grid-template-columns:repeat(4, 1fr);gap:2rem}.home-tasks{margin-top:3rem}.home-tasks h3,.home-products h3{font-size:0.95rem;font-weight:600;margin:0 0 0.75rem;color:#1e1e2a}.dark .home-tasks h3,.dark .home-products h3{color:#f4f5f9}.home-tasks a{display:block;margin:0 0 0.55rem;color:#5266eb;font-weight:500;text-decoration:none}.dark .home-tasks a{color:#8f9cf7}.home-products a{display:block;margin:0 0 1rem;text-decoration:none}.home-products strong{display:block;font-weight:600;color:#5266eb}.dark .home-products strong{color:#8f9cf7}.home-products span{display:block;font-size:0.9rem;line-height:1.45;color:#62647b}.dark .home-products span{color:#b4b8cc}.home-tasks a:hover,.home-products a:hover strong{text-decoration:underline}.build{display:grid;grid-template-columns:1fr 1.5fr;gap:2rem;align-items:start;border:1px solid rgba(112, 115, 147, 0.2);border-radius:1.25rem;padding:1.75rem;background:#f4f5f9}.dark .build{background:rgba(255, 255, 255, 0.03);border-color:rgba(255, 255, 255, 0.1)}.build h3{margin:0 0 0.75rem;font-size:1.25rem}.build>div:first-child p{color:#62647b}.dark .build>div:first-child p{color:#b4b8cc}.build>div:first-child p a{color:#5266eb;font-weight:600}.build .code-group,.build .code-block{margin:0!important}@media (max-width: 760px){.home-hero,.build{grid-template-columns:1fr}.home-tasks,.home-products{grid-template-columns:1fr 1fr}.home-hero{padding:2rem 1.5rem}.home-hero h1{font-size:2.1rem}.home{padding:0.5rem 1rem 4rem}.home-collage{height:auto}.shot-balance,.shot-event{display:none}.shot-checkout{position:relative;width:100%}}.project-modal-overlay{display:none}.project-modal-overlay:target{display:flex;position:fixed;top:var(--scroll-mt, 6rem);right:0;bottom:0;left:0;align-items:center;justify-content:center;z-index:999;padding:24px;pointer-events:none}.project-modal-box{width:100%;max-width:560px;max-height:100%;overflow-y:auto;border-radius:1rem;padding:2rem 1.5rem 1.5rem;position:relative;box-shadow:0 20px 50px rgba(0, 0, 0, 0.25);pointer-events:auto;scrollbar-width:thin;scrollbar-color:rgba(0, 0, 0, 0.25) transparent}.dark .project-modal-box{box-shadow:0 20px 50px rgba(0, 0, 0, 0.5);scrollbar-color:rgba(255, 255, 255, 0.25) transparent}.project-modal-box::-webkit-scrollbar{width:8px}.project-modal-box::-webkit-scrollbar-track{background:transparent}.project-modal-box::-webkit-scrollbar-thumb{background:rgba(0, 0, 0, 0.2);border-radius:9999px}.dark .project-modal-box::-webkit-scrollbar-thumb{background:rgba(255, 255, 255, 0.2)}.project-modal-close{position:absolute;top:0.75rem;right:0.75rem;width:1.75rem;height:1.75rem;display:flex;align-items:center;justify-content:center;border-radius:9999px;font-size:1.25rem;line-height:1;text-decoration:none}.project-modal-close:hover{background:rgba(128, 128, 128, 0.15)}.project-modal-box .prose{--tw-prose-body: inherit}.project-modal-box .prose>*:first-child{margin-top:0}.project-modal-box .prose>*:last-child{margin-bottom:0}"},{"filePath":"figures.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n.pshot{--ink: #1a1a27;--body: #2f2f42;--cap: #72728c;--line: rgba(167, 167, 184, .32);--fill: #f0f0f3;--tint: #f3f3fb;--accent: #4c5fd5;--green: #188554;position:relative;padding:4px 0 28px;font:400 13.5px/1.45 Inter, system-ui, sans-serif;color:var(--body)}.pshot *{box-sizing:border-box;margin:0}.pshot b{font-weight:600;color:var(--ink)}.pshot .card{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}.pshot .float{position:absolute;z-index:1;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 22px 44px -16px rgba(15, 18, 40, .38), 0 2px 6px rgba(15, 18, 40, .08)}.pshot .pad{padding:18px 20px}.pshot .h{font-size:17px;font-weight:600;color:var(--ink);letter-spacing:-.01em}.pshot .cap{color:var(--cap);font-size:12.5px}.pshot .row{display:flex;align-items:center;justify-content:space-between;gap:12px}.pshot .btn{display:inline-block;padding:8px 18px;border-radius:999px;background:var(--accent);color:#fff;font-weight:500}.pshot .btn.off{background:#b9c1f6}.pshot .chip{display:inline-block;padding:2px 9px;border-radius:999px;background:var(--fill);font-size:12px;font-weight:500}.pshot .tag{display:inline-block;padding:1px 7px;border-radius:5px;background:var(--accent);color:#fff;font-size:10.5px;font-weight:600;letter-spacing:.05em}.pshot .win-bar{display:flex;align-items:center;gap:6px;padding:9px 12px;border-bottom:1px solid var(--line);background:#fafafc}.pshot .win-bar i{width:8px;height:8px;border-radius:50%;background:#dcdde6}.pshot .win-url{margin:0 auto;padding:2px 40px;border-radius:6px;background:var(--fill);font-size:11px;color:var(--cap)}.pshot .split2{display:grid;grid-template-columns:1fr 1.15fr}.pshot .summary{background:var(--tint);padding:22px 20px 26px}.pshot .price{font-size:26px;font-weight:600;color:var(--ink);letter-spacing:-.02em;margin-top:2px}.pshot .picker{display:inline-flex;align-items:center;gap:6px;margin-top:14px;padding:6px 10px;border:1px solid var(--line);border-radius:9px;background:#fff;font-weight:500;color:var(--ink)}.pshot .totals{margin-top:18px;border-top:1px solid var(--line)}.pshot .totals .row{padding:9px 0;border-bottom:1px solid var(--line)}.pshot .methods{padding:18px 18px 20px}.pshot .expires{display:table;margin:0 0 12px auto;padding:3px 10px;border-radius:999px;background:#fff4e5;color:#a8640b;font-size:12px;font-weight:500}.pshot .mlist{border:1px solid var(--line);border-radius:12px;overflow:hidden}.pshot .m{display:flex;align-items:center;gap:10px;padding:11px 12px;border-top:1px solid var(--line);color:var(--ink)}.pshot .m:first-child{border-top:0}.pshot .m.on{flex-wrap:wrap;box-shadow:inset 0 0 0 1.5px var(--accent);border-radius:12px}.pshot .radio{flex:none;width:15px;height:15px;border-radius:50%;border:1.5px solid #b9b9c8}.pshot .on .radio{border:5px solid var(--accent)}.pshot .m .note{flex-basis:100%;padding:9px 11px;border:1px solid var(--line);border-radius:9px;color:var(--cap);font-size:12.5px}.pshot .m .btn{flex-basis:100%;text-align:center}.pshot .secure{margin-top:12px;text-align:center;color:var(--cap);font-size:12px}.pshot .menu{padding:5px}.pshot .menu div{display:flex;align-items:center;gap:9px;padding:6px 10px;border-radius:7px;color:var(--ink);font-weight:500}.pshot .menu .sel{background:var(--fill)}.pshot .flag{width:18px;height:12px;border-radius:2px;flex:none}.pshot .tabs{display:flex;gap:20px;margin-top:14px;border-bottom:1px solid var(--line);font-weight:500;color:#3d3f52}.pshot .tabs span{padding-bottom:9px}.pshot .tabs .sel{color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent)}.pshot .list{margin-top:14px;border:1px solid var(--line);border-radius:10px;overflow:hidden}.pshot .item{display:flex;align-items:center;gap:12px;padding:10px 14px;border-top:1px solid var(--line)}.pshot .item:first-child{border-top:0}.pshot .item.done{background:#f7f7fb}.pshot .num{flex:none;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-size:12px;border:1px solid #dcdde8;color:var(--cap);background:#fff}.pshot .done .num{border-color:#8f9cf7;background:#eef0fe;color:var(--accent)}.pshot .item .grow{flex:1}.pshot .item small{display:block;color:var(--cap);font-size:12px}.pshot .ok{color:var(--green);font-weight:500;font-size:12.5px}.pshot .bar{height:4px;border-radius:4px;background:#e6e7ef;margin-top:8px}.pshot .bar i{display:block;height:100%;border-radius:4px;background:var(--accent)}.pshot .field{margin-top:12px}.pshot .input{margin-top:5px;padding:8px 11px;border:1px solid var(--line);border-radius:8px;color:var(--ink)}.pshot .group{margin-top:10px;font-size:12px;font-weight:600;color:var(--ink)}.pshot .check{display:flex;align-items:center;gap:8px;margin-top:6px}.pshot .box{flex:none;width:15px;height:15px;border-radius:4px;border:1.5px solid #c3c6dd}.pshot .box.on{border:0;background:var(--accent) url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8.5l2.5 2.5L12 5.5' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") center / 13px no-repeat}.pshot .kv .row{padding:9px 0;border-top:1px solid var(--line)}.pshot .pills{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.pshot code{font:12px \"Geist Mono\", ui-monospace, monospace;color:var(--ink)}@media (max-width: 760px){.pshot{padding-bottom:8px!important}.pshot .card,.pshot .term,.pshot .float{width:100%!important}.pshot .float{position:static;margin-top:12px;box-shadow:none}.pshot .spacer{display:none}}[role=\"tabpanel\"]:has(.pshot){overflow:visible}.pshot .opts{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.pshot .opt{padding:6px 12px;border:1px solid var(--line);border-radius:9px}.pshot .opt.sel{border-color:transparent;box-shadow:inset 0 0 0 1.5px var(--accent);color:var(--accent);font-weight:500}.pshot .select{display:flex;justify-content:space-between;margin-top:5px;padding:8px 11px;border:1px solid var(--line);border-radius:6px;color:var(--ink)}.pshot .select::after{content:\"\\2304\";color:var(--cap)}.pshot .toggle{flex:none;width:30px;height:17px;border-radius:999px;background:#d9d9e2;position:relative}.pshot .toggle::after{content:\"\";position:absolute;left:2px;top:2px;width:13px;height:13px;border-radius:50%;background:#fff}.pshot .choice{display:flex;align-items:center;gap:10px;margin-top:8px;padding:10px 12px;border:1px solid var(--line);border-radius:10px}.pshot .choice.on{border-color:transparent;box-shadow:inset 0 0 0 1.5px var(--accent)}.pshot .choice small{display:block;color:var(--cap);font-size:12px}.pshot .center{text-align:center;margin-top:14px}.pshot .item .grow.cap{white-space:nowrap}.pshot .toggle.on{background:var(--accent)}.pshot .toggle.on::after{left:15px}.pshot .toggle.dim{opacity:.45}.pshot table{width:100%;border-collapse:collapse}.pshot th{text-align:left;font-weight:400;color:var(--cap);font-size:12px;padding:7px 10px;border-bottom:1px solid var(--line)}.pshot td{padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}.pshot tr:last-child td{border-bottom:0}.pshot .badge{padding:2px 7px;border-radius:6px;font-size:11.5px;font-weight:500;background:#e8f6ee;color:var(--green)}.pshot .badge.red{background:#fdecec;color:#c8323c}.pshot .filters{display:flex;gap:6px;margin-top:12px}.pshot .filters span{padding:6px 10px;border:1px solid var(--line);border-radius:8px;color:var(--cap);font-size:12.5px}.pshot .grid3{display:grid;grid-template-columns:repeat(3, 1fr);gap:10px;margin-top:12px}.pshot .grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.pshot .mini{border:1px solid var(--line);border-radius:10px;padding:11px 12px}.pshot .mini .t{font-size:12px;font-weight:500;color:var(--ink);text-decoration:underline dotted #b9b9c8;text-underline-offset:3px}.pshot .bars{display:flex;align-items:flex-end;gap:6px;height:74px;margin-top:10px}.pshot .bars i{flex:1;border-radius:4px 4px 0 0;background:#c9cef8}.pshot .bars i:last-child{background:var(--accent)}.pshot .dot{display:inline-block;width:9px;height:6px;border-radius:3px;margin-right:6px}.pshot .dim-page{background:#e9eaf0}.pshot .sandbox{padding:7px 14px;background:#fff7e0;color:#8a5a00;font-size:11.5px;text-align:center}.pshot .drag{color:#b4b6c6;letter-spacing:-2px;margin-right:4px}.pshot .x{margin-left:auto;color:var(--cap)}.pshot .plus{margin-left:auto;color:var(--accent);font-size:16px}.pshot .badge,.pshot code{white-space:nowrap}.pshot .badge.blue{background:#eef0fe;color:var(--accent)}.pshot .btn.red{background:#b42318}.pshot .label{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--cap)}.pshot .btn,.pshot .nowrap{white-space:nowrap}.pshot .code{margin-top:6px;padding:10px 12px;border-radius:8px;background:var(--fill);font:11.5px/1.55 \"Geist Mono\", ui-monospace, monospace;color:#8a2a2a;white-space:pre;overflow:hidden}.pshot .side{padding:7px 10px;border-radius:7px;color:var(--body)}.pshot .side.on{background:var(--fill);color:var(--ink);font-weight:500}.pshot.narrow{max-width:620px}.pshot .badge.grey{background:var(--fill);color:var(--cap)}.pshot .notice{margin-top:10px;padding:10px 12px;border-radius:9px;background:#fff4e5;color:#8a5a00;font-size:12.5px}.pshot.diag{max-width:820px;margin:0 auto;padding-bottom:8px}.pshot .term{border-radius:12px;background:#16172a;color:#e9eaf5;overflow:hidden}.pshot .tbar{padding:8px 14px;font-size:12px;color:#a9acc6;background:rgba(255, 255, 255, .04)}.pshot .term pre{margin:0;padding:12px 14px;font:11.5px/1.6 \"Geist Mono\", ui-monospace, monospace;white-space:pre;color:#e9eaf5;overflow:hidden}.pshot .badge.amber{background:#fff4e5;color:#a8640b}.pshot .steps4{display:flex;gap:6px;margin-top:12px}.pshot .steps4 i{flex:1;height:3px;border-radius:2px;background:#e6e7ef}.pshot .steps4 i.on{background:var(--accent)}.pshot .fbox{margin-top:12px;padding:9px 12px;border:1px solid var(--line);border-radius:10px}.pshot .tick{width:44px;height:44px;margin:16px auto 8px;border-radius:50%;border:2px solid var(--accent);color:var(--accent);display:grid;place-items:center;font-size:20px}.pshot .tl{margin-top:12px;padding:8px 12px;border-radius:10px;background:var(--fill)}.pshot .tl div{display:flex;align-items:center;gap:10px;padding:5px 0}.pshot .tl .grow{flex:1}.pshot .tl i{width:8px;height:8px;border-radius:50%;background:#cfd0dc}.pshot .tl .d i{background:#376c47}.pshot .tl .c i{background:#fff;box-shadow:0 0 0 2px #376c47}"}],"page":{"pagePath":"api-reference/payments/create-checkout-session","slug":"/api-reference/payments/create-checkout-session","pageMetadata":{"title":"Create a checkout session","description":"Create a product-based checkout session","deprecated":null,"version":null,"sidebarTitle":"Create checkout session","openapi":"/docs/openapi/openapi.json post /v1/checkout-sessions","href":"/api-reference/payments/create-checkout-session","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create a product-based checkout session\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Create a checkout session","description":"Create a product-based checkout session","deprecated":null,"version":null,"sidebarTitle":"Create checkout session","openapi":"/docs/openapi/openapi.json post /v1/checkout-sessions","href":"/api-reference/payments/create-checkout-session","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Checkout Sessions"],"summary":"Create a checkout session","description":"Create a product-based checkout session","operationId":"createCheckoutSession","security":["e47e810d-76a3-4f7f-9aaa-56887c9e6b9b"],"requestBody":"2f3cf83d-29e8-45ab-8e43-159432bcc885","responses":{"201":"33a92569-23b1-489a-b7a1-cf65dc0f46e1","400":"eea45ab6-fe5c-42ff-aa4a-d09f7d18bb51","401":"1536761b-582a-4da3-b989-d66623a24b68","403":"82dc6814-08b2-4a5e-8bf0-096da98f5d05","404":"bee742b7-f373-4c12-8dcd-9912822142c8","429":"f1401f84-c027-462f-a02a-977c1eeaafe3","500":"7ada6ca5-909e-4c4d-8744-11e1dab26f25"},"x-mint":{"href":"/api-reference/payments/create-checkout-session"},"method":"post","type":"path","servers":["b6bdb0c4-2e36-4f68-8a92-7d4f6baca10a","05c29608-074a-41fe-8247-0f116f352743"],"path":"/v1/checkout-sessions","baseUrlOptions":["https://api.bachs.io","https://sandbox-api.bachs.io"],"title":"Create a checkout session","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.oneOf.0.product_cart.items.0.product_id":"prod_abc123","body.oneOf.0.payment_method_types.oneOf.0.items.0":"USD_CARD","body.oneOf.0.payment_method_types.oneOf.0.items.1":"NGN_BANK_TRANSFER","body.oneOf.0.customer.oneOf.1.email":"customer@example.com","body.oneOf.0.customer.oneOf.1.name.oneOf.0":"John Doe"}]},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Checkout with a cart of catalog products (each item may override its price via `pricing`).","required":["product_cart"],"properties":{"product_cart":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["product_id"],"properties":{"product_id":{"type":"string","description":"Product ID to include in checkout.","example":"prod_abc123","isRequired":true,"uniqueKey":"oneOf.0.product_cart.items.[INDEX].product_id","typeLabel":"string"},"quantity":{"type":"integer","minimum":1,"default":1,"description":"Number of units for the product item.","example":1,"uniqueKey":"oneOf.0.product_cart.items.[INDEX].quantity","typeLabel":"integer"},"amount":{"oneOf":[{"type":"string","description":"Chosen amount for a pay-what-you-want price. For a catalog CUSTOM product, or an ad-hoc CUSTOM price (pre-filling the buyer's amount).","example":"29.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"Chosen amount for a pay-what-you-want price. For a catalog CUSTOM product, or an ad-hoc CUSTOM price (pre-filling the buyer's amount).","example":"29.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.product_cart.items.[INDEX].amount","typeLabel":"string | null"},"pricing":{"oneOf":[{"type":"object","description":"Ad-hoc price override for this checkout only (no product is created). Priced in the product's primary currency. Supports the same price types as catalog prices: `fixed`, `custom`, `free`.","properties":{"price_type":{"type":"string","enum":["fixed","custom","free"],"default":"fixed","description":"`fixed` sets a set amount via `amount`. `custom` is pay-what-you-want, bounded by `minimum_amount`/`maximum_amount` with an optional `preset_amount`; the buyer picks the amount at checkout. `free` is a $0 line that completes without payment; on a recurring product it creates a free subscription (no card, renews with no charge).","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.price_type","typeLabel":"enum\u003cstring>"},"amount":{"oneOf":[{"type":"string","description":"The price, for a `fixed` ad-hoc price. Required for `fixed`; not valid for `custom`.","example":"19.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"The price, for a `fixed` ad-hoc price. Required for `fixed`; not valid for `custom`.","example":"19.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.amount","typeLabel":"string | null"},"preset_amount":{"oneOf":[{"type":"string","description":"Suggested starting amount for a `custom` ad-hoc price.","example":"10.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.preset_amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"Suggested starting amount for a `custom` ad-hoc price.","example":"10.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.preset_amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.preset_amount","typeLabel":"string | null"},"minimum_amount":{"oneOf":[{"type":"string","description":"Lower bound for a `custom` ad-hoc price.","example":"5.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.minimum_amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"Lower bound for a `custom` ad-hoc price.","example":"5.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.minimum_amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.minimum_amount","typeLabel":"string | null"},"maximum_amount":{"oneOf":[{"type":"string","description":"Upper bound for a `custom` ad-hoc price.","example":"100.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.maximum_amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"Upper bound for a `custom` ad-hoc price.","example":"100.00","uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.maximum_amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0.maximum_amount","typeLabel":"string | null"}},"uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Ad-hoc price override for this checkout only (no product is created). Priced in the product's primary currency. Supports the same price types as catalog prices: `fixed`, `custom`, `free`.","properties":{"price_type":{"type":"string","enum":["fixed","custom","free"],"default":"fixed","description":"`fixed` sets a set amount via `amount`. `custom` is pay-what-you-want, bounded by `minimum_amount`/`maximum_amount` with an optional `preset_amount`; the buyer picks the amount at checkout. `free` is a $0 line that completes without payment; on a recurring product it creates a free subscription (no card, renews with no charge)."},"amount":{"oneOf":[{"type":"string","description":"The price, for a `fixed` ad-hoc price. Required for `fixed`; not valid for `custom`.","example":"19.00"},{"type":"null","description":"The price, for a `fixed` ad-hoc price. Required for `fixed`; not valid for `custom`.","example":"19.00"}]},"preset_amount":{"oneOf":[{"type":"string","description":"Suggested starting amount for a `custom` ad-hoc price.","example":"10.00"},{"type":"null","description":"Suggested starting amount for a `custom` ad-hoc price.","example":"10.00"}]},"minimum_amount":{"oneOf":[{"type":"string","description":"Lower bound for a `custom` ad-hoc price.","example":"5.00"},{"type":"null","description":"Lower bound for a `custom` ad-hoc price.","example":"5.00"}]},"maximum_amount":{"oneOf":[{"type":"string","description":"Upper bound for a `custom` ad-hoc price.","example":"100.00"},{"type":"null","description":"Upper bound for a `custom` ad-hoc price.","example":"100.00"}]}},"uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.product_cart.items.[INDEX].pricing","typeLabel":"object | null"}},"uniqueKey":"oneOf.0.product_cart.items.[INDEX]","typeLabel":"object"},"description":"Catalog products to include in this checkout session. Mutually exclusive with `pricing`.","isRequired":true,"uniqueKey":"oneOf.0.product_cart","typeLabel":"object[]"},"billing_currency":{"oneOf":[{"type":"string","description":"Optional checkout billing currency. If omitted, defaults to product pricing currency.","example":"USD","uniqueKey":"oneOf.0.billing_currency.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional checkout billing currency. If omitted, defaults to product pricing currency.","example":"USD","uniqueKey":"oneOf.0.billing_currency.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.billing_currency","typeLabel":"string | null"},"payment_method_types":{"oneOf":[{"type":"array","description":"Restricts the checkout to specific payment methods. Values are exact payment-method corridors, not payment types: `USD_CARD` and `NGN_CARD` are separate corridors, as is each of the nine mobile money corridors. Valid values: `USD_CARD` (US card, USD), `NGN_CARD` (Nigerian card, NGN), `NGN_BANK_TRANSFER` (Nigerian bank transfer, NGN), `MOMO_GHS` (Ghana mobile money), `MOMO_KES` (Kenya mobile money), `MOMO_TZS` (Tanzania mobile money), `MOMO_UGX` (Uganda mobile money), `MOMO_XAF` (Central Africa CFA mobile money), `MOMO_XOF` (West Africa CFA mobile money), `MOMO_RWF` (Rwanda mobile money), `MOMO_MWK` (Malawi mobile money), `MOMO_ZMW` (Zambia mobile money), and `CRYPTO` (all supported crypto assets). A corridor you leave out is not offered. Restricting only narrows what the customer sees: it never adds a corridor your account is not already enabled for. If the restriction leaves no payable method, the request is rejected.","items":{"type":"string","uniqueKey":"oneOf.0.payment_method_types.oneOf.0.items.[INDEX]","typeLabel":"string"},"example":["USD_CARD","NGN_BANK_TRANSFER"],"uniqueKey":"oneOf.0.payment_method_types.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"Restricts the checkout to specific payment methods. Values are exact payment-method corridors, not payment types: `USD_CARD` and `NGN_CARD` are separate corridors, as is each of the nine mobile money corridors. Valid values: `USD_CARD` (US card, USD), `NGN_CARD` (Nigerian card, NGN), `NGN_BANK_TRANSFER` (Nigerian bank transfer, NGN), `MOMO_GHS` (Ghana mobile money), `MOMO_KES` (Kenya mobile money), `MOMO_TZS` (Tanzania mobile money), `MOMO_UGX` (Uganda mobile money), `MOMO_XAF` (Central Africa CFA mobile money), `MOMO_XOF` (West Africa CFA mobile money), `MOMO_RWF` (Rwanda mobile money), `MOMO_MWK` (Malawi mobile money), `MOMO_ZMW` (Zambia mobile money), and `CRYPTO` (all supported crypto assets). A corridor you leave out is not offered. Restricting only narrows what the customer sees: it never adds a corridor your account is not already enabled for. If the restriction leaves no payable method, the request is rejected.","items":{"type":"string"},"example":["USD_CARD","NGN_BANK_TRANSFER"],"uniqueKey":"oneOf.0.payment_method_types.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.payment_method_types","typeLabel":"string[] | null"},"cancel_url":{"oneOf":[{"type":"string","format":"uri","description":"Where to send the customer if they cancel or abandon the checkout. Returned on the checkout so the hosted page can route back to it.","example":"https://shop.example.com/cart","uniqueKey":"oneOf.0.cancel_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where to send the customer if they cancel or abandon the checkout. Returned on the checkout so the hosted page can route back to it.","example":"https://shop.example.com/cart","uniqueKey":"oneOf.0.cancel_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.cancel_url","typeLabel":"string\u003curi> | null"},"return_url":{"oneOf":[{"type":"string","format":"uri","description":"Deprecated alias for `success_url`, kept for backward compatibility. If both are set, `success_url` wins.","example":"https://shop.example.com/thanks","deprecated":true,"uniqueKey":"oneOf.0.return_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Deprecated alias for `success_url`, kept for backward compatibility. If both are set, `success_url` wins.","example":"https://shop.example.com/thanks","deprecated":true,"uniqueKey":"oneOf.0.return_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.return_url","typeLabel":"string\u003curi> | null"},"success_url":{"type":"string","description":"Where to redirect the customer after a successful payment. Bachs appends `?checkout_id=\u003cid>`. This is the primary success-redirect field.","example":"https://shop.example.com/success","uniqueKey":"oneOf.0.success_url","typeLabel":"string"},"customer":{"oneOf":[{"type":"object","description":"Customer for the checkout. Optional for a standard one-time hosted checkout, which can collect buyer details as customer_details. Required for recurring checkout. Supply customer_id for an existing customer, or email for a new customer; name is optional. Send customer_creation: always to create a customer record from details collected on the hosted page.","required":["customer_id"],"properties":{"customer_id":{"type":"string","description":"Existing customer ID.","example":"cust_1a2b3c4d5e6f","isRequired":true,"uniqueKey":"oneOf.0.customer.oneOf.0.customer_id","typeLabel":"string"}},"uniqueKey":"oneOf.0.customer.oneOf.0","typeLabel":"object"},{"type":"object","description":"Customer for the checkout. Optional for a standard one-time hosted checkout, which can collect buyer details as customer_details. Required for recurring checkout. Supply customer_id for an existing customer, or email for a new customer; name is optional. Send customer_creation: always to create a customer record from details collected on the hosted page.","required":["email"],"properties":{"email":{"type":"string","format":"email","description":"Customer email address.","example":"jane@example.com","isRequired":true,"uniqueKey":"oneOf.0.customer.oneOf.1.email","typeLabel":"string\u003cemail>"},"name":{"oneOf":[{"type":"string","description":"Optional customer name. If supplied, it must not be blank.","example":"Jane Doe","uniqueKey":"oneOf.0.customer.oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional customer name. If supplied, it must not be blank.","example":"Jane Doe","uniqueKey":"oneOf.0.customer.oneOf.1.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.customer.oneOf.1.name","typeLabel":"string | null"},"phone_number":{"oneOf":[{"type":"string","description":"Customer phone number.","example":"+2348012345678","uniqueKey":"oneOf.0.customer.oneOf.1.phone_number.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer phone number.","example":"+2348012345678","uniqueKey":"oneOf.0.customer.oneOf.1.phone_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.customer.oneOf.1.phone_number","typeLabel":"string | null"}},"uniqueKey":"oneOf.0.customer.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"oneOf.0.customer.oneOf.2","typeLabel":"null"}],"uniqueKey":"oneOf.0.customer","typeLabel":"object · object · null"},"metadata":{"oneOf":[{"type":"object","description":"Optional metadata (max 20 keys, max 10KB total).","additionalProperties":true,"uniqueKey":"oneOf.0.metadata.oneOf.0","typeLabel":"object"},{"type":"null","description":"Optional metadata (max 20 keys, max 10KB total).","additionalProperties":true,"uniqueKey":"oneOf.0.metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.metadata","typeLabel":"object | null"},"pricing":{"oneOf":[{"type":"object","required":["currency"],"properties":{"currency":{"type":"string","description":"Base currency code (e.g., 'USD', 'NGN'). Must be a supported fiat currency.","example":"USD","isRequired":true,"uniqueKey":"oneOf.0.pricing.oneOf.0.currency","typeLabel":"string"},"amount":{"type":"string","description":"Base amount as decimal string. Required for a fixed price; omit for a custom (buyer-entered) or free price. Minimum 100 for `NGN`, 1 for `USD` (and per-currency minimums for other supported currencies).","example":"50.00","uniqueKey":"oneOf.0.pricing.oneOf.0.amount","typeLabel":"string"},"price_type":{"type":"string","enum":["fixed","custom","free"],"description":"`fixed` (default when amount is set) | `custom` (buyer enters the amount at checkout, within optional bounds, via the checkout-level set-amount) | `free` ($0).","uniqueKey":"oneOf.0.pricing.oneOf.0.price_type","typeLabel":"enum\u003cstring>"},"preset_amount":{"type":"string","description":"Suggested starting amount for a custom price.","example":"10.00","uniqueKey":"oneOf.0.pricing.oneOf.0.preset_amount","typeLabel":"string"},"minimum_amount":{"type":"string","description":"Lower bound for a custom price.","example":"5.00","uniqueKey":"oneOf.0.pricing.oneOf.0.minimum_amount","typeLabel":"string"},"maximum_amount":{"type":"string","description":"Upper bound for a custom price.","example":"100.00","uniqueKey":"oneOf.0.pricing.oneOf.0.maximum_amount","typeLabel":"string"},"currency_options":{"type":"object","description":"Currency-specific pricing overrides. Keys are fiat currency codes, values are decimal amount strings.","additionalProperties":{"type":"string","uniqueKey":"oneOf.0.pricing.oneOf.0.currency_options.additionalProperties","typeLabel":"string"},"example":{"NGN":"75000.00","GHS":"620.00"},"uniqueKey":"oneOf.0.pricing.oneOf.0.currency_options","typeLabel":"object"}},"description":"Raw pricing for a product-less (pure) checkout. Mutually exclusive with `product_cart`.","uniqueKey":"oneOf.0.pricing.oneOf.0","typeLabel":"object"},{"type":"null","required":["currency"],"properties":{"currency":{"type":"string","description":"Base currency code (e.g., 'USD', 'NGN'). Must be a supported fiat currency.","example":"USD"},"amount":{"type":"string","description":"Base amount as decimal string. Required for a fixed price; omit for a custom (buyer-entered) or free price. Minimum 100 for `NGN`, 1 for `USD` (and per-currency minimums for other supported currencies).","example":"50.00"},"price_type":{"type":"string","enum":["fixed","custom","free"],"description":"`fixed` (default when amount is set) | `custom` (buyer enters the amount at checkout, within optional bounds, via the checkout-level set-amount) | `free` ($0)."},"preset_amount":{"type":"string","description":"Suggested starting amount for a custom price.","example":"10.00"},"minimum_amount":{"type":"string","description":"Lower bound for a custom price.","example":"5.00"},"maximum_amount":{"type":"string","description":"Upper bound for a custom price.","example":"100.00"},"currency_options":{"type":"object","description":"Currency-specific pricing overrides. Keys are fiat currency codes, values are decimal amount strings.","additionalProperties":{"type":"string"},"example":{"NGN":"75000.00","GHS":"620.00"}}},"description":"Raw pricing for a product-less (pure) checkout. Mutually exclusive with `product_cart`.","uniqueKey":"oneOf.0.pricing.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.pricing","typeLabel":"object | null"},"platform_fee":{"oneOf":[{"type":"string","description":"The platform's cut of this sale, in the base currency of the sale, taken from the merchant's proceeds rather than from Bachs's processing fee. On a destination charge, this is one of two ways to state the split: the account receives the gross minus this amount. Mutually exclusive with `transfer_data.amount`. A destination charge needs one of the two; a direct charge can set this alone to move part of its own charge up to the platform. See [Platform fees](/connect/platform-fees).","example":"20000.00","uniqueKey":"oneOf.0.platform_fee.oneOf.0","typeLabel":"string"},{"type":"null","description":"The platform's cut of this sale, in the base currency of the sale, taken from the merchant's proceeds rather than from Bachs's processing fee. On a destination charge, this is one of two ways to state the split: the account receives the gross minus this amount. Mutually exclusive with `transfer_data.amount`. A destination charge needs one of the two; a direct charge can set this alone to move part of its own charge up to the platform. See [Platform fees](/connect/platform-fees).","example":"20000.00","uniqueKey":"oneOf.0.platform_fee.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.platform_fee","typeLabel":"string | null"},"transfer_data":{"oneOf":[{"type":"object","required":["destination"],"properties":{"destination":{"type":"string","description":"The account to transfer the sale to. Its presence, on its own, is what makes this a destination charge. It must be one of your own accounts; any other ID returns `404` so the response never confirms that an unrelated account exists.","example":"acct_3Wq8ZfT1yHnJ5sVe","isRequired":true,"uniqueKey":"oneOf.0.transfer_data.oneOf.0.destination","typeLabel":"string"},"amount":{"oneOf":[{"type":"string","description":"What the destination account receives, in the base currency of the sale. Supply this instead of `platform_fee` to fix the seller's share and let the platform absorb any variance in the total. Mutually exclusive with `platform_fee`; a request setting both is rejected with `400`.","example":"80000.00","uniqueKey":"oneOf.0.transfer_data.oneOf.0.amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"What the destination account receives, in the base currency of the sale. Supply this instead of `platform_fee` to fix the seller's share and let the platform absorb any variance in the total. Mutually exclusive with `platform_fee`; a request setting both is rejected with `400`.","example":"80000.00","uniqueKey":"oneOf.0.transfer_data.oneOf.0.amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.transfer_data.oneOf.0.amount","typeLabel":"string | null"}},"description":"Names the account this checkout pays out to. Its presence, on its own, is what makes this a destination charge belonging to your platform rather than the account. A destination charge needs a split term: either `platform_fee` on the request root, or `transfer_data.amount` here. Omit `transfer_data` entirely, and act as the account with `X-Account-Id` instead, for a direct charge. See [Destination charges](/connect/split-payments/destination).","uniqueKey":"oneOf.0.transfer_data.oneOf.0","typeLabel":"object"},{"type":"null","required":["destination"],"properties":{"destination":{"type":"string","description":"The account to transfer the sale to. Its presence, on its own, is what makes this a destination charge. It must be one of your own accounts; any other ID returns `404` so the response never confirms that an unrelated account exists.","example":"acct_3Wq8ZfT1yHnJ5sVe"},"amount":{"oneOf":[{"type":"string","description":"What the destination account receives, in the base currency of the sale. Supply this instead of `platform_fee` to fix the seller's share and let the platform absorb any variance in the total. Mutually exclusive with `platform_fee`; a request setting both is rejected with `400`.","example":"80000.00"},{"type":"null","description":"What the destination account receives, in the base currency of the sale. Supply this instead of `platform_fee` to fix the seller's share and let the platform absorb any variance in the total. Mutually exclusive with `platform_fee`; a request setting both is rejected with `400`.","example":"80000.00"}]}},"description":"Names the account this checkout pays out to. Its presence, on its own, is what makes this a destination charge belonging to your platform rather than the account. A destination charge needs a split term: either `platform_fee` on the request root, or `transfer_data.amount` here. Omit `transfer_data` entirely, and act as the account with `X-Account-Id` instead, for a direct charge. See [Destination charges](/connect/split-payments/destination).","uniqueKey":"oneOf.0.transfer_data.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.transfer_data","typeLabel":"object | null"},"reference":{"oneOf":[{"type":"string","maxLength":128,"description":"Your own reference for this session, unique per account. Omit it and the session has none; use the session's `id` to track it.","example":"order_9876","uniqueKey":"oneOf.0.reference.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":128,"description":"Your own reference for this session, unique per account. Omit it and the session has none; use the session's `id` to track it.","example":"order_9876","uniqueKey":"oneOf.0.reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.reference","typeLabel":"string | null"},"expires_in_minutes":{"type":"integer","minimum":1,"maximum":1440,"default":60,"description":"Minutes until the checkout session expires. Defaults to 60. After expiry the checkout URL is invalid.","example":60,"uniqueKey":"oneOf.0.expires_in_minutes","typeLabel":"integer"},"customer_creation":{"type":"string","enum":["always","if_required"],"default":"if_required","description":"Whether a buyer who identifies themselves on the hosted page also becomes a customer record. Applies only when you omit `customer`. `if_required` (default) keeps them out of your directory: `customer` stays `null`, no `customer.created` or `customer.updated` webhook fires, and their email and name reach you on `customer_details` instead. Their purchases still group together in your dashboard. `always` adds them to your directory, matched by email to a customer you already hold where one exists, and returns it on `customer`. That match is on the email alone, and an email typed on the checkout page is not verified, so a buyer who knows one of your customers' addresses has their purchase recorded against that customer. Ignored for a subscription or `setup` checkout, which always create a customer. See [Whether a guest becomes a customer](/guides/checkout/checkout-sessions#whether-a-guest-becomes-a-customer-customer-creation).","example":"if_required","uniqueKey":"oneOf.0.customer_creation","typeLabel":"enum\u003cstring>"},"save_payment_method":{"type":"boolean","default":false,"description":"Save the customer's card so you can charge it later without them present. Send it with a price and the customer pays now and the card is kept. Send it with no pricing and the checkout collects a card and charges nothing, which needs an existing customer (`customer.customer_id`) for the card to belong to. Only cards can be charged again, so a checkout that offers none is refused with `CHECKOUT_CANNOT_SAVE_PAYMENT_METHOD`.","uniqueKey":"oneOf.0.save_payment_method","typeLabel":"boolean"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Pure checkout with a raw amount and currency, no products.","required":["pricing"],"properties":{"pricing":{"oneOf":[{"type":"object","required":["currency"],"properties":{"currency":{"type":"string","description":"Base currency code (e.g., 'USD', 'NGN'). Must be a supported fiat currency.","example":"USD","isRequired":true,"uniqueKey":"oneOf.1.pricing.oneOf.0.currency","typeLabel":"string"},"amount":{"type":"string","description":"Base amount as decimal string. Required for a fixed price; omit for a custom (buyer-entered) or free price. Minimum 100 for `NGN`, 1 for `USD` (and per-currency minimums for other supported currencies).","example":"50.00","uniqueKey":"oneOf.1.pricing.oneOf.0.amount","typeLabel":"string"},"price_type":{"type":"string","enum":["fixed","custom","free"],"description":"`fixed` (default when amount is set) | `custom` (buyer enters the amount at checkout, within optional bounds, via the checkout-level set-amount) | `free` ($0).","uniqueKey":"oneOf.1.pricing.oneOf.0.price_type","typeLabel":"enum\u003cstring>"},"preset_amount":{"type":"string","description":"Suggested starting amount for a custom price.","example":"10.00","uniqueKey":"oneOf.1.pricing.oneOf.0.preset_amount","typeLabel":"string"},"minimum_amount":{"type":"string","description":"Lower bound for a custom price.","example":"5.00","uniqueKey":"oneOf.1.pricing.oneOf.0.minimum_amount","typeLabel":"string"},"maximum_amount":{"type":"string","description":"Upper bound for a custom price.","example":"100.00","uniqueKey":"oneOf.1.pricing.oneOf.0.maximum_amount","typeLabel":"string"},"currency_options":{"type":"object","description":"Currency-specific pricing overrides. Keys are fiat currency codes, values are decimal amount strings.","additionalProperties":{"type":"string","uniqueKey":"oneOf.1.pricing.oneOf.0.currency_options.additionalProperties","typeLabel":"string"},"example":{"NGN":"75000.00","GHS":"620.00"},"uniqueKey":"oneOf.1.pricing.oneOf.0.currency_options","typeLabel":"object"}},"description":"Raw pricing for a product-less (pure) checkout. Mutually exclusive with `product_cart`.","isRequired":true,"uniqueKey":"oneOf.1.pricing.oneOf.0","typeLabel":"object"},{"type":"null","required":["currency"],"properties":{"currency":{"type":"string","description":"Base currency code (e.g., 'USD', 'NGN'). Must be a supported fiat currency.","example":"USD"},"amount":{"type":"string","description":"Base amount as decimal string. Required for a fixed price; omit for a custom (buyer-entered) or free price. Minimum 100 for `NGN`, 1 for `USD` (and per-currency minimums for other supported currencies).","example":"50.00"},"price_type":{"type":"string","enum":["fixed","custom","free"],"description":"`fixed` (default when amount is set) | `custom` (buyer enters the amount at checkout, within optional bounds, via the checkout-level set-amount) | `free` ($0)."},"preset_amount":{"type":"string","description":"Suggested starting amount for a custom price.","example":"10.00"},"minimum_amount":{"type":"string","description":"Lower bound for a custom price.","example":"5.00"},"maximum_amount":{"type":"string","description":"Upper bound for a custom price.","example":"100.00"},"currency_options":{"type":"object","description":"Currency-specific pricing overrides. Keys are fiat currency codes, values are decimal amount strings.","additionalProperties":{"type":"string"},"example":{"NGN":"75000.00","GHS":"620.00"}}},"description":"Raw pricing for a product-less (pure) checkout. Mutually exclusive with `product_cart`.","isRequired":true,"uniqueKey":"oneOf.1.pricing.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.pricing","typeLabel":"object | null"},"billing_currency":{"oneOf":[{"type":"string","description":"Optional checkout billing currency. If omitted, defaults to product pricing currency.","example":"USD","uniqueKey":"oneOf.1.billing_currency.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional checkout billing currency. If omitted, defaults to product pricing currency.","example":"USD","uniqueKey":"oneOf.1.billing_currency.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.billing_currency","typeLabel":"string | null"},"payment_method_types":{"oneOf":[{"type":"array","description":"Restricts the checkout to specific payment methods. Values are exact payment-method corridors, not payment types: `USD_CARD` and `NGN_CARD` are separate corridors, as is each of the nine mobile money corridors. Valid values: `USD_CARD` (US card, USD), `NGN_CARD` (Nigerian card, NGN), `NGN_BANK_TRANSFER` (Nigerian bank transfer, NGN), `MOMO_GHS` (Ghana mobile money), `MOMO_KES` (Kenya mobile money), `MOMO_TZS` (Tanzania mobile money), `MOMO_UGX` (Uganda mobile money), `MOMO_XAF` (Central Africa CFA mobile money), `MOMO_XOF` (West Africa CFA mobile money), `MOMO_RWF` (Rwanda mobile money), `MOMO_MWK` (Malawi mobile money), `MOMO_ZMW` (Zambia mobile money), and `CRYPTO` (all supported crypto assets). A corridor you leave out is not offered. Restricting only narrows what the customer sees: it never adds a corridor your account is not already enabled for. If the restriction leaves no payable method, the request is rejected.","items":{"type":"string","uniqueKey":"oneOf.1.payment_method_types.oneOf.0.items.[INDEX]","typeLabel":"string"},"example":["USD_CARD","NGN_BANK_TRANSFER"],"uniqueKey":"oneOf.1.payment_method_types.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"Restricts the checkout to specific payment methods. Values are exact payment-method corridors, not payment types: `USD_CARD` and `NGN_CARD` are separate corridors, as is each of the nine mobile money corridors. Valid values: `USD_CARD` (US card, USD), `NGN_CARD` (Nigerian card, NGN), `NGN_BANK_TRANSFER` (Nigerian bank transfer, NGN), `MOMO_GHS` (Ghana mobile money), `MOMO_KES` (Kenya mobile money), `MOMO_TZS` (Tanzania mobile money), `MOMO_UGX` (Uganda mobile money), `MOMO_XAF` (Central Africa CFA mobile money), `MOMO_XOF` (West Africa CFA mobile money), `MOMO_RWF` (Rwanda mobile money), `MOMO_MWK` (Malawi mobile money), `MOMO_ZMW` (Zambia mobile money), and `CRYPTO` (all supported crypto assets). A corridor you leave out is not offered. Restricting only narrows what the customer sees: it never adds a corridor your account is not already enabled for. If the restriction leaves no payable method, the request is rejected.","items":{"type":"string"},"example":["USD_CARD","NGN_BANK_TRANSFER"],"uniqueKey":"oneOf.1.payment_method_types.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.payment_method_types","typeLabel":"string[] | null"},"cancel_url":{"oneOf":[{"type":"string","format":"uri","description":"Where to send the customer if they cancel or abandon the checkout. Returned on the checkout so the hosted page can route back to it.","example":"https://shop.example.com/cart","uniqueKey":"oneOf.1.cancel_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where to send the customer if they cancel or abandon the checkout. Returned on the checkout so the hosted page can route back to it.","example":"https://shop.example.com/cart","uniqueKey":"oneOf.1.cancel_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.cancel_url","typeLabel":"string\u003curi> | null"},"return_url":{"oneOf":[{"type":"string","format":"uri","description":"Deprecated alias for `success_url`, kept for backward compatibility. If both are set, `success_url` wins.","example":"https://shop.example.com/thanks","deprecated":true,"uniqueKey":"oneOf.1.return_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Deprecated alias for `success_url`, kept for backward compatibility. If both are set, `success_url` wins.","example":"https://shop.example.com/thanks","deprecated":true,"uniqueKey":"oneOf.1.return_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.return_url","typeLabel":"string\u003curi> | null"},"success_url":{"type":"string","description":"Where to redirect the customer after a successful payment. Bachs appends `?checkout_id=\u003cid>`. This is the primary success-redirect field.","example":"https://shop.example.com/success","uniqueKey":"oneOf.1.success_url","typeLabel":"string"},"customer":{"oneOf":[{"type":"object","description":"Customer for the checkout. Optional for a standard one-time hosted checkout, which can collect buyer details as customer_details. Required for recurring checkout. Supply customer_id for an existing customer, or email for a new customer; name is optional. Send customer_creation: always to create a customer record from details collected on the hosted page.","required":["customer_id"],"properties":{"customer_id":{"type":"string","description":"Existing customer ID.","example":"cust_1a2b3c4d5e6f","isRequired":true,"uniqueKey":"oneOf.1.customer.oneOf.0.customer_id","typeLabel":"string"}},"uniqueKey":"oneOf.1.customer.oneOf.0","typeLabel":"object"},{"type":"object","description":"Customer for the checkout. Optional for a standard one-time hosted checkout, which can collect buyer details as customer_details. Required for recurring checkout. Supply customer_id for an existing customer, or email for a new customer; name is optional. Send customer_creation: always to create a customer record from details collected on the hosted page.","required":["email"],"properties":{"email":{"type":"string","format":"email","description":"Customer email address.","example":"jane@example.com","isRequired":true,"uniqueKey":"oneOf.1.customer.oneOf.1.email","typeLabel":"string\u003cemail>"},"name":{"oneOf":[{"type":"string","description":"Optional customer name. If supplied, it must not be blank.","example":"Jane Doe","uniqueKey":"oneOf.1.customer.oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional customer name. If supplied, it must not be blank.","example":"Jane Doe","uniqueKey":"oneOf.1.customer.oneOf.1.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.customer.oneOf.1.name","typeLabel":"string | null"},"phone_number":{"oneOf":[{"type":"string","description":"Customer phone number.","example":"+2348012345678","uniqueKey":"oneOf.1.customer.oneOf.1.phone_number.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer phone number.","example":"+2348012345678","uniqueKey":"oneOf.1.customer.oneOf.1.phone_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.customer.oneOf.1.phone_number","typeLabel":"string | null"}},"uniqueKey":"oneOf.1.customer.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"oneOf.1.customer.oneOf.2","typeLabel":"null"}],"uniqueKey":"oneOf.1.customer","typeLabel":"object · object · null"},"metadata":{"oneOf":[{"type":"object","description":"Optional metadata (max 20 keys, max 10KB total).","additionalProperties":true,"uniqueKey":"oneOf.1.metadata.oneOf.0","typeLabel":"object"},{"type":"null","description":"Optional metadata (max 20 keys, max 10KB total).","additionalProperties":true,"uniqueKey":"oneOf.1.metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.metadata","typeLabel":"object | null"},"product_cart":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["product_id"],"properties":{"product_id":{"type":"string","description":"Product ID to include in checkout.","example":"prod_abc123","isRequired":true,"uniqueKey":"oneOf.1.product_cart.items.[INDEX].product_id","typeLabel":"string"},"quantity":{"type":"integer","minimum":1,"default":1,"description":"Number of units for the product item.","example":1,"uniqueKey":"oneOf.1.product_cart.items.[INDEX].quantity","typeLabel":"integer"},"amount":{"oneOf":[{"type":"string","description":"Chosen amount for a pay-what-you-want price. For a catalog CUSTOM product, or an ad-hoc CUSTOM price (pre-filling the buyer's amount).","example":"29.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"Chosen amount for a pay-what-you-want price. For a catalog CUSTOM product, or an ad-hoc CUSTOM price (pre-filling the buyer's amount).","example":"29.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.product_cart.items.[INDEX].amount","typeLabel":"string | null"},"pricing":{"oneOf":[{"type":"object","description":"Ad-hoc price override for this checkout only (no product is created). Priced in the product's primary currency. Supports the same price types as catalog prices: `fixed`, `custom`, `free`.","properties":{"price_type":{"type":"string","enum":["fixed","custom","free"],"default":"fixed","description":"`fixed` sets a set amount via `amount`. `custom` is pay-what-you-want, bounded by `minimum_amount`/`maximum_amount` with an optional `preset_amount`; the buyer picks the amount at checkout. `free` is a $0 line that completes without payment; on a recurring product it creates a free subscription (no card, renews with no charge).","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.price_type","typeLabel":"enum\u003cstring>"},"amount":{"oneOf":[{"type":"string","description":"The price, for a `fixed` ad-hoc price. Required for `fixed`; not valid for `custom`.","example":"19.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"The price, for a `fixed` ad-hoc price. Required for `fixed`; not valid for `custom`.","example":"19.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.amount","typeLabel":"string | null"},"preset_amount":{"oneOf":[{"type":"string","description":"Suggested starting amount for a `custom` ad-hoc price.","example":"10.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.preset_amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"Suggested starting amount for a `custom` ad-hoc price.","example":"10.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.preset_amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.preset_amount","typeLabel":"string | null"},"minimum_amount":{"oneOf":[{"type":"string","description":"Lower bound for a `custom` ad-hoc price.","example":"5.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.minimum_amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"Lower bound for a `custom` ad-hoc price.","example":"5.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.minimum_amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.minimum_amount","typeLabel":"string | null"},"maximum_amount":{"oneOf":[{"type":"string","description":"Upper bound for a `custom` ad-hoc price.","example":"100.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.maximum_amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"Upper bound for a `custom` ad-hoc price.","example":"100.00","uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.maximum_amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0.maximum_amount","typeLabel":"string | null"}},"uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Ad-hoc price override for this checkout only (no product is created). Priced in the product's primary currency. Supports the same price types as catalog prices: `fixed`, `custom`, `free`.","properties":{"price_type":{"type":"string","enum":["fixed","custom","free"],"default":"fixed","description":"`fixed` sets a set amount via `amount`. `custom` is pay-what-you-want, bounded by `minimum_amount`/`maximum_amount` with an optional `preset_amount`; the buyer picks the amount at checkout. `free` is a $0 line that completes without payment; on a recurring product it creates a free subscription (no card, renews with no charge)."},"amount":{"oneOf":[{"type":"string","description":"The price, for a `fixed` ad-hoc price. Required for `fixed`; not valid for `custom`.","example":"19.00"},{"type":"null","description":"The price, for a `fixed` ad-hoc price. Required for `fixed`; not valid for `custom`.","example":"19.00"}]},"preset_amount":{"oneOf":[{"type":"string","description":"Suggested starting amount for a `custom` ad-hoc price.","example":"10.00"},{"type":"null","description":"Suggested starting amount for a `custom` ad-hoc price.","example":"10.00"}]},"minimum_amount":{"oneOf":[{"type":"string","description":"Lower bound for a `custom` ad-hoc price.","example":"5.00"},{"type":"null","description":"Lower bound for a `custom` ad-hoc price.","example":"5.00"}]},"maximum_amount":{"oneOf":[{"type":"string","description":"Upper bound for a `custom` ad-hoc price.","example":"100.00"},{"type":"null","description":"Upper bound for a `custom` ad-hoc price.","example":"100.00"}]}},"uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.product_cart.items.[INDEX].pricing","typeLabel":"object | null"}},"uniqueKey":"oneOf.1.product_cart.items.[INDEX]","typeLabel":"object"},"description":"Catalog products to include in this checkout session. Mutually exclusive with `pricing`.","uniqueKey":"oneOf.1.product_cart","typeLabel":"object[]"},"platform_fee":{"oneOf":[{"type":"string","description":"The platform's cut of this sale, in the base currency of the sale, taken from the merchant's proceeds rather than from Bachs's processing fee. On a destination charge, this is one of two ways to state the split: the account receives the gross minus this amount. Mutually exclusive with `transfer_data.amount`. A destination charge needs one of the two; a direct charge can set this alone to move part of its own charge up to the platform. See [Platform fees](/connect/platform-fees).","example":"20000.00","uniqueKey":"oneOf.1.platform_fee.oneOf.0","typeLabel":"string"},{"type":"null","description":"The platform's cut of this sale, in the base currency of the sale, taken from the merchant's proceeds rather than from Bachs's processing fee. On a destination charge, this is one of two ways to state the split: the account receives the gross minus this amount. Mutually exclusive with `transfer_data.amount`. A destination charge needs one of the two; a direct charge can set this alone to move part of its own charge up to the platform. See [Platform fees](/connect/platform-fees).","example":"20000.00","uniqueKey":"oneOf.1.platform_fee.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.platform_fee","typeLabel":"string | null"},"transfer_data":{"oneOf":[{"type":"object","required":["destination"],"properties":{"destination":{"type":"string","description":"The account to transfer the sale to. Its presence, on its own, is what makes this a destination charge. It must be one of your own accounts; any other ID returns `404` so the response never confirms that an unrelated account exists.","example":"acct_3Wq8ZfT1yHnJ5sVe","isRequired":true,"uniqueKey":"oneOf.1.transfer_data.oneOf.0.destination","typeLabel":"string"},"amount":{"oneOf":[{"type":"string","description":"What the destination account receives, in the base currency of the sale. Supply this instead of `platform_fee` to fix the seller's share and let the platform absorb any variance in the total. Mutually exclusive with `platform_fee`; a request setting both is rejected with `400`.","example":"80000.00","uniqueKey":"oneOf.1.transfer_data.oneOf.0.amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"What the destination account receives, in the base currency of the sale. Supply this instead of `platform_fee` to fix the seller's share and let the platform absorb any variance in the total. Mutually exclusive with `platform_fee`; a request setting both is rejected with `400`.","example":"80000.00","uniqueKey":"oneOf.1.transfer_data.oneOf.0.amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.transfer_data.oneOf.0.amount","typeLabel":"string | null"}},"description":"Names the account this checkout pays out to. Its presence, on its own, is what makes this a destination charge belonging to your platform rather than the account. A destination charge needs a split term: either `platform_fee` on the request root, or `transfer_data.amount` here. Omit `transfer_data` entirely, and act as the account with `X-Account-Id` instead, for a direct charge. See [Destination charges](/connect/split-payments/destination).","uniqueKey":"oneOf.1.transfer_data.oneOf.0","typeLabel":"object"},{"type":"null","required":["destination"],"properties":{"destination":{"type":"string","description":"The account to transfer the sale to. Its presence, on its own, is what makes this a destination charge. It must be one of your own accounts; any other ID returns `404` so the response never confirms that an unrelated account exists.","example":"acct_3Wq8ZfT1yHnJ5sVe"},"amount":{"oneOf":[{"type":"string","description":"What the destination account receives, in the base currency of the sale. Supply this instead of `platform_fee` to fix the seller's share and let the platform absorb any variance in the total. Mutually exclusive with `platform_fee`; a request setting both is rejected with `400`.","example":"80000.00"},{"type":"null","description":"What the destination account receives, in the base currency of the sale. Supply this instead of `platform_fee` to fix the seller's share and let the platform absorb any variance in the total. Mutually exclusive with `platform_fee`; a request setting both is rejected with `400`.","example":"80000.00"}]}},"description":"Names the account this checkout pays out to. Its presence, on its own, is what makes this a destination charge belonging to your platform rather than the account. A destination charge needs a split term: either `platform_fee` on the request root, or `transfer_data.amount` here. Omit `transfer_data` entirely, and act as the account with `X-Account-Id` instead, for a direct charge. See [Destination charges](/connect/split-payments/destination).","uniqueKey":"oneOf.1.transfer_data.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.transfer_data","typeLabel":"object | null"},"reference":{"oneOf":[{"type":"string","maxLength":128,"description":"Your own reference for this session, unique per account. Omit it and the session has none; use the session's `id` to track it.","example":"order_9876","uniqueKey":"oneOf.1.reference.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":128,"description":"Your own reference for this session, unique per account. Omit it and the session has none; use the session's `id` to track it.","example":"order_9876","uniqueKey":"oneOf.1.reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.reference","typeLabel":"string | null"},"expires_in_minutes":{"type":"integer","minimum":1,"maximum":1440,"default":60,"description":"Minutes until the checkout session expires. Defaults to 60. After expiry the checkout URL is invalid.","example":60,"uniqueKey":"oneOf.1.expires_in_minutes","typeLabel":"integer"},"customer_creation":{"type":"string","enum":["always","if_required"],"default":"if_required","description":"Whether a buyer who identifies themselves on the hosted page also becomes a customer record. Applies only when you omit `customer`. `if_required` (default) keeps them out of your directory: `customer` stays `null`, no `customer.created` or `customer.updated` webhook fires, and their email and name reach you on `customer_details` instead. Their purchases still group together in your dashboard. `always` adds them to your directory, matched by email to a customer you already hold where one exists, and returns it on `customer`. That match is on the email alone, and an email typed on the checkout page is not verified, so a buyer who knows one of your customers' addresses has their purchase recorded against that customer. Ignored for a subscription or `setup` checkout, which always create a customer. See [Whether a guest becomes a customer](/guides/checkout/checkout-sessions#whether-a-guest-becomes-a-customer-customer-creation).","example":"if_required","uniqueKey":"oneOf.1.customer_creation","typeLabel":"enum\u003cstring>"},"save_payment_method":{"type":"boolean","default":false,"description":"Save the customer's card so you can charge it later without them present. Send it with a price and the customer pays now and the card is kept. Send it with no pricing and the checkout collects a card and charges nothing, which needs an existing customer (`customer.customer_id`) for the card to belong to. Only cards can be charged again, so a checkout that offers none is refused with `CHECKOUT_CANNOT_SAVE_PAYMENT_METHOD`.","uniqueKey":"oneOf.1.save_payment_method","typeLabel":"boolean"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"customer":{"email":"customer@example.com","name":"John Doe"},"product_cart":[{"product_id":"prod_abc123"}],"payment_method_types":["USD_CARD","NGN_BANK_TRANSFER"]},"examples":{"Example":{"title":"Example","value":{"customer":{"email":"customer@example.com","name":"John Doe"},"product_cart":[{"product_id":"prod_abc123"}],"payment_method_types":["USD_CARD","NGN_BANK_TRANSFER"]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"33a92569-23b1-489a-b7a1-cf65dc0f46e1":{"description":"Success - Checkout session created successfully","content":{"application/json":{"schema":{"type":"object","description":"Response containing checkout session details and hosted checkout URL.","properties":{"checkout_id":{"type":"string","description":"Checkout identifier. Treat it as an opaque string.","example":"chk_1M2N3o4P5q6R7s8T","uniqueKey":"checkout_id","typeLabel":"string"},"checkout_url":{"type":"string","format":"uri","description":"Hosted checkout URL where your customer can complete payment.","example":"https://checkout.bachs.io/c/Mz9wDp3sVn7QaTf","uniqueKey":"checkout_url","typeLabel":"string\u003curi>"},"status":{"type":"string","enum":["open","completed","expired","cancelled"],"description":"Current checkout status. `open`: awaiting customer payment, where every new session starts. `completed`: payment succeeded, a terminal state. `expired`: the session window elapsed before payment, a terminal state. `cancelled`: cancelled before completion, a terminal state.","example":"open","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"expires_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp indicating when the checkout will expire. After this time, customers cannot complete payment through this checkout.","example":"2026-01-24T15:30:00.000Z","uniqueKey":"expires_at","typeLabel":"string\u003cdate-time>"},"created_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp indicating when the checkout was created.","example":"2026-01-24T14:30:00.000Z","uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"reference":{"oneOf":[{"type":"string","description":"Your own reference for this checkout, echoed back unchanged. `null` when you did not supply one.","example":"order_9876","uniqueKey":"reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your own reference for this checkout, echoed back unchanged. `null` when you did not supply one.","example":"order_9876","uniqueKey":"reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"reference","typeLabel":"string | null"},"platform_fee":{"oneOf":[{"type":"string","description":"The platform's cut of this sale, echoed back from the request, in the base currency of the sale. The key is always present; it reads `null`, not `\"0.00\"`, on a checkout that carries no fee, and on a checkout that split the sale with `transfer_data.amount` instead. See [Platform fees](/connect/platform-fees).","example":"20000.00","uniqueKey":"platform_fee.oneOf.0","typeLabel":"string"},{"type":"null","description":"The platform's cut of this sale, echoed back from the request, in the base currency of the sale. The key is always present; it reads `null`, not `\"0.00\"`, on a checkout that carries no fee, and on a checkout that split the sale with `transfer_data.amount` instead. See [Platform fees](/connect/platform-fees).","example":"20000.00","uniqueKey":"platform_fee.oneOf.1","typeLabel":"null"}],"uniqueKey":"platform_fee","typeLabel":"string | null"},"destination_amount":{"oneOf":[{"type":"string","description":"The seller's contracted share of this sale, echoed back from `transfer_data.amount`, in the base currency of the sale. Null on a checkout that carries no split, and on one that split the sale with `platform_fee` instead.","example":"80000.00","uniqueKey":"destination_amount.oneOf.0","typeLabel":"string"},{"type":"null","description":"The seller's contracted share of this sale, echoed back from `transfer_data.amount`, in the base currency of the sale. Null on a checkout that carries no split, and on one that split the sale with `platform_fee` instead.","example":"80000.00","uniqueKey":"destination_amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"destination_amount","typeLabel":"string | null"}},"uniqueKey":"","typeLabel":"object"},"example":{"checkout_id":"chk_1M2N3o4P5q6R7s8T","checkout_url":"https://checkout.bachs.io/c/Tb5rHn8YkQ2vXpL","status":"open","expires_at":"2026-01-24T15:30:00.000Z","created_at":"2026-01-24T14:30:00.000Z","reference":"order_9876"},"examples":{"Example":{"title":"Example","value":{"checkout_id":"chk_1M2N3o4P5q6R7s8T","checkout_url":"https://checkout.bachs.io/c/Tb5rHn8YkQ2vXpL","status":"open","expires_at":"2026-01-24T15:30:00.000Z","created_at":"2026-01-24T14:30:00.000Z","reference":"order_9876"}}},"exampleType":"examples"}},"exampleType":"examples"},"eea45ab6-fe5c-42ff-aa4a-d09f7d18bb51":{"description":"Bad Request - Validation errors or invalid request format. Check the `details` object for field-specific validation errors. Common causes: missing required fields, invalid data types, values outside allowed ranges, or invalid formats.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format used across all API endpoints","properties":{"detail":{"type":"string","description":"Human-readable error message explaining what went wrong.","example":"Invalid request parameters","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error code. Use this to handle errors programmatically. Common codes: VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, TOO_MANY_REQUESTS, INTERNAL_SERVER_ERROR, BAD_GATEWAY, SERVICE_UNAVAILABLE.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"errors":{"type":"array","description":"Optional field-level details on some validation errors. Other validation responses contain only detail and error_code. Entry fields depend on the validation source.","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that failed validation.","example":"amount","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","description":"Description of the validation failure.","example":"Amount must be a positive decimal string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"type":{"type":"string","description":"Error type identifier.","example":"value_error","uniqueKey":"errors.items.[INDEX].type","typeLabel":"string"},"code":{"type":"string","description":"Optional requirement-field rejection code. Some validation entries provide code instead of type.","example":"currency_not_supported","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"}},"required":["field","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"doc_url":{"type":"string","description":"Optional link to documentation for this error; some errors omit it.","example":"https://docs.bachs.io/api-reference/error-reference#general","uniqueKey":"doc_url","typeLabel":"string"}},"required":["detail","error_code"],"uniqueKey":"","typeLabel":"object"},"example":{"detail":"Invalid request parameters","error_code":"VALIDATION_ERROR","errors":[{"field":"amount","message":"Amount must be a positive decimal string","type":"value_error"}]},"examples":{"Example":{"title":"Example","value":{"detail":"Invalid request parameters","error_code":"VALIDATION_ERROR","errors":[{"field":"amount","message":"Amount must be a positive decimal string","type":"value_error"}]}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"description":"Maximum number of requests allowed per minute","schema":{"type":"integer","example":100}},"X-RateLimit-Remaining":{"description":"Number of requests remaining in the current window","schema":{"type":"integer","example":95}},"X-RateLimit-Reset":{"description":"Unix timestamp when the rate limit window resets","schema":{"type":"integer","example":1706102400}}},"exampleType":"examples"},"1536761b-582a-4da3-b989-d66623a24b68":{"description":"Unauthorized - Invalid, missing, or expired API key. Verify your API key is correctly formatted and included in the Authorization header as `Bearer sk_sandbox_...` or `Bearer sk_live_...`. Check that your key hasn't been revoked.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format used across all API endpoints","properties":{"detail":{"type":"string","description":"Human-readable error message explaining what went wrong.","example":"Invalid request parameters","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error code. Use this to handle errors programmatically. Common codes: VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, TOO_MANY_REQUESTS, INTERNAL_SERVER_ERROR, BAD_GATEWAY, SERVICE_UNAVAILABLE.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"errors":{"type":"array","description":"Optional field-level details on some validation errors. Other validation responses contain only detail and error_code. Entry fields depend on the validation source.","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that failed validation.","example":"amount","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","description":"Description of the validation failure.","example":"Amount must be a positive decimal string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"type":{"type":"string","description":"Error type identifier.","example":"value_error","uniqueKey":"errors.items.[INDEX].type","typeLabel":"string"},"code":{"type":"string","description":"Optional requirement-field rejection code. Some validation entries provide code instead of type.","example":"currency_not_supported","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"}},"required":["field","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"doc_url":{"type":"string","description":"Optional link to documentation for this error; some errors omit it.","example":"https://docs.bachs.io/api-reference/error-reference#general","uniqueKey":"doc_url","typeLabel":"string"}},"required":["detail","error_code"],"uniqueKey":"","typeLabel":"object"},"example":{"detail":"Invalid API key","error_code":"UNAUTHORIZED"},"examples":{"Example":{"title":"Example","value":{"detail":"Invalid API key","error_code":"UNAUTHORIZED"}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"description":"Maximum number of requests allowed per minute","schema":{"type":"integer","example":100}},"X-RateLimit-Remaining":{"description":"Number of requests remaining in the current window","schema":{"type":"integer","example":95}},"X-RateLimit-Reset":{"description":"Unix timestamp when the rate limit window resets","schema":{"type":"integer","example":1706102400}}},"exampleType":"examples"},"82dc6814-08b2-4a5e-8bf0-096da98f5d05":{"description":"Forbidden - API key does not have permission for the requested resource. Verify you're using the correct account's API key and that you're not trying to access another account's data.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format used across all API endpoints","properties":{"detail":{"type":"string","description":"Human-readable error message explaining what went wrong.","example":"Invalid request parameters","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error code. Use this to handle errors programmatically. Common codes: VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, TOO_MANY_REQUESTS, INTERNAL_SERVER_ERROR, BAD_GATEWAY, SERVICE_UNAVAILABLE.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"errors":{"type":"array","description":"Optional field-level details on some validation errors. Other validation responses contain only detail and error_code. Entry fields depend on the validation source.","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that failed validation.","example":"amount","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","description":"Description of the validation failure.","example":"Amount must be a positive decimal string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"type":{"type":"string","description":"Error type identifier.","example":"value_error","uniqueKey":"errors.items.[INDEX].type","typeLabel":"string"},"code":{"type":"string","description":"Optional requirement-field rejection code. Some validation entries provide code instead of type.","example":"currency_not_supported","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"}},"required":["field","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"doc_url":{"type":"string","description":"Optional link to documentation for this error; some errors omit it.","example":"https://docs.bachs.io/api-reference/error-reference#general","uniqueKey":"doc_url","typeLabel":"string"}},"required":["detail","error_code"],"uniqueKey":"","typeLabel":"object"},"example":{"detail":"API key does not have permission for this operation","error_code":"FORBIDDEN"},"examples":{"Example":{"title":"Example","value":{"detail":"API key does not have permission for this operation","error_code":"FORBIDDEN"}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"description":"Maximum number of requests allowed per minute","schema":{"type":"integer","example":100}},"X-RateLimit-Remaining":{"description":"Number of requests remaining in the current window","schema":{"type":"integer","example":95}},"X-RateLimit-Reset":{"description":"Unix timestamp when the rate limit window resets","schema":{"type":"integer","example":1706102400}}},"exampleType":"examples"},"bee742b7-f373-4c12-8dcd-9912822142c8":{"description":"Not Found - The requested resource does not exist. Verify the resource ID is correct and that it belongs to your account.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format used across all API endpoints","properties":{"detail":{"type":"string","description":"Human-readable error message explaining what went wrong.","example":"Invalid request parameters","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error code. Use this to handle errors programmatically. Common codes: VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, TOO_MANY_REQUESTS, INTERNAL_SERVER_ERROR, BAD_GATEWAY, SERVICE_UNAVAILABLE.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"errors":{"type":"array","description":"Optional field-level details on some validation errors. Other validation responses contain only detail and error_code. Entry fields depend on the validation source.","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that failed validation.","example":"amount","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","description":"Description of the validation failure.","example":"Amount must be a positive decimal string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"type":{"type":"string","description":"Error type identifier.","example":"value_error","uniqueKey":"errors.items.[INDEX].type","typeLabel":"string"},"code":{"type":"string","description":"Optional requirement-field rejection code. Some validation entries provide code instead of type.","example":"currency_not_supported","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"}},"required":["field","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"doc_url":{"type":"string","description":"Optional link to documentation for this error; some errors omit it.","example":"https://docs.bachs.io/api-reference/error-reference#general","uniqueKey":"doc_url","typeLabel":"string"}},"required":["detail","error_code"],"uniqueKey":"","typeLabel":"object"},"example":{"detail":"Resource not found","error_code":"NOT_FOUND"},"examples":{"Example":{"title":"Example","value":{"detail":"Resource not found","error_code":"NOT_FOUND"}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"description":"Maximum number of requests allowed per minute","schema":{"type":"integer","example":100}},"X-RateLimit-Remaining":{"description":"Number of requests remaining in the current window","schema":{"type":"integer","example":95}},"X-RateLimit-Reset":{"description":"Unix timestamp when the rate limit window resets","schema":{"type":"integer","example":1706102400}}},"exampleType":"examples"},"f1401f84-c027-462f-a02a-977c1eeaafe3":{"description":"Too Many Requests - Rate limit exceeded. Standard tier allows 100 requests per minute per API key. Wait a few seconds before retrying. Check X-RateLimit-Reset header for when the window resets.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format used across all API endpoints","properties":{"detail":{"type":"string","description":"Human-readable error message explaining what went wrong.","example":"Invalid request parameters","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error code. Use this to handle errors programmatically. Common codes: VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, TOO_MANY_REQUESTS, INTERNAL_SERVER_ERROR, BAD_GATEWAY, SERVICE_UNAVAILABLE.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"errors":{"type":"array","description":"Optional field-level details on some validation errors. Other validation responses contain only detail and error_code. Entry fields depend on the validation source.","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that failed validation.","example":"amount","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","description":"Description of the validation failure.","example":"Amount must be a positive decimal string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"type":{"type":"string","description":"Error type identifier.","example":"value_error","uniqueKey":"errors.items.[INDEX].type","typeLabel":"string"},"code":{"type":"string","description":"Optional requirement-field rejection code. Some validation entries provide code instead of type.","example":"currency_not_supported","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"}},"required":["field","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"doc_url":{"type":"string","description":"Optional link to documentation for this error; some errors omit it.","example":"https://docs.bachs.io/api-reference/error-reference#general","uniqueKey":"doc_url","typeLabel":"string"}},"required":["detail","error_code"],"uniqueKey":"","typeLabel":"object"},"example":{"detail":"Rate limit exceeded. Please retry after a few seconds.","error_code":"TOO_MANY_REQUESTS"},"examples":{"Example":{"title":"Example","value":{"detail":"Rate limit exceeded. Please retry after a few seconds.","error_code":"TOO_MANY_REQUESTS"}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"description":"Maximum number of requests allowed per minute","schema":{"type":"integer","example":100}},"X-RateLimit-Remaining":{"description":"Number of requests remaining in the current window (will be 0)","schema":{"type":"integer","example":0}},"X-RateLimit-Reset":{"description":"Unix timestamp when the rate limit window resets","schema":{"type":"integer","example":1706102400}},"Retry-After":{"description":"Number of seconds to wait before retrying","schema":{"type":"integer","example":30}}},"exampleType":"examples"},"7ada6ca5-909e-4c4d-8744-11e1dab26f25":{"description":"Internal Server Error - An unexpected error occurred while processing the request. Retry with exponential backoff. If the issue persists, contact support with your request context.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format used across all API endpoints","properties":{"detail":{"type":"string","description":"Human-readable error message explaining what went wrong.","example":"Invalid request parameters","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"type":"string","description":"Machine-readable error code. Use this to handle errors programmatically. Common codes: VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, TOO_MANY_REQUESTS, INTERNAL_SERVER_ERROR, BAD_GATEWAY, SERVICE_UNAVAILABLE.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"errors":{"type":"array","description":"Optional field-level details on some validation errors. Other validation responses contain only detail and error_code. Entry fields depend on the validation source.","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that failed validation.","example":"amount","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","description":"Description of the validation failure.","example":"Amount must be a positive decimal string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"type":{"type":"string","description":"Error type identifier.","example":"value_error","uniqueKey":"errors.items.[INDEX].type","typeLabel":"string"},"code":{"type":"string","description":"Optional requirement-field rejection code. Some validation entries provide code instead of type.","example":"currency_not_supported","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"}},"required":["field","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"doc_url":{"type":"string","description":"Optional link to documentation for this error; some errors omit it.","example":"https://docs.bachs.io/api-reference/error-reference#general","uniqueKey":"doc_url","typeLabel":"string"}},"required":["detail","error_code"],"uniqueKey":"","typeLabel":"object"},"example":{"detail":"An unexpected error occurred. Please try again later.","error_code":"INTERNAL_SERVER_ERROR"},"examples":{"Example":{"title":"Example","value":{"detail":"An unexpected error occurred. Please try again later.","error_code":"INTERNAL_SERVER_ERROR"}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"description":"Maximum number of requests allowed per minute","schema":{"type":"integer","example":100}},"X-RateLimit-Remaining":{"description":"Number of requests remaining in the current window","schema":{"type":"integer","example":95}},"X-RateLimit-Reset":{"description":"Unix timestamp when the rate limit window resets","schema":{"type":"integer","example":1706102400}}},"exampleType":"examples"}},"security":{"e47e810d-76a3-4f7f-9aaa-56887c9e6b9b":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"Bearer token authentication. Pass your API key as `Authorization: Bearer sk_...`. See [Authentication](/authentication) for keys, scopes, and sandbox vs production.","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"b6bdb0c4-2e36-4f68-8a92-7d4f6baca10a":{"url":"https://api.bachs.io","description":"Production"},"05c29608-074a-41fe-8247-0f116f352743":{"url":"https://sandbox-api.bachs.io","description":"Sandbox"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"Bearer token authentication. Pass your API key as `Authorization: Bearer sk_...`. See [Authentication](/authentication) for keys, scopes, and sandbox vs production.","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer token authentication. Pass your API key as `Authorization: Bearer sk_...`. See [Authentication](/authentication) for keys, scopes, and sandbox vs production.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"docs/openapi/openapi.json"},"subdomain":"bachs","siteName":"Bachs","title":"Create a checkout session - Bachs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T14:06:46.328Z","originalFileLocation":"api-reference/payments/create-checkout-session.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create a product-based checkout session\">\u003cmeta data-mint-head name=\"application-name\" content=\"Bachs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a checkout session - Bachs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a product-based checkout session\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bachs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.bachs.io/api-reference/payments/create-checkout-session\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bachs.mintlify.site/_mintlify/api/og/v2?division=Checkout+Sessions\u0026amp;title=Create+a+checkout+session\u0026amp;description=Create+a+product-based+checkout+session\u0026amp;theme=6365cd32178e755cedc188f0\u0026amp;signature=6874503693f0d323da92b901bfe0b50028261cb07873eef3b65dc10ea5213d0b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create a checkout session - Bachs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a product-based checkout session\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bachs.mintlify.site/_mintlify/api/og/v2?division=Checkout+Sessions\u0026amp;title=Create+a+checkout+session\u0026amp;description=Create+a+product-based+checkout+session\u0026amp;theme=6365cd32178e755cedc188f0\u0026amp;signature=6874503693f0d323da92b901bfe0b50028261cb07873eef3b65dc10ea5213d0b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/bachs/G65YpENXbxC-6e23/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bachs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5266eb\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"xCFt-c27YambrzzvRTU4CiqeElNFKGVJZw_8o9IgpdA\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.bachs.io/api-reference/payments/create-checkout-session\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/payments/create-checkout-session.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.bachs.io/#organization\",\"name\":\"Bachs\",\"url\":\"https://docs.bachs.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bachs/8QOZkInmSDP5Ad7N/logo.png?fit=max\u0026auto=format\u0026n=8QOZkInmSDP5Ad7N\u0026q=85\u0026s=9d4369b7a7ceeb9d196f647822f4ea01\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.bachs.io#website\",\"name\":\"Bachs\",\"url\":\"https://docs.bachs.io\",\"publisher\":{\"@id\":\"https://docs.bachs.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.bachs.io/api-reference/payments/create-checkout-session#webpage\",\"url\":\"https://docs.bachs.io/api-reference/payments/create-checkout-session\",\"name\":\"Create a checkout session\",\"description\":\"Create a product-based checkout session\",\"dateModified\":\"2026-11-12T14:06:46.328Z\",\"isPartOf\":{\"@id\":\"https://docs.bachs.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.bachs.io/api-reference/payments/create-checkout-session#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.bachs.io/api-reference/payments/create-checkout-session#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Checkout Sessions\",\"item\":\"https://docs.bachs.io/api-reference/checkout-sessions/object\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a checkout session\",\"item\":\"https://docs.bachs.io/api-reference/payments/create-checkout-session\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.bachs.io/api-reference/payments/create-checkout-session#apireference\",\"headline\":\"Create a checkout session\",\"name\":\"Create a checkout session\",\"description\":\"Create a product-based checkout session\",\"url\":\"https://docs.bachs.io/api-reference/payments/create-checkout-session\",\"mainEntityOfPage\":{\"@id\":\"https://docs.bachs.io/api-reference/payments/create-checkout-session#webpage\"},\"dateModified\":\"2026-11-12T14:06:46.328Z\",\"publisher\":{\"@id\":\"https://docs.bachs.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.bachs.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bachs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Bachs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/payments/create-checkout-session.md","siteName":"Bachs","nav":{"global":null,"tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":"/get-started"}]},{"tab":"Payments","pages":[{"title":"Payments","href":"/guides/payments/overview"}]},{"tab":"Billing","pages":[{"title":"Billing","href":"/guides/billing/overview"}]},{"tab":"Payouts","pages":[{"title":"Payouts","href":"/guides/payouts/overview"}]},{"tab":"Connect (Sub accounts)","pages":[{"title":"Connect (Sub accounts)","href":"/connect/overview"}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/developers/overview"}]},{"tab":"API reference","groups":[{"group":"General","pages":[{"title":"Introduction","mode":"wide","href":"/api-reference/overview"},{"title":"API Standards","mode":"wide","href":"/api-reference/api-standards"},{"title":"Permissions","mode":"wide","href":"/api-reference/permissions"},{"title":"Success responses","mode":"wide","href":"/api-reference/success-responses"},{"title":"Error Reference","mode":"wide","href":"/api-reference/error-reference"},{"title":"Errors","mode":"wide","href":"/errors"},{"title":"Pagination","mode":"wide","href":"/guides/pagination"},{"title":"Idempotency","mode":"wide","href":"/guides/idempotency"}]},{"group":"Checkout Sessions","pages":[{"title":"The checkout session object","mode":"wide","description":"A checkout session ties one or more products to a customer, provided at creation or collected on the hosted page, and produces a hosted checkout URL. It tracks the customer through payment and, once paid, links to the payment it created.","href":"/api-reference/checkout-sessions/object"},{"title":"Create a checkout session","deprecated":null,"version":null,"sidebarTitle":"Create checkout session","openapi":"/docs/openapi/openapi.json post /v1/checkout-sessions","href":"/api-reference/payments/create-checkout-session"},{"title":"Retrieve a checkout session","description":"Retrieve the details of a checkout session by its ID, including resolved product line items and charge information.\n\nThe `charge` field is `null` while the session is `OPEN` and populated once the customer submits a payment.\n\nRequires `payments:read` scope.","deprecated":null,"version":null,"sidebarTitle":"Get checkout session","openapi":"/docs/openapi/openapi.json get /v1/checkout-sessions/{checkout_id}","href":"/api-reference/checkout-sessions/get-checkout-session"}]},{"group":"Connected Accounts","pages":[{"title":"Create an account","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts","href":"/api-reference/accounts/create-an-account"},{"title":"List accounts","deprecated":null,"version":null,"sidebarTitle":"List connected accounts","openapi":"/docs/openapi/openapi.json get /v1/accounts","href":"/api-reference/organizations/list-connected-accounts"},{"title":"Get an account","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/accounts/{account_id}","href":"/api-reference/accounts/get-an-account"},{"title":"Update an account","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts/{account_id}","href":"/api-reference/accounts/update-an-account"},{"title":"Create an account link","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts/{account_id}/account-links","href":"/api-reference/accounts/create-an-account-link"},{"title":"Create a login link","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts/{account_id}/login_links","href":"/api-reference/accounts/create-a-login-link"},{"title":"Send a dashboard invite","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts/{account_id}/dashboard_invite","href":"/api-reference/accounts/send-a-dashboard-invite"},{"title":"Attach a company document","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts/{account_id}/documents","href":"/api-reference/connected-accounts/attach-a-company-document"},{"title":"List capabilities","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/accounts/{account_id}/capabilities","href":"/api-reference/accounts/list-capabilities"}]},{"group":"Products","pages":[{"title":"The product object","mode":"wide","href":"/api-reference/products/object"},{"title":"Create a product","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/products","href":"/api-reference/products/create-a-product"},{"title":"Retrieve a product","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/products/{product_id}","href":"/api-reference/products/retrieve-a-product"},{"title":"Update a product","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json patch /v1/products/{product_id}","href":"/api-reference/products/update-a-product"},{"title":"List products","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/products","href":"/api-reference/products/list-products"},{"title":"Archive a product","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/products/{product_id}/archive","href":"/api-reference/products/archive-a-product"},{"title":"Unarchive a product","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/products/{product_id}/unarchive","href":"/api-reference/products/unarchive-a-product"}]},{"group":"Subscriptions","pages":[{"title":"The subscription object","mode":"wide","href":"/api-reference/subscriptions/object"},{"title":"List subscriptions","deprecated":null,"version":null,"sidebarTitle":"List subscriptions","openapi":"/docs/openapi/openapi.json get /v1/subscriptions","href":"/api-reference/subscriptions/list-subscriptions"},{"title":"Retrieve a subscription","deprecated":null,"version":null,"sidebarTitle":"Get subscription","openapi":"/docs/openapi/openapi.json get /v1/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/get-subscription"},{"title":"Update a subscription","deprecated":null,"version":null,"sidebarTitle":"Update subscription","openapi":"/docs/openapi/openapi.json patch /v1/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/update-subscription"},{"title":"Cancel a subscription","deprecated":null,"version":null,"sidebarTitle":"Cancel subscription","openapi":"/docs/openapi/openapi.json delete /v1/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/cancel-subscription"}]},{"group":"Customers","pages":[{"title":"The customer object","mode":"wide","href":"/api-reference/customers/object"},{"title":"Create a customer","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/customers","href":"/api-reference/customers/create-a-customer"},{"title":"Retrieve a customer","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/customers/{customer_id}","href":"/api-reference/customers/retrieve-a-customer"},{"title":"Update a customer","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json patch /v1/customers/{customer_id}","href":"/api-reference/customers/update-a-customer"},{"title":"List customers","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/customers","href":"/api-reference/customers/list-customers"}]},{"group":"Customer sessions","pages":[{"title":"The customer session object","mode":"wide","href":"/api-reference/customer-sessions/object"},{"title":"Create a customer portal session","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/customers/{customer_id}/portal-sessions","href":"/api-reference/customer-sessions/create-a-customer-portal-session"}]},{"group":"Payments","pages":[{"title":"The payment object","mode":"wide","href":"/api-reference/payments/object"},{"title":"List payments","deprecated":null,"version":null,"sidebarTitle":"List payments","openapi":"/docs/openapi/openapi.json get /v1/payments","href":"/api-reference/payments/list-payments"},{"title":"Retrieve a payment","deprecated":null,"version":null,"sidebarTitle":"Get payment","openapi":"/docs/openapi/openapi.json get /v1/payments/{payment_id}","href":"/api-reference/payments/get-payment"},{"title":"Create a charge","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/charges","href":"/api-reference/payments/create-a-charge"}]},{"group":"Refunds","pages":[{"title":"The refund object","mode":"wide","href":"/api-reference/refunds/object"},{"title":"Create a refund","deprecated":null,"version":null,"sidebarTitle":"Create refund","openapi":"/docs/openapi/openapi.json post /v1/refunds","href":"/api-reference/refunds/create-refund"},{"title":"List refunds","deprecated":null,"version":null,"sidebarTitle":"List refunds","openapi":"/docs/openapi/openapi.json get /v1/refunds","href":"/api-reference/refunds/list-refunds"},{"title":"Retrieve a refund","deprecated":null,"version":null,"sidebarTitle":"Get refund","openapi":"/docs/openapi/openapi.json get /v1/refunds/{refund_id}","href":"/api-reference/refunds/get-refund"},{"title":"Retrieve a refund by charge","deprecated":null,"version":null,"sidebarTitle":"Get refund by charge","openapi":"/docs/openapi/openapi.json get /v1/refunds/by-charge/{payment_id}","href":"/api-reference/refunds/get-refund-by-charge"}]},{"group":"Disputes","pages":[{"title":"Get Dispute","deprecated":null,"version":null,"sidebarTitle":"Get dispute","openapi":"/docs/openapi/openapi.json get /v1/disputes/{dispute_id}","href":"/api-reference/disputes/get-dispute"},{"title":"List Disputes","deprecated":null,"version":null,"sidebarTitle":"List disputes","openapi":"/docs/openapi/openapi.json get /v1/disputes","href":"/api-reference/disputes/list-disputes"},{"title":"Submit Dispute","deprecated":null,"version":null,"sidebarTitle":"Submit dispute","openapi":"/docs/openapi/openapi.json post /v1/disputes/{dispute_id}/submit","href":"/api-reference/disputes/submit-dispute"},{"title":"Update Dispute Evidence","deprecated":null,"version":null,"sidebarTitle":"Update dispute evidence","openapi":"/docs/openapi/openapi.json patch /v1/disputes/{dispute_id}/evidence","href":"/api-reference/disputes/update-dispute-evidence"},{"title":"Upload Dispute Document","deprecated":null,"version":null,"sidebarTitle":"Upload dispute document","openapi":"/docs/openapi/openapi.json post /v1/disputes/uploads","href":"/api-reference/disputes/upload-dispute-document"}]},{"group":"Conversions","hidden":true,"pages":[{"title":"Create Conversion Quote","deprecated":null,"version":null,"sidebarTitle":"Create conversion quote","openapi":"/docs/openapi/openapi.json post /v1/conversions/quotes","href":"/api-reference/conversions/create-conversion-quote"},{"title":"Execute Conversion","deprecated":null,"version":null,"sidebarTitle":"Execute conversion","openapi":"/docs/openapi/openapi.json post /v1/conversions","href":"/api-reference/conversions/execute-conversion"},{"title":"Get Conversion","deprecated":null,"version":null,"sidebarTitle":"Get conversion","openapi":"/docs/openapi/openapi.json get /v1/conversions/{conversion_id}","href":"/api-reference/conversions/get-conversion"},{"title":"List Conversions","deprecated":null,"version":null,"sidebarTitle":"List conversions","openapi":"/docs/openapi/openapi.json get /v1/conversions","href":"/api-reference/conversions/list-conversions"}]},{"group":"Payouts","pages":[{"title":"The payout object","mode":"wide","href":"/api-reference/payouts/object"},{"title":"Create Payout","deprecated":null,"version":null,"sidebarTitle":"Create payout","openapi":"/docs/openapi/openapi.json post /v1/payouts","href":"/api-reference/payouts/create-payout"},{"title":"Create Payout Quote","deprecated":null,"version":null,"sidebarTitle":"Create payout quote","openapi":"/docs/openapi/openapi.json post /v1/payouts/quotes","href":"/api-reference/payouts/create-payout-quote"},{"title":"Get Payout","deprecated":null,"version":null,"sidebarTitle":"Get payout","openapi":"/docs/openapi/openapi.json get /v1/payouts/{withdrawal_id}","href":"/api-reference/payouts/get-payout"},{"title":"List Payouts","deprecated":null,"version":null,"sidebarTitle":"List payouts","openapi":"/docs/openapi/openapi.json get /v1/payouts","href":"/api-reference/payouts/list-payouts"}]},{"group":"Payout Destinations","pages":[{"title":"The payout destination object","mode":"wide","href":"/api-reference/payout-destinations/object"},{"title":"Create Payout Destination","deprecated":null,"version":null,"sidebarTitle":"Create payout destination","openapi":"/docs/openapi/openapi.json post /v1/payouts/destinations","href":"/api-reference/payouts/create-payout-destination"},{"title":"List Payout Destinations","deprecated":null,"version":null,"sidebarTitle":"List payout destinations","openapi":"/docs/openapi/openapi.json get /v1/payouts/destinations","href":"/api-reference/payouts/list-payout-destinations"},{"title":"Get Payout Destination","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/payouts/destinations/{destination_id}","href":"/api-reference/payouts/get-payout-destination"},{"title":"Update Payout Destination","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json patch /v1/payouts/destinations/{destination_id}","href":"/api-reference/payouts/update-payout-destination"},{"title":"Delete Payout Destination","deprecated":null,"version":null,"sidebarTitle":"Delete payout destination","openapi":"/docs/openapi/openapi.json delete /v1/payouts/destinations/{destination_id}","href":"/api-reference/payouts/delete-payout-destination"}]},{"group":"Balance","pages":[{"title":"The balance object","mode":"wide","href":"/api-reference/balance/object"},{"title":"Retrieve balances","deprecated":null,"version":null,"sidebarTitle":"Get balances","openapi":"/docs/openapi/openapi.json get /v1/balances","href":"/api-reference/accounts/get-balances"},{"title":"Get payout schedule","deprecated":null,"version":null,"sidebarTitle":"Get payout schedule","openapi":"/docs/openapi/openapi.json get /v1/balance_settings","href":"/api-reference/payouts/get-payout-schedule"},{"title":"Update payout schedule","deprecated":null,"version":null,"sidebarTitle":"Update payout schedule","openapi":"/docs/openapi/openapi.json post /v1/balance_settings","href":"/api-reference/payouts/update-payout-schedule"}]},{"group":"Virtual accounts","pages":[{"title":"The virtual account object","mode":"wide","href":"/api-reference/virtual-accounts/object"},{"title":"Create a virtual account","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/virtual-accounts","href":"/api-reference/virtual-accounts/create-a-virtual-account"},{"title":"Get a virtual account","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/virtual-accounts","href":"/api-reference/virtual-accounts/get-a-virtual-account"}]},{"group":"Your account","pages":[{"title":"Get your own account","deprecated":null,"version":null,"sidebarTitle":"Get my organization","openapi":"/docs/openapi/openapi.json get /v1/accounts/me","href":"/api-reference/organizations/get-my-organization"},{"title":"Get checkout settings","deprecated":null,"version":null,"sidebarTitle":"Get checkout settings","openapi":"/docs/openapi/openapi.json get /v1/accounts/checkout/settings","href":"/api-reference/organizations/get-checkout-settings"},{"title":"Update checkout settings","deprecated":null,"version":null,"sidebarTitle":"Update checkout settings","openapi":"/docs/openapi/openapi.json put /v1/accounts/checkout/settings","href":"/api-reference/organizations/update-checkout-settings"}]},{"group":"Files","pages":[{"title":"Upload a compliance file","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/files","href":"/api-reference/files/upload-a-compliance-file"}]},{"group":"Media","pages":[{"title":"Upload a file","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/utilities/uploads","href":"/api-reference/media/upload-a-file"},{"title":"Retrieve an upload","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/utilities/uploads/{upload_id}","href":"/api-reference/media/retrieve-an-upload"},{"title":"Delete an upload","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json delete /v1/utilities/uploads/{upload_id}","href":"/api-reference/media/delete-an-upload"}]},{"group":"Product Groups","hidden":true,"pages":[{"title":"Create Product Group","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/product-groups","href":"/api-reference/product-groups/create-product-group"},{"title":"List Product Groups","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/product-groups","href":"/api-reference/product-groups/list-product-groups"},{"title":"Get Product Group","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/product-groups/{group_id}","href":"/api-reference/product-groups/get-product-group"},{"title":"Update Product Group","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json patch /v1/product-groups/{group_id}","href":"/api-reference/product-groups/update-product-group"},{"title":"Delete Product Group","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json delete /v1/product-groups/{group_id}","href":"/api-reference/product-groups/delete-product-group"}]},{"group":"Misc","pages":[{"title":"List payment methods","deprecated":null,"version":null,"sidebarTitle":"List payment methods","openapi":"/docs/openapi/openapi.json get /v1/payment-methods","href":"/api-reference/payments/list-payment-methods"},{"title":"List payment rails","deprecated":null,"version":null,"sidebarTitle":"List payment rails","openapi":"/docs/openapi/openapi.json get /v1/payment-methods/rails","href":"/api-reference/payments/list-payment-rails"},{"title":"List payout supported currencies","deprecated":null,"version":null,"sidebarTitle":"List payout supported currencies","openapi":"/docs/openapi/openapi.json get /v1/currencies/payout-supported","href":"/api-reference/payments/list-payout-supported-currencies"},{"title":"List supported currencies","deprecated":null,"version":null,"sidebarTitle":"List supported currencies","openapi":"/docs/openapi/openapi.json get /v1/currencies/supported","href":"/api-reference/payments/list-supported-currencies"}]},{"group":"Transfers","pages":[{"title":"Create a transfer","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/transfers","href":"/api-reference/transfers/create-a-transfer"},{"title":"List transfers","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/transfers","href":"/api-reference/transfers/list-transfers"},{"title":"Get a transfer","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/transfers/{transfer_id}","href":"/api-reference/transfers/get-a-transfer"}]},{"group":"Persons","pages":[{"title":"List persons","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/accounts/{account_id}/persons","href":"/api-reference/persons/list-persons"},{"title":"Add a person","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts/{account_id}/persons","href":"/api-reference/persons/add-a-person"},{"title":"Read a person","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/accounts/{account_id}/persons/{person_id}","href":"/api-reference/persons/read-a-person"},{"title":"Update a person","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts/{account_id}/persons/{person_id}","href":"/api-reference/persons/update-a-person"},{"title":"Attach a document to a person","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/accounts/{account_id}/persons/{person_id}/documents","href":"/api-reference/persons/attach-a-document-to-a-person"},{"title":"Remove a person","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json delete /v1/accounts/{account_id}/persons/{person_id}","href":"/api-reference/persons/remove-a-person"}]},{"group":"Platform Fees","pages":[{"title":"List platform fees","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/platform_fees","href":"/api-reference/platform-fees/list-platform-fees"},{"title":"Get a platform fee","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/platform_fees/{fee_id}","href":"/api-reference/platform-fees/get-a-platform-fee"}]},{"group":"Reference","pages":[{"title":"List banks","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/reference/banks","href":"/api-reference/reference/list-banks"},{"title":"List mobile money providers","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/reference/momo","href":"/api-reference/reference/list-mobile-money-providers"},{"title":"List business structures","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/reference/business-structures","href":"/api-reference/reference/list-business-structures"},{"title":"List product categories","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json get /v1/reference/product-categories","href":"/api-reference/reference/list-product-categories"},{"title":"Resolve a bank account","deprecated":null,"version":null,"openapi":"/docs/openapi/openapi.json post /v1/misc/bank-accounts/resolve","href":"/api-reference/misc/resolve-a-bank-account"}]}]}]},"basePath":"","title":"Create a checkout session - Bachs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}