{
"success": false,
"error": "RATE_LIMITED",
"message": "Too many requests"
}
Payments
Debit a stored card, off-session
Debit a card already stored here, no payer present · metered billing, top-ups,
a usage threshold crossed.
productId says what was consumed, priceCents how much. The product must be
billingMode: pay_as_you_go (422 PRODUCT_NOT_PRICED_PER_USE otherwise) and
the currency comes from it.
Collecting a NEW card is not possible here · open a checkout session.
Crypto has its own endpoint, POST /v3/crypto/charges.
Optional key (≤255 chars, e.g. a UUID v4) making this POST safe to retry · the response is cached 24h and a retry with the SAME key replays it instead of re-executing. The same key with a different body → 422 IDEMPOTENCY_KEY_CONFLICT; a retry while the first is in flight → 409.
Maximum string length: 255
Example:
"5f3b9c2e-1a4d-4f2b-9c31-7e2a1b6d8c04"
Body
application/json
One shape only · an off-session debit of a stored card against a pay_as_you_go product. There is no method: customerPaymentMethodId names the instrument, and the instrument decides. A payer-present charge goes through the hosted checkout, crypto through POST /v3/crypto/charges.
Key-value pairs. ≤50 keys, keys ≤40 chars, values are
strings ≤500 chars (or null to clear). Nested structures must be
JSON-stringified into a single string value.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Suby.fi","colors":{"primary":"#2F5BFF","light":"#6E8CFF","dark":"#1E3ECC"},"logo":{"light":"https://mintcdn.com/suby/78hmNhVo7Bl_AwU_/logo/dark.png?fit=max\u0026auto=format\u0026n=78hmNhVo7Bl_AwU_\u0026q=85\u0026s=5a8b457489b514aac7397c50d3db89fd","dark":"https://mintcdn.com/suby/78hmNhVo7Bl_AwU_/logo/white.png?fit=max\u0026auto=format\u0026n=78hmNhVo7Bl_AwU_\u0026q=85\u0026s=24b2f25a962d5405a87e21b992972103","href":"https://suby.fi"},"favicon":"https://mintcdn.com/suby/78hmNhVo7Bl_AwU_/logo/icon.png?fit=max\u0026auto=format\u0026n=78hmNhVo7Bl_AwU_\u0026q=85\u0026s=ca6a8614c28bf9d93ddfdea94f947bf2","navbar":{"links":[{"href":"https://app.suby.fi","label":"Dashboard v2"}],"primary":{"type":"button","label":"Get API key","href":"https://app.suby.fi/dashboard/settings"}},"footer":{"socials":{"website":"https://suby.fi","discord":"https://discord.com/invite/C8dxBm3hpj"}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"suby","hasAudioNarration":false,"actualSubdomain":"suby","customDomains":["docs.suby.fi"],"gitSource":{"type":"github","owner":"subyhq","repo":"suby-monorepo","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ada11330d9ece1d40e85bba","collectionId":"8aa6702d-ba15-44c3-a3cf-bcd9d3875091","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ada11330d9ece1d40e85bba"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6adb382225425974785cb3c5","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API Reference","count":46},{"language":"default","tag":"Documentation","count":42},{"language":"default","tag":"Endpoints","count":39},{"language":"default","tag":"Platform","count":28},{"language":"default","tag":"Guides","count":15},{"language":"default","tag":"Features","count":14},{"language":"default","tag":"Bots","count":10},{"language":"default","tag":"Merchants","count":10},{"language":"default","tag":"Subscriptions","count":8},{"language":"default","tag":"Overview","count":7}]},"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":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","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":"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":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"v3-beta/api-reference/payments/debit-a-stored-card-off-session","slug":"/v3-beta/api-reference/payments/debit-a-stored-card-off-session","pageMetadata":{"title":"Debit a stored card, off-session","description":"Debit a card already stored here, no payer present · metered billing, top-ups,\na usage threshold crossed.\n\n`productId` says what was consumed, `priceCents` how much. The product must be\n`billingMode: pay_as_you_go` (422 `PRODUCT_NOT_PRICED_PER_USE` otherwise) and\nthe currency comes from it.\n\nCollecting a NEW card is not possible here · open a checkout session.\nCrypto has its own endpoint, `POST /v3/crypto/charges`.\n","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/payments/off-session","href":"/v3-beta/api-reference/payments/debit-a-stored-card-off-session","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Debit a card already stored here, no payer present · metered billing, top-ups,\\na usage threshold crossed.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"productId\"\n }), \" says what was consumed, \", _jsx(_components.code, {\n children: \"priceCents\"\n }), \" how much. The product must be\\n\", _jsx(_components.code, {\n children: \"billingMode: pay_as_you_go\"\n }), \" (422 \", _jsx(_components.code, {\n children: \"PRODUCT_NOT_PRICED_PER_USE\"\n }), \" otherwise) and\\nthe currency comes from it.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Collecting a NEW card is not possible here · open a checkout session.\\nCrypto has its own endpoint, \", _jsx(_components.code, {\n children: \"POST /v3/crypto/charges\"\n }), \".\"]\n })]\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":{"config":{},"pageMetadata":{"title":"Debit a stored card, off-session","description":"Debit a card already stored here, no payer present · metered billing, top-ups,\na usage threshold crossed.\n\n`productId` says what was consumed, `priceCents` how much. The product must be\n`billingMode: pay_as_you_go` (422 `PRODUCT_NOT_PRICED_PER_USE` otherwise) and\nthe currency comes from it.\n\nCollecting a NEW card is not possible here · open a checkout session.\nCrypto has its own endpoint, `POST /v3/crypto/charges`.\n","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/payments/off-session","href":"/v3-beta/api-reference/payments/debit-a-stored-card-off-session","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Payments"],"summary":"Debit a stored card, off-session","operationId":"createOffSessionPayment","description":"Debit a card already stored here, no payer present · metered billing, top-ups,\na usage threshold crossed.\n\n`productId` says what was consumed, `priceCents` how much. The product must be\n`billingMode: pay_as_you_go` (422 `PRODUCT_NOT_PRICED_PER_USE` otherwise) and\nthe currency comes from it.\n\nCollecting a NEW card is not possible here · open a checkout session.\nCrypto has its own endpoint, `POST /v3/crypto/charges`.\n","parameters":["cd3a265c-1f03-4000-9391-8a2c17e21b12"],"requestBody":"f715b8a0-3082-4038-9715-c22a9b64f520","responses":{"201":"79f4792f-2a59-4bb9-879a-67c7a4f90e49","401":"879ac30e-8cb2-493b-b097-153abe947286","404":"43d01557-d443-4794-879f-228675cc2342","422":"3e4f1147-6431-4b3b-97b1-572373b84ec3","429":"d217972d-4571-4cec-b340-f054d70e1d8c"},"method":"post","type":"path","servers":["62375d65-62da-41e1-863d-c10b0af1f3b6"],"security":["164323c1-4b00-4c8f-85da-d2ba943b0a12"],"path":"/v3/payments/off-session","baseUrlOptions":["https://api.beta.suby.fi"],"title":"Debit a stored card, off-session","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"cd3a265c-1f03-4000-9391-8a2c17e21b12":{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional key (≤255 chars, e.g. a UUID v4) making this POST safe to retry · the response is cached 24h and a retry with the SAME key replays it instead of re-executing. The same key with a different body → `422 IDEMPOTENCY_KEY_CONFLICT`; a retry while the first is in flight → `409`.","schema":{"type":"string","maxLength":255,"example":"5f3b9c2e-1a4d-4f2b-9c31-7e2a1b6d8c04","isRequired":false,"description":"Optional key (≤255 chars, e.g. a UUID v4) making this POST safe to retry · the response is cached 24h and a retry with the SAME key replays it instead of re-executing. The same key with a different body → `422 IDEMPOTENCY_KEY_CONFLICT`; a retry while the first is in flight → `409`.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["offSession","customer","customerPaymentMethodId","productId","priceCents"],"description":"One shape only · an off-session debit of a stored card against a `pay_as_you_go` product. There is no `method`: `customerPaymentMethodId` names the instrument, and the instrument decides. A payer-present charge goes through the hosted checkout, crypto through `POST /v3/crypto/charges`.","example":{"offSession":true,"customer":{"id":"cus_k400aus0ky29qniksprwe7e4"},"customerPaymentMethodId":"pi_x2032ganpa44h2y7eums4f7p","productId":"pro_fk28xlirbl01eb52ukr0qp13","priceCents":"1250","displayName":"April usage"},"properties":{"offSession":{"type":"boolean","enum":[true],"description":"Always `true`.","isRequired":true,"uniqueKey":"offSession","typeLabel":"enum\u003cboolean>"},"customer":{"type":"object","required":["id"],"description":"The customer must already exist · there is nothing stored to debit otherwise.","properties":{"id":{"type":"string","example":"cus_abc123","isRequired":true,"uniqueKey":"customer.id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"customer","typeLabel":"object"},"customerPaymentMethodId":{"type":"string","example":"pi_abc123","description":"The stored card to debit, from `GET /v3/customers/{id}/payment-methods`.","isRequired":true,"uniqueKey":"customerPaymentMethodId","typeLabel":"string"},"productId":{"type":"string","example":"pro_abc123","description":"A `pay_as_you_go` product · what the usage belongs to, and what `product_id` carries on `payment.succeeded`.","isRequired":true,"uniqueKey":"productId","typeLabel":"string"},"priceCents":{"type":"string","pattern":"^[1-9]\\d*$","example":"1250","description":"Minor units as a string of digits · `\"1250\"` = 12.50. The currency is the product's. Under 1.00 (VAT included) is refused with `CARD_PAYMENT_BELOW_MIN`.","isRequired":true,"uniqueKey":"priceCents","typeLabel":"string"},"displayName":{"type":"string","maxLength":200,"example":"April usage","description":"Receipt label for this period. Defaults to the product name.","uniqueKey":"displayName","typeLabel":"string"},"displayDescription":{"oneOf":[{"type":"string","maxLength":500,"uniqueKey":"displayDescription.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":500,"uniqueKey":"displayDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"displayDescription","typeLabel":"string | null"},"displayImageUrl":{"oneOf":[{"type":"string","format":"uri","uniqueKey":"displayImageUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","uniqueKey":"displayImageUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"displayImageUrl","typeLabel":"string\u003curi> | null"},"taxBehavior":{"type":"string","enum":["inclusive","exclusive"],"description":"MoR VAT · defaults to the product's. Inert when no VAT applies.","uniqueKey":"taxBehavior","typeLabel":"enum\u003cstring>"},"billingAddress":{"type":"object","properties":{"line1":{"oneOf":[{"type":"string","maxLength":200,"uniqueKey":"billingAddress.line1.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":200,"uniqueKey":"billingAddress.line1.oneOf.1","typeLabel":"null"}],"uniqueKey":"billingAddress.line1","typeLabel":"string | null"},"line2":{"oneOf":[{"type":"string","maxLength":200,"uniqueKey":"billingAddress.line2.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":200,"uniqueKey":"billingAddress.line2.oneOf.1","typeLabel":"null"}],"uniqueKey":"billingAddress.line2","typeLabel":"string | null"},"city":{"oneOf":[{"type":"string","maxLength":120,"uniqueKey":"billingAddress.city.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":120,"uniqueKey":"billingAddress.city.oneOf.1","typeLabel":"null"}],"uniqueKey":"billingAddress.city","typeLabel":"string | null"},"state":{"oneOf":[{"type":"string","maxLength":120,"uniqueKey":"billingAddress.state.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":120,"uniqueKey":"billingAddress.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"billingAddress.state","typeLabel":"string | null"},"postalCode":{"oneOf":[{"type":"string","maxLength":40,"uniqueKey":"billingAddress.postalCode.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":40,"uniqueKey":"billingAddress.postalCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"billingAddress.postalCode","typeLabel":"string | null"},"country":{"oneOf":[{"type":"string","description":"ISO 3166-1 alpha-2.","pattern":"^[A-Z]{2}$","uniqueKey":"billingAddress.country.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO 3166-1 alpha-2.","pattern":"^[A-Z]{2}$","uniqueKey":"billingAddress.country.oneOf.1","typeLabel":"null"}],"uniqueKey":"billingAddress.country","typeLabel":"string | null"}},"description":"Required when the customer has none on file · acquirers reject an empty country.","uniqueKey":"billingAddress","typeLabel":"object"},"businessData":{"type":"object","description":"Optional · omit it and the customer's stored `isBusiness` decides. Send it only to state something different for this debit.","properties":{"purchaseAsBusiness":{"type":"boolean","description":"B2B for this charge (drives the MoR VAT reverse-charge). Omitted → the customer's stored `isBusiness` answers; sent → this wins and becomes their standing status.","uniqueKey":"businessData.purchaseAsBusiness","typeLabel":"boolean"},"businessName":{"oneOf":[{"type":"string","maxLength":200,"uniqueKey":"businessData.businessName.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":200,"uniqueKey":"businessData.businessName.oneOf.1","typeLabel":"null"}],"uniqueKey":"businessData.businessName","typeLabel":"string | null"},"taxId":{"oneOf":[{"type":"string","maxLength":60,"description":"Buyer VAT / fiscal number.","uniqueKey":"businessData.taxId.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":60,"description":"Buyer VAT / fiscal number.","uniqueKey":"businessData.taxId.oneOf.1","typeLabel":"null"}],"uniqueKey":"businessData.taxId","typeLabel":"string | null"}},"uniqueKey":"businessData","typeLabel":"object"},"externalRef":{"type":"string","maxLength":120,"description":"Your reference · stored, echoed, filterable.","uniqueKey":"externalRef","typeLabel":"string"},"metadata":{"type":"object","additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"metadata.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"metadata.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"metadata.additionalProperties","typeLabel":"string | null"},"description":"Key-value pairs. ≤50 keys, keys ≤40 chars, values are\nstrings ≤500 chars (or `null` to clear). Nested structures must be\nJSON-stringified into a single string value.\n","uniqueKey":"metadata","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"offSession":true,"customer":{"id":"cus_k400aus0ky29qniksprwe7e4"},"customerPaymentMethodId":"pi_x2032ganpa44h2y7eums4f7p","productId":"pro_fk28xlirbl01eb52ukr0qp13","priceCents":"1250","displayName":"April usage"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"79f4792f-2a59-4bb9-879a-67c7a4f90e49":{"description":"Payment created","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"type":"object","description":"Endpoint-specific payload.","properties":{"payment":{"type":"object","description":"Public payment shape (`PaymentPublic`).\n\n**The response is scoped to its own rail.** `rail` says which: on `crypto` the\ncard-only fields (`declineCode`, `declineCategory`, `declineAdvice`,\n`declineNetworkCode`, `threeDSecureResult`) are ABSENT, and on `card` the\nchain fields (`tokenAmount`, `tokenFeeAmount`, `quoteFiatAmountCents`,\n`quoteFiatCurrency`, `cryptoSettlementMode`, `settlementChainId`,\n`settlementAsset`, `settlementRecipient`, `depositAddress`,\n`settlementTxHash`, `lifiTxHash`, `lifiSubstatus`) are. Absent, not null · a\nfield that could only ever read `null` on your rail is not \"unknown yet\", and\nbranching on it is branching on a case that cannot happen.\n","properties":{"rail":{"type":"string","enum":["card","crypto"],"description":"Card or chain · which half of this shape the payment fills in. Read it instead of inferring the rail from a null field.","uniqueKey":"data.payment.rail","typeLabel":"enum\u003cstring>"},"id":{"type":"string","example":"pay_abc123","uniqueKey":"data.payment.id","typeLabel":"string"},"organizationId":{"type":"string","uniqueKey":"data.payment.organizationId","typeLabel":"string"},"customerId":{"oneOf":[{"type":"string","uniqueKey":"data.payment.customerId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.customerId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.customerId","typeLabel":"string | null"},"productId":{"oneOf":[{"type":"string","uniqueKey":"data.payment.productId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.productId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.productId","typeLabel":"string | null"},"subscriptionId":{"oneOf":[{"type":"string","uniqueKey":"data.payment.subscriptionId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.subscriptionId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.subscriptionId","typeLabel":"string | null"},"status":{"type":"string","enum":["PENDING","AUTHORIZED","PENDING_3DS","PENDING_REDIRECT","BRIDGING","RECEIVED","PARTIAL","COMPLETED","FAILED","DECLINED","REFUNDED","PARTIALLY_REFUNDED","CANCELED","EXPIRED"],"uniqueKey":"data.payment.status","typeLabel":"enum\u003cstring>"},"paymentMethodCategory":{"oneOf":[{"type":"string","enum":["CARD","AMEX","COMMERCIAL_CARD","APPLE_PAY","GOOGLE_PAY","KLARNA","IDEAL","BANCONTACT","TWINT","BLIK","AFFIRM","ALMA","BILLIE","SCALAPAY","MULTIBANCO","PAYPAL","SEPA_DIRECT_DEBIT","ACH_DIRECT_DEBIT","STABLECOIN","VOLATILE_CRYPTO"],"description":"The method the NETWORK reported, resolved at settlement · not the one the payer clicked. Null until then, so absence means \"not settled yet\", never \"a card\". It names the payer's instrument (Klarna, iDEAL, Apple Pay), never the acquirer that processed it.","uniqueKey":"data.payment.paymentMethodCategory.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["CARD","AMEX","COMMERCIAL_CARD","APPLE_PAY","GOOGLE_PAY","KLARNA","IDEAL","BANCONTACT","TWINT","BLIK","AFFIRM","ALMA","BILLIE","SCALAPAY","MULTIBANCO","PAYPAL","SEPA_DIRECT_DEBIT","ACH_DIRECT_DEBIT","STABLECOIN","VOLATILE_CRYPTO"],"description":"The method the NETWORK reported, resolved at settlement · not the one the payer clicked. Null until then, so absence means \"not settled yet\", never \"a card\". It names the payer's instrument (Klarna, iDEAL, Apple Pay), never the acquirer that processed it.","uniqueKey":"data.payment.paymentMethodCategory.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.paymentMethodCategory","typeLabel":"enum\u003cstring> | null"},"declineCode":{"oneOf":[{"type":"string","description":"Normalized decline reason for a FAILED charge (Stripe-parity `decline_code`), e.g. `insufficient_funds`, `not_supported`, `stolen_card`, `expired_card`. Null on non-declined / non-card payments.","uniqueKey":"data.payment.declineCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Normalized decline reason for a FAILED charge (Stripe-parity `decline_code`), e.g. `insufficient_funds`, `not_supported`, `stolen_card`, `expired_card`. Null on non-declined / non-card payments.","uniqueKey":"data.payment.declineCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.declineCode","typeLabel":"string | null"},"declineCategory":{"oneOf":[{"type":"string","enum":["SOFT","HARD","AUTHENTICATION_REQUIRED"],"description":"Retryability of the decline: SOFT = transient (a retry may succeed), HARD = terminal (the credential is unusable), AUTHENTICATION_REQUIRED = the card is fine but the issuer wants the cardholder to authenticate, which no retry can supply. Null when not a decline.","uniqueKey":"data.payment.declineCategory.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["SOFT","HARD","AUTHENTICATION_REQUIRED"],"description":"Retryability of the decline: SOFT = transient (a retry may succeed), HARD = terminal (the credential is unusable), AUTHENTICATION_REQUIRED = the card is fine but the issuer wants the cardholder to authenticate, which no retry can supply. Null when not a decline.","uniqueKey":"data.payment.declineCategory.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.declineCategory","typeLabel":"enum\u003cstring> | null"},"declineAdvice":{"oneOf":[{"type":"string","enum":["TRY_AGAIN_LATER","DO_NOT_TRY_AGAIN","CONFIRM_CARD_DATA"],"description":"The card network's own instruction on what to do next. Distinct from `declineCategory`, which is our reading of the reason: the same reason can come back TRY_AGAIN_LATER on one charge and DO_NOT_TRY_AGAIN on another, and only this field says which. Null when the network returned no advice.","uniqueKey":"data.payment.declineAdvice.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["TRY_AGAIN_LATER","DO_NOT_TRY_AGAIN","CONFIRM_CARD_DATA"],"description":"The card network's own instruction on what to do next. Distinct from `declineCategory`, which is our reading of the reason: the same reason can come back TRY_AGAIN_LATER on one charge and DO_NOT_TRY_AGAIN on another, and only this field says which. Null when the network returned no advice.","uniqueKey":"data.payment.declineAdvice.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.declineAdvice","typeLabel":"enum\u003cstring> | null"},"declineNetworkCode":{"oneOf":[{"type":"string","description":"The card network's own decline code, verbatim (e.g. Visa `1A`). Not normalized on purpose · it is the identifier the cardholder's bank recognises. Null when the network returned none.","uniqueKey":"data.payment.declineNetworkCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"The card network's own decline code, verbatim (e.g. Visa `1A`). Not normalized on purpose · it is the identifier the cardholder's bank recognises. Null when the network returned none.","uniqueKey":"data.payment.declineNetworkCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.declineNetworkCode","typeLabel":"string | null"},"threeDSecureResult":{"oneOf":[{"type":"string","enum":["AUTHENTICATED","ATTEMPT_ACKNOWLEDGED","FAILED","NOT_SUPPORTED","PROCESSING_ERROR","NOT_REQUESTED"],"description":"How the 3-D Secure step ended for this charge. A refusal that follows a FAILED or PROCESSING_ERROR authentication is not the same event as an issuer refusing the funds, and no decline code separates them. Null when the charge never reached an authentication step.","uniqueKey":"data.payment.threeDSecureResult.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["AUTHENTICATED","ATTEMPT_ACKNOWLEDGED","FAILED","NOT_SUPPORTED","PROCESSING_ERROR","NOT_REQUESTED"],"description":"How the 3-D Secure step ended for this charge. A refusal that follows a FAILED or PROCESSING_ERROR authentication is not the same event as an issuer refusing the funds, and no decline code separates them. Null when the charge never reached an authentication step.","uniqueKey":"data.payment.threeDSecureResult.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.threeDSecureResult","typeLabel":"enum\u003cstring> | null"},"displayName":{"oneOf":[{"type":"string","uniqueKey":"data.payment.displayName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.displayName","typeLabel":"string | null"},"displayDescription":{"oneOf":[{"type":"string","uniqueKey":"data.payment.displayDescription.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.displayDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.displayDescription","typeLabel":"string | null"},"displayImageUrl":{"oneOf":[{"type":"string","uniqueKey":"data.payment.displayImageUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.displayImageUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.displayImageUrl","typeLabel":"string | null"},"priceCents":{"oneOf":[{"type":"string","uniqueKey":"data.payment.priceCents.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.priceCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.priceCents","typeLabel":"string | null"},"currency":{"oneOf":[{"type":"string","uniqueKey":"data.payment.currency.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.currency.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.currency","typeLabel":"string | null"},"tokenAmount":{"oneOf":[{"type":"string","uniqueKey":"data.payment.tokenAmount.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.tokenAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.tokenAmount","typeLabel":"string | null"},"tokenFeeAmount":{"oneOf":[{"type":"string","uniqueKey":"data.payment.tokenFeeAmount.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.tokenFeeAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.tokenFeeAmount","typeLabel":"string | null"},"quoteFiatAmountCents":{"oneOf":[{"type":"integer","uniqueKey":"data.payment.quoteFiatAmountCents.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.payment.quoteFiatAmountCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.quoteFiatAmountCents","typeLabel":"integer | null"},"quoteFiatCurrency":{"oneOf":[{"type":"string","uniqueKey":"data.payment.quoteFiatCurrency.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.quoteFiatCurrency.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.quoteFiatCurrency","typeLabel":"string | null"},"grossAmountCents":{"oneOf":[{"type":"integer","uniqueKey":"data.payment.grossAmountCents.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.payment.grossAmountCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.grossAmountCents","typeLabel":"integer | null"},"platformFeeCents":{"oneOf":[{"type":"integer","uniqueKey":"data.payment.platformFeeCents.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.payment.platformFeeCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.platformFeeCents","typeLabel":"integer | null"},"merchantNetCents":{"oneOf":[{"type":"integer","uniqueKey":"data.payment.merchantNetCents.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.payment.merchantNetCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.merchantNetCents","typeLabel":"integer | null"},"vatAmountCents":{"oneOf":[{"type":"integer","description":"The VAT portion INCLUDED in `grossAmountCents`. Null whenever `vatRateBps` is · same three conditions.","uniqueKey":"data.payment.vatAmountCents.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The VAT portion INCLUDED in `grossAmountCents`. Null whenever `vatRateBps` is · same three conditions.","uniqueKey":"data.payment.vatAmountCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.vatAmountCents","typeLabel":"integer | null"},"vatRateBps":{"oneOf":[{"type":"integer","description":"Applied VAT rate in basis points (2000 = 20%). Non-null only on a CARD charge, for a merchant Suby is the seller of record for, billed in the EU · null everywhere else. A crypto payment is never taxed whatever the merchant's mode: the payer sends an amount sized from the merchant's price and nothing is added on top.","uniqueKey":"data.payment.vatRateBps.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Applied VAT rate in basis points (2000 = 20%). Non-null only on a CARD charge, for a merchant Suby is the seller of record for, billed in the EU · null everywhere else. A crypto payment is never taxed whatever the merchant's mode: the payer sends an amount sized from the merchant's price and nothing is added on top.","uniqueKey":"data.payment.vatRateBps.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.vatRateBps","typeLabel":"integer | null"},"taxInclusive":{"type":"boolean","description":"true = price is VAT-inclusive (gross = price); false = exclusive (gross = price + VAT). The behavior the charge was priced with, snapshotted · it records how the price was READ, so it stays meaningful on a charge that collected no VAT (crypto, non-MoR), where gross = price either way.","uniqueKey":"data.payment.taxInclusive","typeLabel":"boolean"},"fxSurchargeCents":{"oneOf":[{"type":"integer","description":"Currency-conversion surcharge, INCLUDED in platformFeeCents (never a second deduction). Billed only when the acquirer settled this charge in a currency it was not priced in, and only on a fee plan that passes it through. Null = not billed.","uniqueKey":"data.payment.fxSurchargeCents.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Currency-conversion surcharge, INCLUDED in platformFeeCents (never a second deduction). Billed only when the acquirer settled this charge in a currency it was not priced in, and only on a fee plan that passes it through. Null = not billed.","uniqueKey":"data.payment.fxSurchargeCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.fxSurchargeCents","typeLabel":"integer | null"},"internationalCardSurchargeCents":{"oneOf":[{"type":"integer","description":"Surcharge for a card issued outside your own region, INCLUDED in platformFeeCents. Resolved at capture from the card's issuing country. Null = not billed.","uniqueKey":"data.payment.internationalCardSurchargeCents.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Surcharge for a card issued outside your own region, INCLUDED in platformFeeCents. Resolved at capture from the card's issuing country. Null = not billed.","uniqueKey":"data.payment.internationalCardSurchargeCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.internationalCardSurchargeCents","typeLabel":"integer | null"},"rollingReserveCents":{"oneOf":[{"type":"integer","description":"Held back at capture and released on maturity · NOT a fee and NOT deducted from merchantNetCents. It is your own money kept aside to cover a refund or a chargeback, and it is the difference between merchantNetCents and what the balance was credited. Null when your account carries no reserve.","uniqueKey":"data.payment.rollingReserveCents.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Held back at capture and released on maturity · NOT a fee and NOT deducted from merchantNetCents. It is your own money kept aside to cover a refund or a chargeback, and it is the difference between merchantNetCents and what the balance was credited. Null when your account carries no reserve.","uniqueKey":"data.payment.rollingReserveCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.rollingReserveCents","typeLabel":"integer | null"},"refundedAmountCents":{"oneOf":[{"type":"integer","uniqueKey":"data.payment.refundedAmountCents.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.payment.refundedAmountCents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.refundedAmountCents","typeLabel":"integer | null"},"refundedAt":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"data.payment.refundedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"data.payment.refundedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.refundedAt","typeLabel":"string\u003cdate-time> | null"},"cryptoSettlementMode":{"oneOf":[{"type":"string","uniqueKey":"data.payment.cryptoSettlementMode.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.cryptoSettlementMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.cryptoSettlementMode","typeLabel":"string | null"},"settlementChainId":{"oneOf":[{"type":"integer","uniqueKey":"data.payment.settlementChainId.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.payment.settlementChainId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.settlementChainId","typeLabel":"integer | null"},"settlementAsset":{"oneOf":[{"type":"string","uniqueKey":"data.payment.settlementAsset.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.settlementAsset.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.settlementAsset","typeLabel":"string | null"},"settlementRecipient":{"oneOf":[{"type":"string","uniqueKey":"data.payment.settlementRecipient.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.settlementRecipient.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.settlementRecipient","typeLabel":"string | null"},"depositAddress":{"oneOf":[{"type":"string","uniqueKey":"data.payment.depositAddress.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.depositAddress.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.depositAddress","typeLabel":"string | null"},"settlementTxHash":{"oneOf":[{"type":"string","description":"Ours · the settlement transfer. Null until the chain produces it.","uniqueKey":"data.payment.settlementTxHash.oneOf.0","typeLabel":"string"},{"type":"null","description":"Ours · the settlement transfer. Null until the chain produces it.","uniqueKey":"data.payment.settlementTxHash.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.settlementTxHash","typeLabel":"string | null"},"lifiTxHash":{"oneOf":[{"type":"string","description":"The bridge's transaction, on a payment we convert cross-chain. Null on a same-chain settlement, and until the bridge fills.","uniqueKey":"data.payment.lifiTxHash.oneOf.0","typeLabel":"string"},{"type":"null","description":"The bridge's transaction, on a payment we convert cross-chain. Null on a same-chain settlement, and until the bridge fills.","uniqueKey":"data.payment.lifiTxHash.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.lifiTxHash","typeLabel":"string | null"},"lifiSubstatus":{"oneOf":[{"type":"string","description":"Where that bridge transfer currently stands, as the bridge reports it. Null when no bridge is involved.","uniqueKey":"data.payment.lifiSubstatus.oneOf.0","typeLabel":"string"},{"type":"null","description":"Where that bridge transfer currently stands, as the bridge reports it. Null when no bridge is involved.","uniqueKey":"data.payment.lifiSubstatus.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.lifiSubstatus","typeLabel":"string | null"},"successUrl":{"oneOf":[{"type":"string","uniqueKey":"data.payment.successUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.successUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.successUrl","typeLabel":"string | null"},"cancelUrl":{"oneOf":[{"type":"string","uniqueKey":"data.payment.cancelUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.cancelUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.cancelUrl","typeLabel":"string | null"},"externalRef":{"oneOf":[{"type":"string","uniqueKey":"data.payment.externalRef.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.externalRef.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.externalRef","typeLabel":"string | null"},"paymentReceivedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the payer's crypto deposit landed at the address we gave them. It does NOT mean the sale is confirmed: on-chain funds still have to clear the settlement step (the SubyPayment split, or the bridge transaction) before we announce anything. Null on card charges.","uniqueKey":"data.payment.paymentReceivedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the payer's crypto deposit landed at the address we gave them. It does NOT mean the sale is confirmed: on-chain funds still have to clear the settlement step (the SubyPayment split, or the bridge transaction) before we announce anything. Null on card charges.","uniqueKey":"data.payment.paymentReceivedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.paymentReceivedAt","typeLabel":"string\u003cdate-time> | null"},"paymentSettledAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the merchant's share reached its destination on-chain.","uniqueKey":"data.payment.paymentSettledAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the merchant's share reached its destination on-chain.","uniqueKey":"data.payment.paymentSettledAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.paymentSettledAt","typeLabel":"string\u003cdate-time> | null"},"paymentConfirmedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the sale was confirmed to both sides · the instant `payment.succeeded` was emitted, the access granted, the receipt sent and the payer shown a success screen. On a crypto payment this is a few seconds after `paymentReceivedAt`: the settlement step that proves the deposit spendable has to clear first, and if it takes longer than ~35s we confirm anyway rather than hold the payer on our settlement. Null on card charges, where the capture (COMPLETED) is itself the confirmation.","uniqueKey":"data.payment.paymentConfirmedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the sale was confirmed to both sides · the instant `payment.succeeded` was emitted, the access granted, the receipt sent and the payer shown a success screen. On a crypto payment this is a few seconds after `paymentReceivedAt`: the settlement step that proves the deposit spendable has to clear first, and if it takes longer than ~35s we confirm anyway rather than hold the payer on our settlement. Null on card charges, where the capture (COMPLETED) is itself the confirmation.","uniqueKey":"data.payment.paymentConfirmedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.paymentConfirmedAt","typeLabel":"string\u003cdate-time> | null"},"createdAt":{"type":"string","format":"date-time","uniqueKey":"data.payment.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","uniqueKey":"data.payment.updatedAt","typeLabel":"string\u003cdate-time>"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time","description":"When an unfinished intent stops being payable. Set for card/APM (bounded to the checkout-session window, else 30 min) and crypto (per-chain deposit window · 60 min on Bitcoin). Past this, an abandoned PENDING intent is swept to EXPIRED. On a crypto deposit the sweep waits out a per-chain grace first (~20 min on Bitcoin, ~3 elsewhere): a transfer broadcast just inside the window is only visible to us just outside it, and one that arrives in that grace still settles. So `EXPIRED` lands later than this timestamp, and a deposit already seen is never expired by the clock at all · it is only waiting on confirmations. Null only for legacy rows.","uniqueKey":"data.payment.expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When an unfinished intent stops being payable. Set for card/APM (bounded to the checkout-session window, else 30 min) and crypto (per-chain deposit window · 60 min on Bitcoin). Past this, an abandoned PENDING intent is swept to EXPIRED. On a crypto deposit the sweep waits out a per-chain grace first (~20 min on Bitcoin, ~3 elsewhere): a transfer broadcast just inside the window is only visible to us just outside it, and one that arrives in that grace still settles. So `EXPIRED` lands later than this timestamp, and a deposit already seen is never expired by the clock at all · it is only waiting on confirmations. Null only for legacy rows.","uniqueKey":"data.payment.expiresAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.expiresAt","typeLabel":"string\u003cdate-time> | null"},"statusTimeline":{"type":"array","description":"Append-only status history · every status the payment moved through, oldest→newest. The last entry is where it currently stands / stopped. Populated on detail + list reads; empty for legacy rows created before the feature.","items":{"type":"object","properties":{"status":{"type":"string","description":"The status the payment transitioned into.","enum":["PENDING","AUTHORIZED","PENDING_3DS","PENDING_REDIRECT","BRIDGING","RECEIVED","PARTIAL","COMPLETED","FAILED","DECLINED","REFUNDED","PARTIALLY_REFUNDED","CANCELED","EXPIRED"],"uniqueKey":"data.payment.statusTimeline.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"at":{"type":"string","format":"date-time","description":"When the transition happened.","uniqueKey":"data.payment.statusTimeline.items.[INDEX].at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"data.payment.statusTimeline.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.payment.statusTimeline","typeLabel":"object[]"},"items":{"type":"array","description":"What was bought, line by line, frozen at create time. A payment link charges ONE total against N products, so `productId` alone cannot describe the order · read this instead. Absent on payments created before the field existed and on charges whose caller priced no lines. Amounts are in the payment's `currency`; a discount applies to the total, so the lines do not necessarily sum to `grossAmountCents`.","items":{"type":"object","properties":{"productId":{"oneOf":[{"type":"string","description":"Catalogue product · null on an ad-hoc line (a price and a label, no catalogue entry).","uniqueKey":"data.payment.\\items.items.[INDEX].productId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Catalogue product · null on an ad-hoc line (a price and a label, no catalogue entry).","uniqueKey":"data.payment.\\items.items.[INDEX].productId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.\\items.items.[INDEX].productId","typeLabel":"string | null"},"name":{"type":"string","description":"Product name as displayed at checkout, frozen at that moment.","uniqueKey":"data.payment.\\items.items.[INDEX].name","typeLabel":"string"},"quantity":{"type":"integer","uniqueKey":"data.payment.\\items.items.[INDEX].quantity","typeLabel":"integer"},"unitPriceCents":{"type":"integer","uniqueKey":"data.payment.\\items.items.[INDEX].unitPriceCents","typeLabel":"integer"}},"uniqueKey":"data.payment.\\items.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.payment.\\items","typeLabel":"object[]"},"asset":{"oneOf":[{"type":"object","description":"What the PAYER sent · their chain and their token. Populated on crypto reads. Distinct from `settlementAsset` / `settlementChain`, which say where the funds are HEADED: on an account that converges every token to one stablecoin the two sides differ on almost every payment.","properties":{"chainId":{"type":"integer","uniqueKey":"data.payment.asset.oneOf.0.chainId","typeLabel":"integer"},"chainName":{"oneOf":[{"type":"string","description":"The chain's proper noun, e.g. `BNB Smart Chain`. Data, never localized.","uniqueKey":"data.payment.asset.oneOf.0.chainName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The chain's proper noun, e.g. `BNB Smart Chain`. Data, never localized.","uniqueKey":"data.payment.asset.oneOf.0.chainName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.asset.oneOf.0.chainName","typeLabel":"string | null"},"chainLogoUrl":{"oneOf":[{"type":"string","uniqueKey":"data.payment.asset.oneOf.0.chainLogoUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.asset.oneOf.0.chainLogoUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.asset.oneOf.0.chainLogoUrl","typeLabel":"string | null"},"symbol":{"type":"string","uniqueKey":"data.payment.asset.oneOf.0.symbol","typeLabel":"string"},"decimals":{"type":"integer","uniqueKey":"data.payment.asset.oneOf.0.decimals","typeLabel":"integer"},"address":{"type":"string","description":"Token contract / SPL mint, or `NATIVE`.","uniqueKey":"data.payment.asset.oneOf.0.address","typeLabel":"string"},"logoUrl":{"oneOf":[{"type":"string","uniqueKey":"data.payment.asset.oneOf.0.logoUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.asset.oneOf.0.logoUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.asset.oneOf.0.logoUrl","typeLabel":"string | null"}},"uniqueKey":"data.payment.asset.oneOf.0","typeLabel":"object"},{"type":"null","description":"What the PAYER sent · their chain and their token. Populated on crypto reads. Distinct from `settlementAsset` / `settlementChain`, which say where the funds are HEADED: on an account that converges every token to one stablecoin the two sides differ on almost every payment.","properties":{"chainId":{"type":"integer"},"chainName":{"oneOf":[{"type":"string","description":"The chain's proper noun, e.g. `BNB Smart Chain`. Data, never localized."},{"type":"null","description":"The chain's proper noun, e.g. `BNB Smart Chain`. Data, never localized."}]},"chainLogoUrl":{"oneOf":[{"type":"string"},{"type":"null"}]},"symbol":{"type":"string"},"decimals":{"type":"integer"},"address":{"type":"string","description":"Token contract / SPL mint, or `NATIVE`."},"logoUrl":{"oneOf":[{"type":"string"},{"type":"null"}]}},"uniqueKey":"data.payment.asset.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.asset","typeLabel":"object | null"},"settlementChain":{"oneOf":[{"type":"object","description":"The chain named by `settlementChainId` · where the funds converge. Read together with `settlementAsset`. Null on card charges.","properties":{"chainId":{"type":"integer","uniqueKey":"data.payment.settlementChain.oneOf.0.chainId","typeLabel":"integer"},"name":{"oneOf":[{"type":"string","description":"The chain's proper noun, e.g. `Polygon`. Data, never localized.","uniqueKey":"data.payment.settlementChain.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The chain's proper noun, e.g. `Polygon`. Data, never localized.","uniqueKey":"data.payment.settlementChain.oneOf.0.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.settlementChain.oneOf.0.name","typeLabel":"string | null"},"logoUrl":{"oneOf":[{"type":"string","uniqueKey":"data.payment.settlementChain.oneOf.0.logoUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.payment.settlementChain.oneOf.0.logoUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.settlementChain.oneOf.0.logoUrl","typeLabel":"string | null"}},"uniqueKey":"data.payment.settlementChain.oneOf.0","typeLabel":"object"},{"type":"null","description":"The chain named by `settlementChainId` · where the funds converge. Read together with `settlementAsset`. Null on card charges.","properties":{"chainId":{"type":"integer"},"name":{"oneOf":[{"type":"string","description":"The chain's proper noun, e.g. `Polygon`. Data, never localized."},{"type":"null","description":"The chain's proper noun, e.g. `Polygon`. Data, never localized."}]},"logoUrl":{"oneOf":[{"type":"string"},{"type":"null"}]}},"uniqueKey":"data.payment.settlementChain.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.settlementChain","typeLabel":"object | null"},"deposit":{"oneOf":[{"type":"object","description":"Where the payer's deposit stands · **`GET /v3/payments/{id}` only**, and only while a crypto deposit is being watched. The list read does not carry it: it is what you poll ONE payment with, and paging it in would parse three chain snapshots per row to answer a question nobody asks of a page.","properties":{"expected":{"type":"string","uniqueKey":"data.payment.deposit.oneOf.0.expected","typeLabel":"string"},"received":{"type":"string","uniqueKey":"data.payment.deposit.oneOf.0.received","typeLabel":"string"},"remaining":{"type":"string","uniqueKey":"data.payment.deposit.oneOf.0.remaining","typeLabel":"string"},"confirmations":{"oneOf":[{"type":"object","properties":{"observed":{"type":"integer","uniqueKey":"data.payment.deposit.oneOf.0.confirmations.oneOf.0.observed","typeLabel":"integer"},"required":{"type":"integer","uniqueKey":"data.payment.deposit.oneOf.0.confirmations.oneOf.0.required","typeLabel":"integer"},"detectedAt":{"type":"string","format":"date-time","uniqueKey":"data.payment.deposit.oneOf.0.confirmations.oneOf.0.detectedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"data.payment.deposit.oneOf.0.confirmations.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"observed":{"type":"integer"},"required":{"type":"integer"},"detectedAt":{"type":"string","format":"date-time"}},"uniqueKey":"data.payment.deposit.oneOf.0.confirmations.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.deposit.oneOf.0.confirmations","typeLabel":"object | null"},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["INSUFFICIENT_DEPOSIT_AMOUNT","RBF_DETECTED","NETWORK_FEE_SURCHARGE"],"uniqueKey":"data.payment.deposit.oneOf.0.warnings.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"data.payment.deposit.oneOf.0.warnings.items.[INDEX].message","typeLabel":"string"},"data":{"type":"object","additionalProperties":true,"uniqueKey":"data.payment.deposit.oneOf.0.warnings.items.[INDEX].data","typeLabel":"object"}},"uniqueKey":"data.payment.deposit.oneOf.0.warnings.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.payment.deposit.oneOf.0.warnings","typeLabel":"object[]"}},"uniqueKey":"data.payment.deposit.oneOf.0","typeLabel":"object"},{"type":"null","description":"Where the payer's deposit stands · **`GET /v3/payments/{id}` only**, and only while a crypto deposit is being watched. The list read does not carry it: it is what you poll ONE payment with, and paging it in would parse three chain snapshots per row to answer a question nobody asks of a page.","properties":{"expected":{"type":"string"},"received":{"type":"string"},"remaining":{"type":"string"},"confirmations":{"oneOf":[{"type":"object","properties":{"observed":{"type":"integer"},"required":{"type":"integer"},"detectedAt":{"type":"string","format":"date-time"}}},{"type":"null","properties":{"observed":{"type":"integer"},"required":{"type":"integer"},"detectedAt":{"type":"string","format":"date-time"}}}]},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["INSUFFICIENT_DEPOSIT_AMOUNT","RBF_DETECTED","NETWORK_FEE_SURCHARGE"]},"message":{"type":"string"},"data":{"type":"object","additionalProperties":true}}}}},"uniqueKey":"data.payment.deposit.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.payment.deposit","typeLabel":"object | null"}},"uniqueKey":"data.payment","typeLabel":"object"},"checkout":{"oneOf":[{"type":"object","description":"Card/APM handoff (mutually exclusive with `instruction`).","properties":{"providerPaymentId":{"type":"string","uniqueKey":"data.checkout.oneOf.0.providerPaymentId","typeLabel":"string"},"redirectUrl":{"oneOf":[{"type":"string","uniqueKey":"data.checkout.oneOf.0.redirectUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.checkout.oneOf.0.redirectUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.checkout.oneOf.0.redirectUrl","typeLabel":"string | null"},"threeDsChallengeUrl":{"oneOf":[{"type":"string","uniqueKey":"data.checkout.oneOf.0.threeDsChallengeUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.checkout.oneOf.0.threeDsChallengeUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.checkout.oneOf.0.threeDsChallengeUrl","typeLabel":"string | null"},"clientSecret":{"oneOf":[{"type":"string","uniqueKey":"data.checkout.oneOf.0.clientSecret.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.checkout.oneOf.0.clientSecret.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.checkout.oneOf.0.clientSecret","typeLabel":"string | null"}},"uniqueKey":"data.checkout.oneOf.0","typeLabel":"object"},{"type":"null","description":"Card/APM handoff (mutually exclusive with `instruction`).","properties":{"providerPaymentId":{"type":"string"},"redirectUrl":{"oneOf":[{"type":"string"},{"type":"null"}]},"threeDsChallengeUrl":{"oneOf":[{"type":"string"},{"type":"null"}]},"clientSecret":{"oneOf":[{"type":"string"},{"type":"null"}]}},"uniqueKey":"data.checkout.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.checkout","typeLabel":"object | null"},"instruction":{"oneOf":[{"type":"object","description":"Crypto handoff (mutually exclusive with `checkout`), discriminated on `kind`.","properties":{"kind":{"type":"string","enum":["qr_deposit"],"uniqueKey":"data.instruction.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"chainId":{"type":"integer","uniqueKey":"data.instruction.oneOf.0.chainId","typeLabel":"integer"},"depositAddress":{"type":"string","uniqueKey":"data.instruction.oneOf.0.depositAddress","typeLabel":"string"},"expectedAmount":{"type":"string","uniqueKey":"data.instruction.oneOf.0.expectedAmount","typeLabel":"string"},"decimals":{"type":"integer","uniqueKey":"data.instruction.oneOf.0.decimals","typeLabel":"integer"},"symbol":{"type":"string","uniqueKey":"data.instruction.oneOf.0.symbol","typeLabel":"string"},"address":{"type":"string","description":"Token contract / SPL mint, or `NATIVE`.","uniqueKey":"data.instruction.oneOf.0.address","typeLabel":"string"},"bip21Uri":{"oneOf":[{"type":"string","uniqueKey":"data.instruction.oneOf.0.bip21Uri.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.instruction.oneOf.0.bip21Uri.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.instruction.oneOf.0.bip21Uri","typeLabel":"string | null"},"surchargeNote":{"oneOf":[{"type":"string","uniqueKey":"data.instruction.oneOf.0.surchargeNote.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.instruction.oneOf.0.surchargeNote.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.instruction.oneOf.0.surchargeNote","typeLabel":"string | null"}},"uniqueKey":"data.instruction.oneOf.0","typeLabel":"object"},{"type":"object","description":"Crypto handoff (mutually exclusive with `checkout`), discriminated on `kind`.","properties":{"kind":{"type":"string","enum":["wallet_connect"],"uniqueKey":"data.instruction.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"chainId":{"type":"integer","uniqueKey":"data.instruction.oneOf.1.chainId","typeLabel":"integer"},"contractAddress":{"type":"string","uniqueKey":"data.instruction.oneOf.1.contractAddress","typeLabel":"string"},"calldata":{"type":"string","uniqueKey":"data.instruction.oneOf.1.calldata","typeLabel":"string"},"value":{"oneOf":[{"type":"string","uniqueKey":"data.instruction.oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.instruction.oneOf.1.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.instruction.oneOf.1.value","typeLabel":"string | null"},"address":{"type":"string","uniqueKey":"data.instruction.oneOf.1.address","typeLabel":"string"},"blockhashExpiresAt":{"oneOf":[{"type":"string","uniqueKey":"data.instruction.oneOf.1.blockhashExpiresAt.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.instruction.oneOf.1.blockhashExpiresAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.instruction.oneOf.1.blockhashExpiresAt","typeLabel":"string | null"},"gasLimit":{"oneOf":[{"type":"string","uniqueKey":"data.instruction.oneOf.1.gasLimit.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.instruction.oneOf.1.gasLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.instruction.oneOf.1.gasLimit","typeLabel":"string | null"},"approval":{"oneOf":[{"type":"object","properties":{"spender":{"type":"string","uniqueKey":"data.instruction.oneOf.1.approval.oneOf.0.spender","typeLabel":"string"},"tokenAddress":{"type":"string","uniqueKey":"data.instruction.oneOf.1.approval.oneOf.0.tokenAddress","typeLabel":"string"},"amount":{"type":"string","uniqueKey":"data.instruction.oneOf.1.approval.oneOf.0.amount","typeLabel":"string"},"calldata":{"type":"string","uniqueKey":"data.instruction.oneOf.1.approval.oneOf.0.calldata","typeLabel":"string"}},"uniqueKey":"data.instruction.oneOf.1.approval.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"spender":{"type":"string"},"tokenAddress":{"type":"string"},"amount":{"type":"string"},"calldata":{"type":"string"}},"uniqueKey":"data.instruction.oneOf.1.approval.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.instruction.oneOf.1.approval","typeLabel":"object | null"}},"uniqueKey":"data.instruction.oneOf.1","typeLabel":"object"}],"uniqueKey":"data.instruction","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"payment":{"rail":"card","id":"pay_abc123","organizationId":"\u003cstring>","customerId":"\u003cstring>","productId":"\u003cstring>","subscriptionId":"\u003cstring>","status":"PENDING","paymentMethodCategory":"CARD","declineCode":"\u003cstring>","declineCategory":"SOFT","declineAdvice":"TRY_AGAIN_LATER","declineNetworkCode":"\u003cstring>","threeDSecureResult":"AUTHENTICATED","displayName":"\u003cstring>","displayDescription":"\u003cstring>","displayImageUrl":"\u003cstring>","priceCents":"\u003cstring>","currency":"\u003cstring>","tokenAmount":"\u003cstring>","tokenFeeAmount":"\u003cstring>","quoteFiatAmountCents":123,"quoteFiatCurrency":"\u003cstring>","grossAmountCents":123,"platformFeeCents":123,"merchantNetCents":123,"vatAmountCents":123,"vatRateBps":123,"taxInclusive":true,"fxSurchargeCents":123,"internationalCardSurchargeCents":123,"rollingReserveCents":123,"refundedAmountCents":123,"refundedAt":"2023-11-07T05:31:56Z","cryptoSettlementMode":"\u003cstring>","settlementChainId":123,"settlementAsset":"\u003cstring>","settlementRecipient":"\u003cstring>","depositAddress":"\u003cstring>","settlementTxHash":"\u003cstring>","lifiTxHash":"\u003cstring>","lifiSubstatus":"\u003cstring>","successUrl":"\u003cstring>","cancelUrl":"\u003cstring>","externalRef":"\u003cstring>","paymentReceivedAt":"2023-11-07T05:31:56Z","paymentSettledAt":"2023-11-07T05:31:56Z","paymentConfirmedAt":"2023-11-07T05:31:56Z","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","expiresAt":"2023-11-07T05:31:56Z","statusTimeline":[{"status":"PENDING","at":"2023-11-07T05:31:56Z"}],"items":[{"productId":"\u003cstring>","name":"\u003cstring>","quantity":123,"unitPriceCents":123}],"asset":{"chainId":123,"chainName":"\u003cstring>","chainLogoUrl":"\u003cstring>","symbol":"\u003cstring>","decimals":123,"address":"\u003cstring>","logoUrl":"\u003cstring>"},"settlementChain":{"chainId":123,"name":"\u003cstring>","logoUrl":"\u003cstring>"},"deposit":{"expected":"\u003cstring>","received":"\u003cstring>","remaining":"\u003cstring>","confirmations":{"observed":123,"required":123,"detectedAt":"2023-11-07T05:31:56Z"},"warnings":[{"code":"INSUFFICIENT_DEPOSIT_AMOUNT","message":"\u003cstring>","data":{}}]}},"checkout":{"providerPaymentId":"\u003cstring>","redirectUrl":"\u003cstring>","threeDsChallengeUrl":"\u003cstring>","clientSecret":"\u003cstring>"},"instruction":{"kind":"qr_deposit","chainId":123,"depositAddress":"\u003cstring>","expectedAmount":"\u003cstring>","decimals":123,"symbol":"\u003cstring>","address":"\u003cstring>","bip21Uri":"\u003cstring>","surchargeNote":"\u003cstring>"}},"message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"879ac30e-8cb2-493b-b097-153abe947286":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"Machine-readable error code.","example":"NOT_FOUND","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"Resource not found","uniqueKey":"message","typeLabel":"string"},"data":{"description":"Optional error detail.","uniqueKey":"data","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":"UNAUTHORIZED","message":"Invalid or missing API key"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"UNAUTHORIZED","message":"Invalid or missing API key"}}},"exampleType":"examples"}},"exampleType":"examples"},"43d01557-d443-4794-879f-228675cc2342":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"Machine-readable error code.","example":"NOT_FOUND","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"Resource not found","uniqueKey":"message","typeLabel":"string"},"data":{"description":"Optional error detail.","uniqueKey":"data","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":"NOT_FOUND","message":"Resource not found"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"NOT_FOUND","message":"Resource not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"3e4f1147-6431-4b3b-97b1-572373b84ec3":{"description":"Request failed schema validation","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"Machine-readable error code.","example":"NOT_FOUND","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"Resource not found","uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","description":"Optional error detail.","properties":{"fieldErrors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"data.fieldErrors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"data.fieldErrors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"data.fieldErrors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.fieldErrors","typeLabel":"object[]"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":"VALIDATION_ERROR","message":"Validation failed","data":{"fieldErrors":[{"field":"method","message":"method is a required field"}]}},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"VALIDATION_ERROR","message":"Validation failed","data":{"fieldErrors":[{"field":"method","message":"method is a required field"}]}}}},"exampleType":"examples"}},"exampleType":"examples"},"d217972d-4571-4cec-b340-f054d70e1d8c":{"description":"Too many requests","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"Machine-readable error code.","example":"NOT_FOUND","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"Resource not found","uniqueKey":"message","typeLabel":"string"},"data":{"description":"Optional error detail.","uniqueKey":"data","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":"RATE_LIMITED","message":"Too many requests"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"RATE_LIMITED","message":"Too many requests"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"164323c1-4b00-4c8f-85da-d2ba943b0a12":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Suby-Api-Key","description":"Secret API key. `sk_live_…` (production) or `sk_sandbox_…` (sandbox).","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"62375d65-62da-41e1-863d-c10b0af1f3b6":{"url":"https://api.beta.suby.fi","description":"Production + sandbox (environment selected by API key prefix)"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Suby-Api-Key","description":"Secret API key. `sk_live_…` (production) or `sk_sandbox_…` (sandbox).","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-Suby-Api-Key","type":"string","description":"Secret API key. `sk_live_…` (production) or `sk_sandbox_…` (sandbox).","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-Suby-Api-Key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"v3-beta/api-reference/openapi.yaml"},"subdomain":"suby","siteName":"Suby.fi","title":"Debit a stored card, off-session - Suby.fi","navMaps":{"firstHrefInVersion":{"v3-beta":{"href":"/v3-beta/api-reference/payments/debit-a-stored-card-off-session","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T13:35:54.048Z","originalFileLocation":"v3-beta/api-reference/payments/debit-a-stored-card-off-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=\"system\"}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=\"Debit a card already stored here, no payer present · metered billing, top-ups, a usage threshold crossed. productId says what was consumed, priceCents how much. The product must be billingMode: pay_as_you_go (422 PRODUCT_NOT_PRICED_PER_USE otherwise) and the currency comes from it. Collecting a NEW card is not possible here · open a checkout session. Crypto has its own endpoint, POST /v3/crypto/charges.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Suby.fi\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/suby/K5zAxKZCvFlEOxIM/_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/suby/K5zAxKZCvFlEOxIM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/suby/K5zAxKZCvFlEOxIM/_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/suby/K5zAxKZCvFlEOxIM/_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/suby/K5zAxKZCvFlEOxIM/_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/suby/K5zAxKZCvFlEOxIM/_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/suby/K5zAxKZCvFlEOxIM/_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/suby/K5zAxKZCvFlEOxIM/_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/suby/K5zAxKZCvFlEOxIM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Debit a stored card, off-session - Suby.fi\">\u003cmeta data-mint-head property=\"og:description\" content=\"Debit a card already stored here, no payer present · metered billing, top-ups, a usage threshold crossed. productId says what was consumed, priceCents how much. The product must be billingMode: pay_as_you_go (422 PRODUCT_NOT_PRICED_PER_USE otherwise) and the currency comes from it. Collecting a NEW card is not possible here · open a checkout session. Crypto has its own endpoint, POST /v3/crypto/charges.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Suby.fi\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://suby.mintlify.app/_mintlify/api/og/v2?division=Payments\u0026amp;title=Debit+a+stored+card%2C+off-session\u0026amp;description=Debit+a+card+already+stored+here%2C+no+payer+present+%C2%B7+metered+billing%2C+top-ups%2C%0Aa+usage+threshold+crossed.%0A%0A%60productId%60+says+what+was+consumed%2C+%60priceCents%60+how+\u0026amp;theme=69a80b99b04499f8ba92403e\u0026amp;signature=ada4bb07d9925a87788eb3be2eea9fc9ac8a169fc4fa6010865c24220ab40a6c\">\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=\"Debit a stored card, off-session - Suby.fi\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Debit a card already stored here, no payer present · metered billing, top-ups, a usage threshold crossed. productId says what was consumed, priceCents how much. The product must be billingMode: pay_as_you_go (422 PRODUCT_NOT_PRICED_PER_USE otherwise) and the currency comes from it. Collecting a NEW card is not possible here · open a checkout session. Crypto has its own endpoint, POST /v3/crypto/charges.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://suby.mintlify.app/_mintlify/api/og/v2?division=Payments\u0026amp;title=Debit+a+stored+card%2C+off-session\u0026amp;description=Debit+a+card+already+stored+here%2C+no+payer+present+%C2%B7+metered+billing%2C+top-ups%2C%0Aa+usage+threshold+crossed.%0A%0A%60productId%60+says+what+was+consumed%2C+%60priceCents%60+how+\u0026amp;theme=69a80b99b04499f8ba92403e\u0026amp;signature=ada4bb07d9925a87788eb3be2eea9fc9ac8a169fc4fa6010865c24220ab40a6c\">\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/suby/K5zAxKZCvFlEOxIM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Suby.fi\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2F5BFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v3-beta/api-reference/payments/debit-a-stored-card-off-session.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.suby.fi/#organization\",\"name\":\"Suby.fi\",\"url\":\"https://docs.suby.fi\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/suby/78hmNhVo7Bl_AwU_/logo/dark.png?fit=max\u0026auto=format\u0026n=78hmNhVo7Bl_AwU_\u0026q=85\u0026s=5a8b457489b514aac7397c50d3db89fd\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.suby.fi#website\",\"name\":\"Suby.fi\",\"url\":\"https://docs.suby.fi\",\"publisher\":{\"@id\":\"https://docs.suby.fi/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session#webpage\",\"url\":\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session\",\"name\":\"Debit a stored card, off-session\",\"description\":\"Debit a card already stored here, no payer present · metered billing, top-ups, a usage threshold crossed. productId says what was consumed, priceCents how much. The product must be billingMode: pay_as_you_go (422 PRODUCT_NOT_PRICED_PER_USE otherwise) and the currency comes from it. Collecting a NEW card is not possible here · open a checkout session. Crypto has its own endpoint, POST /v3/crypto/charges.\",\"dateModified\":\"2026-10-22T13:35:54.048Z\",\"isPartOf\":{\"@id\":\"https://docs.suby.fi#website\"},\"breadcrumb\":{\"@id\":\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.suby.fi/v3-beta/api-reference/products/list-products\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Payments\",\"item\":\"https://docs.suby.fi/v3-beta/api-reference/payments/list-payments\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Debit a stored card, off-session\",\"item\":\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session#apireference\",\"headline\":\"Debit a stored card, off-session\",\"name\":\"Debit a stored card, off-session\",\"description\":\"Debit a card already stored here, no payer present · metered billing, top-ups, a usage threshold crossed. productId says what was consumed, priceCents how much. The product must be billingMode: pay_as_you_go (422 PRODUCT_NOT_PRICED_PER_USE otherwise) and the currency comes from it. Collecting a NEW card is not possible here · open a checkout session. Crypto has its own endpoint, POST /v3/crypto/charges.\",\"url\":\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session\",\"mainEntityOfPage\":{\"@id\":\"https://docs.suby.fi/v3-beta/api-reference/payments/debit-a-stored-card-off-session#webpage\"},\"dateModified\":\"2026-10-22T13:35:54.048Z\",\"publisher\":{\"@id\":\"https://docs.suby.fi/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.suby.fi#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Suby.fi\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Suby.fi","nav":{"global":null,"versions":[{"version":"v3-beta","default":true,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/v3-beta/docs/introduction/AI"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/v3-beta/docs/guides/discord/overview"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/v3-beta/api-reference/overview"},{"group":"Get started","pages":[{"title":"Introduction","href":"/v3-beta/introduction"},{"title":"Authentication","href":"/v3-beta/authentication"},{"title":"Quickstart","href":"/v3-beta/quickstart"}]},{"group":"Core concepts","pages":[{"title":"Idempotency","href":"/v3-beta/idempotency"},{"title":"Webhooks","href":"/v3-beta/webhooks"},{"title":"Errors \u0026 responses","href":"/v3-beta/errors"}]}]},{"group":"Endpoints","pages":[{"group":"Products","pages":[{"title":"List products","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/products","href":"/v3-beta/api-reference/products/list-products"},{"title":"Create a product","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/products","href":"/v3-beta/api-reference/products/create-a-product"},{"title":"Retrieve a product","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/products/{id}","href":"/v3-beta/api-reference/products/retrieve-a-product"},{"title":"Update a product","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml patch /v3/products/{id}","href":"/v3-beta/api-reference/products/update-a-product"},{"title":"Take a product off sale","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/products/{id}/archive","href":"/v3-beta/api-reference/products/take-a-product-off-sale"},{"title":"Put a product back on sale","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/products/{id}/unarchive","href":"/v3-beta/api-reference/products/put-a-product-back-on-sale"}]},{"group":"Checkout","pages":[{"title":"Create a checkout session","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/checkout/sessions","href":"/v3-beta/api-reference/checkout/create-a-checkout-session"},{"title":"Retrieve a checkout session","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/checkout/sessions/{token}","href":"/v3-beta/api-reference/checkout/retrieve-a-checkout-session"}]},{"group":"Payments","pages":[{"title":"List payments","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/payments","href":"/v3-beta/api-reference/payments/list-payments"},{"title":"Retrieve a payment","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/payments/{id}","href":"/v3-beta/api-reference/payments/retrieve-a-payment"},{"title":"Get the receipt (JSON)","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/payments/{id}/receipt","href":"/v3-beta/api-reference/payments/get-the-receipt-json"},{"title":"Get the receipt (PDF)","description":"Renders the receipt to a downloadable PDF invoice. Returns the raw PDF\nbytes (`application/pdf`) · **not** the JSON envelope.\n\nThe invoice **issuer** (\"From\") depends on your settlement mode: on\nMerchant-of-Record accounts Suby is the legal seller, so the invoice is\nalways issued by **Suby SAS** and your business\nappears on the \"Fulfilled by\" line.\n","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/payments/{id}/receipt.pdf","href":"/v3-beta/api-reference/payments/get-the-receipt-pdf"},{"title":"Debit a stored card, off-session","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/payments/off-session","href":"/v3-beta/api-reference/payments/debit-a-stored-card-off-session"},{"title":"Refund a captured payment","description":"Refund a captured card/APM payment. Omit `refundCents` for a full refund of the remaining amount. Crypto is not refundable · funds settle on-chain (`PAYMENT_NOT_REFUNDABLE`).\n\n**Read `refund`, not `payment.status`.** The row flips to `REFUNDED` / `PARTIALLY_REFUNDED` only when the money moves, on the acquirer's confirmation and in the same transaction as the balance debit · so `payment.status` usually still reads `COMPLETED` here. `refund.paymentStatusAfter` says where it lands, and the `payment.refunded` / `payment.partially_refunded` webhook fires when it does.","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/payments/{id}/refund","href":"/v3-beta/api-reference/payments/refund-a-captured-payment"}]},{"group":"Subscriptions","pages":[{"title":"List subscriptions","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/subscriptions","href":"/v3-beta/api-reference/subscriptions/list-subscriptions"},{"title":"Retrieve a subscription","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/subscriptions/{id}","href":"/v3-beta/api-reference/subscriptions/retrieve-a-subscription"},{"title":"Cancel a subscription","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/subscriptions/{id}/cancel","href":"/v3-beta/api-reference/subscriptions/cancel-a-subscription"},{"title":"Change the plan or the quantity","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/subscriptions/{id}/change-plan","href":"/v3-beta/api-reference/subscriptions/change-the-plan-or-the-quantity"},{"title":"Price a plan or quantity change","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/subscriptions/{id}/change-plan/preview","href":"/v3-beta/api-reference/subscriptions/price-a-plan-or-quantity-change"},{"title":"Call off a scheduled plan change","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/subscriptions/{id}/cancel-plan-change","href":"/v3-beta/api-reference/subscriptions/call-off-a-scheduled-plan-change"},{"title":"Retry a failing renewal now","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/subscriptions/{id}/retry-renewal","href":"/v3-beta/api-reference/subscriptions/retry-a-failing-renewal-now"},{"title":"Change the expiration date","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/subscriptions/{id}/period-end","href":"/v3-beta/api-reference/subscriptions/change-the-expiration-date"}]},{"group":"Discount Codes","pages":[{"title":"List discount codes","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/discount-codes","href":"/v3-beta/api-reference/discount-codes/list-discount-codes"},{"title":"Create a discount code","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/discount-codes","href":"/v3-beta/api-reference/discount-codes/create-a-discount-code"},{"title":"Retrieve a discount code","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/discount-codes/{id}","href":"/v3-beta/api-reference/discount-codes/retrieve-a-discount-code"},{"title":"Delete a discount code","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml delete /v3/discount-codes/{id}","href":"/v3-beta/api-reference/discount-codes/delete-a-discount-code"},{"title":"Update a discount code","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml patch /v3/discount-codes/{id}","href":"/v3-beta/api-reference/discount-codes/update-a-discount-code"}]},{"group":"Crypto","pages":[{"title":"Chains and tokens this account accepts","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/crypto/assets","href":"/v3-beta/api-reference/crypto/chains-and-tokens-this-account-accepts"},{"title":"Price a fiat amount in a token","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/crypto/quote","href":"/v3-beta/api-reference/crypto/price-a-fiat-amount-in-a-token"},{"title":"Create a crypto charge","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/crypto/charges","href":"/v3-beta/api-reference/crypto/create-a-crypto-charge"}]},{"group":"Customers","pages":[{"title":"List customers","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/customers","href":"/v3-beta/api-reference/customers/list-customers"},{"title":"Create (or get) a customer","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/customers","href":"/v3-beta/api-reference/customers/create-or-get-a-customer"},{"title":"Retrieve a customer","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/customers/{id}","href":"/v3-beta/api-reference/customers/retrieve-a-customer"},{"title":"Update a customer","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml patch /v3/customers/{id}","href":"/v3-beta/api-reference/customers/update-a-customer"}]},{"group":"Payment Methods","pages":[{"title":"List saved payment methods","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml get /v3/customers/{id}/payment-methods","href":"/v3-beta/api-reference/payment-methods/list-saved-payment-methods"},{"title":"Revoke a saved payment method","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml delete /v3/customers/{id}/payment-methods/{pmId}","href":"/v3-beta/api-reference/payment-methods/revoke-a-saved-payment-method"}]},{"group":"Licence Key","pages":[{"title":"Is this licence key still valid","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/licenses/validate","href":"/v3-beta/api-reference/licence-key/is-this-licence-key-still-valid"},{"title":"Take a seat for one machine","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/licenses/activate","href":"/v3-beta/api-reference/licence-key/take-a-seat-for-one-machine"},{"title":"Free a machine's seat","deprecated":null,"version":null,"openapi":"/v3-beta/api-reference/openapi.yaml post /v3/licenses/deactivate","href":"/v3-beta/api-reference/licence-key/free-a-machines-seat"}]}]}]}]}]},"title":"Debit a stored card, off-session - Suby.fi","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}