{
"code": 2103,
"message": "This customer already has a saved payment method on this channel."
}
This call places a real MYR 1.00 verification transaction. CommercePay charges the customer’s payment method MYR 1.00 through the provider to verify the card/wallet is valid, then automatically refunds it once the save completes. Expect the normal payment callback/webhook activity for this verification transaction — no separate refund call is needed on your side.
One saved payment per customer per channel. If customer.username already has a saved payment method on the given channelId, this call fails with UserIsSavedPayment (2103) instead of replacing it. To save a new payment method for that customer/channel, first revoke the existing one via Revoke Saved Payment.
An identifier that represents a CommercePay payment channel. Refer to the id from the response of the Get Channel List. Must be a channel whose provider supports saved payments, otherwise the request fails with ChannelNotSupportPreAddPayment (2104).
[Conditional] Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.
Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See Callback Notifications for the payload and signature verification steps.
URL used for the customer to redirect to the payment page
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CommercePay","colors":{"primary":"#5D40E6","light":"#9546E9","dark":"#5834E9"},"logo":{"light":"https://mintcdn.com/commercepay/zbo4Bt5Hnzxuhmp1/logo/commercepay-logo-cropped.png?fit=max\u0026auto=format\u0026n=zbo4Bt5Hnzxuhmp1\u0026q=85\u0026s=2818942319162624de2b3de633ee42ed","dark":"https://mintcdn.com/commercepay/zbo4Bt5Hnzxuhmp1/logo/commercepay-logo-cropped.png?fit=max\u0026auto=format\u0026n=zbo4Bt5Hnzxuhmp1\u0026q=85\u0026s=2818942319162624de2b3de633ee42ed"},"favicon":"https://mintcdn.com/commercepay/7PrnGTffSwt18xAA/favicon.ico?fit=max\u0026auto=format\u0026n=7PrnGTffSwt18xAA\u0026q=85\u0026s=5bc0f4406b0009f6658b13dd37c95f37","api":{"playground":{"display":"simple"}},"navbar":{"links":[{"href":"mailto:payments@commerce.asia","label":"Support"}]},"seo":{"metatags":{"google-site-verification":"dUzHLcHfcaknXY13Nu97zc6gj2DguWeqMvoJWcgBCa4","og:image":"/images/commercepay-og-image.png","twitter:image":"/images/commercepay-og-image.png"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"commercepay","hasAudioNarration":false,"actualSubdomain":"commercepay","customDomains":["docs.commercepay.asia"],"gitSource":{"type":"github","owner":"commerceasia","repo":"commercepay-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae2d375bf78690ab5d17709","collectionId":"968a6a75-68b2-4ecd-bf32-e8fd916b1562","liveDeploymentHistoryId":"6ae2d375bf78690ab5d17709","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ae2d375bf78690ab5d17709","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":17},{"language":"default","tag":"Documentation","count":15},{"language":"default","tag":"All APIs","count":13},{"language":"default","tag":"PaymentGateway","count":10},{"language":"default","tag":"Get Started","count":7},{"language":"default","tag":"Payout APIs","count":3},{"language":"default","tag":"Payins","count":3},{"language":"default","tag":"Payouts","count":3},{"language":"default","tag":"Channel","count":2},{"language":"default","tag":"Payin APIs","count":1}]},"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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img.nav-logo{height:2.25rem!important;width:auto!important}"}],"page":{"pagePath":"api-reference/add-saved-payment","slug":"/api-reference/add-saved-payment","pageMetadata":{"title":"Add Saved Payment","description":"**Pre add customer payer payment details in Payment Gateway**\r\n\r\nAllow merchants save their customer payment details and using their system generated Unique Id to identify each of customers.\r\n\r\n> - Merchants shall pass their customers Unique Id to **\"customer.username\"** parameter\r\n> - Merchants may get customers saved payment details by using [Check Saved Payment](/api-reference/check-saved-payment)\r\n> - Channel Id may refer to the [Get Channel List](/api-reference/get-tenant-channels-by-country)","deprecated":null,"version":null,"sidebarTitle":"Add Saved Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/AddSavePayment","href":"/api-reference/add-saved-payment","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 a: \"a\",\n blockquote: \"blockquote\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Pre add customer payer payment details in Payment Gateway\"\n })\n }), \"\\n\", _jsx(_components.p, {\n children: \"Allow merchants save their customer payment details and using their system generated Unique Id to identify each of customers.\"\n }), \"\\n\", _jsxs(_components.blockquote, {\n children: [\"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Merchants shall pass their customers Unique Id to \", _jsx(_components.strong, {\n children: \"“customer.username”\"\n }), \" parameter\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Merchants may get customers saved payment details by using \", _jsx(_components.a, {\n href: \"/api-reference/check-saved-payment\",\n children: \"Check Saved Payment\"\n })]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Channel Id may refer to the \", _jsx(_components.a, {\n href: \"/api-reference/get-tenant-channels-by-country\",\n children: \"Get Channel List\"\n })]\n }), \"\\n\"]\n }), \"\\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Note,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This call places a real MYR 1.00 verification transaction.`}),` CommercePay charges the customer’s payment method MYR 1.00 through the provider to verify the card/wallet is valid, then automatically refunds it once the save completes. Expect the normal payment callback/webhook activity for this verification transaction — no separate refund call is needed on your side.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`One saved payment per customer per channel.`}),` If `,_jsx(_components.code,{children:`customer.username`}),` already has a saved payment method on the given `,_jsx(_components.code,{children:`channelId`}),`, this call fails with `,_jsx(_components.code,{children:`UserIsSavedPayment`}),` (2103) instead of replacing it. To save a new payment method for that customer/channel, first revoke the existing one via `,_jsx(_components.a,{href:`/api-reference/revoke-saved-payment`,children:`Revoke Saved Payment`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsx(_components.p,{children:`In addition to standard signature errors, this endpoint can return:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Code`}),_jsx(_components.th,{children:`Name`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2001`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`InvalidChannel`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`channelId`}),` does not match an existing channel.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2102`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`UsernameIsRequired`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customer.username`}),` was not supplied.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2103`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`UserIsSavedPayment`})}),_jsx(_components.td,{children:`This customer already has a saved payment method on this channel.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2104`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`ChannelNotSupportPreAddPayment`})}),_jsx(_components.td,{children:`The channel’s provider does not support saving payment methods.`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Add Saved Payment","description":"**Pre add customer payer payment details in Payment Gateway**\r\n\r\nAllow merchants save their customer payment details and using their system generated Unique Id to identify each of customers.\r\n\r\n> - Merchants shall pass their customers Unique Id to **\"customer.username\"** parameter\r\n> - Merchants may get customers saved payment details by using [Check Saved Payment](/api-reference/check-saved-payment)\r\n> - Channel Id may refer to the [Get Channel List](/api-reference/get-tenant-channels-by-country)","deprecated":null,"version":null,"sidebarTitle":"Add Saved Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/AddSavePayment","href":"/api-reference/add-saved-payment","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Errors","slug":"errors","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["PaymentGateway"],"operationId":"ApiServicesAppPaymentgatewayAddsavepaymentPost","requestBody":"57c083d3-bbe5-4da0-8bd8-356c9b87c44a","responses":{"200":"bde0ab3e-6d00-464f-95c5-58ebe05e224f","400":"cb076b6e-2080-4841-a3c0-8ce378675abc"},"summary":"Add Saved Payment","description":"**Pre add customer payer payment details in Payment Gateway**\r\n\r\nAllow merchants save their customer payment details and using their system generated Unique Id to identify each of customers.\r\n\r\n> - Merchants shall pass their customers Unique Id to **\"customer.username\"** parameter\r\n> - Merchants may get customers saved payment details by using [Check Saved Payment](/api-reference/check-saved-payment)\r\n> - Channel Id may refer to the [Get Channel List](/api-reference/get-tenant-channels-by-country)","parameters":["f63b2d0d-64d2-466a-b475-0cf47ee2d40b","8a620e7c-a512-4708-b096-c3a8e091a2b7","0691940e-18a6-48a9-9a58-ade6eb556c25"],"x-mint":{"href":"/api-reference/add-saved-payment","metadata":{"title":"Add Saved Payment","sidebarTitle":"Add Saved Payment"},"content":"\u003cNote>\n **This call places a real MYR 1.00 verification transaction.** CommercePay charges the customer's payment method MYR 1.00 through the provider to verify the card/wallet is valid, then automatically refunds it once the save completes. Expect the normal payment callback/webhook activity for this verification transaction — no separate refund call is needed on your side.\n\u003c/Note>\n\n\u003cWarning>\n **One saved payment per customer per channel.** If `customer.username` already has a saved payment method on the given `channelId`, this call fails with `UserIsSavedPayment` (2103) instead of replacing it. To save a new payment method for that customer/channel, first revoke the existing one via [Revoke Saved Payment](/api-reference/revoke-saved-payment).\n\u003c/Warning>\n\n## Errors\n\nIn addition to standard signature errors, this endpoint can return:\n\n| Code | Name | Meaning |\n| ---- | ---- | ------- |\n| 2001 | `InvalidChannel` | `channelId` does not match an existing channel. |\n| 2102 | `UsernameIsRequired` | `customer.username` was not supplied. |\n| 2103 | `UserIsSavedPayment` | This customer already has a saved payment method on this channel. |\n| 2104 | `ChannelNotSupportPreAddPayment` | The channel's provider does not support saving payment methods. |"},"method":"post","type":"path","servers":["64f6ba68-f659-4eb6-aced-7af162de9cb4"],"security":[],"path":"/api/services/app/PaymentGateway/AddSavePayment","baseUrlOptions":["https://staging-payments.commerce.asia"],"title":"Add Saved Payment","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"f63b2d0d-64d2-466a-b475-0cf47ee2d40b":{"schema":{"type":"string","isRequired":true,"description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"","typeLabel":"string"},"in":"header","name":"Abp-TenantId","required":true,"description":"Your unique Merchant ID assigned by CommercePay."},"8a620e7c-a512-4708-b096-c3a8e091a2b7":{"schema":{"type":"string","isRequired":true,"description":"Your API credentials used for authentication (typically a Bearer token).","uniqueKey":"","typeLabel":"string"},"in":"header","name":"Authorization","required":true,"description":"Your API credentials used for authentication (typically a Bearer token)."},"0691940e-18a6-48a9-9a58-ade6eb556c25":{"schema":{"type":"string","isRequired":true,"description":"A unique security hash used to verify the integrity of the request body. See [Generate Signature](/generate-signature) for how to generate this.","uniqueKey":"","typeLabel":"string"},"in":"header","name":"cap-signature","required":true,"description":"A unique security hash used to verify the integrity of the request body. See [Generate Signature](/generate-signature) for how to generate this."}},"requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"object","additionalProperties":false,"required":["channelId","referenceCode","ipAddress","returnUrl"],"properties":{"channelId":{"type":"integer","format":"int32","description":"An identifier that represents a CommercePay payment channel. Refer to the `id` from the response of the [Get Channel List](/api-reference/get-tenant-channels-by-country). Must be a channel whose provider supports saved payments, otherwise the request fails with `ChannelNotSupportPreAddPayment` (2104).","isRequired":true,"uniqueKey":"channelId","typeLabel":"integer\u003cint32>"},"referenceCode":{"type":"string","description":"The merchant-side unique order reference or invoice tracking sequence code.","maxLength":50,"isRequired":true,"uniqueKey":"referenceCode","typeLabel":"string"},"ipAddress":{"type":"string","description":"The customer's IP address captured by the merchant server.","maxLength":50,"isRequired":true,"uniqueKey":"ipAddress","typeLabel":"string"},"returnUrl":{"type":"string","description":"The synchronous return URL where the customer's browser is automatically redirected after the transaction is completed.","example":"https://returnurl.com/","maxLength":500,"isRequired":true,"uniqueKey":"returnUrl","typeLabel":"string"},"currencyCode":{"oneOf":[{"type":"string","description":"Currency code with a 3-letter ISO 4217 standard code (e.g., `MYR`).","example":"MYR","uniqueKey":"currencyCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Currency code with a 3-letter ISO 4217 standard code (e.g., `MYR`).","example":"MYR","uniqueKey":"currencyCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"currencyCode","typeLabel":"string | null"},"userAgent":{"oneOf":[{"type":"string","description":"**[Conditional]** Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.","maxLength":200,"uniqueKey":"userAgent.oneOf.0","typeLabel":"string"},{"type":"null","description":"**[Conditional]** Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.","maxLength":200,"uniqueKey":"userAgent.oneOf.1","typeLabel":"null"}],"uniqueKey":"userAgent","typeLabel":"string | null"},"callbackUrl":{"oneOf":[{"type":"string","description":"Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See [Callback Notifications](/callback-notifications) for the payload and signature verification steps.","maxLength":500,"example":"https://callback.com/","uniqueKey":"callbackUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See [Callback Notifications](/callback-notifications) for the payload and signature verification steps.","maxLength":500,"example":"https://callback.com/","uniqueKey":"callbackUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"callbackUrl","typeLabel":"string | null"},"customer":{"type":"object","additionalProperties":false,"properties":{"email":{"oneOf":[{"type":"string","description":"Customer’s Email Address","example":"email@gmail.com","maxLength":150,"uniqueKey":"customer.email.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Email Address","example":"email@gmail.com","maxLength":150,"uniqueKey":"customer.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.email","typeLabel":"string | null"},"mobileNo":{"oneOf":[{"type":"string","description":"Customer’s Mobile Number","example":"0123456789","maxLength":16,"uniqueKey":"customer.mobileNo.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Mobile Number","example":"0123456789","maxLength":16,"uniqueKey":"customer.mobileNo.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.mobileNo","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Customer’s Name","example":"name","maxLength":36,"uniqueKey":"customer.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Name","example":"name","maxLength":36,"uniqueKey":"customer.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.name","typeLabel":"string | null"},"username":{"oneOf":[{"type":"string","description":"Customer’s unique ID for recurring payments or next saved payments","example":"username","maxLength":36,"uniqueKey":"customer.username.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s unique ID for recurring payments or next saved payments","example":"username","maxLength":36,"uniqueKey":"customer.username.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.username","typeLabel":"string | null"},"identificationNumber":{"oneOf":[{"type":"string","description":"**[Conditional for FPX Recurring]**","uniqueKey":"customer.identificationNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"**[Conditional for FPX Recurring]**","uniqueKey":"customer.identificationNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.identificationNumber","typeLabel":"string | null"},"identificationType":{"enum":[1,2,3,4,5],"type":"integer","x-enumNames":["NewIdentityNumber","OldIdentityNumber","PassportNumber","BusinessRegistration","Others"],"x-examples":{},"description":"**[Conditional for FPX Recurring]**\n\nNew Identity Number = 1, Old Identity Number = 2, Passport Number = 3, Business Registration = 4, Others = 5","uniqueKey":"customer.identificationType","typeLabel":"enum\u003cinteger>"}},"uniqueKey":"customer","typeLabel":"object"},"tenantId":{"oneOf":[{"type":"integer","format":"int32","description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"tenantId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"tenantId.oneOf.1","typeLabel":"null"}],"uniqueKey":"tenantId","typeLabel":"integer\u003cint32> | null"},"timestamp":{"type":"integer","format":"int64","description":"Numeric timestamp in milliseconds representing request validation freshness, generated via `new Date().getTime()`. Example: `1621851652617`.","example":1621851652617,"uniqueKey":"timestamp","typeLabel":"integer\u003cint64>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"channelId":123,"referenceCode":"\u003cstring>","ipAddress":"\u003cstring>","returnUrl":"https://returnurl.com/","currencyCode":"MYR","userAgent":"\u003cstring>","callbackUrl":"https://callback.com/","customer":{"email":"email@gmail.com","mobileNo":"0123456789","name":"name","username":"username","identificationNumber":"\u003cstring>"},"tenantId":123,"timestamp":1621851652617}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["channelId","referenceCode","ipAddress","returnUrl"],"properties":{"channelId":{"type":"integer","format":"int32","description":"An identifier that represents a CommercePay payment channel. Refer to the `id` from the response of the [Get Channel List](/api-reference/get-tenant-channels-by-country). Must be a channel whose provider supports saved payments, otherwise the request fails with `ChannelNotSupportPreAddPayment` (2104).","isRequired":true,"uniqueKey":"channelId","typeLabel":"integer\u003cint32>"},"referenceCode":{"type":"string","description":"The merchant-side unique order reference or invoice tracking sequence code.","maxLength":50,"isRequired":true,"uniqueKey":"referenceCode","typeLabel":"string"},"ipAddress":{"type":"string","description":"The customer's IP address captured by the merchant server.","maxLength":50,"isRequired":true,"uniqueKey":"ipAddress","typeLabel":"string"},"returnUrl":{"type":"string","description":"The synchronous return URL where the customer's browser is automatically redirected after the transaction is completed.","example":"https://returnurl.com/","maxLength":500,"isRequired":true,"uniqueKey":"returnUrl","typeLabel":"string"},"currencyCode":{"oneOf":[{"type":"string","description":"Currency code with a 3-letter ISO 4217 standard code (e.g., `MYR`).","example":"MYR","uniqueKey":"currencyCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Currency code with a 3-letter ISO 4217 standard code (e.g., `MYR`).","example":"MYR","uniqueKey":"currencyCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"currencyCode","typeLabel":"string | null"},"userAgent":{"oneOf":[{"type":"string","description":"**[Conditional]** Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.","maxLength":200,"uniqueKey":"userAgent.oneOf.0","typeLabel":"string"},{"type":"null","description":"**[Conditional]** Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.","maxLength":200,"uniqueKey":"userAgent.oneOf.1","typeLabel":"null"}],"uniqueKey":"userAgent","typeLabel":"string | null"},"callbackUrl":{"oneOf":[{"type":"string","description":"Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See [Callback Notifications](/callback-notifications) for the payload and signature verification steps.","maxLength":500,"example":"https://callback.com/","uniqueKey":"callbackUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See [Callback Notifications](/callback-notifications) for the payload and signature verification steps.","maxLength":500,"example":"https://callback.com/","uniqueKey":"callbackUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"callbackUrl","typeLabel":"string | null"},"customer":{"type":"object","additionalProperties":false,"properties":{"email":{"oneOf":[{"type":"string","description":"Customer’s Email Address","example":"email@gmail.com","maxLength":150,"uniqueKey":"customer.email.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Email Address","example":"email@gmail.com","maxLength":150,"uniqueKey":"customer.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.email","typeLabel":"string | null"},"mobileNo":{"oneOf":[{"type":"string","description":"Customer’s Mobile Number","example":"0123456789","maxLength":16,"uniqueKey":"customer.mobileNo.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Mobile Number","example":"0123456789","maxLength":16,"uniqueKey":"customer.mobileNo.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.mobileNo","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Customer’s Name","example":"name","maxLength":36,"uniqueKey":"customer.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Name","example":"name","maxLength":36,"uniqueKey":"customer.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.name","typeLabel":"string | null"},"username":{"oneOf":[{"type":"string","description":"Customer’s unique ID for recurring payments or next saved payments","example":"username","maxLength":36,"uniqueKey":"customer.username.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s unique ID for recurring payments or next saved payments","example":"username","maxLength":36,"uniqueKey":"customer.username.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.username","typeLabel":"string | null"},"identificationNumber":{"oneOf":[{"type":"string","description":"**[Conditional for FPX Recurring]**","uniqueKey":"customer.identificationNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"**[Conditional for FPX Recurring]**","uniqueKey":"customer.identificationNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.identificationNumber","typeLabel":"string | null"},"identificationType":{"enum":[1,2,3,4,5],"type":"integer","x-enumNames":["NewIdentityNumber","OldIdentityNumber","PassportNumber","BusinessRegistration","Others"],"x-examples":{},"description":"**[Conditional for FPX Recurring]**\n\nNew Identity Number = 1, Old Identity Number = 2, Passport Number = 3, Business Registration = 4, Others = 5","uniqueKey":"customer.identificationType","typeLabel":"enum\u003cinteger>"}},"uniqueKey":"customer","typeLabel":"object"},"tenantId":{"oneOf":[{"type":"integer","format":"int32","description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"tenantId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"tenantId.oneOf.1","typeLabel":"null"}],"uniqueKey":"tenantId","typeLabel":"integer\u003cint32> | null"},"timestamp":{"type":"integer","format":"int64","description":"Numeric timestamp in milliseconds representing request validation freshness, generated via `new Date().getTime()`. Example: `1621851652617`.","example":1621851652617,"uniqueKey":"timestamp","typeLabel":"integer\u003cint64>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"channelId":123,"referenceCode":"\u003cstring>","ipAddress":"\u003cstring>","returnUrl":"https://returnurl.com/","currencyCode":"MYR","userAgent":"\u003cstring>","callbackUrl":"https://callback.com/","customer":{"email":"email@gmail.com","mobileNo":"0123456789","name":"name","username":"username","identificationNumber":"\u003cstring>"},"tenantId":123,"timestamp":1621851652617}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","additionalProperties":false,"required":["channelId","referenceCode","ipAddress","returnUrl"],"properties":{"channelId":{"type":"integer","format":"int32","description":"An identifier that represents a CommercePay payment channel. Refer to the `id` from the response of the [Get Channel List](/api-reference/get-tenant-channels-by-country). Must be a channel whose provider supports saved payments, otherwise the request fails with `ChannelNotSupportPreAddPayment` (2104).","isRequired":true,"uniqueKey":"channelId","typeLabel":"integer\u003cint32>"},"referenceCode":{"type":"string","description":"The merchant-side unique order reference or invoice tracking sequence code.","maxLength":50,"isRequired":true,"uniqueKey":"referenceCode","typeLabel":"string"},"ipAddress":{"type":"string","description":"The customer's IP address captured by the merchant server.","maxLength":50,"isRequired":true,"uniqueKey":"ipAddress","typeLabel":"string"},"returnUrl":{"type":"string","description":"The synchronous return URL where the customer's browser is automatically redirected after the transaction is completed.","example":"https://returnurl.com/","maxLength":500,"isRequired":true,"uniqueKey":"returnUrl","typeLabel":"string"},"currencyCode":{"oneOf":[{"type":"string","description":"Currency code with a 3-letter ISO 4217 standard code (e.g., `MYR`).","example":"MYR","uniqueKey":"currencyCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Currency code with a 3-letter ISO 4217 standard code (e.g., `MYR`).","example":"MYR","uniqueKey":"currencyCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"currencyCode","typeLabel":"string | null"},"userAgent":{"oneOf":[{"type":"string","description":"**[Conditional]** Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.","maxLength":200,"uniqueKey":"userAgent.oneOf.0","typeLabel":"string"},{"type":"null","description":"**[Conditional]** Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.","maxLength":200,"uniqueKey":"userAgent.oneOf.1","typeLabel":"null"}],"uniqueKey":"userAgent","typeLabel":"string | null"},"callbackUrl":{"oneOf":[{"type":"string","description":"Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See [Callback Notifications](/callback-notifications) for the payload and signature verification steps.","maxLength":500,"example":"https://callback.com/","uniqueKey":"callbackUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See [Callback Notifications](/callback-notifications) for the payload and signature verification steps.","maxLength":500,"example":"https://callback.com/","uniqueKey":"callbackUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"callbackUrl","typeLabel":"string | null"},"customer":{"type":"object","additionalProperties":false,"properties":{"email":{"oneOf":[{"type":"string","description":"Customer’s Email Address","example":"email@gmail.com","maxLength":150,"uniqueKey":"customer.email.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Email Address","example":"email@gmail.com","maxLength":150,"uniqueKey":"customer.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.email","typeLabel":"string | null"},"mobileNo":{"oneOf":[{"type":"string","description":"Customer’s Mobile Number","example":"0123456789","maxLength":16,"uniqueKey":"customer.mobileNo.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Mobile Number","example":"0123456789","maxLength":16,"uniqueKey":"customer.mobileNo.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.mobileNo","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Customer’s Name","example":"name","maxLength":36,"uniqueKey":"customer.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Name","example":"name","maxLength":36,"uniqueKey":"customer.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.name","typeLabel":"string | null"},"username":{"oneOf":[{"type":"string","description":"Customer’s unique ID for recurring payments or next saved payments","example":"username","maxLength":36,"uniqueKey":"customer.username.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s unique ID for recurring payments or next saved payments","example":"username","maxLength":36,"uniqueKey":"customer.username.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.username","typeLabel":"string | null"},"identificationNumber":{"oneOf":[{"type":"string","description":"**[Conditional for FPX Recurring]**","uniqueKey":"customer.identificationNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"**[Conditional for FPX Recurring]**","uniqueKey":"customer.identificationNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.identificationNumber","typeLabel":"string | null"},"identificationType":{"enum":[1,2,3,4,5],"type":"integer","x-enumNames":["NewIdentityNumber","OldIdentityNumber","PassportNumber","BusinessRegistration","Others"],"x-examples":{},"description":"**[Conditional for FPX Recurring]**\n\nNew Identity Number = 1, Old Identity Number = 2, Passport Number = 3, Business Registration = 4, Others = 5","uniqueKey":"customer.identificationType","typeLabel":"enum\u003cinteger>"}},"uniqueKey":"customer","typeLabel":"object"},"tenantId":{"oneOf":[{"type":"integer","format":"int32","description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"tenantId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"tenantId.oneOf.1","typeLabel":"null"}],"uniqueKey":"tenantId","typeLabel":"integer\u003cint32> | null"},"timestamp":{"type":"integer","format":"int64","description":"Numeric timestamp in milliseconds representing request validation freshness, generated via `new Date().getTime()`. Example: `1621851652617`.","example":1621851652617,"uniqueKey":"timestamp","typeLabel":"integer\u003cint64>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"channelId":123,"referenceCode":"\u003cstring>","ipAddress":"\u003cstring>","returnUrl":"https://returnurl.com/","currencyCode":"MYR","userAgent":"\u003cstring>","callbackUrl":"https://callback.com/","customer":{"email":"email@gmail.com","mobileNo":"0123456789","name":"name","username":"username","identificationNumber":"\u003cstring>"},"tenantId":123,"timestamp":1621851652617}}},"exampleType":"generated"},"application/*+json":{"schema":{"type":"object","additionalProperties":false,"required":["channelId","referenceCode","ipAddress","returnUrl"],"properties":{"channelId":{"type":"integer","format":"int32","description":"An identifier that represents a CommercePay payment channel. Refer to the `id` from the response of the [Get Channel List](/api-reference/get-tenant-channels-by-country). Must be a channel whose provider supports saved payments, otherwise the request fails with `ChannelNotSupportPreAddPayment` (2104).","isRequired":true,"uniqueKey":"channelId","typeLabel":"integer\u003cint32>"},"referenceCode":{"type":"string","description":"The merchant-side unique order reference or invoice tracking sequence code.","maxLength":50,"isRequired":true,"uniqueKey":"referenceCode","typeLabel":"string"},"ipAddress":{"type":"string","description":"The customer's IP address captured by the merchant server.","maxLength":50,"isRequired":true,"uniqueKey":"ipAddress","typeLabel":"string"},"returnUrl":{"type":"string","description":"The synchronous return URL where the customer's browser is automatically redirected after the transaction is completed.","example":"https://returnurl.com/","maxLength":500,"isRequired":true,"uniqueKey":"returnUrl","typeLabel":"string"},"currencyCode":{"oneOf":[{"type":"string","description":"Currency code with a 3-letter ISO 4217 standard code (e.g., `MYR`).","example":"MYR","uniqueKey":"currencyCode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Currency code with a 3-letter ISO 4217 standard code (e.g., `MYR`).","example":"MYR","uniqueKey":"currencyCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"currencyCode","typeLabel":"string | null"},"userAgent":{"oneOf":[{"type":"string","description":"**[Conditional]** Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.","maxLength":200,"uniqueKey":"userAgent.oneOf.0","typeLabel":"string"},{"type":"null","description":"**[Conditional]** Customer's user agent. It is recommended to input for a better user experience for specific channels due to different platforms such as desktop, mobile, or app view. Example channels impact: ShopeePay.","maxLength":200,"uniqueKey":"userAgent.oneOf.1","typeLabel":"null"}],"uniqueKey":"userAgent","typeLabel":"string | null"},"callbackUrl":{"oneOf":[{"type":"string","description":"Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See [Callback Notifications](/callback-notifications) for the payload and signature verification steps.","maxLength":500,"example":"https://callback.com/","uniqueKey":"callbackUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Callback URL is host-to-host communication. CommercePay sends the transaction response to the merchant callback server based on the callback URL given, including for the automatic MYR 1.00 verification charge and its refund. If the URL is provided, the callback will be triggered; otherwise, it would not trigger. See [Callback Notifications](/callback-notifications) for the payload and signature verification steps.","maxLength":500,"example":"https://callback.com/","uniqueKey":"callbackUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"callbackUrl","typeLabel":"string | null"},"customer":{"type":"object","additionalProperties":false,"properties":{"email":{"oneOf":[{"type":"string","description":"Customer’s Email Address","example":"email@gmail.com","maxLength":150,"uniqueKey":"customer.email.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Email Address","example":"email@gmail.com","maxLength":150,"uniqueKey":"customer.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.email","typeLabel":"string | null"},"mobileNo":{"oneOf":[{"type":"string","description":"Customer’s Mobile Number","example":"0123456789","maxLength":16,"uniqueKey":"customer.mobileNo.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Mobile Number","example":"0123456789","maxLength":16,"uniqueKey":"customer.mobileNo.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.mobileNo","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Customer’s Name","example":"name","maxLength":36,"uniqueKey":"customer.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s Name","example":"name","maxLength":36,"uniqueKey":"customer.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.name","typeLabel":"string | null"},"username":{"oneOf":[{"type":"string","description":"Customer’s unique ID for recurring payments or next saved payments","example":"username","maxLength":36,"uniqueKey":"customer.username.oneOf.0","typeLabel":"string"},{"type":"null","description":"Customer’s unique ID for recurring payments or next saved payments","example":"username","maxLength":36,"uniqueKey":"customer.username.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.username","typeLabel":"string | null"},"identificationNumber":{"oneOf":[{"type":"string","description":"**[Conditional for FPX Recurring]**","uniqueKey":"customer.identificationNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"**[Conditional for FPX Recurring]**","uniqueKey":"customer.identificationNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.identificationNumber","typeLabel":"string | null"},"identificationType":{"enum":[1,2,3,4,5],"type":"integer","x-enumNames":["NewIdentityNumber","OldIdentityNumber","PassportNumber","BusinessRegistration","Others"],"x-examples":{},"description":"**[Conditional for FPX Recurring]**\n\nNew Identity Number = 1, Old Identity Number = 2, Passport Number = 3, Business Registration = 4, Others = 5","uniqueKey":"customer.identificationType","typeLabel":"enum\u003cinteger>"}},"uniqueKey":"customer","typeLabel":"object"},"tenantId":{"oneOf":[{"type":"integer","format":"int32","description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"tenantId.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","description":"Your unique Merchant ID assigned by CommercePay.","uniqueKey":"tenantId.oneOf.1","typeLabel":"null"}],"uniqueKey":"tenantId","typeLabel":"integer\u003cint32> | null"},"timestamp":{"type":"integer","format":"int64","description":"Numeric timestamp in milliseconds representing request validation freshness, generated via `new Date().getTime()`. Example: `1621851652617`.","example":1621851652617,"uniqueKey":"timestamp","typeLabel":"integer\u003cint64>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"channelId":123,"referenceCode":"\u003cstring>","ipAddress":"\u003cstring>","returnUrl":"https://returnurl.com/","currencyCode":"MYR","userAgent":"\u003cstring>","callbackUrl":"https://callback.com/","customer":{"email":"email@gmail.com","mobileNo":"0123456789","name":"name","username":"username","identificationNumber":"\u003cstring>"},"tenantId":123,"timestamp":1621851652617}}},"exampleType":"generated"}},"description":"","exampleType":"generated"},"responses":{"bde0ab3e-6d00-464f-95c5-58ebe05e224f":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"transactionNumber":{"oneOf":[{"type":"string","description":"Unique CommercePay Transaction Number for the underlying MYR 1.00 verification transaction (automatically refunded).","maxLength":24,"uniqueKey":"transactionNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique CommercePay Transaction Number for the underlying MYR 1.00 verification transaction (automatically refunded).","maxLength":24,"uniqueKey":"transactionNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"transactionNumber","typeLabel":"string | null"},"redirectUrl":{"oneOf":[{"type":"string","description":"URL used for the customer to redirect to the payment page","uniqueKey":"redirectUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL used for the customer to redirect to the payment page","uniqueKey":"redirectUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"redirectUrl","typeLabel":"string | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example 1":{"title":"Example 1","value":{"transactionNumber":"string","redirectUrl":"string"}}},"exampleType":"examples"},"text/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"transactionNumber":{"oneOf":[{"type":"string","description":"Unique CommercePay Transaction Number for the underlying MYR 1.00 verification transaction (automatically refunded).","maxLength":24,"uniqueKey":"transactionNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique CommercePay Transaction Number for the underlying MYR 1.00 verification transaction (automatically refunded).","maxLength":24,"uniqueKey":"transactionNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"transactionNumber","typeLabel":"string | null"},"redirectUrl":{"oneOf":[{"type":"string","description":"URL used for the customer to redirect to the payment page","uniqueKey":"redirectUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL used for the customer to redirect to the payment page","uniqueKey":"redirectUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"redirectUrl","typeLabel":"string | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"transactionNumber":"\u003cstring>","redirectUrl":"\u003cstring>"}}},"exampleType":"generated"},"text/plain":{"schema":{"type":"object","additionalProperties":false,"properties":{"transactionNumber":{"oneOf":[{"type":"string","description":"Unique CommercePay Transaction Number for the underlying MYR 1.00 verification transaction (automatically refunded).","maxLength":24,"uniqueKey":"transactionNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique CommercePay Transaction Number for the underlying MYR 1.00 verification transaction (automatically refunded).","maxLength":24,"uniqueKey":"transactionNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"transactionNumber","typeLabel":"string | null"},"redirectUrl":{"oneOf":[{"type":"string","description":"URL used for the customer to redirect to the payment page","uniqueKey":"redirectUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL used for the customer to redirect to the payment page","uniqueKey":"redirectUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"redirectUrl","typeLabel":"string | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"transactionNumber":"\u003cstring>","redirectUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"examples"},"cb076b6e-2080-4841-a3c0-8ce378675abc":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"integer","description":"See the Errors table above.","uniqueKey":"code","typeLabel":"integer"},"message":{"oneOf":[{"type":"string","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"message.oneOf.1","typeLabel":"null"}],"uniqueKey":"message","typeLabel":"string | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"UserIsSavedPayment":{"title":"UserIsSavedPayment","value":{"code":2103,"message":"This customer already has a saved payment method on this channel."}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{},"servers":{"64f6ba68-f659-4eb6-aced-7af162de9cb4":{"description":"Staging","url":"https://staging-payments.commerce.asia"}}},"originalFileLocation":"openapi.json"},"subdomain":"commercepay","siteName":"CommercePay","title":"Add Saved Payment - CommercePay","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T05:02:49.714Z","originalFileLocation":"api-reference/add-saved-payment.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=\"Pre add customer payer payment details in Payment Gateway Allow merchants save their customer payment details and using their system generated Unique Id to identify each of customers. \u0026gt; - Merchants shall pass their customers Unique Id to \u0026quot;customer.username\u0026quot; parameter \u0026gt; - Merchants may get customers saved payment details by using Check Saved Payment \u0026gt; - Channel Id may refer to the Get Channel List\">\u003cmeta data-mint-head name=\"application-name\" content=\"CommercePay\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/commercepay/GH8Bb27qvn280PyP/_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/commercepay/GH8Bb27qvn280PyP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/commercepay/GH8Bb27qvn280PyP/_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/commercepay/GH8Bb27qvn280PyP/_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/commercepay/GH8Bb27qvn280PyP/_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/commercepay/GH8Bb27qvn280PyP/_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/commercepay/GH8Bb27qvn280PyP/_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/commercepay/GH8Bb27qvn280PyP/_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/commercepay/GH8Bb27qvn280PyP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Add Saved Payment - CommercePay\">\u003cmeta data-mint-head property=\"og:description\" content=\"Pre add customer payer payment details in Payment Gateway Allow merchants save their customer payment details and using their system generated Unique Id to identify each of customers. \u0026gt; - Merchants shall pass their customers Unique Id to \u0026quot;customer.username\u0026quot; parameter \u0026gt; - Merchants may get customers saved payment details by using Check Saved Payment \u0026gt; - Channel Id may refer to the Get Channel List\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CommercePay\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.commercepay.asia/api-reference/add-saved-payment\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://commercepay.mintlify.site/images/commercepay-og-image.png\">\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=\"Add Saved Payment - CommercePay\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Pre add customer payer payment details in Payment Gateway Allow merchants save their customer payment details and using their system generated Unique Id to identify each of customers. \u0026gt; - Merchants shall pass their customers Unique Id to \u0026quot;customer.username\u0026quot; parameter \u0026gt; - Merchants may get customers saved payment details by using Check Saved Payment \u0026gt; - Channel Id may refer to the Get Channel List\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://commercepay.mintlify.site/images/commercepay-og-image.png\">\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/commercepay/GH8Bb27qvn280PyP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CommercePay\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5D40E6\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"dUzHLcHfcaknXY13Nu97zc6gj2DguWeqMvoJWcgBCa4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.commercepay.asia/api-reference/add-saved-payment\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/add-saved-payment.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.commercepay.asia/#organization\",\"name\":\"CommercePay\",\"url\":\"https://docs.commercepay.asia\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/commercepay/zbo4Bt5Hnzxuhmp1/logo/commercepay-logo-cropped.png?fit=max\u0026auto=format\u0026n=zbo4Bt5Hnzxuhmp1\u0026q=85\u0026s=2818942319162624de2b3de633ee42ed\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.commercepay.asia#website\",\"name\":\"CommercePay\",\"url\":\"https://docs.commercepay.asia\",\"publisher\":{\"@id\":\"https://docs.commercepay.asia/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.commercepay.asia/api-reference/add-saved-payment#webpage\",\"url\":\"https://docs.commercepay.asia/api-reference/add-saved-payment\",\"name\":\"Add Saved Payment\",\"description\":\"Pre add customer payer payment details in Payment Gateway Allow merchants save their customer payment details and using their system generated Unique Id to identify each of customers. > - Merchants shall pass their customers Unique Id to \\\"customer.username\\\" parameter > - Merchants may get customers saved payment details by using Check Saved Payment > - Channel Id may refer to the Get Channel List\",\"dateModified\":\"2026-10-29T05:02:49.714Z\",\"isPartOf\":{\"@id\":\"https://docs.commercepay.asia#website\"},\"breadcrumb\":{\"@id\":\"https://docs.commercepay.asia/api-reference/add-saved-payment#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.commercepay.asia/api-reference/add-saved-payment#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"CommercePay\",\"item\":\"https://docs.commercepay.asia\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add Saved Payment\",\"item\":\"https://docs.commercepay.asia/api-reference/add-saved-payment\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.commercepay.asia/api-reference/add-saved-payment#apireference\",\"headline\":\"Add Saved Payment\",\"name\":\"Add Saved Payment\",\"description\":\"Pre add customer payer payment details in Payment Gateway Allow merchants save their customer payment details and using their system generated Unique Id to identify each of customers. > - Merchants shall pass their customers Unique Id to \\\"customer.username\\\" parameter > - Merchants may get customers saved payment details by using Check Saved Payment > - Channel Id may refer to the Get Channel List\",\"url\":\"https://docs.commercepay.asia/api-reference/add-saved-payment\",\"mainEntityOfPage\":{\"@id\":\"https://docs.commercepay.asia/api-reference/add-saved-payment#webpage\"},\"image\":\"https://docs.commercepay.asia/images/commercepay-og-image.png\",\"dateModified\":\"2026-10-29T05:02:49.714Z\",\"publisher\":{\"@id\":\"https://docs.commercepay.asia/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.commercepay.asia#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CommercePay\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CommercePay","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/overview"}]},{"tab":"API Reference","groups":[{"group":"Authentication","pages":[{"title":"Get Access Token","deprecated":null,"version":null,"sidebarTitle":"Get Access Token","openapi":"/openapi.json post /api/TokenAuth/Authenticate","href":"/api-reference/get-access-token"}]},{"group":"Channel APIs","pages":[{"title":"Get Channel List","deprecated":null,"version":null,"sidebarTitle":"Get Channel List","openapi":"/openapi.json get /api/services/app/Channel/GetTenantChannelsByCountry","href":"/api-reference/get-tenant-channels-by-country"},{"title":"Get Provider Channels","deprecated":null,"version":null,"sidebarTitle":"Get Provider Channels","openapi":"/openapi.json get /api/services/app/Channel/GetProviderChannels","href":"/api-reference/get-provider-channels"}]},{"group":"Payin APIs","pages":[{"title":"Direct Integration","api":"POST https://staging-payments.commerce.asia/api/services/app/PaymentGateway/RequestPayment","href":"/api-reference/direct-integration-api-request-payment"},{"title":"Hosted Session Checkout","deprecated":null,"version":null,"sidebarTitle":"Hosted Session Checkout","openapi":"/openapi.json post /api/services/app/PaymentGateway/InitialSession","href":"/api-reference/initial-session"},{"title":"Query Payment","description":"Payment gateway checks the existing payment status.\n\nThe following input parameters are expected to be provided by the merchant to verify transaction status or to obtain more details on the payment before approving the customer’s order.","deprecated":null,"version":null,"sidebarTitle":"Query Payment","openapi":"/openapi.json get /api/services/app/PaymentGateway/Query","href":"/api-reference/query-payment"}]},{"group":"Saved Payment APIs","pages":[{"title":"Add Saved Payment","deprecated":null,"version":null,"sidebarTitle":"Add Saved Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/AddSavePayment","href":"/api-reference/add-saved-payment"},{"title":"Check Saved Payment","description":"Payment gateway check existing saved payment status. (Only for TNG)","deprecated":null,"version":null,"sidebarTitle":"Check Saved Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/CheckSavedPayment","href":"/api-reference/check-saved-payment"},{"title":"Revoke Saved Payment","deprecated":null,"version":null,"sidebarTitle":"Revoke Saved Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/RevokeTokenize","href":"/api-reference/revoke-saved-payment"}]},{"group":"Payout APIs","pages":[{"title":"Request Payout","api":"POST https://staging-payments.commerce.asia/api/services/app/PaymentGateway/RequestPayment","href":"/api-reference/payout-api-requestpayout"},{"title":"Query Wallets","api":"POST https://staging-payments.commerce.asia/api/services/app/PaymentGateway/QueryWallets","href":"/api-reference/payout-api-querywallets"},{"title":"Query Wallet Histories","api":"POST https://staging-payments.commerce.asia/api/services/app/PaymentGateway/QueryWalletHistory","href":"/api-reference/payout-api-querywallethistories"}]},{"group":"Refund APIs","pages":[{"title":"Refund Payment","deprecated":null,"version":null,"sidebarTitle":"Refund Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/RefundPayment","href":"/api-reference/refund-payment"},{"title":"Query Refund Payment","deprecated":null,"version":null,"sidebarTitle":"Query Refund Payment","openapi":"/openapi.json get /api/services/app/PaymentGateway/QueryRefund","href":"/api-reference/query-refund-payment"}]},{"group":"All APIs","pages":[{"group":"TokenAuth","pages":[{"title":"Get Access Token","deprecated":null,"version":null,"sidebarTitle":"Get Access Token","openapi":"/openapi.json post /api/TokenAuth/Authenticate","href":"/api-reference/get-access-token"}]},{"group":"Channel","pages":[{"title":"Get Channel List","deprecated":null,"version":null,"sidebarTitle":"Get Channel List","openapi":"/openapi.json get /api/services/app/Channel/GetTenantChannelsByCountry","href":"/api-reference/get-tenant-channels-by-country"},{"title":"Get Provider Channels","deprecated":null,"version":null,"sidebarTitle":"Get Provider Channels","openapi":"/openapi.json get /api/services/app/Channel/GetProviderChannels","href":"/api-reference/get-provider-channels"}]},{"group":"PaymentGateway","pages":[{"title":"Query Payment","deprecated":null,"version":null,"sidebarTitle":"Query Payment","openapi":"/openapi.json get /api/services/app/PaymentGateway/Query","href":"/api-reference/query-payment"},{"title":"Request Payment","deprecated":null,"version":null,"sidebarTitle":"Request Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/RequestPayment","href":"/api-reference/paymentgateway/request-payment"},{"title":"Process Payment","deprecated":null,"version":null,"sidebarTitle":"Process Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/ProcessPayment","href":"/api-reference/paymentgateway/process-payment"},{"title":"Check Saved Payment","description":"Payment gateway check existing saved payment status. (Only for TNG)","deprecated":null,"version":null,"sidebarTitle":"Check Saved Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/CheckSavedPayment","href":"/api-reference/check-saved-payment"},{"title":"Add Saved Payment","deprecated":null,"version":null,"sidebarTitle":"Add Saved Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/AddSavePayment","href":"/api-reference/add-saved-payment"},{"title":"Revoke Saved Payment","description":"**Revoke a customer's saved payment method in Payment Gateway**\n\nAllow merchants to permanently remove a customer's previously saved (tokenized) payment details for a given channel. Once revoked, the saved payment method can no longer be used for future payments — the customer must save their payment method again (via the [Add Saved Payment](/api-reference/add-saved-payment)) if they wish to pay this way again.\n\n> - Merchants shall pass their customer's Unique Id to the **\"username\"** parameter — the same Unique Id originally supplied to `customer.username` when the payment method was saved.\n> - Channel Id may refer to the [Get Channel List](/api-reference/get-tenant-channels-by-country).\n> - Only channels/providers that support saved payments can be revoked through this endpoint. If the channel does not support it, or no saved payment is found for the given username on that channel, the request will fail.\n> - This endpoint returns no response body on success (HTTP 200, empty). Treat the absence of an error as confirmation the saved payment method was revoked.","deprecated":null,"version":null,"sidebarTitle":"Revoke Saved Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/RevokeTokenize","href":"/api-reference/revoke-saved-payment"},{"title":"Refund Payment","deprecated":null,"version":null,"sidebarTitle":"Refund Payment","openapi":"/openapi.json post /api/services/app/PaymentGateway/RefundPayment","href":"/api-reference/refund-payment"},{"title":"Query Refund Payment","deprecated":null,"version":null,"sidebarTitle":"Query Refund Payment","openapi":"/openapi.json get /api/services/app/PaymentGateway/QueryRefund","href":"/api-reference/query-refund-payment"},{"title":"Query Wallets","deprecated":null,"version":null,"sidebarTitle":"Query Wallets","openapi":"/openapi.json post /api/services/app/PaymentGateway/QueryWallets","href":"/api-reference/paymentgateway/query-wallets"},{"title":"Hosted Session Checkout","deprecated":null,"version":null,"sidebarTitle":"Hosted Session Checkout","openapi":"/openapi.json post /api/services/app/PaymentGateway/InitialSession","href":"/api-reference/initial-session"}]}]}]}]},"basePath":"","title":"Add Saved Payment - CommercePay","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}