Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.
Gale on Stripe is in the Gale Merchant Dashboard under Integrations → Gale on Stripe. The one-time Payment Element setup saves its restricted key here. Gale authenticates to your Stripe account with that key and writes the payment record. Save the key before you take a test payment.The page is per mode. Sandbox and production keep separate credentials, and a test key cannot be saved into production.
Create the cpmt_… id on the Payment Element page and paste it here. Leave the endpoint URL blank on that path. The Checkout Session path is the one that sets the endpoint URL and the signing secret.
The rk_… key Stripe showed you. Not your secret key.
Required the first time you save. Leave the field blank to keep the key already stored.
Custom payment method type ID
The cpmt_… id from the Payment Element page
Paste it for the Payment Element setup. Leave the field blank to keep the saved id.
Signing secret
Leave blank for the Payment Element
The Checkout Session path needs this secret. Leave the field blank to keep a secret already stored.
Gale checks the key when you save. Payment Records read and write have to be granted, or the page will not save. Other permissions can be missing: the page warns, and the save still goes through.
Create one restricted key per Stripe account, per mode.
Use a restricted key, not your secret key. The restricted key cannot move money.
1
Open API keys
In the Stripe Dashboard, open Developers and choose API keys.
Developers → API keys
2
Create a restricted key
Find the Restricted keys card and click Create restricted key. Not the standard secret key above it.
Restricted keys → Create restricted key
3
Choose how the key will be used
Pick Powering an integration you built and click Continue.
Create a restricted key, usage
“Providing this key to a third-party application” leads to a different flow. Use the first option.
4
Grant Payment Records
Set Payment Records to Write. Stripe’s Write level includes Read, and the Gale page requires both. Without them, save fails.Leave Checkout Sessions, Products, Prices, Payment Methods, Subscriptions, and Webhook Endpoints at None. If one of those is missing, the page shows a warning and still saves.
The resource list, all permissions at None
Set the level on the child row, not the section header. Setting the section grants far more than this page checks.
5
Name it and create it
Give the key a name that will still make sense in a year, such as Gale HSA/FSA. Then click Create key and copy what Stripe shows you.
Stripe shows a restricted key once. If you leave the page before copying it, create another. Permissions cannot be edited after the key exists, so a missed Payment Records grant also means a new key.
Paste the key into Restricted API key and save. On the Payment Element path, leave the signing secret blank.
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Docs","colors":{"primary":"#07BC8A","light":"#07BC8A","dark":"#07BC8A"},"logo":{"light":"https://mintcdn.com/galepaymentsinc/ES_DCNs-vEFQ6D4Q/logo/gale_logo_black.png?fit=max\u0026auto=format\u0026n=ES_DCNs-vEFQ6D4Q\u0026q=85\u0026s=2105292f397b235ddd90feb105e7ce13","dark":"https://mintcdn.com/galepaymentsinc/GNkt9Z8c2qo-sQfX/logo/gale_logo_white.svg?fit=max\u0026auto=format\u0026n=GNkt9Z8c2qo-sQfX\u0026q=85\u0026s=b6ba872a6d58845ec191513f02a797c3"},"favicon":"https://mintcdn.com/galepaymentsinc/-tfqSxxNOR5RQPkA/favicon.png?fit=max\u0026auto=format\u0026n=-tfqSxxNOR5RQPkA\u0026q=85\u0026s=639d41e7193f328a4614a60c77a15d43","api":{"playground":{}},"footer":{"socials":{"x":"https://x.com/gale_hsa","linkedin":"https://www.linkedin.com/company/gale-hsa"}},"styling":{"eyebrows":"breadcrumbs","latex":false},"navigation":{"global":{"anchors":[{"anchor":"Status","icon":"wifi","href":"https://status.withgale.com"},{"anchor":"Support","icon":"headphones","href":"https://www.withgale.com/contact/support"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"galepaymentsinc","hasAudioNarration":false,"actualSubdomain":"galepaymentsinc","customDomains":["docs.withgale.com"],"gitSource":{"type":"gitlab","owner":"redo/redoapp/gale","repo":"gale-docs","deployBranch":"docs-master","contentDirectory":"","isPrivate":true,"projectId":87179634,"mountPath":"","label":"","_id":"6aeb7889a661a3c3a6b89d27"},"entitlements":{},"buildId":"6aecf095affb326a2421ec54","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API Reference","count":34},{"language":"default","tag":"Documentation","count":17},{"language":"default","tag":"Integration","count":6},{"language":"default","tag":"Products","count":5},{"language":"default","tag":"Integration Guides","count":5},{"language":"default","tag":"Payment Links","count":4},{"language":"default","tag":"Subscriptions","count":4},{"language":"default","tag":"Getting Started","count":4},{"language":"default","tag":"Custom Payment Methods","count":4},{"language":"default","tag":"Get Started","count":4}]},"assistantConfig":{},"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":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"custom-payment-methods/gale-on-stripe","slug":"/custom-payment-methods/gale-on-stripe","pageMetadata":{"title":"Gale on Stripe","sidebarTitle":"Gale on Stripe","description":"Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.","icon":"plug","href":"/custom-payment-methods/gale-on-stripe"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.\"\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`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Gale on Stripe`}),` is in the Gale Merchant Dashboard under `,_jsx(_components.strong,{children:`Integrations → Gale on Stripe`}),`. The one-time Payment Element setup saves its restricted key here. Gale authenticates to your Stripe account with that key and writes the payment record. Save the key before you take a test payment.`]}),`\n`,_jsx(_components.p,{children:`The page is per mode. Sandbox and production keep separate credentials, and a test key cannot be saved into production.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Create the `,_jsx(_components.code,{children:`cpmt_…`}),` id on the `,_jsx(_components.a,{href:`/custom-payment-methods/elements-payment-intent#step-1-create-your-custom-payment-method`,children:`Payment Element`}),` page and paste it here. Leave the endpoint URL blank on that path. The `,_jsx(_components.a,{href:`/custom-payment-methods/elements-checkout-session`,children:`Checkout Session`}),` path is the one that sets the endpoint URL and the signing secret.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`credentials`,children:`Credentials`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What to paste`}),_jsx(_components.th,{children:`Required`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Restricted API key`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`rk_…`}),` key Stripe showed you. Not your secret key.`]}),_jsx(_components.td,{children:`Required the first time you save. Leave the field blank to keep the key already stored.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Custom payment method type ID`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`cpmt_…`}),` id from the Payment Element page`]}),_jsx(_components.td,{children:`Paste it for the Payment Element setup. Leave the field blank to keep the saved id.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Signing secret`})}),_jsx(_components.td,{children:`Leave blank for the Payment Element`}),_jsx(_components.td,{children:`The Checkout Session path needs this secret. Leave the field blank to keep a secret already stored.`})]})]})]}),`\n`,_jsx(_components.p,{children:`Gale checks the key when you save. Payment Records read and write have to be granted, or the page will not save. Other permissions can be missing: the page warns, and the save still goes through.`}),`\n`,_jsx(Heading,{level:`2`,id:`create-the-restricted-key`,children:`Create the restricted key`}),`\n`,_jsx(_components.p,{children:`Create one restricted key per Stripe account, per mode.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Use a restricted key, not your secret key. The restricted key cannot move money.`})}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Open API keys`,children:[_jsxs(_components.p,{children:[`In the Stripe Dashboard, open `,_jsx(_components.strong,{children:`Developers`}),` and choose `,_jsx(_components.strong,{children:`API keys`}),`.`]}),_jsx(Frame,{caption:`Developers → API keys`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-1-developers.png?fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=7cdd9500b28b8f2e2bde99adcd7935a8`,alt:`Stripe Developers menu listing Workbench, Documentation, and API keys`,\"data-og-width\":`480`,width:`480`,\"data-og-height\":`1082`,height:`1082`,\"data-path\":`images/stripe-cpm-key-1-developers.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-1-developers.png?w=280\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=edb48f3e6f76fe524db20b3a734d0472 280w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-1-developers.png?w=560\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=ccc8b770d808723170e9c52eec406cb2 560w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-1-developers.png?w=840\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=07462d89e2c2011d825ad9e4bf40bc5c 840w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-1-developers.png?w=1100\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=13ce24b64bdf592acd8c00b971bf2a68 1100w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-1-developers.png?w=1650\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=b2a5b5bf35084808b3f5bc8cd801f069 1650w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-1-developers.png?w=2500\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=b1091670cafa1ea5cec710f70710a205 2500w`})})]}),_jsxs(Step,{title:`Create a restricted key`,children:[_jsxs(_components.p,{children:[`Find the `,_jsx(_components.strong,{children:`Restricted keys`}),` card and click `,_jsx(_components.strong,{children:`Create restricted key`}),`. Not the standard secret key above it.`]}),_jsx(Frame,{caption:`Restricted keys → Create restricted key`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-2-restricted-keys.png?fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=e7bda58f365e092086e1bf9538901fb3`,alt:`Restricted keys card with the Create restricted key button`,\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`316`,height:`316`,\"data-path\":`images/stripe-cpm-key-2-restricted-keys.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-2-restricted-keys.png?w=280\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=075f3b4a9fc0af1081adbded8e7d69d0 280w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-2-restricted-keys.png?w=560\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=7fcc3638e5509ac3b387128eae6bf220 560w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-2-restricted-keys.png?w=840\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=fcfbf66f81c2dfdab555566f2bbb9f8e 840w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-2-restricted-keys.png?w=1100\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=ae8f70a0c81b2d0932a333b47e9deacd 1100w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-2-restricted-keys.png?w=1650\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=a4af29841ca88987cb7b4af1eb0c3c9a 1650w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-2-restricted-keys.png?w=2500\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=b98a9838880a658bba97193c1bc7c42a 2500w`})})]}),_jsxs(Step,{title:`Choose how the key will be used`,children:[_jsxs(_components.p,{children:[`Pick `,_jsx(_components.strong,{children:`Powering an integration you built`}),` and click `,_jsx(_components.strong,{children:`Continue`}),`.`]}),_jsx(Frame,{caption:`Create a restricted key, usage`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-3-usage.png?fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=901ca5cd1ebe64c0ebe01ca37dccbd89`,alt:`Create a restricted key dialog with three usage options`,\"data-og-width\":`1068`,width:`1068`,\"data-og-height\":`1550`,height:`1550`,\"data-path\":`images/stripe-cpm-key-3-usage.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-3-usage.png?w=280\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=b765d1dd11347a35ecdd05f6f09f654c 280w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-3-usage.png?w=560\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=6620ab2ef55a21c7e0ce8f4b0c758c45 560w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-3-usage.png?w=840\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=ce0689859ae0b8885b79c495e210d808 840w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-3-usage.png?w=1100\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=4c19019733ba1f02dc0fe54edf0e5e20 1100w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-3-usage.png?w=1650\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=8c110e600b474f9d53f25d3ed069ab27 1650w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-3-usage.png?w=2500\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=56132e70f11e1167908e982c7692902c 2500w`})}),_jsx(Note,{children:_jsx(_components.p,{children:`“Providing this key to a third-party application” leads to a different flow. Use the first option.`})})]}),_jsxs(Step,{title:`Grant Payment Records`,children:[_jsxs(_components.p,{children:[`Set `,_jsx(_components.strong,{children:`Payment Records`}),` to `,_jsx(_components.strong,{children:`Write`}),`. Stripe’s Write level includes Read, and the Gale page requires both. Without them, save fails.`]}),_jsxs(_components.p,{children:[`Leave Checkout Sessions, Products, Prices, Payment Methods, Subscriptions, and Webhook Endpoints at `,_jsx(_components.strong,{children:`None`}),`. If one of those is missing, the page shows a warning and still saves.`]}),_jsx(Frame,{caption:`The resource list, all permissions at None`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-4-resources.png?fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=ed06003da75a7174988e5eda64250e3f`,alt:`Create restricted API key page listing resources with None, Read and Write toggles`,\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1214`,height:`1214`,\"data-path\":`images/stripe-cpm-key-4-resources.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-4-resources.png?w=280\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=9e816890f72e34a24c7da361b437cf1e 280w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-4-resources.png?w=560\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=77bddb13091a9e09a52a12f47836e084 560w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-4-resources.png?w=840\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=a4287ff9986e70b68dfc4f81aa2d4b36 840w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-4-resources.png?w=1100\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=0acb62c67e25162280f8ab591e4984e4 1100w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-4-resources.png?w=1650\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=0fcbf748aedd40c5e3b749b3e93a76fc 1650w, https://mintcdn.com/galepaymentsinc/xCMsVFbcovX9wrtB/images/stripe-cpm-key-4-resources.png?w=2500\u0026fit=max\u0026auto=format\u0026n=xCMsVFbcovX9wrtB\u0026q=85\u0026s=956e64d4b6d48f3629f1e2bb0bcbeacf 2500w`})}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Set the level on the `,_jsx(_components.strong,{children:`child row`}),`, not the section header. Setting the section grants far more than this page checks.`]})})]}),_jsxs(Step,{title:`Name it and create it`,children:[_jsxs(_components.p,{children:[`Give the key a name that will still make sense in a year, such as `,_jsx(_components.code,{children:`Gale HSA/FSA`}),`. Then click `,_jsx(_components.strong,{children:`Create key`}),` and copy what Stripe shows you.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Stripe shows a restricted key once. If you leave the page before copying it, create another. Permissions cannot be edited after the key exists, so a missed Payment Records grant also means a new key.`})})]})]}),`\n`,_jsxs(_components.p,{children:[`Paste the key into `,_jsx(_components.strong,{children:`Restricted API key`}),` and save. On the Payment Element path, leave the signing secret blank.`]}),`\n`,_jsx(Heading,{level:`2`,id:`after-you-save`,children:`After you save`}),`\n`,_jsx(_components.p,{children:`The panel lists each permission as granted, missing, or a warning.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Payment Records read and write`}),` are required. If either is missing, the page will not save.`]}),`\n`,_jsx(_components.li,{children:`The other rows are warnings. A warning does not block the save.`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Signing secret`}),` shows whether one is stored. The value is never shown again. For the Payment Element path, leave it unset.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Re-check permissions`}),` runs the check again. Stripe will not show the restricted key a second time, so saving the form again does not refresh the check.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/custom-payment-methods/elements-payment-intent`,children:`Stripe Payment Element`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/developer-manual/webhooks`,children:`Webhooks`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/api-reference/endpoint/create-refund`,children:`Create a refund`})}),`\n`]})]})}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":"Gale on Stripe","sidebarTitle":"Gale on Stripe","description":"Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.","icon":"plug","href":"/custom-payment-methods/gale-on-stripe"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Credentials","slug":"credentials","depth":2,"children":[]},{"title":"Create the restricted key","slug":"create-the-restricted-key","depth":2,"children":[]},{"title":"After you save","slug":"after-you-save","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/galepaymentsinc/b59ee8d52cd5d442/products.js"],"subdomain":"galepaymentsinc","siteName":"Docs","title":"Gale on Stripe - Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T20:10:30.608Z","originalFileLocation":"custom-payment-methods/gale-on-stripe.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=\"Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/galepaymentsinc/cVIG_Ben8lTmN8Vt/_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/galepaymentsinc/cVIG_Ben8lTmN8Vt/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/galepaymentsinc/cVIG_Ben8lTmN8Vt/_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/galepaymentsinc/cVIG_Ben8lTmN8Vt/_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/galepaymentsinc/cVIG_Ben8lTmN8Vt/_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/galepaymentsinc/cVIG_Ben8lTmN8Vt/_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/galepaymentsinc/cVIG_Ben8lTmN8Vt/_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/galepaymentsinc/cVIG_Ben8lTmN8Vt/_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/galepaymentsinc/cVIG_Ben8lTmN8Vt/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Gale on Stripe - Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://galepaymentsinc.mintlify.site/_mintlify/api/og/v2?division=Custom+Payment+Methods\u0026amp;title=Gale+on+Stripe\u0026amp;description=Save+the+restricted+key+Gale+uses+to+write+a+Pay+with+FSA%2FHSA+payment+back+to+your+Stripe+account.\u0026amp;theme=014fa1126e6a8a7b30c39219\u0026amp;signature=7bb4f3128468bc20c859c8c98286494076bb2b4fad15785b59782fa1be3845bd\">\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=\"Gale on Stripe - Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://galepaymentsinc.mintlify.site/_mintlify/api/og/v2?division=Custom+Payment+Methods\u0026amp;title=Gale+on+Stripe\u0026amp;description=Save+the+restricted+key+Gale+uses+to+write+a+Pay+with+FSA%2FHSA+payment+back+to+your+Stripe+account.\u0026amp;theme=014fa1126e6a8a7b30c39219\u0026amp;signature=7bb4f3128468bc20c859c8c98286494076bb2b4fad15785b59782fa1be3845bd\">\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/galepaymentsinc/cVIG_Ben8lTmN8Vt/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#07BC8A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/custom-payment-methods/gale-on-stripe.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.withgale.com/#organization\",\"name\":\"Docs\",\"url\":\"https://docs.withgale.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/galepaymentsinc/ES_DCNs-vEFQ6D4Q/logo/gale_logo_black.png?fit=max\u0026auto=format\u0026n=ES_DCNs-vEFQ6D4Q\u0026q=85\u0026s=2105292f397b235ddd90feb105e7ce13\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.withgale.com#website\",\"name\":\"Docs\",\"url\":\"https://docs.withgale.com\",\"publisher\":{\"@id\":\"https://docs.withgale.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe#webpage\",\"url\":\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe\",\"name\":\"Gale on Stripe\",\"description\":\"Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.\",\"dateModified\":\"2026-11-04T20:10:30.608Z\",\"isPartOf\":{\"@id\":\"https://docs.withgale.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Custom Payment Methods\",\"item\":\"https://docs.withgale.com/custom-payment-methods/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gale on Stripe\",\"item\":\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe#article\",\"headline\":\"Gale on Stripe\",\"name\":\"Gale on Stripe\",\"description\":\"Save the restricted key Gale uses to write a Pay with FSA/HSA payment back to your Stripe account.\",\"url\":\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe\",\"mainEntityOfPage\":{\"@id\":\"https://docs.withgale.com/custom-payment-methods/gale-on-stripe#webpage\"},\"dateModified\":\"2026-11-04T20:10:30.608Z\",\"publisher\":{\"@id\":\"https://docs.withgale.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.withgale.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Docs","nav":{"global":{"anchors":[{"anchor":"Status","icon":"wifi","href":"https://status.withgale.com"},{"anchor":"Support","icon":"headphones","href":"https://www.withgale.com/contact/support"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Introduction","icon":"book-open","href":"/introduction"},{"title":"Product Eligibility","sidebarTitle":"Product Eligibility","icon":"badge-check","href":"/onboarding/hsafsa"},{"title":"How Gale Works","icon":"diagram-project","href":"/how-it-works"},{"title":"Account Setup","icon":"user-check","href":"/merchant/account-setup"}]},{"group":"Integration","pages":[{"title":"Guide to Integrations","sidebarTitle":"Get Started","icon":"rocket","href":"/onboarding/introduction"},{"title":"Woocommerce","sidebarTitle":"Woocommerce","icon":"wordpress","href":"/onboarding/woocommerce/installation"},{"title":"Shopify","icon":"shopify","href":"/onboarding/shopify/installation"},{"title":"BigCommerce","icon":"https://mintlify.s3.us-west-1.amazonaws.com/galepaymentsinc/images/bigcomm-icon.svg","href":"/onboarding/bigcommerce/installation"},{"title":"Custom Integration","icon":"code","href":"/onboarding/custom"},{"title":"Payment Links","icon":"link","href":"/documentation/integration/payment-links"}]},{"group":"Promotional Resources","pages":[{"group":"Onsite Messaging","pages":[{"title":"Onsite Messaging - WooCommerce","sidebarTitle":"Woocommerce","icon":"wordpress","href":"/onboarding/woocommerce/onsitemessaging"},{"title":"Onsite Messaging - Shopify ","sidebarTitle":"Shopify","icon":"shopify","href":"/onboarding/shopify/eligibilityinstallation"},{"title":"Onsite messaging using Custom Code","sidebarTitle":"Shopify (Custom Theme)","description":"Copy-paste the appropriate widget snippet into your Shopify theme based on your design choice.","icon":"shopify","href":"/onboarding/shopify/customcode"}]}]},{"group":"Custom Payment Methods","hidden":true,"searchable":true,"pages":[{"title":"Stripe Custom Payment Methods","sidebarTitle":"Overview","description":"Add Pay with FSA/HSA to Stripe. The Payment Element page is the one-time setup. Subscriptions and Checkout Sessions each have their own page.","icon":"credit-card","href":"/custom-payment-methods/overview"},{"title":"Stripe Payment Elements","sidebarTitle":"Stripe Payment Elements","description":"Add Pay with FSA/HSA to a Stripe Payment Element for a one-time charge. Gale hosts the card page and writes the payment back with your restricted key.","icon":"code","href":"/custom-payment-methods/elements-payment-intent"},{"title":"Stripe Checkout","sidebarTitle":"Stripe Checkout","description":"Add Gale HSA/FSA as a payment option in your existing checkout using Stripe Checkout Sessions.","icon":"plug","href":"/custom-payment-methods/elements-checkout-session"},{"title":"Gale on Stripe","sidebarTitle":"Gale on Stripe","icon":"plug","href":"/custom-payment-methods/gale-on-stripe"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/updates"}]}]},"basePath":"","title":"Gale on Stripe - Docs","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DvzxQbD0.js","DynamicMarkdown-mQG_iQiE.js","zoom-image-lightbox-BFbLClTf.js","lightbox-handle-r17bVUz3.js"]}