CINXE.COM

The Stripe Docs logo

<!doctype html> <html id="​" lang="en-GB"> <head> <meta charSet="utf-8" /> <title data-rh="true">Accept a payment | Stripe Documentation</title> <meta data-rh="true" property="og:type" content="website"/><meta data-rh="true" property="og:title" content="Accept a payment"/><meta data-rh="true" property="og:description" content="Securely accept payments online."/><meta data-rh="true" property="og:image" content="https://d37ugbyn3rpeym.cloudfront.net/docs/og-image/payments.accept-a-payment.ogimage.png"/><meta data-rh="true" name="twitter:card" content="summary_large_image"/><meta data-rh="true" name="twitter:title" content="Accept a payment"/><meta data-rh="true" name="twitter:description" content="Securely accept payments online."/><meta data-rh="true" name="twitter:image" content="https://d37ugbyn3rpeym.cloudfront.net/docs/og-image/payments.accept-a-payment.ogimage.png"/><meta data-rh="true" name="viewport" content="width=device-width, initial-scale=1"/><meta data-rh="true" name="description" content="Securely accept payments online."/><meta data-rh="true" name="algolia:title" content="Accept a payment"/><meta data-rh="true" name="algolia:subtitle" content="Securely accept payments online."/><meta data-rh="true" name="algolia:depth" content="2"/><meta data-rh="true" name="algolia:article-format" content="markdoc"/><meta data-rh="true" level="1" name="algolia:hierachy" content="Home"/><meta data-rh="true" level="2" name="algolia:hierachy" content="Accept a payment"/> <link data-rh="true" rel="icon" href="https://b.stripecdn.com/docs-statics-srv/assets/e9b76763ac024da464fae86e9b69dcbf.png" type="text/png"/><link data-rh="true" rel="canonical" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=en-GB"/><link data-rh="true" rel="alternate" hrefLang="id-ID" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=id-ID"/><link data-rh="true" rel="alternate" hrefLang="de-DE" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=de-DE"/><link data-rh="true" rel="alternate" hrefLang="en-GB" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=en-GB"/><link data-rh="true" rel="alternate" hrefLang="en-US" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios"/><link data-rh="true" rel="alternate" hrefLang="es-419" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=es-419"/><link data-rh="true" rel="alternate" hrefLang="es-ES" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=es-ES"/><link data-rh="true" rel="alternate" hrefLang="fr-CA" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=fr-CA"/><link data-rh="true" rel="alternate" hrefLang="fr-FR" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=fr-FR"/><link data-rh="true" rel="alternate" hrefLang="it-IT" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=it-IT"/><link data-rh="true" rel="alternate" hrefLang="pt-BR" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=pt-BR"/><link data-rh="true" rel="alternate" hrefLang="ja-JP" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=ja-JP"/><link data-rh="true" rel="alternate" hrefLang="zh-CN" href="https://docs.stripe.com/payments/accept-a-payment?platform=ios&amp;locale=zh-CN"/> <link rel="stylesheet" href=https://b.stripecdn.com/docs-statics-srv/assets/sail.b64f4b58d6c908d5640d.css /> <link rel="stylesheet" href=https://b.stripecdn.com/docs-statics-srv/assets/stripeshell.521e17a4d4ec87d0920d.css /> <link rel="stylesheet" href=https://b.stripecdn.com/docs-statics-srv/assets/docs.a31deeb306833774c171.css /> <style data-classes="sn-12touxo/sn-12touxo:sn-nw7ta8/sn-nw7ta8:♲nfa52h/sn-12touxo sn-nw7ta8:sn-9hkfqz/sn-9hkfqz:sn-1rz7got/sn-1rz7got sn-9hkfqz:sn-1cmisr4/sn-1cmisr4:sn-1rzg82o/sn-1rzg82o:sn-1bgjyx/sn-1bgjyx:sn-1ndmri1/sn-1ndmri1 sn-1cmisr4 sn-1rzg82o sn-1bgjyx sn-9hkfqz:sn-tlgbr3/sn-tlgbr3:sn-d55hlb/sn-d55hlb sn-tlgbr3:♲g0sulu/sn-9hkfqz sn-1cmisr4 sn-1rzg82o sn-1bgjyx sn-tlgbr3 sn-16d3z3s sn-1ndmri1:sn-mdbein/sn-mdbein:sn-vegb6l/sn-vegb6l:♲bdr0jk/sn-bdr0jk:sn-1mkggb0/sn-1mkggb0:sn-13p7c65/sn-13p7c65:sn-lleswv/sn-lleswv sn-1mkggb0 sn-13p7c65:sn-q7i8nn/sn-q7i8nn:♲npe8dn/sn-1mkggb0 sn-13p7c65 sn-npe8dn:sn-126ouik/sn-126ouik sn-1cmisr4 sn-1rzg82o:♲vklebx/sn-1cmisr4 sn-1rzg82o sn-126ouik:sn-ziqpk/sn-ziqpk sn-9hkfqz:sn-2p5cb3/sn-2p5cb3 sn-1cmisr4 sn-1rzg82o:♲1xwpko5/sn-9hkfqz sn-1cmisr4 sn-1rzg82o sn-ziqpk sn-2p5cb3:sn-hmryvg/sn-hmryvg:♲7jjyqt/sn-9hkfqz sn-ziqpk sn-hmryvg:sn-1h0a3cy/sn-1h0a3cy sn-1cmisr4:♲hr3e7i/sn-1cmisr4 sn-1h0a3cy:sn-pkkl96/sn-pkkl96:sn-1malqd9/sn-1malqd9:sn-19eq7z1/sn-19eq7z1:sn-13xo93g/sn-13xo93g:sn-19wjju/sn-19wjju:sn-1uppz9z/sn-1uppz9z:sn-c2gimz/sn-c2gimz sn-1bgjyx sn-pkkl96 sn-1malqd9 sn-19eq7z1 sn-13xo93g sn-19wjju sn-1uppz9z:♲izbrso/sn-tlgbr3 sn-1bgjyx sn-pkkl96 sn-1malqd9 sn-19eq7z1 sn-13xo93g sn-19wjju sn-1uppz9z sn-izbrso:sn-ez40f1/sn-ez40f1 sn-9hkfqz:♲170vgii/sn-9hkfqz sn-ez40f1:sn-1g6zy7t/sn-1g6zy7t sn-1cmisr4 sn-1rzg82o sn-9hkfqz:♲aegdc2/sn-1cmisr4 sn-1rzg82o sn-9hkfqz sn-1g6zy7t:sn-bxgxhf/sn-bxgxhf:♲14qm2ah/sn-bxgxhf:--s3-flex-x/:sn-16sbyrz/sn-16sbyrz sn-1cmisr4 sn-1rzg82o:♲16g9yw/sn-1cmisr4 sn-1rzg82o sn-16sbyrz:sn-153wjox/sn-153wjox sn-1cmisr4:sn-v0fir4/sn-v0fir4:sn-zevn6e/sn-zevn6e:sn-153u4ok/sn-153u4ok:sn-1k1rrhg/sn-1k1rrhg:sn-12ey9he/sn-12ey9he:sn-186kdhj/sn-186kdhj:sn-1rdnowh/sn-1rdnowh:sn-8cs70r/sn-8cs70r:sn-1ty5nmm/sn-1ty5nmm:sn-16iz8cd/sn-16iz8cd:sn-1aipvhu/sn-1aipvhu:sn-108ojii/sn-108ojii:sn-ytqtrc/sn-ytqtrc:sn-1cj2i3h/sn-1cj2i3h:sn-s9lwb5/sn-s9lwb5:sn-p098et/sn-p098et sn-v0fir4 sn-zevn6e sn-153u4ok sn-1k1rrhg sn-12ey9he sn-186kdhj sn-1rdnowh sn-8cs70r sn-1ty5nmm sn-16iz8cd sn-1aipvhu sn-108ojii sn-ytqtrc sn-1cj2i3h sn-s9lwb5:♲1ul9b8v/sn-9hkfqz sn-1cmisr4 sn-tlgbr3 sn-v0fir4 sn-zevn6e sn-153u4ok sn-1k1rrhg sn-12ey9he sn-186kdhj sn-1rdnowh sn-8cs70r sn-1ty5nmm sn-16iz8cd sn-1aipvhu sn-108ojii sn-ytqtrc sn-1cj2i3h sn-s9lwb5 sn-1ul9b8v" data-prefix="j1j5idnz-" data-layer="" data-server="39.0.0">#​ .sn-nw7ta8 { --j1j5idnz-hue-gray0: #ffffff; --j1j5idnz-hue-gray50: #f6f8fa; --j1j5idnz-hue-gray100: #ebeef1; --j1j5idnz-hue-gray150: #d5dbe1; --j1j5idnz-hue-gray200: #c0c8d2; --j1j5idnz-hue-gray300: #a3acba; --j1j5idnz-hue-gray400: #87909f; --j1j5idnz-hue-gray500: #687385; --j1j5idnz-hue-gray600: #545969; --j1j5idnz-hue-gray700: #414552; --j1j5idnz-hue-gray800: #30313d; --j1j5idnz-hue-gray900: #1a1b25; --j1j5idnz-hue-gray950: #10111a; --j1j5idnz-hue-blue50: #ddfffe; --j1j5idnz-hue-blue100: #cff5f6; --j1j5idnz-hue-blue150: #a2e5ef; --j1j5idnz-hue-blue200: #75d5e8; --j1j5idnz-hue-blue300: #06b9ef; --j1j5idnz-hue-blue400: #0096eb; --j1j5idnz-hue-blue500: #0570de; --j1j5idnz-hue-blue600: #0055bc; --j1j5idnz-hue-blue700: #04438c; --j1j5idnz-hue-blue800: #003262; --j1j5idnz-hue-blue900: #011c3a; --j1j5idnz-hue-green50: #ecfed7; --j1j5idnz-hue-green100: #d7f7c2; --j1j5idnz-hue-green150: #a6eb84; --j1j5idnz-hue-green200: #76df47; --j1j5idnz-hue-green300: #48c404; --j1j5idnz-hue-green400: #3fa40d; --j1j5idnz-hue-green500: #228403; --j1j5idnz-hue-green600: #006908; --j1j5idnz-hue-green700: #0b5019; --j1j5idnz-hue-green800: #043b15; --j1j5idnz-hue-green900: #02220d; --j1j5idnz-hue-orange50: #fef9da; --j1j5idnz-hue-orange100: #fcedb9; --j1j5idnz-hue-orange150: #fcd579; --j1j5idnz-hue-orange200: #fcbd3a; --j1j5idnz-hue-orange300: #ff8f0e; --j1j5idnz-hue-orange400: #ed6704; --j1j5idnz-hue-orange500: #c84801; --j1j5idnz-hue-orange600: #a82c00; --j1j5idnz-hue-orange700: #842106; --j1j5idnz-hue-orange800: #5f1a05; --j1j5idnz-hue-orange900: #331302; --j1j5idnz-hue-red50: #fff5fa; --j1j5idnz-hue-red100: #ffe7f2; --j1j5idnz-hue-red150: #ffccdf; --j1j5idnz-hue-red200: #ffb1cd; --j1j5idnz-hue-red300: #fe87a1; --j1j5idnz-hue-red400: #fc526a; --j1j5idnz-hue-red500: #df1b41; --j1j5idnz-hue-red600: #b3093c; --j1j5idnz-hue-red700: #890d37; --j1j5idnz-hue-red800: #68052b; --j1j5idnz-hue-red900: #3e021a; --j1j5idnz-hue-purple50: #f9f7ff; --j1j5idnz-hue-purple100: #f2ebff; --j1j5idnz-hue-purple150: #dfd3fc; --j1j5idnz-hue-purple200: #d1befe; --j1j5idnz-hue-purple300: #b49cfc; --j1j5idnz-hue-purple400: #8d7ffa; --j1j5idnz-hue-purple500: #625afa; --j1j5idnz-hue-purple600: #513dd9; --j1j5idnz-hue-purple700: #3f32a1; --j1j5idnz-hue-purple800: #302476; --j1j5idnz-hue-purple900: #14134e; --j1j5idnz-color-neutral0: var(--j1j5idnz-hue-gray0); --j1j5idnz-color-neutral50: var(--j1j5idnz-hue-gray50); --j1j5idnz-color-neutral100: var(--j1j5idnz-hue-gray100); --j1j5idnz-color-neutral150: var(--j1j5idnz-hue-gray150); --j1j5idnz-color-neutral200: var(--j1j5idnz-hue-gray200); --j1j5idnz-color-neutral300: var(--j1j5idnz-hue-gray300); --j1j5idnz-color-neutral400: var(--j1j5idnz-hue-gray400); --j1j5idnz-color-neutral500: var(--j1j5idnz-hue-gray500); --j1j5idnz-color-neutral600: var(--j1j5idnz-hue-gray600); --j1j5idnz-color-neutral700: var(--j1j5idnz-hue-gray700); --j1j5idnz-color-neutral800: var(--j1j5idnz-hue-gray800); --j1j5idnz-color-neutral900: var(--j1j5idnz-hue-gray900); --j1j5idnz-color-neutral950: var(--j1j5idnz-hue-gray950); --j1j5idnz-color-brand50: var(--j1j5idnz-hue-purple50); --j1j5idnz-color-brand100: var(--j1j5idnz-hue-purple100); --j1j5idnz-color-brand200: var(--j1j5idnz-hue-purple200); --j1j5idnz-color-brand300: var(--j1j5idnz-hue-purple300); --j1j5idnz-color-brand400: var(--j1j5idnz-hue-purple400); --j1j5idnz-color-brand500: var(--j1j5idnz-hue-purple500); --j1j5idnz-color-brand600: var(--j1j5idnz-hue-purple600); --j1j5idnz-color-brand700: var(--j1j5idnz-hue-purple700); --j1j5idnz-color-brand800: var(--j1j5idnz-hue-purple800); --j1j5idnz-color-brand900: var(--j1j5idnz-hue-purple900); --j1j5idnz-color-info50: var(--j1j5idnz-hue-blue50); --j1j5idnz-color-info100: var(--j1j5idnz-hue-blue100); --j1j5idnz-color-info150: var(--j1j5idnz-hue-blue150); --j1j5idnz-color-info200: var(--j1j5idnz-hue-blue200); --j1j5idnz-color-info300: var(--j1j5idnz-hue-blue300); --j1j5idnz-color-info400: var(--j1j5idnz-hue-blue400); --j1j5idnz-color-info500: var(--j1j5idnz-hue-blue500); --j1j5idnz-color-info600: var(--j1j5idnz-hue-blue600); --j1j5idnz-color-info700: var(--j1j5idnz-hue-blue700); --j1j5idnz-color-info800: var(--j1j5idnz-hue-blue800); --j1j5idnz-color-info900: var(--j1j5idnz-hue-blue900); --j1j5idnz-color-success50: var(--j1j5idnz-hue-green50); --j1j5idnz-color-success100: var(--j1j5idnz-hue-green100); --j1j5idnz-color-success150: var(--j1j5idnz-hue-green150); --j1j5idnz-color-success200: var(--j1j5idnz-hue-green200); --j1j5idnz-color-success300: var(--j1j5idnz-hue-green300); --j1j5idnz-color-success400: var(--j1j5idnz-hue-green400); --j1j5idnz-color-success500: var(--j1j5idnz-hue-green500); --j1j5idnz-color-success600: var(--j1j5idnz-hue-green600); --j1j5idnz-color-success700: var(--j1j5idnz-hue-green700); --j1j5idnz-color-success800: var(--j1j5idnz-hue-green800); --j1j5idnz-color-success900: var(--j1j5idnz-hue-green900); --j1j5idnz-color-attention50: var(--j1j5idnz-hue-orange50); --j1j5idnz-color-attention100: var(--j1j5idnz-hue-orange100); --j1j5idnz-color-attention150: var(--j1j5idnz-hue-orange150); --j1j5idnz-color-attention200: var(--j1j5idnz-hue-orange200); --j1j5idnz-color-attention300: var(--j1j5idnz-hue-orange300); --j1j5idnz-color-attention400: var(--j1j5idnz-hue-orange400); --j1j5idnz-color-attention500: var(--j1j5idnz-hue-orange500); --j1j5idnz-color-attention600: var(--j1j5idnz-hue-orange600); --j1j5idnz-color-attention700: var(--j1j5idnz-hue-orange700); --j1j5idnz-color-attention800: var(--j1j5idnz-hue-orange800); --j1j5idnz-color-attention900: var(--j1j5idnz-hue-orange900); --j1j5idnz-color-critical50: var(--j1j5idnz-hue-red50); --j1j5idnz-color-critical100: var(--j1j5idnz-hue-red100); --j1j5idnz-color-critical150: var(--j1j5idnz-hue-red150); --j1j5idnz-color-critical200: var(--j1j5idnz-hue-red200); --j1j5idnz-color-critical300: var(--j1j5idnz-hue-red300); --j1j5idnz-color-critical400: var(--j1j5idnz-hue-red400); --j1j5idnz-color-critical500: var(--j1j5idnz-hue-red500); --j1j5idnz-color-critical600: var(--j1j5idnz-hue-red600); --j1j5idnz-color-critical700: var(--j1j5idnz-hue-red700); --j1j5idnz-color-critical800: var(--j1j5idnz-hue-red800); --j1j5idnz-color-critical900: var(--j1j5idnz-hue-red900); --j1j5idnz-backgroundColor-surface: var(--j1j5idnz-color-neutral0); --j1j5idnz-backgroundColor-container: var(--j1j5idnz-color-neutral50); --j1j5idnz-borderColor-neutral: var(--j1j5idnz-color-neutral150); --j1j5idnz-borderColor-critical: var(--j1j5idnz-color-critical500); --j1j5idnz-iconColor-primary: var(--j1j5idnz-color-neutral600); --j1j5idnz-iconColor-secondary: var(--j1j5idnz-color-neutral400); --j1j5idnz-iconColor-disabled: var(--j1j5idnz-color-neutral200); --j1j5idnz-iconColor-brand: var(--j1j5idnz-color-brand400); --j1j5idnz-iconColor-info: var(--j1j5idnz-color-info400); --j1j5idnz-iconColor-success: var(--j1j5idnz-color-success400); --j1j5idnz-iconColor-attention: var(--j1j5idnz-color-attention400); --j1j5idnz-iconColor-critical: var(--j1j5idnz-color-critical400); --j1j5idnz-textColor-primary: var(--j1j5idnz-color-neutral700); --j1j5idnz-textColor-secondary: var(--j1j5idnz-color-neutral500); --j1j5idnz-textColor-disabled: var(--j1j5idnz-color-neutral300); --j1j5idnz-textColor-brand: var(--j1j5idnz-color-brand500); --j1j5idnz-textColor-info: var(--j1j5idnz-color-info500); --j1j5idnz-textColor-success: var(--j1j5idnz-color-success500); --j1j5idnz-textColor-attention: var(--j1j5idnz-color-attention500); --j1j5idnz-textColor-critical: var(--j1j5idnz-color-critical500); --j1j5idnz-overflow-hidden: hidden; --j1j5idnz-radius-none: none; --j1j5idnz-radius-xsmall: 4px; --j1j5idnz-radius-small: 4px; --j1j5idnz-radius-medium: 8px; --j1j5idnz-radius-large: 10px; --j1j5idnz-radius-rounded: 999em; --j1j5idnz-shadow-none: none; --j1j5idnz-shadow-top: rgb(0 0 0 / 12%) 0px 1px 1px 0px; --j1j5idnz-shadow-base: rgb(64 68 82 / 8%) 0px 2px 5px 0px, 0 0 0 0 transparent; --j1j5idnz-shadow-hover: rgb(64 68 82 / 8%) 0px 2px 5px 0px, rgb(64 68 82 / 8%) 0px 3px 9px 0px; --j1j5idnz-shadow-focus: 0 0 0 4px rgb(1 150 237 / 36%); --j1j5idnz-size-0: 0px; --j1j5idnz-size-1: var(--j1j5idnz-space-1); --j1j5idnz-size-25: var(--j1j5idnz-space-25); --j1j5idnz-size-50: var(--j1j5idnz-space-50); --j1j5idnz-size-75: var(--j1j5idnz-space-75); --j1j5idnz-size-100: var(--j1j5idnz-space-100); --j1j5idnz-size-150: var(--j1j5idnz-space-150); --j1j5idnz-size-200: var(--j1j5idnz-space-200); --j1j5idnz-size-250: var(--j1j5idnz-space-250); --j1j5idnz-size-300: var(--j1j5idnz-space-300); --j1j5idnz-size-350: var(--j1j5idnz-space-350); --j1j5idnz-size-400: var(--j1j5idnz-space-400); --j1j5idnz-size-500: var(--j1j5idnz-space-500); --j1j5idnz-size-600: var(--j1j5idnz-space-600); --j1j5idnz-size-fill: 100%; --j1j5idnz-size-min: min-content; --j1j5idnz-size-max: max-content; --j1j5idnz-size-fit: fit-content; --j1j5idnz-size-1\/2: 50%; --j1j5idnz-size-1\/3: 33.3333%; --j1j5idnz-size-2\/3: 66.6667%; --j1j5idnz-size-1\/4: 25%; --j1j5idnz-size-2\/4: 50%; --j1j5idnz-size-3\/4: 75%; --j1j5idnz-size-1\/5: 20%; --j1j5idnz-size-2\/5: 40%; --j1j5idnz-size-3\/5: 60%; --j1j5idnz-size-4\/5: 80%; --j1j5idnz-size-1\/6: 16.6667%; --j1j5idnz-size-2\/6: 33.3333%; --j1j5idnz-size-3\/6: 50%; --j1j5idnz-size-4\/6: 66.6667%; --j1j5idnz-size-5\/6: 83.3333%; --j1j5idnz-size-1\/12: 8.3333%; --j1j5idnz-size-2\/12: 16.6667%; --j1j5idnz-size-3\/12: 25%; --j1j5idnz-size-4\/12: 33.3333%; --j1j5idnz-size-5\/12: 41.6667%; --j1j5idnz-size-6\/12: 50%; --j1j5idnz-size-7\/12: 58.3333%; --j1j5idnz-size-8\/12: 66.6667%; --j1j5idnz-size-9\/12: 75%; --j1j5idnz-size-10\/12: 83.3333%; --j1j5idnz-size-11\/12: 91.6667%; --j1j5idnz-space-0: 0px; --j1j5idnz-space-1: 1px; --j1j5idnz-space-25: 2px; --j1j5idnz-space-50: 4px; --j1j5idnz-space-75: 6px; --j1j5idnz-space-100: 8px; --j1j5idnz-space-150: 12px; --j1j5idnz-space-200: 16px; --j1j5idnz-space-250: 20px; --j1j5idnz-space-300: 24px; --j1j5idnz-space-350: 28px; --j1j5idnz-space-400: 32px; --j1j5idnz-space-500: 40px; --j1j5idnz-space-600: 48px; --j1j5idnz-space-xxsmall: var(--j1j5idnz-space-25); --j1j5idnz-space-xsmall: var(--j1j5idnz-space-50); --j1j5idnz-space-small: var(--j1j5idnz-space-100); --j1j5idnz-space-medium: var(--j1j5idnz-space-200); --j1j5idnz-space-large: var(--j1j5idnz-space-300); --j1j5idnz-space-xlarge: var(--j1j5idnz-space-400); --j1j5idnz-space-xxlarge: var(--j1j5idnz-space-600); --j1j5idnz-typeface-ui: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; --j1j5idnz-typeface-monospace: 'Source Code Pro', Menlo, Monaco, monospace; --j1j5idnz-weight-regular: 400; --j1j5idnz-weight-semibold: 600; --j1j5idnz-weight-bold: 700; --j1j5idnz-zIndex-overlay: 299; --j1j5idnz-zIndex-partial: 400; }</style><style data-layer="reset" data-server="39.0.0">#​#​ .rs35:active:not([aria-disabled="true"]) { box-shadow: var(--s3-top-shadow), var(--s3-keyline) 0 0 0 var(--s3-keyline-width), var(--s3-focus-ring), var(--s3-box-shadow); } #​#​ .rs33:focus { box-shadow: var(--s3-top-shadow), var(--s3-keyline) 0 0 0 var(--s3-keyline-width), var(--s3-focus-ring), var(--s3-box-shadow); } #​#​ .image-wrapper p::before { content: var(--s3-baseline-alignment-content);user-select: none;align-self: baseline;margin-right: calc(-1 * var(--s3-column-gap)); } #​#​ .rs32 { display: var(--s3-display-block); } #​#​ .rs34:hover:not(:active):not([aria-disabled="true"]) { box-shadow: var(--s3-top-shadow), var(--s3-keyline) 0 0 0 var(--s3-keyline-width), var(--s3-focus-ring), var(--s3-box-shadow); } #​#​ .rs31::before { content: var(--s3-baseline-alignment-content);user-select: none;align-self: baseline;margin-right: calc(-1 * var(--s3-column-gap)); } #​#​ .rs30 { box-shadow: var(--s3-top-shadow), var(--s3-keyline) 0 0 0 var(--s3-keyline-width), var(--s3-focus-ring), var(--s3-box-shadow); } #​#​ .rs37:focus-visible { box-shadow: var(--s3-top-shadow), var(--s3-keyline) 0 0 0 var(--s3-keyline-width), var(--s3-focus-ring), var(--s3-box-shadow); } #​#​ .sn-9hkfqz { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-1cmisr4 { --distribute-x: initial; --distribute-y: initial; --align-x: initial; --align-y: initial; } #​#​ .sn-1cmisr4 > * { --align-self-x: initial; --align-self-y: initial; --flex-x: 1 1 auto; --flex-y: 1 1 auto; } #​#​ .sn-1rzg82o { --row-gap: normal; --column-gap: normal; gap: var(--row-gap) var(--column-gap); } #​#​ .sn-1bgjyx { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-tlgbr3:focus { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-1mkggb0 input { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-13p7c65 input { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-pkkl96.sn-1euh7h0.sn-1euh7h0-size-small { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-1malqd9.sn-1euh7h0.sn-1euh7h0-size-medium { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-19eq7z1.sn-1euh7h0.sn-1euh7h0-size-large { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-13xo93g.sn-1euh7h0.sn-1euh7h0-invalid-true { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-19wjju.sn-1euh7h0.sn-1euh7h0-isInCompositeField-true { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-1uppz9z.sn-1euh7h0.sn-1euh7h0-isInCompositeField-true { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-v0fir4.sn-1w3n5ld.sn-1w3n5ld-size-small { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-zevn6e.sn-1w3n5ld.sn-1w3n5ld-size-small { --row-gap: normal; --column-gap: normal; gap: var(--row-gap) var(--column-gap); } #​#​ .sn-153u4ok.sn-1w3n5ld.sn-1w3n5ld-size-medium { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-1k1rrhg.sn-1w3n5ld.sn-1w3n5ld-size-medium { --row-gap: normal; --column-gap: normal; gap: var(--row-gap) var(--column-gap); } #​#​ .sn-12ey9he.sn-1w3n5ld.sn-1w3n5ld-size-large { --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0; padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left); } #​#​ .sn-186kdhj.sn-1w3n5ld.sn-1w3n5ld-size-large { --row-gap: normal; --column-gap: normal; gap: var(--row-gap) var(--column-gap); } #​#​ .sn-1rdnowh.sn-1w3n5ld.sn-1w3n5ld-type-primary { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-8cs70r.sn-1w3n5ld.sn-1w3n5ld-type-primary:active { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-1ty5nmm.sn-1w3n5ld.sn-1w3n5ld-type-primary:hover { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-16iz8cd.sn-1w3n5ld.sn-1w3n5ld-type-secondary { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-1aipvhu.sn-1w3n5ld.sn-1w3n5ld-type-secondary:active { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-108ojii.sn-1w3n5ld.sn-1w3n5ld-type-secondary:hover { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-ytqtrc.sn-1w3n5ld.sn-1w3n5ld-type-destructive { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-1cj2i3h.sn-1w3n5ld.sn-1w3n5ld-type-destructive:active { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } #​#​ .sn-s9lwb5.sn-1w3n5ld.sn-1w3n5ld-type-destructive:hover { --focus-ring: 0 0 0 0 transparent; --box-shadow: 0 0 0 0 transparent; --top-shadow: 0 0 0 0 transparent; --keyline: transparent; --keyline-width: 1px; box-shadow: var(--top-shadow), var(--keyline) 0 0 0 var(--keyline-width), var(--focus-ring), var(--box-shadow); } .__sn-sheet-order { --order: '_umxce2,_id62up,_6doeok,_182o24t,_8vzhe3,_11h43gj,_1rsda90,_zngvc8'; }</style><style data-layer="headless" data-server="39.0.0"></style><style data-layer="theme" data-server="39.0.0"></style><style data-layer="theme.classic" data-server="39.0.0">#​#​#​#​#​ .sn-12touxo { font-family: var(--j1j5idnz-typeface-ui); color: var(--j1j5idnz-textColor-primary); fill: var(--j1j5idnz-iconColor-primary); -webkit-font-smoothing: antialiased; } #​#​#​#​#​ .sn-1rz7got { margin-bottom: 0; margin-left: 0; margin-right: 0; margin-top: 0; --padding-bottom: 0; --padding-left: 0; --padding-right: 0; --padding-top: 0; color: inherit; font-weight: inherit; font-size: inherit; font-family: inherit; font-style: inherit; text-align: inherit; text-decoration: none; background-color: transparent; border: 0; outline: none; cursor: pointer; } #​#​#​#​#​ .sn-1rz7got:hover { color: inherit; } #​#​#​#​#​ .sn-d55hlb:focus { --focus-ring: var(--j1j5idnz-shadow-focus); outline: none; } #​#​#​#​#​ .sn-16d3z3s { margin-bottom: 0; margin-left: 0; margin-right: 0; margin-top: 0; --padding-bottom: 0; --padding-left: 0; --padding-right: 0; --padding-top: 0; color: inherit; font-weight: inherit; font-size: inherit; font-family: inherit; font-style: inherit; text-align: inherit; text-decoration: none; background-color: transparent; border: 0; outline: none; cursor: pointer; } #​#​#​#​#​ .sn-16d3z3s:hover { color: inherit; } #​#​#​#​#​ .sn-16d3z3s:focus { --focus-ring: var(--j1j5idnz-shadow-focus); outline: none; } #​#​#​#​#​ .sn-mdbein { fill: currentColor; } #​#​#​#​#​ .sn-vegb6l { --icon-size: 16px; height: var(--icon-size); --flex-y: initial; --s3-flex-y: 0 1 auto; width: var(--icon-size); --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​ .sn-vegb6l.sn-1mj7mtw.sn-1mj7mtw-size-xxsmall { --icon-size: 8px; } #​#​#​#​#​ .sn-vegb6l.sn-1mj7mtw.sn-1mj7mtw-size-xsmall { --icon-size: 12px; } #​#​#​#​#​ .sn-vegb6l.sn-1mj7mtw.sn-1mj7mtw-size-medium { --icon-size: 20px; } #​#​#​#​#​ .sn-vegb6l.sn-1mj7mtw.sn-1mj7mtw-size-large { --icon-size: 32px; } #​#​#​#​#​ .sn-vegb6l.sn-1mj7mtw.sn-1mj7mtw-size-xlarge { --icon-size: 64px; } #​#​#​#​#​ .sn-bdr0jk { fill: currentColor; } #​#​#​#​#​ .sn-bdr0jk { --icon-size: 16px; height: var(--icon-size); --flex-y: initial; --s3-flex-y: 0 1 auto; width: var(--icon-size); --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​ .sn-bdr0jk.sn-1mj7mtw.sn-1mj7mtw-size-xxsmall { --icon-size: 8px; } #​#​#​#​#​ .sn-bdr0jk.sn-1mj7mtw.sn-1mj7mtw-size-xsmall { --icon-size: 12px; } #​#​#​#​#​ .sn-bdr0jk.sn-1mj7mtw.sn-1mj7mtw-size-medium { --icon-size: 20px; } #​#​#​#​#​ .sn-bdr0jk.sn-1mj7mtw.sn-1mj7mtw-size-large { --icon-size: 32px; } #​#​#​#​#​ .sn-bdr0jk.sn-1mj7mtw.sn-1mj7mtw-size-xlarge { --icon-size: 64px; } #​#​#​#​#​ .sn-hmryvg { font-size: 14px; line-height: 20px; font-weight: var(--j1j5idnz-weight-semibold); } #​#​#​#​#​ .sn-hmryvg.sn-13j3rr.sn-13j3rr-invalid-true { color: var(--j1j5idnz-textColor-critical); } #​#​#​#​#​ .sn-hmryvg.sn-13j3rr.sn-13j3rr-position-top { display: block; margin-bottom: var(--j1j5idnz-space-xsmall); } #​#​#​#​#​ .sn-c2gimz { appearance: none; background-color: var(--j1j5idnz-backgroundColor-surface); border: none; border-radius: var(--j1j5idnz-radius-xsmall); --keyline: var(--j1j5idnz-borderColor-neutral); color: var(--j1j5idnz-textColor-primary); font-size: 14px; line-height: 20px; font-weight: var(--j1j5idnz-weight-regular); font-family: var(--j1j5idnz-typeface-ui); display: inline-flex; flex-direction: row; align-items: var(--align-y); justify-content: var(--align-x); transition: box-shadow 240ms; width: var(--j1j5idnz-size-fill); --flex-x: initial; --s3-flex-x: 0 1 auto; box-sizing: border-box; } #​#​#​#​#​ .sn-c2gimz > * { align-self: var(--align-self-y); justify-self: var(--align-self-x); } #​#​#​#​#​ .sn-c2gimz[type=number] { -moz-appearance: textfield; } #​#​#​#​#​ .sn-c2gimz[type=number]::-webkit-outer-spin-button, #​#​#​#​#​ .sn-c2gimz[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: var(--j1j5idnz-space-0); } #​#​#​#​#​ .sn-c2gimz::placeholder { color: var(--j1j5idnz-textColor-disabled); } #​#​#​#​#​ .sn-c2gimz:disabled { background-color: var(--j1j5idnz-color-neutral50); color: var(--j1j5idnz-textColor-disabled); } #​#​#​#​#​ .sn-c2gimz:focus { outline: none; } #​#​#​#​#​ .sn-c2gimz.sn-1euh7h0.sn-1euh7h0-size-small { --padding-left: var(--j1j5idnz-space-small); --padding-right: var(--j1j5idnz-space-small); --padding-top: var(--j1j5idnz-space-xsmall); --padding-bottom: var(--j1j5idnz-space-xsmall); font-size: 12px; line-height: 16px; } #​#​#​#​#​ .sn-c2gimz.sn-1euh7h0.sn-1euh7h0-size-medium { --padding-left: var(--j1j5idnz-space-small); --padding-right: var(--j1j5idnz-space-small); --padding-top: var(--j1j5idnz-space-xsmall); --padding-bottom: var(--j1j5idnz-space-xsmall); } #​#​#​#​#​ .sn-c2gimz.sn-1euh7h0.sn-1euh7h0-size-large { --padding-left: 12px; --padding-right: 12px; --padding-top: var(--j1j5idnz-space-small); --padding-bottom: var(--j1j5idnz-space-small); font-size: 16px; line-height: 24px; } #​#​#​#​#​ .sn-c2gimz.sn-1euh7h0.sn-1euh7h0-invalid-true { --keyline: var(--j1j5idnz-borderColor-critical); } #​#​#​#​#​ .sn-c2gimz.sn-1euh7h0.sn-1euh7h0-isInCompositeField-true { --box-shadow: var(--j1j5idnz-shadow-none); --padding-top: var(--j1j5idnz-space-0); --padding-right: var(--j1j5idnz-space-0); --padding-bottom: var(--j1j5idnz-space-0); --padding-left: var(--j1j5idnz-space-0); } #​#​#​#​#​ .sn-izbrso:focus { --focus-ring: var(--j1j5idnz-shadow-focus); outline: none; } #​#​#​#​#​ .sn-izbrso { appearance: none; background-color: var(--j1j5idnz-backgroundColor-surface); border: none; border-radius: var(--j1j5idnz-radius-xsmall); --keyline: var(--j1j5idnz-borderColor-neutral); color: var(--j1j5idnz-textColor-primary); font-size: 14px; line-height: 20px; font-weight: var(--j1j5idnz-weight-regular); font-family: var(--j1j5idnz-typeface-ui); display: inline-flex; flex-direction: row; align-items: var(--align-y); justify-content: var(--align-x); transition: box-shadow 240ms; width: var(--j1j5idnz-size-fill); --flex-x: initial; --s3-flex-x: 0 1 auto; box-sizing: border-box; } #​#​#​#​#​ .sn-izbrso > * { align-self: var(--align-self-y); justify-self: var(--align-self-x); } #​#​#​#​#​ .sn-izbrso[type=number] { -moz-appearance: textfield; } #​#​#​#​#​ .sn-izbrso[type=number]::-webkit-outer-spin-button, #​#​#​#​#​ .sn-izbrso[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: var(--j1j5idnz-space-0); } #​#​#​#​#​ .sn-izbrso::placeholder { color: var(--j1j5idnz-textColor-disabled); } #​#​#​#​#​ .sn-izbrso:disabled { background-color: var(--j1j5idnz-color-neutral50); color: var(--j1j5idnz-textColor-disabled); } #​#​#​#​#​ .sn-izbrso:focus { outline: none; } #​#​#​#​#​ .sn-izbrso.sn-1euh7h0.sn-1euh7h0-size-small { --padding-left: var(--j1j5idnz-space-small); --padding-right: var(--j1j5idnz-space-small); --padding-top: var(--j1j5idnz-space-xsmall); --padding-bottom: var(--j1j5idnz-space-xsmall); font-size: 12px; line-height: 16px; } #​#​#​#​#​ .sn-izbrso.sn-1euh7h0.sn-1euh7h0-size-medium { --padding-left: var(--j1j5idnz-space-small); --padding-right: var(--j1j5idnz-space-small); --padding-top: var(--j1j5idnz-space-xsmall); --padding-bottom: var(--j1j5idnz-space-xsmall); } #​#​#​#​#​ .sn-izbrso.sn-1euh7h0.sn-1euh7h0-size-large { --padding-left: 12px; --padding-right: 12px; --padding-top: var(--j1j5idnz-space-small); --padding-bottom: var(--j1j5idnz-space-small); font-size: 16px; line-height: 24px; } #​#​#​#​#​ .sn-izbrso.sn-1euh7h0.sn-1euh7h0-invalid-true { --keyline: var(--j1j5idnz-borderColor-critical); } #​#​#​#​#​ .sn-izbrso.sn-1euh7h0.sn-1euh7h0-isInCompositeField-true { --box-shadow: var(--j1j5idnz-shadow-none); --padding-top: var(--j1j5idnz-space-0); --padding-right: var(--j1j5idnz-space-0); --padding-bottom: var(--j1j5idnz-space-0); --padding-left: var(--j1j5idnz-space-0); } #​#​#​#​#​ .sn-153wjox { display: flex; flex-direction: row; align-items: var(--distribute-y, var(--align-y)); justify-content: var(--distribute-x, var(--align-x)); --when-flex-x: ; --when-flex-y: initial; display: inline-flex; --align-x: center; --align-y: center; white-space: nowrap; } #​#​#​#​#​ .sn-153wjox > * { flex: var(--flex-x); align-self: var(--align-self-y); justify-self: var(--align-self-x); } #​#​#​#​#​ .sn-153wjox > * { --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​ .sn-153wjox > * { --flex-y: initial; --s3-flex-y: 0 1 auto; } #​#​#​#​#​ .sn-p098et { --button-background-color: transparent; font-weight: var(--j1j5idnz-weight-semibold); position: relative; z-index: 0; background-color: var(--button-background-color); border-radius: var(--j1j5idnz-space-75); transition: background-color 0.24s, box-shadow 0.24s; height: fit-content; --flex-y: initial; --s3-flex-y: 0 1 auto; width: fit-content; --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​ .sn-p098et.sn-1vwnd89.sn-1vwnd89-disabled-true { cursor: default; } #​#​#​#​#​ .sn-p098et.sn-1vwnd89.sn-1vwnd89-disabled-true:after { display: block; content: ""; position: absolute; top: -1px; left: -1px; bottom: -1px; right: -1px; border-radius: var(--j1j5idnz-space-75); z-index: 1; background-color: var(--j1j5idnz-color-neutral0); pointer-events: none; opacity: 0.5; } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-size-small { font-size: 12px; line-height: 16px; min-height: 24px; --flex-y: initial; --s3-flex-y: 0 1 auto; --padding-left: var(--j1j5idnz-space-small); --padding-right: var(--j1j5idnz-space-small); --padding-top: var(--j1j5idnz-space-xsmall); --padding-bottom: var(--j1j5idnz-space-xsmall); --column-gap: var(--j1j5idnz-space-50); --row-gap: var(--j1j5idnz-space-50); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-size-medium { font-size: 14px; line-height: 20px; min-height: 28px; --flex-y: initial; --s3-flex-y: 0 1 auto; --padding-left: var(--j1j5idnz-space-100); --padding-right: var(--j1j5idnz-space-100); --padding-top: var(--j1j5idnz-space-50); --padding-bottom: var(--j1j5idnz-space-50); --column-gap: var(--j1j5idnz-space-75); --row-gap: var(--j1j5idnz-space-75); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-size-large { font-size: 16px; line-height: 24px; min-height: 40px; --flex-y: initial; --s3-flex-y: 0 1 auto; --padding-left: var(--j1j5idnz-space-medium); --padding-right: var(--j1j5idnz-space-medium); --padding-top: var(--j1j5idnz-space-small); --padding-bottom: var(--j1j5idnz-space-small); --column-gap: var(--j1j5idnz-space-100); --row-gap: var(--j1j5idnz-space-100); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-primary { --button-background-color: var(--j1j5idnz-color-brand500); --keyline: var(--j1j5idnz-color-brand500); color: var(--j1j5idnz-color-neutral0); --top-shadow: 0px 1px 1px 0px rgba(20, 19, 78, 0.16); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-primary:active { --button-background-color: var(--j1j5idnz-color-brand600); --top-shadow: 0px -1px 1px 0px rgba(20, 19, 78, 0.16); --keyline: color.brand700; color: var(--j1j5idnz-color-brand100); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-primary:hover { --keyline: var(--j1j5idnz-color-brand700); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-secondary { --button-background-color: var(--j1j5idnz-color-neutral0); --keyline: var(--j1j5idnz-color-neutral150); --top-shadow: 0px 1px 1px 0px rgba(16, 17, 26, 0.16); color: var(--j1j5idnz-textColor-primary); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-secondary > svg { color: var(--j1j5idnz-iconColor-primary); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-secondary:active { --button-background-color: var(--j1j5idnz-color-neutral50); --top-shadow: 0px -1px 1px 0px rgba(16, 17, 26, 0.16); color: var(--j1j5idnz-color-neutral600); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-secondary:hover { --keyline: var(--j1j5idnz-color-neutral300); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-destructive { --button-background-color: var(--j1j5idnz-color-critical500); --keyline: var(--j1j5idnz-color-critical500); color: var(--j1j5idnz-color-neutral0); --top-shadow: 0px 1px 1px 0px rgba(62, 2, 26, 0.16); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-destructive:active { --button-background-color: var(--j1j5idnz-color-critical600); --top-shadow: 0px -1px 1px 0px rgba(62, 2, 26, 0.16); --keyline: var(--j1j5idnz-color-critical700); color: var(--j1j5idnz-color-critical100); } #​#​#​#​#​ .sn-p098et.sn-1w3n5ld.sn-1w3n5ld-type-destructive:hover { --keyline: var(--j1j5idnz-color-critical700); } #​#​#​#​#​ .sn-1ul9b8v { margin-bottom: 0; margin-left: 0; margin-right: 0; margin-top: 0; --padding-bottom: 0; --padding-left: 0; --padding-right: 0; --padding-top: 0; color: inherit; font-weight: inherit; font-size: inherit; font-family: inherit; font-style: inherit; text-align: inherit; text-decoration: none; background-color: transparent; border: 0; outline: none; cursor: pointer; } #​#​#​#​#​ .sn-1ul9b8v:hover { color: inherit; } #​#​#​#​#​ .sn-1ul9b8v { display: flex; flex-direction: row; align-items: var(--distribute-y, var(--align-y)); justify-content: var(--distribute-x, var(--align-x)); --when-flex-x: ; --when-flex-y: initial; display: inline-flex; --align-x: center; --align-y: center; white-space: nowrap; } #​#​#​#​#​ .sn-1ul9b8v > * { flex: var(--flex-x); align-self: var(--align-self-y); justify-self: var(--align-self-x); } #​#​#​#​#​ .sn-1ul9b8v > * { --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​ .sn-1ul9b8v > * { --flex-y: initial; --s3-flex-y: 0 1 auto; } #​#​#​#​#​ .sn-1ul9b8v:focus { --focus-ring: var(--j1j5idnz-shadow-focus); outline: none; } #​#​#​#​#​ .sn-1ul9b8v { --button-background-color: transparent; font-weight: var(--j1j5idnz-weight-semibold); position: relative; z-index: 0; background-color: var(--button-background-color); border-radius: var(--j1j5idnz-space-75); transition: background-color 0.24s, box-shadow 0.24s; height: fit-content; --flex-y: initial; --s3-flex-y: 0 1 auto; width: fit-content; --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​ .sn-1ul9b8v.sn-1vwnd89.sn-1vwnd89-disabled-true { cursor: default; } #​#​#​#​#​ .sn-1ul9b8v.sn-1vwnd89.sn-1vwnd89-disabled-true:after { display: block; content: ""; position: absolute; top: -1px; left: -1px; bottom: -1px; right: -1px; border-radius: var(--j1j5idnz-space-75); z-index: 1; background-color: var(--j1j5idnz-color-neutral0); pointer-events: none; opacity: 0.5; } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-size-small { font-size: 12px; line-height: 16px; min-height: 24px; --flex-y: initial; --s3-flex-y: 0 1 auto; --padding-left: var(--j1j5idnz-space-small); --padding-right: var(--j1j5idnz-space-small); --padding-top: var(--j1j5idnz-space-xsmall); --padding-bottom: var(--j1j5idnz-space-xsmall); --column-gap: var(--j1j5idnz-space-50); --row-gap: var(--j1j5idnz-space-50); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-size-medium { font-size: 14px; line-height: 20px; min-height: 28px; --flex-y: initial; --s3-flex-y: 0 1 auto; --padding-left: var(--j1j5idnz-space-100); --padding-right: var(--j1j5idnz-space-100); --padding-top: var(--j1j5idnz-space-50); --padding-bottom: var(--j1j5idnz-space-50); --column-gap: var(--j1j5idnz-space-75); --row-gap: var(--j1j5idnz-space-75); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-size-large { font-size: 16px; line-height: 24px; min-height: 40px; --flex-y: initial; --s3-flex-y: 0 1 auto; --padding-left: var(--j1j5idnz-space-medium); --padding-right: var(--j1j5idnz-space-medium); --padding-top: var(--j1j5idnz-space-small); --padding-bottom: var(--j1j5idnz-space-small); --column-gap: var(--j1j5idnz-space-100); --row-gap: var(--j1j5idnz-space-100); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-primary { --button-background-color: var(--j1j5idnz-color-brand500); --keyline: var(--j1j5idnz-color-brand500); color: var(--j1j5idnz-color-neutral0); --top-shadow: 0px 1px 1px 0px rgba(20, 19, 78, 0.16); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-primary:active { --button-background-color: var(--j1j5idnz-color-brand600); --top-shadow: 0px -1px 1px 0px rgba(20, 19, 78, 0.16); --keyline: color.brand700; color: var(--j1j5idnz-color-brand100); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-primary:hover { --keyline: var(--j1j5idnz-color-brand700); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-secondary { --button-background-color: var(--j1j5idnz-color-neutral0); --keyline: var(--j1j5idnz-color-neutral150); --top-shadow: 0px 1px 1px 0px rgba(16, 17, 26, 0.16); color: var(--j1j5idnz-textColor-primary); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-secondary > svg { color: var(--j1j5idnz-iconColor-primary); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-secondary:active { --button-background-color: var(--j1j5idnz-color-neutral50); --top-shadow: 0px -1px 1px 0px rgba(16, 17, 26, 0.16); color: var(--j1j5idnz-color-neutral600); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-secondary:hover { --keyline: var(--j1j5idnz-color-neutral300); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-destructive { --button-background-color: var(--j1j5idnz-color-critical500); --keyline: var(--j1j5idnz-color-critical500); color: var(--j1j5idnz-color-neutral0); --top-shadow: 0px 1px 1px 0px rgba(62, 2, 26, 0.16); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-destructive:active { --button-background-color: var(--j1j5idnz-color-critical600); --top-shadow: 0px -1px 1px 0px rgba(62, 2, 26, 0.16); --keyline: var(--j1j5idnz-color-critical700); color: var(--j1j5idnz-color-critical100); } #​#​#​#​#​ .sn-1ul9b8v.sn-1w3n5ld.sn-1w3n5ld-type-destructive:hover { --keyline: var(--j1j5idnz-color-critical700); }</style><style data-layer="app" data-server="39.0.0">#​#​#​#​#​#​ .sn-ziqpk { border: 0; clip: rect(0 0 0 0); clip-path: inset(50%); height: 1px; --flex-y: initial; --s3-flex-y: 0 1 auto; margin: 0 -1px -1px 0; overflow: hidden; --padding-top: var(--j1j5idnz-space-0); --padding-right: var(--j1j5idnz-space-0); --padding-bottom: var(--j1j5idnz-space-0); --padding-left: var(--j1j5idnz-space-0); position: absolute; width: 1px; --flex-x: initial; --s3-flex-x: 0 1 auto; white-space: nowrap; }</style><style data-layer="global" data-server="39.0.0">#​#​#​#​#​#​#​ .image-wrapper p > *, #​#​#​#​#​#​#​ .image-wrapper p::before, #​#​#​#​#​#​#​ .image-wrapper p::after { --s3-padding-top-ref: unset; } #​#​#​#​#​#​#​ .image-wrapper p { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: unset; } #​#​#​#​#​#​#​ .image-wrapper p { color: unset;fill: unset; } #​#​#​#​#​#​#​ .image-wrapper p > *, #​#​#​#​#​#​#​ .image-wrapper p::before, #​#​#​#​#​#​#​ .image-wrapper p::after { --s3-font-size-ref: unset; } #​#​#​#​#​#​#​ .image-wrapper p > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​ .image-wrapper p { --s3-font-size: unset;font-size: unset; } #​#​#​#​#​#​#​ .image-wrapper p > *, #​#​#​#​#​#​#​ .image-wrapper p::before, #​#​#​#​#​#​#​ .image-wrapper p::after { --s3-line-height-ref: unset; } #​#​#​#​#​#​#​ .image-wrapper p > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​ .image-wrapper p { --s3-line-height: unset;line-height: unset; } #​#​#​#​#​#​#​:root, :host #​#​#​#​#​#​#​, #​#​#​#​#​#​#​ .sn-token-provider { --s-1217952: var(--s-1l6rirk);--qsw4dc: 0ms;--s-1rkqyem: 50ms;--s-4g9j1p: 100ms;--fuumy1: 150ms;--r01vom: 300ms;--s-1v2483h: cubic-bezier(0, .09, .4, 1);--irr6mc: #ffffff;--s-1waqd3w: #f5f6f8;--gzyrnk: #ebeef1;--s-5yvseh: #d8dee4;--s-1hy7tmi: #b6c0cd;--iipu4s: #99a5b8;--s-1o3jjcm: #818da0;--s-1pxwv0i: #6c7688;--s-1pb1mtr: #596171;--s-7jkknb: #474e5a;--s-1laneaf: #353a44;--s-1g0op6u: #21252c;--s-1saqgrn: #ffffff;--s-113cn9s: #e2fbfe;--s-15it1zq: #cbf5fd;--s-122h4w1: #a7e7fc;--s-11hld74: #6dc9fc;--s-3plt0g: #3babfd;--s-1dvtgb3: #088ef9;--s-44ejkg: #0072e9;--ox8qy0: #045ad0;--l3wql6: #0b46ad;--zz8bwd: #0d3485;--cg1fif: #0a2156;--s-1n358gv: #ffffff;--s-13u8evc: #eafcdd;--s-1enwaw2: #d1fab3;--vzilst: #a8f170;--rdgxej: #7cd548;--wzt0xb: #58ba27;--ud9v4s: #3da00b;--s-1ybyqq0: #2b8700;--tj7m7p: #217005;--qmu87p: #1c5a0d;--s-1jp1jtr: #184310;--s-1kfm9w9: #112a0d;--un6z83: #ffffff;--s-1xrhu1e: #fdf8c9;--bob928: #fceeb5;--s-1hoqph8: #fbd992;--cqcj42: #fcaf4f;--s-1jeagou: #f7870f;--s-1h5h4i8: #e46602;--s-1wqvxkn: #cc4b00;--s-1vd352i: #b13600;--p29xy3: #922700;--s-11bkk70: #701b01;--s-1l0bey: #4a0f02;--s-1j9nj2a: #ffffff;--ju7gef: #fef4f6;--thdnxa: #fde9ee;--s-1hym9f8: #fbd3dc;--s-139vtj2: #faa9b8;--s-1j48m2e: #fa7e91;--s-1x2w0ad: #fa4a67;--s-1699l1i: #e61947;--s-1tkjqxq: #c0123c;--k8omw2: #9b0c36;--y5brny: #76072f;--s-1a27m15: #4e0322;--s-19yeeb5: #ffffff;--s-1e4e5yb: #f7f5fd;--xn3nti: #efecfc;--s-4ua9sj: #e0d9fb;--kpu0rx: #c3b6fb;--s-77p0ap: #a497fc;--s-1g993bp: #857afe;--s-1gs812x: #675dff;--s-1byarzj: #533afd;--ncfn5d: #4e11e2;--m9v2p1: #44139f;--s-6tslt6: #2f0e63;--uejlvu: var(--irr6mc);--f9yecl: var(--s-1waqd3w);--s-1iay420: var(--gzyrnk);--y3topg: var(--s-5yvseh);--s-93efxq: var(--s-1hy7tmi);--yqfks0: var(--iipu4s);--s-1mtc7ls: var(--s-1o3jjcm);--biz8xf: var(--s-1pxwv0i);--fwpb7v: var(--s-1pb1mtr);--w18u6w: var(--s-7jkknb);--s-1nt3zua: var(--s-1laneaf);--s-150t4y0: var(--s-1g0op6u);--erny0e: var(--s-19yeeb5);--yhiuhw: var(--s-1e4e5yb);--s-1rp4las: var(--xn3nti);--cuv1cp: var(--s-4ua9sj);--s-1k4gf2y: var(--kpu0rx);--s-1bufwl7: var(--s-77p0ap);--s-1cse5ne: var(--s-1g993bp);--j498ut: var(--s-1gs812x);--pxxzc2: var(--s-1byarzj);--s-1sfx8wv: var(--ncfn5d);--irwp3a: var(--m9v2p1);--s-16xf5jx: var(--s-6tslt6);--tur6ju: var(--un6z83);--tjfttb: var(--s-1xrhu1e);--s-176g7xk: var(--bob928);--s-1ntdwef: var(--s-1hoqph8);--s-1263jyp: var(--cqcj42);--s-1bsay3c: var(--s-1jeagou);--xfrlz7: var(--s-1h5h4i8);--f8et27: var(--s-1wqvxkn);--s-1sb5ew7: var(--s-1vd352i);--vl1nzb: var(--p29xy3);--s-1125x6j: var(--s-11bkk70);--s-89uhjp: var(--s-1l0bey);--s-1oyj4gj: var(--s-1j9nj2a);--u7fs0q: var(--ju7gef);--t09u7c: var(--thdnxa);--s-1j0kl1s: var(--s-1hym9f8);--s-2a1k6z: var(--s-139vtj2);--s-18kec2e: var(--s-1j48m2e);--rabas5: var(--s-1x2w0ad);--s-1s9g77a: var(--s-1699l1i);--s-1wcl7eu: var(--s-1tkjqxq);--s-1goxmia: var(--k8omw2);--gcpe8g: var(--y5brny);--s-1ga2ivm: var(--s-1a27m15);--kn4hqb: var(--s-1saqgrn);--qu1he7: var(--s-113cn9s);--ammk6d: var(--s-15it1zq);--s-1pl7kxf: var(--s-122h4w1);--s-12i04c6: var(--s-11hld74);--aun64r: var(--s-3plt0g);--xezflb: var(--s-1dvtgb3);--s-1wqrqu1: var(--s-44ejkg);--qur4wk: var(--ox8qy0);--x6k88j: var(--l3wql6);--s-1kemu67: var(--zz8bwd);--yej3ct: var(--cg1fif);--s-17p7csx: var(--s-1n358gv);--s-1x0z4nb: var(--s-13u8evc);--aw8lwl: var(--s-1enwaw2);--s-1i4or0m: var(--vzilst);--li3u75: var(--rdgxej);--s-1vj84tg: var(--wzt0xb);--h31jbp: var(--ud9v4s);--s-1fwphw1: var(--s-1ybyqq0);--s-13fpnzu: var(--tj7m7p);--s-1c4q5x9: var(--qmu87p);--rrvanz: var(--s-1jp1jtr);--i90rj6: var(--s-1kfm9w9);--vz5wqe: var(--s-1j9nj2a);--mrm3ue: var(--ju7gef);--fixzy5: var(--thdnxa);--s-66e9n0: var(--s-1hym9f8);--s-13d8j7o: var(--s-139vtj2);--sayhdz: var(--s-1j48m2e);--s-14vjqqg: var(--s-1x2w0ad);--dnozic: var(--s-1699l1i);--s-13p2am0: var(--s-1tkjqxq);--s-14297m6: var(--k8omw2);--s-10jwd4g: var(--y5brny);--cqg14i: var(--s-1a27m15);--s-1642t02: var(--s-1n358gv);--s-11zf5q8: var(--s-13u8evc);--ov4847: var(--s-1enwaw2);--s-1jty5ra: var(--vzilst);--s-14171et: var(--rdgxej);--s-19l1yj7: var(--wzt0xb);--s-16cew6y: var(--ud9v4s);--v88w06: var(--s-1ybyqq0);--jmd5ls: var(--tj7m7p);--s-9872hy: var(--qmu87p);--s-1fyzs7w: var(--s-1jp1jtr);--d1nmln: var(--s-1kfm9w9);--s-1u3opm5: #9966FF;--s-1eg3h4s: #0055BC;--s-1tm2hee: #00A1C2;--s-17js5hg: #ED6804;--dhssk: #B3063D;--s-12lj6ll: var(--f9yecl);--s-11qhdid: var(--uejlvu);--vhdxbj: rgba(182, 192, 205, 0.7);--b9hxag: var(--j498ut);--a3x65d: var(--j498ut);--s-1imaqek: var(--pxxzc2);--b5cwa3: var(--j498ut);--h1d6sm: var(--j498ut);--na4b0: var(--s-11qhdid);--fo9n0e: var(--s-11qhdid);--s-1o0402k: var(--f9yecl);--s-101vikx: var(--s-11qhdid);--s-1yrk3vz: var(--s-11qhdid);--t7vp8b: var(--s-1s9g77a);--j83dgh: var(--s-1s9g77a);--s-1el5pnx: var(--s-1wcl7eu);--iej9k0: var(--s-1s9g77a);--mk27rg: var(--s-1s9g77a);--s-1e4jzdk: var(--uejlvu);--s-1fxq8uw: var(--s-1wqrqu1);--s-1lvtc5s: var(--s-1wqrqu1);--ra9ckf: var(--qur4wk);--tbhbpy: var(--s-1wqrqu1);--s-15pcz81: var(--y3topg);--s-53obzd: var(--uejlvu);--ud8q3o: var(--s-1iay420);--s-1necyak: var(--uejlvu);--s-1decpef: var(--s-1iay420);--s-1gbceg6: var(--uejlvu);--s-1b638zv: var(--uejlvu);--s-1rp5l1u: var(--uejlvu);--s-3i34zw: var(--uejlvu);--s-1dfl3n5: var(--f9yecl);--s-1xjoc01: var(--s-1iay420);--s-146rhqt: var(--f9yecl);--xt6fvp: var(--biz8xf);--a5n7gi: var(--ammk6d);--s-1vvp6eu: var(--qu1he7);--s-15lcjd5: var(--s-1wqrqu1);--s-1w72vx7: var(--aw8lwl);--ye5ht: var(--s-1x0z4nb);--s-1kqo461: var(--s-1fwphw1);--s-17rpyet: var(--s-176g7xk);--s-16acxa5: var(--tjfttb);--e9qbjy: var(--f8et27);--p0fyhq: var(--t09u7c);--s-5b92jn: var(--u7fs0q);--s54adp: var(--s-1s9g77a);--s-1skr90y: var(--y3topg);--s-1dmrmhe: var(--j498ut);--a3mm9l: var(--s-1sfx8wv);--ap7yxo: var(--s-1sfx8wv);--s-19tfn92: var(--j498ut);--s-1ix7rw5: var(--j498ut);--s-1tx6f72: var(--s-1skr90y);--s-3jnt9s: var(--yqfks0);--weyxgf: var(--s-1skr90y);--s-7pygdp: var(--s-1skr90y);--s-18e25ap: var(--s-1skr90y);--sqlr6i: var(--s-1s9g77a);--kdhpu6: var(--s-1goxmia);--z8xcy8: var(--s-1goxmia);--s-1h562rb: var(--s-1s9g77a);--s-1atggud: var(--s-1s9g77a);--lvwplu: var(--y3topg);--s-3nuq4f: var(--s-1s9g77a);--s-5yqg8n: var(--s-1wcl7eu);--s-1pj6lux: var(--s-1s9g77a);--ol59gw: var(--s-1s9g77a);--s-1envzr0: var(--s-1s9g77a);--s-1bl55az: var(--s-1wqrqu1);--s-1ro84tt: var(--qur4wk);--s-1uno9qw: var(--qur4wk);--s-26otc5: var(--s-1wqrqu1);--rwuntm: var(--y3topg);--s-1j17tvu: var(--yqfks0);--s-1mm115c: var(--y3topg);--cvdchj: var(--y3topg);--s-19f5gb0: var(--y3topg);--s-1hdm8jb: var(--y3topg);--s-127x3hp: var(--y3topg);--n214by: var(--biz8xf);--s-1g7xrgt: var(--s-1pl7kxf);--s-1upegy0: var(--s-1pl7kxf);--s-5y1nze: var(--s-1wqrqu1);--cmnz4l: var(--s-1i4or0m);--s-18fyj0p: var(--s-1i4or0m);--s-1tplmvw: var(--s-1fwphw1);--s-8s90kp: var(--s-1ntdwef);--oh66hu: var(--s-1ntdwef);--s-1095p7z: var(--f8et27);--wamh0h: var(--s-1j0kl1s);--s-1c50hj1: var(--s-1j0kl1s);--s-1gcag1j: var(--s-1s9g77a);--s-1o9ezto: var(--s-1nt3zua);--u261m5: var(--pxxzc2);--s-1nid6f6: var(--s-1sfx8wv);--c7jgyg: var(--irwp3a);--udowkt: var(--pxxzc2);--tvzcsc: var(--s-1mtc7ls);--fwpojh: var(--s-1nt3zua);--s-1080nl5: var(--s-150t4y0);--s-7dlu9j: var(--s-150t4y0);--s-1svh1f3: var(--s-1nt3zua);--s-1lezh8d: var(--fwpb7v);--s-5op7y: var(--s-1wcl7eu);--g25tq5: var(--s-1goxmia);--s-1q46gj4: var(--gcpe8g);--s-1951umi: var(--s-1wcl7eu);--p9kane: var(--s-1mtc7ls);--s-1ljhfqg: var(--uejlvu);--bkw71o: var(--uejlvu);--auhwvw: var(--cuv1cp);--kxut99: var(--uejlvu);--s-1hnrwy0: var(--uejlvu);--s-1uc69hl: var(--s-1nt3zua);--vgfwzs: var(--s-1nt3zua);--efkcvi: var(--w18u6w);--yadu9a: var(--s-1nt3zua);--s-15s370g: var(--s-1nt3zua);--s-1ptcvru: var(--uejlvu);--fh4kb7: var(--uejlvu);--k3znv5: var(--s-1j0kl1s);--s-9ixrzj: var(--uejlvu);--ussb62: var(--uejlvu);--s-8yp60e: var(--s-1nt3zua);--blwhf7: var(--s-1mtc7ls);--s-93l9qp: var(--s-1nt3zua);--s-4prxho: var(--s-1nt3zua);--s-10jb774: var(--s-1nt3zua);--dyh1ft: var(--s-1mtc7ls);--c1i0mf: var(--qur4wk);--th8mej: var(--qur4wk);--y7bqt3: var(--x6k88j);--wqyihw: var(--s-13fpnzu);--s-1a3wgbe: var(--s-13fpnzu);--s-16bhg8g: var(--s-1c4q5x9);--wauwfv: var(--s-1sb5ew7);--y6kgen: var(--s-1sb5ew7);--s-1lsd497: var(--vl1nzb);--s-1pbm6xy: var(--s-1wcl7eu);--s-1pzinn1: var(--s-1wcl7eu);--d4yihz: var(--s-1goxmia);--b7nanc: var(--fwpb7v);--iz6dw3: var(--fwpb7v);--s-1f72vps: var(--uejlvu);--s-1h3l39q: var(--qur4wk);--s-43pgij: var(--qur4wk);--u408xn: var(--uejlvu);--mtyuba: var(--s-13fpnzu);--s-1j5t4yl: var(--s-13fpnzu);--s-1nf37i0: var(--uejlvu);--kbsg1j: var(--s-1sb5ew7);--s-90tnpu: var(--s-1sb5ew7);--s-1em1b3p: var(--uejlvu);--syixo6: var(--s-1wcl7eu);--i3x5ek: var(--s-1wcl7eu);--xdzmqz: var(--uejlvu);--s-1mlpsia: var(--fwpb7v);--s-1jjrq5h: var(--s-150t4y0);--s-1wl2tbl: var(--w18u6w);--s-1geebyf: var(--j498ut);--s-1gv2imz: var(--pxxzc2);--s-1qs0iki: var(--s-1sfx8wv);--lh2v2z: var(--j498ut);--s-3ab5sc: var(--yqfks0);--s-13swkv9: var(--w18u6w);--kmaejg: var(--s-1nt3zua);--s-18u8muj: var(--s-150t4y0);--s-11k1om0: var(--w18u6w);--s-2t582e: var(--biz8xf);--jcr6o7: var(--s-1s9g77a);--s-1atbaah: var(--s-1wcl7eu);--s-15c8ywa: var(--s-1goxmia);--s-1510bs4: var(--s-1s9g77a);--s-89j77l: var(--yqfks0);--s-2ud7a5: var(--uejlvu);--i6no11: var(--uejlvu);--emps96: var(--cuv1cp);--s-6lb1m9: var(--uejlvu);--ijj1um: var(--uejlvu);--s-1awzrs3: var(--s-1wl2tbl);--s-1506n3b: var(--s-1wl2tbl);--s-14iy1j5: var(--fwpb7v);--s-16k0ws7: var(--s-1wl2tbl);--y8yf59: var(--s-1wl2tbl);--fi8iqe: var(--uejlvu);--grnbe3: var(--uejlvu);--s-1cgakjb: var(--s-1j0kl1s);--s-5c53au: var(--uejlvu);--s-3vany0: var(--uejlvu);--xfcnh2: var(--w18u6w);--c7kcme: var(--w18u6w);--s-143bjjd: var(--w18u6w);--zehkcd: var(--w18u6w);--s-7n3e4d: var(--yqfks0);--s-10zw0xa: var(--uejlvu);--ae7bw4: var(--uejlvu);--upzd4v: var(--uejlvu);--emt9o6: var(--uejlvu);--s-10hf9mp: var(--f9yecl);--g7pxfz: var(--s-1wqrqu1);--s-10ptxl3: var(--s-1wqrqu1);--xp5jom: var(--qur4wk);--v64pw2: var(--s-1fwphw1);--s-1lupf45: var(--s-1fwphw1);--s-85yq0f: var(--s-13fpnzu);--mlkka7: var(--f8et27);--wusixi: var(--f8et27);--s-1yo6vi7: var(--s-1sb5ew7);--s-119ha8u: var(--s-1s9g77a);--s-1pq6t4d: var(--s-1s9g77a);--rqmeo: var(--s-1wcl7eu);--rzk3ci: var(--biz8xf);--s-1cmxa00: var(--biz8xf);--gt7jkl: var(--uejlvu);--cpa592: var(--s-1wqrqu1);--s-1v3wjy3: var(--s-1wqrqu1);--s-13ysq3h: var(--uejlvu);--p12tfc: var(--s-1fwphw1);--s-17f0wjv: var(--s-1fwphw1);--s-1chno6l: var(--uejlvu);--pa7y77: var(--f8et27);--s-167c19b: var(--f8et27);--s-1w2vo9a: var(--uejlvu);--w4v2cn: var(--s-1s9g77a);--s-9kzl0n: var(--s-1s9g77a);--s-1ooljr6: var(--uejlvu);--n42f6j: var(--biz8xf);--dec26: var(--s-1nt3zua);--s-1s0ihtw: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';--s-10fnibn: 2048;--s-1cpct0i: 1980;--s-355ive: 1443;--teizmt: 1078;--s-1eaz6ps: -432;--s-1041pza: 0;--s-1scu416: 300;--s-4798gu: 400;--s-1ea70s8: 600;--s-4xeeo5: 700;--f1mf4a: 'Source Code Pro', Menlo, Monaco, monospace;--ci9u06: 2048;--ixzjzj: 1556;--i2mxua: 1493;--s-1u7ci5n: 1120;--e7xqj: -492;--s-158mdzj: 410;--s-1s85pkq: var(--s-1s0ihtw);--s-1igddeg: var(--s-10fnibn);--honscw: var(--s-1cpct0i);--s-162y6xq: var(--s-355ive);--s-3i0sfn: var(--teizmt);--s-1aorsp: var(--s-1eaz6ps);--s-1slubui: var(--s-1041pza);--v86sjj: var(--s-4798gu);--s-1q90pjn: var(--s-4tqnuk);--s-15h6s1z: var(--s-2mwz8w);--h2az8h: var(--vxs8xt);--wz48vn: var(--s-1cpmfe6);--raeesz: var(--s-1b6cf1m);--s-1y9l281: var(--s-1699fno);--s-179mfn5: var(--s-1p1y5wz);--s-2mr6mi: var(--s-3xo005);--s-1bh66fg: var(--s-1294fzl);--s-4tqnuk: var(--s-1s85pkq);--s-2mwz8w: var(--s-1igddeg);--vxs8xt: var(--honscw);--s-1cpmfe6: var(--s-162y6xq);--s-1b6cf1m: var(--s-3i0sfn);--s-1699fno: var(--s-1aorsp);--s-1p1y5wz: var(--s-1slubui);--s-3xo005: 56px;--s-1294fzl: 64px;--s-1tdeqxs: var(--s-4xeeo5);--s-1jzd7bx: var(--s-4798gu);--s-1phiefw: var(--jmek8j);--s-1068ljl: var(--euylam);--a214xv: var(--qrf2t7);--s-1t2vvf8: var(--s-17asyun);--s-1y7vn5m: var(--ff2mjd);--s-7mj915: var(--s-1j2o5g);--s-19bewi9: var(--ggz4jp);--c8i5yn: var(--s-1ug0t25);--s-106osmx: var(--s-136drtk);--jmek8j: var(--s-1s85pkq);--euylam: var(--s-1igddeg);--qrf2t7: var(--honscw);--s-17asyun: var(--s-162y6xq);--ff2mjd: var(--s-3i0sfn);--s-1j2o5g: var(--s-1aorsp);--ggz4jp: var(--s-1slubui);--s-1ug0t25: 48px;--s-136drtk: 56px;--s-1k1vatu: var(--s-4xeeo5);--z2hgdg: var(--s-4798gu);--s-1geb4io: var(--s-1bwmi1t);--q6n1rp: var(--g6h8np);--s-1q6pjf9: var(--s-1x3wnwn);--s-1xdery0: var(--s-6amavi);--spsvd: var(--m78tmy);--s-8i0e6v: var(--mwmrn3);--s-18e75i8: var(--qhlwpd);--s-120c4ov: var(--j68ish);--s-1nrkyi7: var(--kftg7s);--s-1bwmi1t: var(--s-1s85pkq);--g6h8np: var(--s-1igddeg);--s-1x3wnwn: var(--honscw);--s-6amavi: var(--s-162y6xq);--m78tmy: var(--s-3i0sfn);--mwmrn3: var(--s-1aorsp);--qhlwpd: var(--s-1slubui);--j68ish: 40px;--kftg7s: 48px;--s-142ad3z: var(--s-4xeeo5);--wgzh79: var(--s-4798gu);--s-1pjhyy1: var(--s-10n4r5s);--q3lv1j: var(--otwgsh);--s-14ztfzx: var(--s-1c0dhvx);--s-1dxj2bn: var(--tos8vn);--cotl9v: var(--s-1k8jo1z);--iumv6o: var(--s-1frn75q);--s-1hi4fsx: var(--s-1ukm6if);--lqyjix: var(--s-1ps9599);--lyfwej: var(--y1eix);--s-10n4r5s: var(--s-1s85pkq);--otwgsh: var(--s-1igddeg);--s-1c0dhvx: var(--honscw);--tos8vn: var(--s-162y6xq);--s-1k8jo1z: var(--s-3i0sfn);--s-1frn75q: var(--s-1aorsp);--s-1ukm6if: var(--s-1slubui);--s-1ps9599: 32px;--y1eix: 40px;--s-5ifsr8: var(--s-4xeeo5);--s-18rfg1s: var(--s-1s0ihtw);--s-1a68wuw: var(--s-10fnibn);--ow4b8i: var(--s-1cpct0i);--s-1xjki7e: var(--s-355ive);--kisgsb: var(--teizmt);--s-1yw0jgz: var(--s-1eaz6ps);--ihq3w: var(--s-1041pza);--s-14xgrqp: var(--s-4798gu);--p85dj8: var(--yuh5aj);--s-12vjbyx: var(--rqx7k5);--o49oni: var(--d62o92);--s-17j93hx: var(--s-6dnwxq);--s-10kpn1b: var(--g9pzoe);--s-1msxbwo: var(--oyr7ev);--s-16x4imw: var(--s-3710sj);--s-3fjgjd: var(--s-4vctkl);--s-17yizhp: var(--s-6w2n1u);--tw7wfd: var(--pii54m);--yuh5aj: var(--s-18rfg1s);--rqx7k5: var(--s-1a68wuw);--d62o92: var(--ow4b8i);--s-6dnwxq: var(--s-1xjki7e);--g9pzoe: var(--kisgsb);--oyr7ev: var(--s-1yw0jgz);--s-3710sj: var(--ihq3w);--s-4vctkl: 28px;--s-6w2n1u: 36px;--z2na5s: var(--s-4xeeo5);--pii54m: none;--s-14dzjrh: var(--s-4798gu);--s-19wxkto: var(--s-154y3du);--s-1lu85ku: var(--s-1lialo5);--nz4mcx: var(--d3wk3l);--s-11mdmvx: var(--s-1nb15og);--s-1jzsrdu: var(--d3jdoo);--nyijt4: var(--s-121npow);--s-10tfy8b: var(--ulkye5);--s-1bszhas: var(--s-9r05v);--s-4pll8s: var(--s-1fv4iwb);--s-154y3du: var(--s-18rfg1s);--s-1lialo5: var(--s-1a68wuw);--d3wk3l: var(--ow4b8i);--s-1nb15og: var(--s-1xjki7e);--d3jdoo: var(--kisgsb);--s-121npow: var(--s-1yw0jgz);--ulkye5: var(--ihq3w);--s-9r05v: 24px;--s-1fv4iwb: 32px;--s-1oot6gk: var(--s-4xeeo5);--s-1l6rirk: none;--s-1v6hd82: var(--s-4798gu);--s-1dy6ctp: var(--s-1kyh559);--s-16youeo: var(--zccab0);--s-1sdurcf: var(--s-1e1h8qc);--nfpnlq: var(--s-1a3o7mc);--s-1vxotwi: var(--s-1g779jw);--uc0vcr: var(--s-1o3h1p);--s-1w46t9r: var(--s-1qdkjf5);--m89am: var(--s-9kojd8);--s-83k98x: var(--s-19seinc);--prpdw2: var(--s-1lpsi9s);--s-1kyh559: var(--s-18rfg1s);--zccab0: var(--s-1a68wuw);--s-1e1h8qc: var(--ow4b8i);--s-1a3o7mc: var(--s-1xjki7e);--s-1g779jw: var(--kisgsb);--s-1o3h1p: var(--s-1yw0jgz);--s-1qdkjf5: var(--ihq3w);--s-9kojd8: 20px;--s-19seinc: 28px;--l1g2qx: var(--s-4xeeo5);--s-1lpsi9s: none;--tfulsa: var(--s-4798gu);--s-1lwmnqd: var(--s-1v8pld4);--aeb0w9: var(--s-1pp63am);--xtyug7: var(--s-1evt4zx);--s-1xecqn9: var(--c5yke6);--s-10l6xob: var(--loh7up);--s-1s41l4k: var(--s-1i3g7n9);--baa8d5: var(--i2omw8);--s-7v7vbq: var(--s-1omp90d);--s-1hthmpa: var(--s-1s2v49d);--x9b233: var(--s-13hqg85);--s-1v8pld4: var(--s-18rfg1s);--s-1pp63am: var(--s-1a68wuw);--s-1evt4zx: var(--ow4b8i);--c5yke6: var(--s-1xjki7e);--loh7up: var(--kisgsb);--s-1i3g7n9: var(--s-1yw0jgz);--i2omw8: var(--ihq3w);--s-1omp90d: 16px;--s-1s2v49d: 24px;--s-17sr2wg: var(--s-4xeeo5);--s-13hqg85: none;--juzmsw: var(--s-4798gu);--p2a1nx: var(--mophuo);--va6zn0: var(--s-6b8pc4);--s-1hl8k2c: var(--s-1fhyulq);--rhwz9j: var(--s-4htnk9);--s-1sqctbe: var(--bf3k2y);--s-88z750: var(--s-7lw4s3);--l3c6pe: var(--m9ut2b);--s-1ed5fbs: var(--s-1g7wtry);--ju5y2u: var(--s-1c0icn2);--s-45fb9x: var(--s-18xjbru);--mophuo: var(--s-18rfg1s);--s-6b8pc4: var(--s-1a68wuw);--s-1fhyulq: var(--ow4b8i);--s-4htnk9: var(--s-1xjki7e);--bf3k2y: var(--kisgsb);--s-7lw4s3: var(--s-1yw0jgz);--m9ut2b: var(--ihq3w);--s-1g7wtry: 12px;--s-1c0icn2: 20px;--s-1c3y4q4: var(--s-4xeeo5);--s-18xjbru: none;--mznd3f: var(--s-1s0ihtw);--wrgux4: var(--s-10fnibn);--s-1pd0rzj: var(--s-1cpct0i);--ux6a6l: var(--s-355ive);--s-1gscbp5: var(--teizmt);--orzisq: var(--s-1eaz6ps);--d3di5s: var(--s-1041pza);--sxjw6t: var(--s-1ea70s8);--s-1jm755l: var(--s-9605ir);--s-14391ga: var(--s-173b4i4);--veuz0y: var(--s-1usto19);--s-1slbibg: var(--s-1k052la);--s-16o86a2: var(--ve5ns9);--s5g6mq: var(--s-1cnlbe9);--s-3dxyav: var(--s-1vsvc6b);--s-1y9lhye: var(--s-1f5rtiz);--s-1hy7nj4: var(--h7idbm);--s-1c22zq7: var(--s-1jbsri6);--s-9605ir: var(--mznd3f);--s-173b4i4: var(--wrgux4);--s-1usto19: var(--s-1pd0rzj);--s-1k052la: var(--ux6a6l);--ve5ns9: var(--s-1gscbp5);--s-1cnlbe9: var(--orzisq);--s-1vsvc6b: var(--d3di5s);--s-1f5rtiz: 18px;--h7idbm: 28px;--z6fqsw: var(--s-4798gu);--s-1jbsri6: none;--i5jw69: var(--s-1ea70s8);--mp04p: var(--s-1e7neqw);--s-1gz9846: var(--x4ncbp);--x8igx7: var(--s-1q9m5pt);--s-1v37yv4: var(--s-1x375uo);--s-18w77wj: var(--ej9gvg);--s-195mmsk: var(--s-1i6a996);--p60rvu: var(--nf8005);--s-1gwb5za: var(--s-1vupikb);--r739yn: var(--r0k0g4);--s-16l5h4: var(--s-1773dxr);--s-1e7neqw: var(--mznd3f);--x4ncbp: var(--wrgux4);--s-1q9m5pt: var(--s-1pd0rzj);--s-1x375uo: var(--ux6a6l);--ej9gvg: var(--s-1gscbp5);--s-1i6a996: var(--orzisq);--nf8005: var(--d3di5s);--s-1vupikb: 16px;--r0k0g4: 24px;--s-12rlwf2: var(--s-4798gu);--s-1773dxr: none;--s-1v1xljn: var(--s-1ea70s8);--s-1mr8lzb: var(--s-322h2q);--l5af0q: var(--s-1f5bgyy);--mop3ir: var(--s-10lc7l2);--s-19wh72y: var(--s-1j3wpdz);--wzdeq3: var(--s-1yawlia);--s-45e2oh: var(--s-9zy5fq);--s-1v4cfsd: var(--s-1qx2pv9);--iwk03j: var(--yr2igw);--vok6xd: var(--s-6f7uvb);--s-8gelod: var(--x8jlab);--s-322h2q: var(--mznd3f);--s-1f5bgyy: var(--wrgux4);--s-10lc7l2: var(--s-1pd0rzj);--s-1j3wpdz: var(--ux6a6l);--s-1yawlia: var(--s-1gscbp5);--s-9zy5fq: var(--orzisq);--s-1qx2pv9: var(--d3di5s);--yr2igw: 14px;--s-6f7uvb: 20px;--s-10omakn: var(--s-4798gu);--x8jlab: none;--mqdoqm: var(--s-1s0ihtw);--jyjhzi: var(--s-10fnibn);--s-1tn012p: var(--s-1cpct0i);--s-8arsp1: var(--s-355ive);--j7zbce: var(--teizmt);--s-1bibq1l: var(--s-1eaz6ps);--r17gs4: var(--s-1041pza);--s-1tcotp0: var(--s-1ea70s8);--s-1dgsqw8: var(--s-5959rm);--s-1i36r7v: var(--jynvv);--qxcrsk: var(--s-1awt0gj);--s-1m5u5b8: var(--s-12lswqh);--s-1mc8srx: var(--s-16ytzw8);--x5a6qs: var(--s-1uaoj38);--g4yzek: var(--s-1k9gy0w);--nza9bp: var(--s-1bw2wdr);--s-1wcrhf1: var(--pl9mtj);--s-11f10q2: var(--uxrv1f);--s-5959rm: var(--mqdoqm);--jynvv: var(--jyjhzi);--s-1awt0gj: var(--s-1tn012p);--s-12lswqh: var(--s-8arsp1);--s-16ytzw8: var(--j7zbce);--s-1uaoj38: var(--s-1bibq1l);--s-1k9gy0w: var(--r17gs4);--s-1bw2wdr: 16px;--pl9mtj: 24px;--ium6fx: var(--s-4798gu);--uxrv1f: none;--s-1okfvc8: var(--s-1ea70s8);--s-2824qb: var(--m49k9b);--s-1dzt71: var(--s-1edtv7y);--zgudek: var(--s-1of10fq);--s-1nxo8gv: var(--s-1fpflnp);--exyw8i: var(--fkugbx);--j81w5o: var(--s-17mflmd);--s-1vhsi4i: var(--s-11czbp6);--h715ut: var(--s-1vps0lq);--v37d9k: var(--kvw885);--fvgy72: var(--s-11agxm8);--m49k9b: var(--mqdoqm);--s-1edtv7y: var(--jyjhzi);--s-1of10fq: var(--s-1tn012p);--s-1fpflnp: var(--s-8arsp1);--fkugbx: var(--j7zbce);--s-17mflmd: var(--s-1bibq1l);--s-11czbp6: var(--r17gs4);--s-1vps0lq: 14px;--kvw885: 20px;--nv9nhg: var(--s-4798gu);--s-11agxm8: none;--s-127brn8: var(--s-1ea70s8);--s-198al9s: var(--s-1bg49xz);--pn50iy: var(--x40ka8);--ob9wsu: var(--s-7up3gp);--s-9ocbk0: var(--shevou);--s-1oxsedp: var(--s-1l77am2);--m33xz7: var(--fia6g6);--s-1xd1qfc: var(--s-8jip01);--mwp2qx: var(--s-1necpvx);--hg2sor: var(--s-1clgqj6);--tkko5m: var(--s-4bqojf);--s-1bg49xz: var(--mqdoqm);--x40ka8: var(--jyjhzi);--s-7up3gp: var(--s-1tn012p);--shevou: var(--s-8arsp1);--s-1l77am2: var(--j7zbce);--fia6g6: var(--s-1bibq1l);--s-8jip01: var(--r17gs4);--s-1necpvx: 12px;--s-1clgqj6: 16px;--s-1uwnsun: var(--s-4798gu);--s-4bqojf: none;--s-15zabbl: var(--fb614b);--s-19ca524: var(--s-7nlg6i);--spiyys: var(--s-1w93wex);--s-1rshfls: var(--hjew5f);--s-1gn97fj: var(--t7b2dk);--s-1tomqhb: var(--s-1meyhuw);--xrzhif: var(--th0xvm);--w6gdcy: 0px;--s-1ypfxob: 1px;--fb614b: 2px;--s-7nlg6i: 4px;--s-1ctvgo1: 6px;--s-1w93wex: 8px;--s-76t36d: 10px;--s-11meud8: 12px;--s-1e0e06y: 14px;--hjew5f: 16px;--s-5282bq: 18px;--s-1yc4hzg: 20px;--t7b2dk: 24px;--s-1p3z7u: 28px;--s-1meyhuw: 32px;--v1q8jb: 36px;--s-1p8r305: 40px;--th0xvm: 48px;--s-1c95ecw: 56px;--s-3awnom: 64px;--s-1r7s4w1: 72px;--ulyz6g: 80px;--luz9yx: var(--dy3an6);--oxw0go: var(--dy3an6);--s-46mfca: none;--bt1rux: 4px;--dy3an6: 6px;--s-14pvypn: 8px;--s-8scpzh: 12px;--s-1xfxjh4: 9999em;--fouhz: solid;--s-1ryj8x3: dashed;--he5dgk: 1px;--s-12hcxei: 2px;--s-1bf5356: 4px;--g0nwl4: 100%;--s-1qvua93: min-content;--yr3yw6: max-content;--s-1w53n9t: fit-content;--k1cz5q: 50%;--s-1hx7747: 33.3333%;--s-1po9xm6: 66.6667%;--s-1aevvb7: 25%;--tt670r: 50%;--ddhlrb: 75%;--cchmxm: 20%;--s-71z317: 40%;--s-1mx8lt6: 60%;--d5osmk: 80%;--s-1bqmotx: 16.6667%;--s-1op6ms9: 33.3333%;--ijek2s: 50%;--s-1jasz4f: 66.6667%;--s-1xpfjqa: 83.3333%;--s-1xg1d0t: 8.3333%;--s-8dlntn: 16.6667%;--s-12caeol: 25%;--s-150552r: 33.3333%;--fmgutg: 41.6667%;--s-1eddhzu: 50%;--aa1gsp: 58.3333%;--s-143zp30: 66.6667%;--s-1j1t41g: 75%;--lgd6mo: 83.3333%;--dlps4p: 91.6667%;--s-13xj5xw: 0px 1px 1px 0px rgba(0, 0, 0, 0.12), 0px 2px 5px 0px rgba(48, 49, 61, 0.08);--s-144bvh3: 0px 3px 6px 0px rgba(0, 0, 0, 0.12), 0px 7px 14px 0px rgba(48, 49, 61, 0.08);--s-17hmyo5: 0px 5px 15px 0px rgba(0, 0, 0, 0.12), 0px 15px 35px 0px rgba(48, 49, 61, 0.08);--s-1b12eu8: 0px 5px 15px 0px rgba(0, 0, 0, 0.12), 0px 15px 35px 0px rgba(48, 49, 61, 0.08), 0px 50px 100px 0px rgba(48, 49, 61, 0.08);--s-1axxt4x: var(--s-17hmyo5);--s-1f86nsp: 0px 0px 15px 0px rgba(0, 0, 0, 0.12), 0px 0px 35px 0px rgba(48, 49, 61, 0.08);--s-1sb4owc: 0px 1px 1px 0px rgba(20, 19, 78, 0.32);--s-1grby3w: 0px -1px 1px 0px rgba(20, 19, 78, 0.32);--s-1t5rwhi: 0px 1px 1px 0px rgba(20, 19, 78, 0.32);--euq318: 0px 1px 1px 0px rgba(20, 19, 78, 0.32);--s-1s09q5p: 0px 1px 1px 0px rgba(20, 19, 78, 0.32);--s-1owrw58: 0px 1px 1px 0px rgba(16, 17, 26, 0.16);--bftxd3: 0px -1px 1px 0px rgba(16, 17, 26, 0.16);--s-17k71k1: 0px 1px 1px 0px rgba(16, 17, 26, 0.16);--s-1rw7aq9: 0px 1px 1px 0px rgba(16, 17, 26, 0.16);--jw175x: 0px 1px 1px 0px rgba(16, 17, 26, 0.16);--s-3k700d: 0px 1px 1px 0px rgba(62, 2, 26, 0.32);--s-19qzd91: 0px -1px 1px 0px rgba(62, 2, 26, 0.32);--s-5bwbcu: 0px 1px 1px 0px rgba(62, 2, 26, 0.32);--s-1o1znyl: 0px 1px 1px 0px rgba(62, 2, 26, 0.32);--ssn30k: 0px 1px 1px 0px rgba(62, 2, 26, 0.32);--nkml4h: 0px 1px 1px 0px rgba(16, 17, 26, 0.16);--tjnsp0: 0px 1px 1px 0px rgba(1, 28, 58, 0.16);--s-125u82o: 0px -1px 1px 0px rgba(1, 28, 58, 0.16);--gvdh93: 0px 1px 1px 0px rgba(1, 28, 58, 0.16);--s-1ls56j3: 0px 1px 1px 0px rgba(1, 28, 58, 0.16);--ssk6ln: 0px 1px 1px 0px rgba(1, 28, 58, 0.16);--qyo6hs: 0px 1px 1px 0px rgba(62, 2, 26, .16);--ow2udh: 0px -1px 1px 0px rgba(62, 2, 26, .16);--s-1xdcntp: 0px 1px 1px 0px rgba(62, 2, 26, .16);--s-1km6v4u: 0px 1px 1px 0px rgba(62, 2, 26, .16);--dasy6e: 0px 1px 1px 0px rgba(62, 2, 26, .16);--s-10n1uhs: 0px -1px 1px 0px rgba(16, 17, 26, 0.16);--s-1oq640i: 0px 1px 1px 0px rgba(16, 17, 26, 0.16);--s-6op9ea: 0px 1px 1px 0px rgba(16, 17, 26, 0.16);--s-1bclz45: 0px 1px 1px 0px rgba(16, 17, 26, 0.16);--l4xigy: 490px;--s-10s1zka: 768px;--s-120qp9m: 1040px;--zkrtpd: 1440px;--szmudz: 0;--jfn1nz: 490px;--gx5zre: 768px;--je5b4t: 1040px;--s-1a2ks19: 1440px;--pm2o0x: 0 0 0 4px rgba(1, 150, 237, .36); } #​#​#​#​#​#​#​ svg { min-width: 0; } #​#​#​#​#​#​#​ .⚙ > option > *, #​#​#​#​#​#​#​ .⚙ > option::before, #​#​#​#​#​#​#​ .⚙ > option::after { --s3-padding-top-ref: 0px;--s3-padding-right-ref: 0px;--s3-padding-bottom-ref: 0px;--s3-padding-left-ref: 0px; } #​#​#​#​#​#​#​ .⚙ > option { padding: 0px;--s3-padding-top: 0px;--s3-padding-right: 0px;--s3-padding-bottom: 0px;--s3-padding-left: 0px; } #​#​#​#​#​#​#​ legend.⚙ > *, #​#​#​#​#​#​#​ legend.⚙::before, #​#​#​#​#​#​#​ legend.⚙::after { --s3-padding-top-ref: 0px;--s3-padding-right-ref: 0px;--s3-padding-bottom-ref: 0px;--s3-padding-left-ref: 0px; } #​#​#​#​#​#​#​ legend.⚙ { padding: 0px;--s3-padding-top: 0px;--s3-padding-right: 0px;--s3-padding-bottom: 0px;--s3-padding-left: 0px; } #​#​#​#​#​#​#​ fieldset.⚙ > *, #​#​#​#​#​#​#​ fieldset.⚙::before, #​#​#​#​#​#​#​ fieldset.⚙::after { --s3-padding-top-ref: 0px;--s3-padding-right-ref: 0px;--s3-padding-bottom-ref: 0px;--s3-padding-left-ref: 0px; } #​#​#​#​#​#​#​ fieldset.⚙ { padding: 0px;--s3-padding-top: 0px;--s3-padding-right: 0px;--s3-padding-bottom: 0px;--s3-padding-left: 0px; } #​#​#​#​#​#​#​ fieldset.⚙ { min-width: 0px; } #​#​#​#​#​#​#​ fieldset.⚙ { border: 0;margin: 0px; } #​#​#​#​#​#​#​ span.⚙ { display: var(--s3-display-inline);--s3-align-self-display: flex-start;--s3-flex-x: 0 1 auto;--s3-flex-y: 0 1 auto; } #​#​#​#​#​#​#​ .⚙, #​#​#​#​#​#​#​ .⚙::before, #​#​#​#​#​#​#​ .⚙::after { box-sizing: border-box; } @supports (-webkit-hyphens:none) { #​#​#​#​#​#​#​ select.⚙, #​#​#​#​#​#​#​ select.sail-next-select-fix { font-family: 'Helvetica Neue', sans-serif !important; } } @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-flex-x: 1 0 0;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-focus-ring {inherits: false;syntax: "*";initial-value: 0 0 0 0 transparent;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-top-shadow: 0 0 0 0 transparent;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-padding-bottom: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-transform-x: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-padding-top-ref: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-line-height-ref {inherits: true;syntax: "*";initial-value: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-keyline: transparent;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-cap-height-ref {inherits: true;syntax: "*";initial-value: 0;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-padding-bottom-ref: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-padding-left-ref {inherits: false;syntax: "*";initial-value: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-x-height-ref {inherits: true;syntax: "*";initial-value: 0;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-object-height {inherits: false;syntax: "*";}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-descender {inherits: true;syntax: "*";initial-value: 0;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-padding-right: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-transform {inherits: false;syntax: "*";initial-value: scale(1);}} @keyframes sn-animation-ru4hw5 {from {opacity: 0;}to {opacity: 1;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-ascender-ref {inherits: true;syntax: "*";initial-value: 0;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-descender-ref {inherits: true;syntax: "*";initial-value: 0;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-padding-bottom-ref {inherits: false;syntax: "*";initial-value: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-padding-bottom {inherits: false;syntax: "*";initial-value: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-baseline-multiplier: 1;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-display-inline {inherits: false;syntax: "*";initial-value: inline;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-font-size-ref {inherits: true;syntax: "*";initial-value: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-font-metrics-multiplier: 0;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-transform-scale: 1;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-padding-left-ref: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-flex-x {inherits: false;syntax: "*";initial-value: 1 0 0;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-baseline-alignment-content: none;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-transform-x {inherits: false;syntax: "*";initial-value: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-align-self-x {inherits: false;syntax: "auto | flex-start | flex-end | center | stretch";initial-value: auto;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-padding-left: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-padding-right-ref {inherits: false;syntax: "*";initial-value: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-keyline-width {inherits: false;syntax: "*";initial-value: 1px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-flex-y {inherits: false;syntax: "*";initial-value: 1 0 auto;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-distribute: initial;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-cap-height {inherits: true;syntax: "*";initial-value: 0;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-align-x: stretch;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-display-block {inherits: false;syntax: "*";initial-value: block;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-flex-basis-y {inherits: false;syntax: "*";initial-value: auto;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-transform: scale(1);}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-padding-right {inherits: false;syntax: "*";initial-value: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-line-height {inherits: true;syntax: "*";initial-value: 0px;}} @keyframes sn-animation-15pzerw {0% {transform: scaleX(-1) rotateZ(0);}50% {transform: scaleX(-1) rotateZ(-180deg);}100% {transform: scaleX(-1) rotateZ(-360deg);}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-flex-basis-y: auto;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-focus-ring: 0 0 0 0 transparent;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-x-height {inherits: true;syntax: "*";initial-value: 0;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-align-y: baseline;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-align-self-x: auto;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-transform-rotate {inherits: false;syntax: "*";initial-value: 0deg;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-keyline {inherits: false;syntax: "<color>";initial-value: transparent;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-ascender {inherits: true;syntax: "*";initial-value: 0;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-keyline-width: 1px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-transform-align-y {inherits: false;syntax: "*";initial-value: 0;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-transform-scale {inherits: false;syntax: "*";initial-value: 1;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-column-gap: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-align-self-display {inherits: false;syntax: "auto | flex-start | flex-end | center | stretch | baseline";initial-value: auto;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-align-self-y: auto;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-top-shadow {inherits: false;syntax: "*";initial-value: 0 0 0 0 transparent;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-baseline-alignment-content {inherits: false;syntax: "*";initial-value: none;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-padding-top {inherits: false;syntax: "*";initial-value: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-transform-y {inherits: false;syntax: "*";initial-value: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-object-height: initial;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-transform-y: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-align-self-y {inherits: false;syntax: "auto | flex-start | flex-end | center | stretch | baseline";initial-value: auto;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-display-block: block;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-row-gap: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-padding-right-ref: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-padding-top: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-column-gap {inherits: false;syntax: "*";initial-value: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-display-inline: inline;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-font-metrics-multiplier {inherits: false;syntax: "*";initial-value: 0;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-transform-align-y: 0;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-row-gap {inherits: false;syntax: "*";initial-value: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-align-y {inherits: false;syntax: "flex-start | flex-end | center | stretch | baseline";initial-value: baseline;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-align-x {inherits: false;syntax: "flex-start | flex-end | center | stretch";initial-value: stretch;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-padding-left {inherits: false;syntax: "*";initial-value: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-transform-rotate: 0deg;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-box-shadow: 0 0 0 0 transparent;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-padding-top-ref {inherits: false;syntax: "*";initial-value: 0px;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-distribute {inherits: false;syntax: "*";}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-baseline-multiplier {inherits: false;syntax: "*";initial-value: 1;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-font-size {inherits: true;syntax: "*";initial-value: 0px;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-align-self-display: auto;}} @supports (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {@property --s3-box-shadow {inherits: false;syntax: "*";initial-value: 0 0 0 0 transparent;}} @supports not (((content-visibility: auto) and (text-size-adjust: auto)) or (margin-trim: none)) {*, ::before, ::after {--s3-flex-y: 1 0 auto;}} .__sn-sheet-order { --order: '⚙1fkl26y,⚙osdg65,⚙efytx1,⚙xy1p0u,⚙1m8oslq,⚙10bih0p,⚙1q1yv7o,⚙yua5r4,⚙gdwt5h,⚙nj5z95,⚙uttpao,⚙11ujtwk,⚙3bq003,⚙1aggns8,⚙1pdeuwf,⚙n6zzyz,⚙1f1x4ws,⚙10xj65o,⚙1de0fxo,⚙14hggrt,⚙rj42nx,⚙1p8v6sd,⚙15a62l,⚙1lk9vkk,_yplrs9:11,_1polhze,_1uy35im,⚙10qrscb,⚙7jx6db,⚙fhh25g,⚙10ukxhy,⚙9ztfp4,⚙12ixwh0,⚙1q1w4q4,⚙apl2b2,⚙y1uqf9,⚙tk9bya,⚙p3qjgs,⚙1lfobad,⚙fj81s3,⚙1n7j6i6,⚙o3v3ar,⚙e6hm5,⚙17ha06k,⚙jn5ys,⚙1xpmlnw,⚙6nx3cl,⚙1wjswrp,⚙ma3qa9,⚙qxdw67,⚙8imm4,⚙rhyyhd,⚙1wa2jav,⚙vtsgz0,⚙1q3vv4j,⚙kmoqs3,⚙fh3f82,⚙wsmizy,⚙1fb8uxk,⚙1nbz53i,⚙91128h,⚙a2vbah,⚙1ccxfr2,⚙1qxo0o7,⚙13o6vko,⚙7kxksl,⚙170zjxs,⚙199l0bn,⚙1cfu3v8,⚙xujluw,⚙1kfg5qg,⚙3q8l2z,⚙1246d4y,⚙qfw25k,⚙mtu4f8,⚙b9p3kj,⚙pwteqn,⚙1n8cfxm,⚙11ejnmk,⚙j7818x,⚙jsvbse,⚙9p7wdw,⚙srvico,⚙bgubtv,⚙1lge2vx,⚙1ax3c5k,⚙33dfmg,_15f2vst:9,⚙1b92ejo,⚙4bf0f7';--keys: '⚙npalcp,⚙1n3wco6,⚙1nphqpl,⚙103mozq'; }</style><style data-layer="dynamic" data-server="39.0.0">#​#​#​#​#​#​#​#​ .sn-1ndmri1 { display: flex; flex-direction: row; align-items: var(--distribute-y, var(--align-y)); justify-content: var(--distribute-x, var(--align-x)); --when-flex-x: ; --when-flex-y: initial; --align-y: center; --column-gap: var(--j1j5idnz-space-xsmall); --row-gap: var(--j1j5idnz-space-xsmall); background: var(--j1j5idnz-backgroundColor-surface); --keyline: var(--j1j5idnz-borderColor-neutral); border-radius: var(--j1j5idnz-radius-xsmall); --padding-left: var(--j1j5idnz-space-small); --padding-right: var(--j1j5idnz-space-small); --padding-top: var(--j1j5idnz-space-xxsmall); --padding-bottom: var(--j1j5idnz-space-xxsmall); cursor: pointer; width: 400px; --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​#​#​#​ .sn-1ndmri1 > * { flex: var(--flex-x); align-self: var(--align-self-y); justify-self: var(--align-self-x); } #​#​#​#​#​#​#​#​ .sn-1ndmri1 > * { --flex-y: initial; --s3-flex-y: 0 1 auto; } #​#​#​#​#​#​#​#​ .sn-lleswv { width: var(--j1j5idnz-size-fill); --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​#​#​#​ .sn-lleswv input { --box-shadow: var(--j1j5idnz-shadow-none); font-size: 14px; --padding-top: var(--j1j5idnz-space-xsmall); --padding-right: var(--j1j5idnz-space-xsmall); --padding-bottom: var(--j1j5idnz-space-xsmall); --padding-left: var(--j1j5idnz-space-xsmall); cursor: pointer; } #​#​#​#​#​#​#​#​ .sn-q7i8nn { display: flex; flex-direction: column; align-items: var(--align-x); justify-content: var(--align-y); } #​#​#​#​#​#​#​#​ .sn-q7i8nn > * { align-self: var(--align-self-x); justify-self: var(--align-self-y); } #​#​#​#​#​#​#​#​ .sn-npe8dn { width: var(--j1j5idnz-size-fill); --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​#​#​#​ .sn-npe8dn input { --box-shadow: var(--j1j5idnz-shadow-none); font-size: 14px; --padding-top: var(--j1j5idnz-space-xsmall); --padding-right: var(--j1j5idnz-space-xsmall); --padding-bottom: var(--j1j5idnz-space-xsmall); --padding-left: var(--j1j5idnz-space-xsmall); cursor: pointer; } #​#​#​#​#​#​#​#​ .sn-npe8dn { display: flex; flex-direction: column; align-items: var(--align-x); justify-content: var(--align-y); } #​#​#​#​#​#​#​#​ .sn-npe8dn > * { align-self: var(--align-self-x); justify-self: var(--align-self-y); } #​#​#​#​#​#​#​#​ .sn-126ouik { display: flex; flex-direction: column; align-items: var(--distribute-x, var(--align-x)); justify-content: var(--distribute-y, var(--align-y)); --when-flex-y: ; --when-flex-x: initial; --column-gap: var(--j1j5idnz-space-xsmall); --row-gap: var(--j1j5idnz-space-xsmall); } #​#​#​#​#​#​#​#​ .sn-126ouik > * { flex: var(--flex-y); align-self: var(--align-self-x); justify-self: var(--align-self-y); } #​#​#​#​#​#​#​#​ .sn-2p5cb3 { display: flex; flex-direction: column; align-items: var(--distribute-x, var(--align-x)); justify-content: var(--distribute-y, var(--align-y)); --when-flex-y: ; --when-flex-x: initial; --column-gap: 0; --row-gap: 0; } #​#​#​#​#​#​#​#​ .sn-2p5cb3 > * { flex: var(--flex-y); align-self: var(--align-self-x); justify-self: var(--align-self-y); } #​#​#​#​#​#​#​#​ .sn-1h0a3cy { display: flex; flex-direction: column; align-items: var(--distribute-x, var(--align-x)); justify-content: var(--distribute-y, var(--align-y)); --when-flex-y: ; --when-flex-x: initial; } #​#​#​#​#​#​#​#​ .sn-1h0a3cy > * { flex: var(--flex-y); align-self: var(--align-self-x); justify-self: var(--align-self-y); } #​#​#​#​#​#​#​#​ .sn-ez40f1 { width: var(--j1j5idnz-size-fit); --flex-x: initial; --s3-flex-x: 0 1 auto; --padding-left: var(--j1j5idnz-space-xsmall); --padding-right: var(--j1j5idnz-space-xsmall); --padding-top: var(--j1j5idnz-space-xxsmall); --padding-bottom: var(--j1j5idnz-space-xxsmall); font-family: var(--j1j5idnz-typeface-monospace); font-size: 14px; line-height: 14px; background: var(--j1j5idnz-backgroundColor-container); border: 1px solid var(--j1j5idnz-color-neutral150); border-radius: var(--j1j5idnz-radius-xsmall); } #​#​#​#​#​#​#​#​ .sn-1g6zy7t { display: flex; flex-direction: column; align-items: var(--distribute-x, var(--align-x)); justify-content: var(--distribute-y, var(--align-y)); --when-flex-y: ; --when-flex-x: initial; --align-x: flex-start; --column-gap: 12px; --row-gap: 12px; line-height: 20px; --padding-right: var(--j1j5idnz-space-medium); } #​#​#​#​#​#​#​#​ .sn-1g6zy7t > * { flex: var(--flex-y); align-self: var(--align-self-x); justify-self: var(--align-self-y); } #​#​#​#​#​#​#​#​ .sn-1g6zy7t > * { --flex-x: initial; --s3-flex-x: 0 1 auto; } #​#​#​#​#​#​#​#​ .sn-bxgxhf { overflow-y: hidden; } #​#​#​#​#​#​#​#​ .sn-16sbyrz { display: flex; flex-direction: row; align-items: var(--distribute-y, var(--align-y)); justify-content: var(--distribute-x, var(--align-x)); --when-flex-x: ; --when-flex-y: initial; --column-gap: var(--j1j5idnz-space-small); --row-gap: var(--j1j5idnz-space-small); flex-wrap: wrap; } #​#​#​#​#​#​#​#​ .sn-16sbyrz > * { flex: var(--flex-x); align-self: var(--align-self-y); justify-self: var(--align-self-x); }</style><style data-layer="deprecatedOverride" data-server="39.0.0"></style><style data-layer="atomic" data-server="39.0.0">#​#​#​#​#​#​#​#​#​#​ .as3o > svg { --s3-flex-x: 0 0 auto;--s3-flex-y: 0 0 auto; } #​#​#​#​#​#​#​#​#​#​ .as3o > * { flex: var(--s3-flex-x);--s3-align-self-y: auto;align-self: var(--s3-align-self-y);--s3-baseline-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as3o::before { --s3-baseline-alignment-content: "\200B"; } #​#​#​#​#​#​#​#​#​#​ .as3o { flex-direction: row;align-items: var(--s3-align-y);justify-content: var(--s3-distribute, var(--s3-align-x)); } #​#​#​#​#​#​#​#​#​#​ .as3o { --s3-display-block: flex;--s3-display-inline: inline-flex; } #​#​#​#​#​#​#​#​#​#​ .as325 > svg { --s3-flex-x: 0 0 auto;--s3-flex-y: 0 0 auto; } #​#​#​#​#​#​#​#​#​#​ .as325 > * { flex: var(--s3-flex-y);--s3-align-self-x: var(--s3-align-self-display);align-self: var(--s3-align-self-x);--s3-baseline-multiplier: 0; } #​#​#​#​#​#​#​#​#​#​ .as325 { flex-direction: column;align-items: var(--s3-align-x);justify-content: var(--s3-distribute, var(--s3-align-y)); } #​#​#​#​#​#​#​#​#​#​ .as325 { --s3-display-block: flex;--s3-display-inline: inline-flex; } #​#​#​#​#​#​#​#​#​#​ .as32n { display: var(--s3-display-block);--s3-align-self-display: auto; } #​#​#​#​#​#​#​#​#​#​ .as3p { display: var(--s3-display-inline);--s3-align-self-display: flex-start;--s3-flex-x: 0 1 auto;--s3-flex-y: 0 1 auto; } @media (max-width: 800px) { #​#​#​#​#​#​#​#​#​#​ .as351 { display: var(--s3-display-block);--s3-align-self-display: auto; } } #​#​#​#​#​#​#​#​#​#​ .as34h > * { --s3-align-self-x: flex-end;--s3-flex-x: 0 1 auto; } #​#​#​#​#​#​#​#​#​#​ .as34h { --s3-align-x: flex-end; } #​#​#​#​#​#​#​#​#​#​ .as3q > * { --s3-align-self-x: center;--s3-flex-x: 0 1 auto; } #​#​#​#​#​#​#​#​#​#​ .as3q { --s3-align-x: center; } #​#​#​#​#​#​#​#​#​#​ .as3r > * { --s3-align-self-y: center;--s3-baseline-multiplier: 0;--s3-flex-y: 0 1 auto; } #​#​#​#​#​#​#​#​#​#​ .as3r { --s3-align-y: center; } #​#​#​#​#​#​#​#​#​#​ .as31f { --s3-top-shadow: var(--s-1owrw58); } #​#​#​#​#​#​#​#​#​#​ .as312:focus { --s3-focus-ring: var(--pm2o0x);outline: 1px solid transparent; } #​#​#​#​#​#​#​#​#​#​ .as31i:hover:not(:active):not([aria-disabled="true"]) { --s3-top-shadow: var(--s-17k71k1); } #​#​#​#​#​#​#​#​#​#​ .as31w { transform: translateY(var(--s3-transform-align-y)) translate(var(--s3-transform-x), var(--s3-transform-y)) rotate(var(--s3-transform-rotate)) scale(var(--s3-transform-scale)) var(--s3-transform);--s3-transform-align-y: calc((50% - calc(calc(var(--s3-font-size-ref) * var(--s3-cap-height-ref)) / 2)) * var(--s3-baseline-multiplier) * var(--s3-font-metrics-multiplier) * clamp(0, 10000 * var(--s3-ascender-ref), 1)); } #​#​#​#​#​#​#​#​#​#​ .as313 { font-weight: var(--s-1okfvc8);font-family: var(--s-2824qb);text-transform: var(--fvgy72); } #​#​#​#​#​#​#​#​#​#​ .as313 > *, #​#​#​#​#​#​#​#​#​#​ .as313::before, #​#​#​#​#​#​#​#​#​#​ .as313::after { --s3-line-height-ref: var(--v37d9k); } #​#​#​#​#​#​#​#​#​#​ .as313 > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as313 { --s3-line-height: var(--v37d9k);line-height: var(--v37d9k); } #​#​#​#​#​#​#​#​#​#​ .as313 > *, #​#​#​#​#​#​#​#​#​#​ .as313::before, #​#​#​#​#​#​#​#​#​#​ .as313::after { --s3-font-size-ref: var(--h715ut); } #​#​#​#​#​#​#​#​#​#​ .as313 > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as313 { --s3-font-size: var(--h715ut);font-size: var(--h715ut); } #​#​#​#​#​#​#​#​#​#​ .as313 > *, #​#​#​#​#​#​#​#​#​#​ .as313::before, #​#​#​#​#​#​#​#​#​#​ .as313::after { --s3-ascender-ref: calc(var(--zgudek) / var(--s-1dzt71));--s3-cap-height-ref: calc(var(--s-1nxo8gv) / var(--s-1dzt71));--s3-x-height-ref: calc(var(--exyw8i) / var(--s-1dzt71));--s3-descender-ref: calc(var(--j81w5o) / var(--s-1dzt71)); } #​#​#​#​#​#​#​#​#​#​ .as313 { --s3-ascender: calc(var(--zgudek) / var(--s-1dzt71));--s3-cap-height: calc(var(--s-1nxo8gv) / var(--s-1dzt71));--s3-x-height: calc(var(--exyw8i) / var(--s-1dzt71));--s3-descender: calc(var(--j81w5o) / var(--s-1dzt71)); } #​#​#​#​#​#​#​#​#​#​ .as33l { font-weight: var(--s-14dzjrh);font-family: var(--s-19wxkto);text-transform: var(--s-1217952); } #​#​#​#​#​#​#​#​#​#​ .as33l > *, #​#​#​#​#​#​#​#​#​#​ .as33l::before, #​#​#​#​#​#​#​#​#​#​ .as33l::after { --s3-line-height-ref: var(--s-4pll8s); } #​#​#​#​#​#​#​#​#​#​ .as33l > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as33l { --s3-line-height: var(--s-4pll8s);line-height: var(--s-4pll8s); } #​#​#​#​#​#​#​#​#​#​ .as33l > *, #​#​#​#​#​#​#​#​#​#​ .as33l::before, #​#​#​#​#​#​#​#​#​#​ .as33l::after { --s3-font-size-ref: var(--s-1bszhas); } #​#​#​#​#​#​#​#​#​#​ .as33l > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as33l { --s3-font-size: var(--s-1bszhas);font-size: var(--s-1bszhas); } #​#​#​#​#​#​#​#​#​#​ .as33l > *, #​#​#​#​#​#​#​#​#​#​ .as33l::before, #​#​#​#​#​#​#​#​#​#​ .as33l::after { --s3-ascender-ref: calc(var(--nz4mcx) / var(--s-1lu85ku));--s3-cap-height-ref: calc(var(--s-11mdmvx) / var(--s-1lu85ku));--s3-x-height-ref: calc(var(--s-1jzsrdu) / var(--s-1lu85ku));--s3-descender-ref: calc(var(--nyijt4) / var(--s-1lu85ku)); } #​#​#​#​#​#​#​#​#​#​ .as33l { --s3-ascender: calc(var(--nz4mcx) / var(--s-1lu85ku));--s3-cap-height: calc(var(--s-11mdmvx) / var(--s-1lu85ku));--s3-x-height: calc(var(--s-1jzsrdu) / var(--s-1lu85ku));--s3-descender: calc(var(--nyijt4) / var(--s-1lu85ku)); } #​#​#​#​#​#​#​#​#​#​ .as33y:focus-visible { --s3-focus-ring: var(--pm2o0x);outline: 1px solid transparent; } #​#​#​#​#​#​#​#​#​#​ .as33i { font-weight: var(--s-5ifsr8);font-family: var(--s-10n4r5s); } #​#​#​#​#​#​#​#​#​#​ .as33i > *, #​#​#​#​#​#​#​#​#​#​ .as33i::before, #​#​#​#​#​#​#​#​#​#​ .as33i::after { --s3-line-height-ref: var(--y1eix); } #​#​#​#​#​#​#​#​#​#​ .as33i > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as33i { --s3-line-height: var(--y1eix);line-height: var(--y1eix); } #​#​#​#​#​#​#​#​#​#​ .as33i > *, #​#​#​#​#​#​#​#​#​#​ .as33i::before, #​#​#​#​#​#​#​#​#​#​ .as33i::after { --s3-font-size-ref: var(--s-1ps9599); } #​#​#​#​#​#​#​#​#​#​ .as33i > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as33i { --s3-font-size: var(--s-1ps9599);font-size: var(--s-1ps9599); } #​#​#​#​#​#​#​#​#​#​ .as33i > *, #​#​#​#​#​#​#​#​#​#​ .as33i::before, #​#​#​#​#​#​#​#​#​#​ .as33i::after { --s3-ascender-ref: calc(var(--s-1c0dhvx) / var(--otwgsh));--s3-cap-height-ref: calc(var(--tos8vn) / var(--otwgsh));--s3-x-height-ref: calc(var(--s-1k8jo1z) / var(--otwgsh));--s3-descender-ref: calc(var(--s-1frn75q) / var(--otwgsh)); } #​#​#​#​#​#​#​#​#​#​ .as33i { --s3-ascender: calc(var(--s-1c0dhvx) / var(--otwgsh));--s3-cap-height: calc(var(--tos8vn) / var(--otwgsh));--s3-x-height: calc(var(--s-1k8jo1z) / var(--otwgsh));--s3-descender: calc(var(--s-1frn75q) / var(--otwgsh)); } #​#​#​#​#​#​#​#​#​#​ .as35z { font-weight: var(--l1g2qx);font-family: var(--s-1kyh559);text-transform: var(--s-1lpsi9s); } #​#​#​#​#​#​#​#​#​#​ .as35z > *, #​#​#​#​#​#​#​#​#​#​ .as35z::before, #​#​#​#​#​#​#​#​#​#​ .as35z::after { --s3-line-height-ref: var(--s-19seinc); } #​#​#​#​#​#​#​#​#​#​ .as35z > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as35z { --s3-line-height: var(--s-19seinc);line-height: var(--s-19seinc); } #​#​#​#​#​#​#​#​#​#​ .as35z > *, #​#​#​#​#​#​#​#​#​#​ .as35z::before, #​#​#​#​#​#​#​#​#​#​ .as35z::after { --s3-font-size-ref: var(--s-9kojd8); } #​#​#​#​#​#​#​#​#​#​ .as35z > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as35z { --s3-font-size: var(--s-9kojd8);font-size: var(--s-9kojd8); } #​#​#​#​#​#​#​#​#​#​ .as35z > *, #​#​#​#​#​#​#​#​#​#​ .as35z::before, #​#​#​#​#​#​#​#​#​#​ .as35z::after { --s3-ascender-ref: calc(var(--s-1e1h8qc) / var(--zccab0));--s3-cap-height-ref: calc(var(--s-1a3o7mc) / var(--zccab0));--s3-x-height-ref: calc(var(--s-1g779jw) / var(--zccab0));--s3-descender-ref: calc(var(--s-1o3h1p) / var(--zccab0)); } #​#​#​#​#​#​#​#​#​#​ .as35z { --s3-ascender: calc(var(--s-1e1h8qc) / var(--zccab0));--s3-cap-height: calc(var(--s-1a3o7mc) / var(--zccab0));--s3-x-height: calc(var(--s-1g779jw) / var(--zccab0));--s3-descender: calc(var(--s-1o3h1p) / var(--zccab0)); } #​#​#​#​#​#​#​#​#​#​ .as31e { --s3-keyline: var(--s-1tx6f72); } #​#​#​#​#​#​#​#​#​#​ .as340 > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as32q { --s3-align-self-y: stretch;--s3-baseline-multiplier: 0; } #​#​#​#​#​#​#​#​#​#​ .as326 > * { --s3-flex-x: 0 1 auto;--s3-flex-y: 0 1 auto; } #​#​#​#​#​#​#​#​#​#​ .as326::before { --s3-baseline-alignment-content: none; } #​#​#​#​#​#​#​#​#​#​ .as326 { --s3-distribute: space-between; } #​#​#​#​#​#​#​#​#​#​ .as32p { --s3-align-self-x: stretch; } #​#​#​#​#​#​#​#​#​#​ .as31r:active:not([aria-disabled="true"]) { --s3-keyline: var(--weyxgf); } #​#​#​#​#​#​#​#​#​#​ .as33q { font-weight: var(--s-1uwnsun);font-family: var(--s-1bg49xz);text-transform: var(--s-4bqojf); } #​#​#​#​#​#​#​#​#​#​ .as33q > *, #​#​#​#​#​#​#​#​#​#​ .as33q::before, #​#​#​#​#​#​#​#​#​#​ .as33q::after { --s3-line-height-ref: var(--s-1clgqj6); } #​#​#​#​#​#​#​#​#​#​ .as33q > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as33q { --s3-line-height: var(--s-1clgqj6);line-height: var(--s-1clgqj6); } #​#​#​#​#​#​#​#​#​#​ .as33q > *, #​#​#​#​#​#​#​#​#​#​ .as33q::before, #​#​#​#​#​#​#​#​#​#​ .as33q::after { --s3-font-size-ref: var(--s-1necpvx); } #​#​#​#​#​#​#​#​#​#​ .as33q > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as33q { --s3-font-size: var(--s-1necpvx);font-size: var(--s-1necpvx); } #​#​#​#​#​#​#​#​#​#​ .as33q > *, #​#​#​#​#​#​#​#​#​#​ .as33q::before, #​#​#​#​#​#​#​#​#​#​ .as33q::after { --s3-ascender-ref: calc(var(--s-7up3gp) / var(--x40ka8));--s3-cap-height-ref: calc(var(--shevou) / var(--x40ka8));--s3-x-height-ref: calc(var(--s-1l77am2) / var(--x40ka8));--s3-descender-ref: calc(var(--fia6g6) / var(--x40ka8)); } #​#​#​#​#​#​#​#​#​#​ .as33q { --s3-ascender: calc(var(--s-7up3gp) / var(--x40ka8));--s3-cap-height: calc(var(--shevou) / var(--x40ka8));--s3-x-height: calc(var(--s-1l77am2) / var(--x40ka8));--s3-descender: calc(var(--fia6g6) / var(--x40ka8)); } #​#​#​#​#​#​#​#​#​#​ .as32 { --s3-focus-ring: 0 0 0 0 transparent;outline: none; } #​#​#​#​#​#​#​#​#​#​ .as31m:active:not([aria-disabled="true"]) { --s3-top-shadow: var(--bftxd3); } #​#​#​#​#​#​#​#​#​#​ .as31h:hover:not(:active):not([aria-disabled="true"]) { --s3-keyline: var(--s-3jnt9s); } #​#​#​#​#​#​#​#​#​#​ .as363 { font-weight: var(--nv9nhg);font-family: var(--m49k9b);text-transform: var(--s-11agxm8); } #​#​#​#​#​#​#​#​#​#​ .as363 > *, #​#​#​#​#​#​#​#​#​#​ .as363::before, #​#​#​#​#​#​#​#​#​#​ .as363::after { --s3-line-height-ref: var(--kvw885); } #​#​#​#​#​#​#​#​#​#​ .as363 > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as363 { --s3-line-height: var(--kvw885);line-height: var(--kvw885); } #​#​#​#​#​#​#​#​#​#​ .as363 > *, #​#​#​#​#​#​#​#​#​#​ .as363::before, #​#​#​#​#​#​#​#​#​#​ .as363::after { --s3-font-size-ref: var(--s-1vps0lq); } #​#​#​#​#​#​#​#​#​#​ .as363 > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as363 { --s3-font-size: var(--s-1vps0lq);font-size: var(--s-1vps0lq); } #​#​#​#​#​#​#​#​#​#​ .as363 > *, #​#​#​#​#​#​#​#​#​#​ .as363::before, #​#​#​#​#​#​#​#​#​#​ .as363::after { --s3-ascender-ref: calc(var(--s-1of10fq) / var(--s-1edtv7y));--s3-cap-height-ref: calc(var(--s-1fpflnp) / var(--s-1edtv7y));--s3-x-height-ref: calc(var(--fkugbx) / var(--s-1edtv7y));--s3-descender-ref: calc(var(--s-17mflmd) / var(--s-1edtv7y)); } #​#​#​#​#​#​#​#​#​#​ .as363 { --s3-ascender: calc(var(--s-1of10fq) / var(--s-1edtv7y));--s3-cap-height: calc(var(--s-1fpflnp) / var(--s-1edtv7y));--s3-x-height: calc(var(--fkugbx) / var(--s-1edtv7y));--s3-descender: calc(var(--s-17mflmd) / var(--s-1edtv7y)); } #​#​#​#​#​#​#​#​#​#​ .as32h { font-weight: var(--s-10omakn);font-family: var(--s-322h2q);text-transform: var(--x8jlab); } #​#​#​#​#​#​#​#​#​#​ .as32h > *, #​#​#​#​#​#​#​#​#​#​ .as32h::before, #​#​#​#​#​#​#​#​#​#​ .as32h::after { --s3-line-height-ref: var(--s-6f7uvb); } #​#​#​#​#​#​#​#​#​#​ .as32h > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as32h { --s3-line-height: var(--s-6f7uvb);line-height: var(--s-6f7uvb); } #​#​#​#​#​#​#​#​#​#​ .as32h > *, #​#​#​#​#​#​#​#​#​#​ .as32h::before, #​#​#​#​#​#​#​#​#​#​ .as32h::after { --s3-font-size-ref: var(--yr2igw); } #​#​#​#​#​#​#​#​#​#​ .as32h > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as32h { --s3-font-size: var(--yr2igw);font-size: var(--yr2igw); } #​#​#​#​#​#​#​#​#​#​ .as32h > *, #​#​#​#​#​#​#​#​#​#​ .as32h::before, #​#​#​#​#​#​#​#​#​#​ .as32h::after { --s3-ascender-ref: calc(var(--s-10lc7l2) / var(--s-1f5bgyy));--s3-cap-height-ref: calc(var(--s-1j3wpdz) / var(--s-1f5bgyy));--s3-x-height-ref: calc(var(--s-1yawlia) / var(--s-1f5bgyy));--s3-descender-ref: calc(var(--s-9zy5fq) / var(--s-1f5bgyy)); } #​#​#​#​#​#​#​#​#​#​ .as32h { --s3-ascender: calc(var(--s-10lc7l2) / var(--s-1f5bgyy));--s3-cap-height: calc(var(--s-1j3wpdz) / var(--s-1f5bgyy));--s3-x-height: calc(var(--s-1yawlia) / var(--s-1f5bgyy));--s3-descender: calc(var(--s-9zy5fq) / var(--s-1f5bgyy)); } #​#​#​#​#​#​#​#​#​#​ .as327 { transition: width 150ms ease-in-out, padding 200ms ease-out; } #​#​#​#​#​#​#​#​#​#​ .as35q > * { --s3-flex-basis-y: 0; } #​#​#​#​#​#​#​#​#​#​ .as35q { height: var(--s-1gn97fj);--s3-flex-y: 0 0 auto;--s3-object-height: var(--s-1gn97fj); } #​#​#​#​#​#​#​#​#​#​ .as31y > * { --s3-flex-basis-y: 0; } #​#​#​#​#​#​#​#​#​#​ .as31y { height: 12px;--s3-flex-y: 0 0 auto;--s3-object-height: 12px; } #​#​#​#​#​#​#​#​#​#​ .as31c { color: var(--s-1uc69hl); } #​#​#​#​#​#​#​#​#​#​ .as31p:active:not([aria-disabled="true"]) { color: var(--efkcvi); } #​#​#​#​#​#​#​#​#​#​ .as334:hover { fill: var(--s-1geebyf); } #​#​#​#​#​#​#​#​#​#​ .as336 { top: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as3m:focus { clip: auto; } #​#​#​#​#​#​#​#​#​#​ .as33b { width: 16px;--s3-flex-x: 0 0 auto; } #​#​#​#​#​#​#​#​#​#​ .as34j { border: 1.5px solid #273059; } #​#​#​#​#​#​#​#​#​#​ .as33a > * { --s3-flex-basis-y: 0; } #​#​#​#​#​#​#​#​#​#​ .as33a { height: 16px;--s3-flex-y: 0 0 auto;--s3-object-height: 16px; } #​#​#​#​#​#​#​#​#​#​ .as34q { color: inherit; } #​#​#​#​#​#​#​#​#​#​ .as31k:hover:not(:active):not([aria-disabled="true"]) { color: var(--vgfwzs); } #​#​#​#​#​#​#​#​#​#​ .as337 { right: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as3t { position: relative; } #​#​#​#​#​#​#​#​#​#​ .as34m > *, #​#​#​#​#​#​#​#​#​#​ .as34m::before, #​#​#​#​#​#​#​#​#​#​ .as34m::after { --s3-padding-top-ref: 2px;--s3-padding-right-ref: 6px;--s3-padding-bottom-ref: 2px;--s3-padding-left-ref: 6px; } #​#​#​#​#​#​#​#​#​#​ .as34m { padding: 2px 6px;--s3-padding-top: 2px;--s3-padding-right: 6px;--s3-padding-bottom: 2px;--s3-padding-left: 6px; } #​#​#​#​#​#​#​#​#​#​ .as35f { width: auto;--s3-flex-x: 1 0 0; } #​#​#​#​#​#​#​#​#​#​ .as33k > *, #​#​#​#​#​#​#​#​#​#​ .as33k::before, #​#​#​#​#​#​#​#​#​#​ .as33k::after { --s3-padding-top-ref: var(--w6gdcy);--s3-padding-right-ref: var(--w6gdcy);--s3-padding-bottom-ref: var(--w6gdcy);--s3-padding-left-ref: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as33k { padding: var(--w6gdcy);--s3-padding-top: var(--w6gdcy);--s3-padding-right: var(--w6gdcy);--s3-padding-bottom: var(--w6gdcy);--s3-padding-left: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as39 { left: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as33 { cursor: pointer; } #​#​#​#​#​#​#​#​#​#​ .as35s { animation: sn-animation-ru4hw5 250ms normal ease, sn-animation-15pzerw .7s linear infinite; } #​#​#​#​#​#​#​#​#​#​ .as32e > *, #​#​#​#​#​#​#​#​#​#​ .as32e::before, #​#​#​#​#​#​#​#​#​#​ .as32e::after { --s3-row-gap: var(--spiyys);--s3-column-gap: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as32e { gap: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as3k:focus { width: auto;--s3-flex-x: 1 0 0; } #​#​#​#​#​#​#​#​#​#​ .as38 { top: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as344:hover { fill: var(--s-1gv2imz); } #​#​#​#​#​#​#​#​#​#​ .as35i > *, #​#​#​#​#​#​#​#​#​#​ .as35i::before, #​#​#​#​#​#​#​#​#​#​ .as35i::after { --s3-padding-top-ref: 0;--s3-padding-right-ref: 16px;--s3-padding-bottom-ref: 8px;--s3-padding-left-ref: 16px; } #​#​#​#​#​#​#​#​#​#​ .as35i { padding: 0 16px 8px 16px;--s3-padding-top: 0;--s3-padding-right: 16px;--s3-padding-bottom: 8px;--s3-padding-left: 16px; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5s .sn-token-provider) { --ssn30k: 0px -1px 0px 0px #f46b7d; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5r .sn-token-provider) { --s-1o1znyl: 0px -1px 0px 0px #f46b7d; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5q .sn-token-provider) { --s-5bwbcu: 0px -1px 0px 0px transparent; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5p .sn-token-provider) { --s-19qzd91: 0px -1px 0px 0px transparent; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5o .sn-token-provider) { --s-3k700d: 0px -1px 0px 0px #f46b7d; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5n .sn-token-provider) { --jw175x: 0px -1px 0px 0px #3E444F; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5m .sn-token-provider) { --s-1rw7aq9: 0px -1px 0px 0px #3E444F; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5l .sn-token-provider) { --s-17k71k1: 0px -1px 0px 0px transparent; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5k .sn-token-provider) { --bftxd3: 0px -1px 0px 0px transparent; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5j .sn-token-provider) { --s-1owrw58: 0px -1px 0px 0px #3E444F; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5i .sn-token-provider) { --s-1s09q5p: 0px -1px 0px 0px #746CFF; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5h .sn-token-provider) { --euq318: 0px -1px 0px 0px #746CFF; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5g .sn-token-provider) { --s-1t5rwhi: 0px -1px 0px 0px transparent; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5f .sn-token-provider) { --s-1grby3w: 0px -1px 0px 0px transparent; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5e .sn-token-provider) { --s-1sb4owc: 0px -1px 0px 0px #746CFF; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5d .sn-token-provider) { --s-1f86nsp: 0px 0px 15px 0px rgba(0, 0, 0, 0.12), 0px 0px 35px 0px rgba(14, 14, 17, 0.40); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5c .sn-token-provider) { --s-1axxt4x: 0px 5px 15px 0px rgba(0, 0, 0, 0.12), 0px 15px 35px 0px rgba(14, 14, 17, 0.40); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5b .sn-token-provider) { --s-1b12eu8: 0px 5px 15px 0px rgba(0, 0, 0, 0.12), 0px 15px 35px 0px rgba(14, 14, 17, 0.40), 0px 50px 100px 0px rgba(14, 14, 17, 0.40); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5a .sn-token-provider) { --s-17hmyo5: 0px 5px 15px 0px rgba(0, 0, 0, 0.12), 0px 15px 35px 0px rgba(14, 14, 17, 0.40); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t59 .sn-token-provider) { --s-144bvh3: 0px 3px 6px 0px rgba(0, 0, 0, 0.12), 0px 7px 14px 0px rgba(48, 49, 61, 0.08); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t58 .sn-token-provider) { --s-13xj5xw: 0px 1px 1px 0px rgba(0, 0, 0, 0.12), 0px 2px 5px 0px rgba(14, 14, 17, 0.40); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t57 .sn-token-provider) { --pm2o0x: 0 0 0 4px rgba(43, 157, 246, .36); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t56 .sn-token-provider) { --s54adp: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t55 .sn-token-provider) { --p0fyhq: var(--u7fs0q); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t54 .sn-token-provider) { --s-17rpyet: var(--tjfttb); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t53 .sn-token-provider) { --s-1w72vx7: var(--s-1x0z4nb); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t52 .sn-token-provider) { --a5n7gi: var(--qu1he7); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t51 .sn-token-provider) { --s-1xjoc01: var(--f9yecl); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t50 .sn-token-provider) { --s-1gbceg6: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4z .sn-token-provider) { --s-15pcz81: var(--s-12i04c6); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4y .sn-token-provider) { --tbhbpy: var(--xezflb); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4x .sn-token-provider) { --ra9ckf: var(--qur4wk); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4w .sn-token-provider) { --s-1lvtc5s: var(--s-1wqrqu1); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4v .sn-token-provider) { --s-1fxq8uw: var(--xezflb); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4u .sn-token-provider) { --mk27rg: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4t .sn-token-provider) { --iej9k0: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4s .sn-token-provider) { --s-1el5pnx: var(--s-18kec2e); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4r .sn-token-provider) { --j83dgh: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4q .sn-token-provider) { --t7vp8b: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4p .sn-token-provider) { --s-1yrk3vz: #1A1D24; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4o .sn-token-provider) { --s-101vikx: #1A1D24; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4n .sn-token-provider) { --s-1o0402k: #1A1D24; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4m .sn-token-provider) { --fo9n0e: #1F222A; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4l .sn-token-provider) { --na4b0: #1A1D24; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4k .sn-token-provider) { --h1d6sm: var(--s-1cse5ne); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4j .sn-token-provider) { --b5cwa3: var(--s-1cse5ne); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4i .sn-token-provider) { --s-1imaqek: var(--s-1bufwl7); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4h .sn-token-provider) { --a3x65d: var(--s-1cse5ne); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4g .sn-token-provider) { --b9hxag: var(--s-1cse5ne); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4f .sn-token-provider) { --vhdxbj: rgba(14, 14, 17, 0.70); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4e .sn-token-provider) { --s-1gcag1j: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4d .sn-token-provider) { --rwuntm: var(--s-12i04c6); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4c .sn-token-provider) { --s-26otc5: var(--xezflb); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4b .sn-token-provider) { --s-1uno9qw: var(--qur4wk); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4a .sn-token-provider) { --s-1ro84tt: var(--s-1wqrqu1); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t49 .sn-token-provider) { --s-1bl55az: var(--xezflb); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t48 .sn-token-provider) { --s-1atggud: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t47 .sn-token-provider) { --s-1h562rb: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t46 .sn-token-provider) { --z8xcy8: var(--s-18kec2e); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t45 .sn-token-provider) { --kdhpu6: var(--s-1wcl7eu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t44 .sn-token-provider) { --sqlr6i: var(--rabas5); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t43 .sn-token-provider) { --s-18e25ap: #272C34; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t42 .sn-token-provider) { --s-7pygdp: #272C34; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t41 .sn-token-provider) { --weyxgf: #2b3039; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t40 .sn-token-provider) { --s-3jnt9s: var(--s-93efxq); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3z .sn-token-provider) { --s-1tx6f72: #272C34; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3y .sn-token-provider) { --s-1ix7rw5: var(--s-1cse5ne); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3x .sn-token-provider) { --s-19tfn92: var(--s-1cse5ne); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3w .sn-token-provider) { --ap7yxo: var(--s-1bufwl7); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3v .sn-token-provider) { --a3mm9l: var(--pxxzc2); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3u .sn-token-provider) { --s-1dmrmhe: var(--s-1cse5ne); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3t .sn-token-provider) { --s-1ooljr6: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3s .sn-token-provider) { --s-9kzl0n: var(--s-1wcl7eu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3r .sn-token-provider) { --w4v2cn: var(--s-1wcl7eu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3q .sn-token-provider) { --s-1w2vo9a: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3p .sn-token-provider) { --s-167c19b: var(--s-1sb5ew7); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3o .sn-token-provider) { --pa7y77: var(--s-1sb5ew7); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3n .sn-token-provider) { --s-1chno6l: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3m .sn-token-provider) { --s-17f0wjv: var(--s-13fpnzu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3l .sn-token-provider) { --p12tfc: var(--s-13fpnzu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3k .sn-token-provider) { --s-13ysq3h: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3j .sn-token-provider) { --s-1v3wjy3: var(--qur4wk); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3i .sn-token-provider) { --cpa592: var(--qur4wk); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3h .sn-token-provider) { --gt7jkl: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3g .sn-token-provider) { --s-1cmxa00: var(--fwpb7v); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3f .sn-token-provider) { --rzk3ci: var(--fwpb7v); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3e .sn-token-provider) { --rqmeo: var(--s-1goxmia); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3d .sn-token-provider) { --s-1pq6t4d: var(--s-1wcl7eu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3c .sn-token-provider) { --s-119ha8u: var(--s-1wcl7eu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3b .sn-token-provider) { --s-1yo6vi7: var(--vl1nzb); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3a .sn-token-provider) { --wusixi: var(--s-1sb5ew7); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t39 .sn-token-provider) { --mlkka7: var(--s-1sb5ew7); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t38 .sn-token-provider) { --s-85yq0f: var(--s-1c4q5x9); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t37 .sn-token-provider) { --s-1lupf45: var(--s-13fpnzu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t36 .sn-token-provider) { --v64pw2: var(--s-13fpnzu); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t35 .sn-token-provider) { --xp5jom: var(--x6k88j); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t34 .sn-token-provider) { --s-10ptxl3: var(--qur4wk); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t33 .sn-token-provider) { --g7pxfz: var(--qur4wk); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t32 .sn-token-provider) { --s-10zw0xa: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t31 .sn-token-provider) { --s-3vany0: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t30 .sn-token-provider) { --s-5c53au: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2z .sn-token-provider) { --s-1cgakjb: var(--gcpe8g); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2y .sn-token-provider) { --grnbe3: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2x .sn-token-provider) { --fi8iqe: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2w .sn-token-provider) { --y8yf59: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2v .sn-token-provider) { --s-16k0ws7: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2u .sn-token-provider) { --s-14iy1j5: var(--s-1mlpsia); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2t .sn-token-provider) { --s-1506n3b: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2s .sn-token-provider) { --s-1awzrs3: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2r .sn-token-provider) { --ijj1um: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2q .sn-token-provider) { --s-6lb1m9: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2p .sn-token-provider) { --emps96: var(--irwp3a); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2o .sn-token-provider) { --i6no11: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2n .sn-token-provider) { --s-2ud7a5: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2m .sn-token-provider) { --xdzmqz: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2l .sn-token-provider) { --s-1em1b3p: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2k .sn-token-provider) { --s-1nf37i0: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2j .sn-token-provider) { --u408xn: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2i .sn-token-provider) { --s-1f72vps: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2h .sn-token-provider) { --ussb62: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2g .sn-token-provider) { --s-9ixrzj: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2f .sn-token-provider) { --k3znv5: var(--gcpe8g); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2e .sn-token-provider) { --fh4kb7: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2d .sn-token-provider) { --s-1ptcvru: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2c .sn-token-provider) { --s-15s370g: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2b .sn-token-provider) { --yadu9a: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t2a .sn-token-provider) { --efkcvi: var(--s-1mlpsia); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t29 .sn-token-provider) { --vgfwzs: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t28 .sn-token-provider) { --s-1uc69hl: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t27 .sn-token-provider) { --s-1hnrwy0: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t26 .sn-token-provider) { --kxut99: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t25 .sn-token-provider) { --auhwvw: var(--irwp3a); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t24 .sn-token-provider) { --bkw71o: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t23 .sn-token-provider) { --s-1ljhfqg: var(--s-150t4y0); } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t22 .sn-token-provider) { --s-6tslt6: #efecfd; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t21 .sn-token-provider) { --m9v2p1: #d1c8fc; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t20 .sn-token-provider) { --ncfn5d: #b1a7fd; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1z .sn-token-provider) { --s-1byarzj: #9289fe; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1y .sn-token-provider) { --s-1gs812x: #746cff; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1x .sn-token-provider) { --s-1g993bp: #5f4cfe; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1w .sn-token-provider) { --s-77p0ap: #581bf7; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1v .sn-token-provider) { --kpu0rx: #5017b7; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1u .sn-token-provider) { --s-4ua9sj: #3c147c; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1t .sn-token-provider) { --xn3nti: #2f105f; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1s .sn-token-provider) { --s-1e4e5yb: #270e50; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1r .sn-token-provider) { --s-19yeeb5: #1e0a3f; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1q .sn-token-provider) { --s-1a27m15: #fee9ed; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1p .sn-token-provider) { --y5brny: #fabfc9; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1o .sn-token-provider) { --k8omw2: #f796a3; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1n .sn-token-provider) { --s-1tkjqxq: #f46b7d; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1m .sn-token-provider) { --s-1699l1i: #f23154; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1l .sn-token-provider) { --s-1x2w0ad: #cc2748; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1k .sn-token-provider) { --s-1j48m2e: #a81d40; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1j .sn-token-provider) { --s-139vtj2: #851338; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1i .sn-token-provider) { --s-1hym9f8: #61092d; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1h .sn-token-provider) { --thdnxa: #4d0425; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1g .sn-token-provider) { --ju7gef: #420320; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1f .sn-token-provider) { --s-1j9nj2a: #35021a; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1e .sn-token-provider) { --s-1l0bey: #ffeea4; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1d .sn-token-provider) { --s-11bkk70: #ffc46b; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1c .sn-token-provider) { --p29xy3: #ff9926; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1b .sn-token-provider) { --s-1vd352i: #f27400; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t1a .sn-token-provider) { --s-1wqvxkn: #dc5600; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t19 .sn-token-provider) { --s-1h5h4i8: #c13e00; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t18 .sn-token-provider) { --s-1jeagou: #a22d00; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t17 .sn-token-provider) { --cqcj42: #822000; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t16 .sn-token-provider) { --s-1hoqph8: #5f1400; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t15 .sn-token-provider) { --bob928: #4b0e00; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t14 .sn-token-provider) { --s-1xrhu1e: #400a00; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t13 .sn-token-provider) { --un6z83: #330700; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t12 .sn-token-provider) { --s-1kfm9w9: #c2fdbd; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t11 .sn-token-provider) { --s-1jp1jtr: #5eea42; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t10 .sn-token-provider) { --qmu87p: #4bca2e; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tz .sn-token-provider) { --tj7m7p: #3eae20; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .ty .sn-token-provider) { --s-1ybyqq0: #369318; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tx .sn-token-provider) { --ud9v4s: #317a14; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tw .sn-token-provider) { --wzt0xb: #2d6312; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tv .sn-token-provider) { --rdgxej: #284d10; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tu .sn-token-provider) { --vzilst: #20360c; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tt .sn-token-provider) { --s-1enwaw2: #192909; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .ts .sn-token-provider) { --s-13u8evc: #152207; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tr .sn-token-provider) { --s-1n358gv: #101a05; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tq .sn-token-provider) { --cg1fif: #b9f9fb; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tp .sn-token-provider) { --zz8bwd: #79dbf9; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .to .sn-token-provider) { --l3wql6: #4abcf9; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tn .sn-token-provider) { --ox8qy0: #2b9df6; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tm .sn-token-provider) { --s-44ejkg: #2280eb; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tl .sn-token-provider) { --s-1dvtgb3: #1c66d8; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tk .sn-token-provider) { --s-3plt0g: #1650bc; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tj .sn-token-provider) { --s-11hld74: #0f3d99; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .ti .sn-token-provider) { --s-122h4w1: #092a70; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .th .sn-token-provider) { --s-15it1zq: #062059; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tg .sn-token-provider) { --s-113cn9s: #051a4c; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tf .sn-token-provider) { --s-1saqgrn: #03143d; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .te .sn-token-provider) { --s-1g0op6u: #eceef1; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .td .sn-token-provider) { --s-1laneaf: #c9ced8; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tc .sn-token-provider) { --s-7jkknb: #a9b2c2; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .tb .sn-token-provider) { --s-1pb1mtr: #8c99ad; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .ta .sn-token-provider) { --s-1pxwv0i: #768193; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t9 .sn-token-provider) { --s-1o3jjcm: #636c7b; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t8 .sn-token-provider) { --iipu4s: #505865; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t7 .sn-token-provider) { --s-1hy7tmi: #3e444f; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t6 .sn-token-provider) { --s-5yvseh: #2b3039; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t5 .sn-token-provider) { --gzyrnk: #21252c; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t4 .sn-token-provider) { --s-1waqd3w: #1b1e25; } #​#​#​#​#​#​#​#​#​#​ .as34i.as34i.as34i.as34i.as34i.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as34i .sn-token-provider:not(.as34i .t3 .sn-token-provider) { --irr6mc: #14171d; } #​#​#​#​#​#​#​#​#​#​ .as34f:hover { color: var(--s-1080nl5); } #​#​#​#​#​#​#​#​#​#​ .as3d { width: var(--s-1ypfxob);--s3-flex-x: 0 0 auto; } #​#​#​#​#​#​#​#​#​#​ .as347 > *, #​#​#​#​#​#​#​#​#​#​ .as347::before, #​#​#​#​#​#​#​#​#​#​ .as347::after { --s3-row-gap: var(--s-19ca524);--s3-column-gap: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as347 { gap: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as3i { fill: white; } #​#​#​#​#​#​#​#​#​#​ .as32x { color: text.subdued; } #​#​#​#​#​#​#​#​#​#​ .as32z { color: var(--u261m5); } #​#​#​#​#​#​#​#​#​#​ .as31.as31.as31.as31.as31.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as31 .sn-token-provider:not(.as31 .t1 .sn-token-provider) { --s-1nid6f6: var(--sail-color-text-link-hover); } #​#​#​#​#​#​#​#​#​#​ .as31.as31.as31.as31.as31.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as31 .sn-token-provider:not(.as31 .t0 .sn-token-provider) { --u261m5: var(--sail-color-text-link); } #​#​#​#​#​#​#​#​#​#​ .as32v { width: var(--g0nwl4);--s3-flex-x: 1 1 auto; } #​#​#​#​#​#​#​#​#​#​ .as3f > *, #​#​#​#​#​#​#​#​#​#​ .as3f::before, #​#​#​#​#​#​#​#​#​#​ .as3f::after { --s3-padding-top-ref: var(--s-1rshfls);--s3-padding-right-ref: var(--s-1rshfls);--s3-padding-bottom-ref: var(--s-1rshfls);--s3-padding-left-ref: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as3f { padding: var(--s-1rshfls);--s3-padding-top: var(--s-1rshfls);--s3-padding-right: var(--s-1rshfls);--s3-padding-bottom: var(--s-1rshfls);--s3-padding-left: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as31x { fill: inherit; } #​#​#​#​#​#​#​#​#​#​ .as3e > * { --s3-flex-basis-y: 0; } #​#​#​#​#​#​#​#​#​#​ .as3e { height: var(--s-1ypfxob);--s3-flex-y: 0 0 auto;--s3-object-height: var(--s-1ypfxob); } #​#​#​#​#​#​#​#​#​#​ .as32j { color: var(--s-1o9ezto); } #​#​#​#​#​#​#​#​#​#​ .as319 > *, #​#​#​#​#​#​#​#​#​#​ .as319::before, #​#​#​#​#​#​#​#​#​#​ .as319::after { --s3-row-gap: var(--s-1ctvgo1);--s3-column-gap: var(--s-1ctvgo1); } #​#​#​#​#​#​#​#​#​#​ .as319 { gap: var(--s-1ctvgo1); } #​#​#​#​#​#​#​#​#​#​ .as310 { width: var(--s-1w53n9t);--s3-flex-x: 0 1 auto; } #​#​#​#​#​#​#​#​#​#​ .as33s { color: var(--s-1mlpsia); } #​#​#​#​#​#​#​#​#​#​ .as320 > * { --s3-flex-basis-y: auto; } #​#​#​#​#​#​#​#​#​#​ .as320 { height: var(--g0nwl4);--s3-flex-y: 1 1 auto;--s3-object-height: ; } #​#​#​#​#​#​#​#​#​#​ .as3n:focus { overflow: visible; } #​#​#​#​#​#​#​#​#​#​ .as31l:hover:not(:active):not([aria-disabled="true"]) { fill: var(--s-1506n3b); } #​#​#​#​#​#​#​#​#​#​ .as31t { border: none; } #​#​#​#​#​#​#​#​#​#​ .as35r { width: var(--s-1gn97fj);--s3-flex-x: 0 0 auto; } #​#​#​#​#​#​#​#​#​#​ .as31d { fill: var(--s-1awzrs3); } #​#​#​#​#​#​#​#​#​#​ .as33j { margin: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as3b { overflow: hidden; } #​#​#​#​#​#​#​#​#​#​ .as31q:active:not([aria-disabled="true"]) { fill: var(--s-14iy1j5); } #​#​#​#​#​#​#​#​#​#​ .as33p > *, #​#​#​#​#​#​#​#​#​#​ .as33p::before, #​#​#​#​#​#​#​#​#​#​ .as33p::after { --s3-padding-top-ref: var(--spiyys);--s3-padding-right-ref: var(--spiyys);--s3-padding-bottom-ref: var(--spiyys);--s3-padding-left-ref: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as33p { padding: var(--spiyys);--s3-padding-top: var(--spiyys);--s3-padding-right: var(--spiyys);--s3-padding-bottom: var(--spiyys);--s3-padding-left: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as343:hover { color: var(--s-1nid6f6); } #​#​#​#​#​#​#​#​#​#​ .as333:hover { color: var(--u261m5); } #​#​#​#​#​#​#​#​#​#​ .as33c:hover { fill: var(--s-1wl2tbl); } #​#​#​#​#​#​#​#​#​#​ .as33x { cursor: zoom-in; } #​#​#​#​#​#​#​#​#​#​ .as35y > *, #​#​#​#​#​#​#​#​#​#​ .as35y::before, #​#​#​#​#​#​#​#​#​#​ .as35y::after { --s3-row-gap: var(--s-1rshfls);--s3-column-gap: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as35y { gap: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as32m { width: 8px;--s3-flex-x: 0 0 auto; } #​#​#​#​#​#​#​#​#​#​ .as33u > * { --s3-flex-basis-y: auto; } #​#​#​#​#​#​#​#​#​#​ .as33u { height: auto;--s3-flex-y: 1 0 var(--s3-flex-basis-y);--s3-object-height: ; } #​#​#​#​#​#​#​#​#​#​ .as3z > * { --s3-flex-basis-y: auto; } #​#​#​#​#​#​#​#​#​#​ .as3z { height: var(--s-1w53n9t);--s3-flex-y: 0 1 auto;--s3-object-height: ; } #​#​#​#​#​#​#​#​#​#​ .as3c { clip: rect(1px, 1px, 1px, 1px); } #​#​#​#​#​#​#​#​#​#​ .as34u { border: 1px solid; } #​#​#​#​#​#​#​#​#​#​ .as32l > * { --s3-flex-basis-y: 0; } #​#​#​#​#​#​#​#​#​#​ .as32l { height: 8px;--s3-flex-y: 0 0 auto;--s3-object-height: 8px; } #​#​#​#​#​#​#​#​#​#​ .as34p { fill: var(--s-1wl2tbl); } #​#​#​#​#​#​#​#​#​#​ .as32k { fill: var(--n42f6j); } #​#​#​#​#​#​#​#​#​#​ .as37 { position: absolute; } #​#​#​#​#​#​#​#​#​#​ .as35n > * { --s3-flex-basis-y: 0; } #​#​#​#​#​#​#​#​#​#​ .as35n { height: 312px;--s3-flex-y: 0 0 auto;--s3-object-height: 312px; } #​#​#​#​#​#​#​#​#​#​ .as329 { width: var(--sidebar-width);--s3-flex-x: 0 0 auto; } #​#​#​#​#​#​#​#​#​#​ .as331 { fill: var(--s-1geebyf); } #​#​#​#​#​#​#​#​#​#​ .as31z { width: 12px;--s3-flex-x: 0 0 auto; } #​#​#​#​#​#​#​#​#​#​ .as3l:focus > * { --s3-flex-basis-y: auto; } #​#​#​#​#​#​#​#​#​#​ .as3l:focus { height: auto;--s3-flex-y: 1 0 var(--s3-flex-basis-y);--s3-object-height: ; } #​#​#​#​#​#​#​#​#​#​ .as34g:hover { fill: var(--kmaejg); } @media (max-width: 800px) { #​#​#​#​#​#​#​#​#​#​ .as33h.as33h.as33h.as33h.as33h.sn-token-provider, #​#​#​#​#​#​#​#​#​#​ .as33h .sn-token-provider:not(.as33h .t2 .sn-token-provider) { --xrzhif: 24px; } } #​#​#​#​#​#​#​#​#​#​ .as3h { color: white; } #​#​#​#​#​#​#​#​#​#​ .as3a { z-index: 9999; } #​#​#​#​#​#​#​#​#​#​ .as350 { overflow-x: auto; } #​#​#​#​#​#​#​#​#​#​ .as31g:hover:not(:active):not([aria-disabled="true"]) { background-color: var(--fo9n0e); } #​#​#​#​#​#​#​#​#​#​ .as32g { font-weight: weight.normal; } @media (max-width: 800px) { #​#​#​#​#​#​#​#​#​#​ .as353 { margin-left: var(--w6gdcy); } } #​#​#​#​#​#​#​#​#​#​ .as31n:active:not([aria-disabled="true"]) { background-color: var(--s-1o0402k); } #​#​#​#​#​#​#​#​#​#​ .as35c { background-color: transparent; } #​#​#​#​#​#​#​#​#​#​ .as360 { margin-top: var(--s-1ctvgo1); } #​#​#​#​#​#​#​#​#​#​ .as34c > *, #​#​#​#​#​#​#​#​#​#​ .as34c::before, #​#​#​#​#​#​#​#​#​#​ .as34c::after { --s3-padding-top-ref: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as34c { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as32a > *, #​#​#​#​#​#​#​#​#​#​ .as32a::before, #​#​#​#​#​#​#​#​#​#​ .as32a::after { --s3-padding-right-ref: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as32a { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-right: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as35 > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as35 { font-size: inherit; } #​#​#​#​#​#​#​#​#​#​ .as31s { margin-left: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as3w { transition-property: background-color, box-shadow; } #​#​#​#​#​#​#​#​#​#​ .as32f > *, #​#​#​#​#​#​#​#​#​#​ .as32f::before, #​#​#​#​#​#​#​#​#​#​ .as32f::after { --s3-line-height-ref: 20px; } #​#​#​#​#​#​#​#​#​#​ .as32f > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as32f { --s3-line-height: 20px;line-height: 20px; } #​#​#​#​#​#​#​#​#​#​ .as35o { margin-top: var(--xrzhif); } #​#​#​#​#​#​#​#​#​#​ .as34d { font-weight: var(--s-1ea70s8); } #​#​#​#​#​#​#​#​#​#​ .as35g { font-weight: 500; } #​#​#​#​#​#​#​#​#​#​ .as357 { table-layout: auto; } #​#​#​#​#​#​#​#​#​#​ .as361 { margin-bottom: var(--s-1ctvgo1); } #​#​#​#​#​#​#​#​#​#​ .as332:hover { border-color: var(--s-1dmrmhe); } #​#​#​#​#​#​#​#​#​#​ .as35x > *, #​#​#​#​#​#​#​#​#​#​ .as35x::before, #​#​#​#​#​#​#​#​#​#​ .as35x::after { --s3-padding-bottom-ref: var(--s-1gn97fj); } #​#​#​#​#​#​#​#​#​#​ .as35x { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-bottom: var(--s-1gn97fj); } #​#​#​#​#​#​#​#​#​#​ .as32o { background-color: var(--s-1skr90y); } #​#​#​#​#​#​#​#​#​#​ .as33g > *, #​#​#​#​#​#​#​#​#​#​ .as33g::before, #​#​#​#​#​#​#​#​#​#​ .as33g::after { --s3-padding-right-ref: var(--xrzhif); } #​#​#​#​#​#​#​#​#​#​ .as33g { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-right: var(--xrzhif); } #​#​#​#​#​#​#​#​#​#​ .as330 { border-color: var(--s-1dmrmhe); } #​#​#​#​#​#​#​#​#​#​ .as32r > *, #​#​#​#​#​#​#​#​#​#​ .as32r::before, #​#​#​#​#​#​#​#​#​#​ .as32r::after { --s3-padding-left-ref: 1px; } #​#​#​#​#​#​#​#​#​#​ .as32r { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-left: 1px; } #​#​#​#​#​#​#​#​#​#​ .as32t { margin-top: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as32u { margin-bottom: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as311:hover { transition-duration: var(--qsw4dc); } #​#​#​#​#​#​#​#​#​#​ .as33v { max-width: var(--g0nwl4); } @media (max-width: 800px) { #​#​#​#​#​#​#​#​#​#​ .as355 { margin-top: auto; } } #​#​#​#​#​#​#​#​#​#​ .as3u { z-index: 0; } #​#​#​#​#​#​#​#​#​#​ .as34l:hover { border-color: #615f8b; } #​#​#​#​#​#​#​#​#​#​ .as33t { border-radius: var(--dy3an6); } @media (max-width: 800px) { #​#​#​#​#​#​#​#​#​#​ .as356 { margin-bottom: auto; } } #​#​#​#​#​#​#​#​#​#​ .as32i > *, #​#​#​#​#​#​#​#​#​#​ .as32i::before, #​#​#​#​#​#​#​#​#​#​ .as32i::after { --s3-padding-left-ref: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as32i { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-left: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as32c > *, #​#​#​#​#​#​#​#​#​#​ .as32c::before, #​#​#​#​#​#​#​#​#​#​ .as32c::after { --s3-padding-bottom-ref: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as32c { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-bottom: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as35p { margin-bottom: var(--s-1tomqhb); } #​#​#​#​#​#​#​#​#​#​ .as31b { background-color: container; } @media (max-width: 800px) { #​#​#​#​#​#​#​#​#​#​ .as352 { max-width: var(--s-1w53n9t); } } #​#​#​#​#​#​#​#​#​#​ .as359 { border-spacing: 0; } #​#​#​#​#​#​#​#​#​#​ .as3s { white-space: nowrap; } #​#​#​#​#​#​#​#​#​#​ .as35t { transition-property: opacity, transform; } #​#​#​#​#​#​#​#​#​#​ .as31a { border-color: var(--s-1tx6f72); } #​#​#​#​#​#​#​#​#​#​ .as35d { vertical-align: bottom; } #​#​#​#​#​#​#​#​#​#​ .as34e:hover { border-color: var(--s-3jnt9s); } #​#​#​#​#​#​#​#​#​#​ .as3v { border-radius: var(--luz9yx); } #​#​#​#​#​#​#​#​#​#​ .as339 { margin-right: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as35a:not(:first-child) { margin-top: 20px; } #​#​#​#​#​#​#​#​#​#​ .as338 { margin-top: var(--s-1rshfls); } #​#​#​#​#​#​#​#​#​#​ .as35b { max-width: calc(100% - 2px); } #​#​#​#​#​#​#​#​#​#​ .as349 { margin-bottom: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as348 { margin-top: var(--s-1yc4hzg); } #​#​#​#​#​#​#​#​#​#​ .as34 { text-decoration: none; } #​#​#​#​#​#​#​#​#​#​ .as32d { overflow-y: auto; } #​#​#​#​#​#​#​#​#​#​ .as35j { border-color: var(--gzyrnk); } #​#​#​#​#​#​#​#​#​#​ .as316 > *, #​#​#​#​#​#​#​#​#​#​ .as316::before, #​#​#​#​#​#​#​#​#​#​ .as316::after { --s3-padding-right-ref: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as316 { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-right: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as35h > *, #​#​#​#​#​#​#​#​#​#​ .as35h::before, #​#​#​#​#​#​#​#​#​#​ .as35h::after { --s3-font-size-ref: 13px; } #​#​#​#​#​#​#​#​#​#​ .as35h > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as35h { --s3-font-size: 13px;font-size: 13px; } #​#​#​#​#​#​#​#​#​#​ .as34y > *, #​#​#​#​#​#​#​#​#​#​ .as34y::before, #​#​#​#​#​#​#​#​#​#​ .as34y::after { --s3-padding-right-ref: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as34y { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-right: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as32w { text-transform: uppercase; } #​#​#​#​#​#​#​#​#​#​ .as32y { font-weight: 700; } #​#​#​#​#​#​#​#​#​#​ .as34r > *, #​#​#​#​#​#​#​#​#​#​ .as34r::before, #​#​#​#​#​#​#​#​#​#​ .as34r::after { --s3-font-size-ref: 0.9em; } #​#​#​#​#​#​#​#​#​#​ .as34r > * { --s3-font-metrics-multiplier: 1; } #​#​#​#​#​#​#​#​#​#​ .as34r { --s3-font-size: 0.9em;font-size: 0.9em; } #​#​#​#​#​#​#​#​#​#​ .as322 { border-style: var(--fouhz); } @media (max-width: 800px) { #​#​#​#​#​#​#​#​#​#​ .as354 { margin-right: var(--w6gdcy); } } #​#​#​#​#​#​#​#​#​#​ .as3j { border-radius: var(--s-14pvypn); } #​#​#​#​#​#​#​#​#​#​ .as34w > *, #​#​#​#​#​#​#​#​#​#​ .as34w::before, #​#​#​#​#​#​#​#​#​#​ .as34w::after { --s3-padding-bottom-ref: var(--s-15zabbl); } #​#​#​#​#​#​#​#​#​#​ .as34w { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-bottom: var(--s-15zabbl); } #​#​#​#​#​#​#​#​#​#​ .as33f > *, #​#​#​#​#​#​#​#​#​#​ .as33f::before, #​#​#​#​#​#​#​#​#​#​ .as33f::after { --s3-padding-left-ref: var(--xrzhif); } #​#​#​#​#​#​#​#​#​#​ .as33f { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-left: var(--xrzhif); } #​#​#​#​#​#​#​#​#​#​ .as34b { margin-top: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as34o { margin-bottom: var(--s-15zabbl); } #​#​#​#​#​#​#​#​#​#​ .as33z { font-weight: medium; } #​#​#​#​#​#​#​#​#​#​ .as3x { transition-duration: var(--fuumy1); } #​#​#​#​#​#​#​#​#​#​ .as33e > *, #​#​#​#​#​#​#​#​#​#​ .as33e::before, #​#​#​#​#​#​#​#​#​#​ .as33e::after { --s3-padding-bottom-ref: var(--s-1tomqhb); } #​#​#​#​#​#​#​#​#​#​ .as33e { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-bottom: var(--s-1tomqhb); } #​#​#​#​#​#​#​#​#​#​ .as318 > *, #​#​#​#​#​#​#​#​#​#​ .as318::before, #​#​#​#​#​#​#​#​#​#​ .as318::after { --s3-padding-bottom-ref: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as318 { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-bottom: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as3g { background-color: var(--s-1laneaf); } #​#​#​#​#​#​#​#​#​#​ .as31o:active:not([aria-disabled="true"]) { border-color: var(--weyxgf); } #​#​#​#​#​#​#​#​#​#​ .as314 { min-height: var(--s-1p3z7u); } #​#​#​#​#​#​#​#​#​#​ .as342:hover { border-color: var(--a3mm9l); } #​#​#​#​#​#​#​#​#​#​ .as33n { margin-left: calc(-1 * var(--spiyys)); } #​#​#​#​#​#​#​#​#​#​ .as324 > *, #​#​#​#​#​#​#​#​#​#​ .as324::before, #​#​#​#​#​#​#​#​#​#​ .as324::after { --s3-padding-bottom-ref: 0px; } #​#​#​#​#​#​#​#​#​#​ .as324 { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-bottom: 0px; } #​#​#​#​#​#​#​#​#​#​ .as368 { border-left: 1px solid; } #​#​#​#​#​#​#​#​#​#​ .as34s { font-family: var(--sail-font-family-monospace); } #​#​#​#​#​#​#​#​#​#​ .as33o { margin-right: calc(-1 * var(--spiyys)); } #​#​#​#​#​#​#​#​#​#​ .as31u { margin-top: calc(((calc((calc(var(--s3-font-size-ref) * var(--s3-ascender-ref)) + calc(var(--s3-font-size-ref) * var(--s3-descender-ref)) + var(--s3-line-height-ref)) / 2) - var(--s3-object-height, calc((calc(var(--s3-font-size) * var(--s3-ascender)) + calc(var(--s3-font-size) * var(--s3-descender)) + var(--s3-line-height)) / 2))) - var(--s3-padding-top) - 0.5px) * var(--s3-baseline-multiplier) * var(--s3-font-metrics-multiplier) * clamp(0, 10000 * var(--s3-ascender-ref), 1)); } #​#​#​#​#​#​#​#​#​#​ .as31v { margin-bottom: max(0, calc((var(--s3-line-height-ref) - var(--s3-line-height) - (calc((calc(var(--s3-font-size-ref) * var(--s3-ascender-ref)) + calc(var(--s3-font-size-ref) * var(--s3-descender-ref)) + var(--s3-line-height-ref)) / 2) - var(--s3-object-height, calc((calc(var(--s3-font-size) * var(--s3-ascender)) + calc(var(--s3-font-size) * var(--s3-descender)) + var(--s3-line-height)) / 2))) - var(--s3-padding-bottom)) * var(--s3-baseline-multiplier) * var(--s3-font-metrics-multiplier) * clamp(0, 10000 * var(--s3-ascender-ref), 1))); } #​#​#​#​#​#​#​#​#​#​ .as33m > *, #​#​#​#​#​#​#​#​#​#​ .as33m::before, #​#​#​#​#​#​#​#​#​#​ .as33m::after { --s3-padding-top-ref: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as33m { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: var(--spiyys); } #​#​#​#​#​#​#​#​#​#​ .as317 > *, #​#​#​#​#​#​#​#​#​#​ .as317::before, #​#​#​#​#​#​#​#​#​#​ .as317::after { --s3-padding-top-ref: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as317 { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as358 { border-collapse: separate; } #​#​#​#​#​#​#​#​#​#​ .as315 > *, #​#​#​#​#​#​#​#​#​#​ .as315::before, #​#​#​#​#​#​#​#​#​#​ .as315::after { --s3-padding-left-ref: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as315 { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-left: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as366 > *, #​#​#​#​#​#​#​#​#​#​ .as366::before, #​#​#​#​#​#​#​#​#​#​ .as366::after { --s3-padding-left-ref: 16px; } #​#​#​#​#​#​#​#​#​#​ .as366 { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-left: 16px; } #​#​#​#​#​#​#​#​#​#​ .as34k { background-color: #151C3E; } #​#​#​#​#​#​#​#​#​#​ .as35v { transform-origin: 50% 50%; } #​#​#​#​#​#​#​#​#​#​ .as31j:hover:not(:active):not([aria-disabled="true"]) { border-color: var(--s-3jnt9s); } #​#​#​#​#​#​#​#​#​#​ .as34z > *, #​#​#​#​#​#​#​#​#​#​ .as34z::before, #​#​#​#​#​#​#​#​#​#​ .as34z::after { --s3-padding-bottom-ref: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as34z { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-bottom: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as32b > *, #​#​#​#​#​#​#​#​#​#​ .as32b::before, #​#​#​#​#​#​#​#​#​#​ .as32b::after { --s3-padding-top-ref: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as32b { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: var(--s-11meud8); } #​#​#​#​#​#​#​#​#​#​ .as362 > *, #​#​#​#​#​#​#​#​#​#​ .as362::before, #​#​#​#​#​#​#​#​#​#​ .as362::after { --s3-padding-right-ref: 0px; } #​#​#​#​#​#​#​#​#​#​ .as362 { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-right: 0px; } #​#​#​#​#​#​#​#​#​#​ .as33d > *, #​#​#​#​#​#​#​#​#​#​ .as33d::before, #​#​#​#​#​#​#​#​#​#​ .as33d::after { --s3-padding-top-ref: var(--s-1tomqhb); } #​#​#​#​#​#​#​#​#​#​ .as33d { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: var(--s-1tomqhb); } #​#​#​#​#​#​#​#​#​#​ .as34t { background-color: var(--s-12lj6ll); } #​#​#​#​#​#​#​#​#​#​ .as36 { font-weight: inherit; } #​#​#​#​#​#​#​#​#​#​ .as34v > *, #​#​#​#​#​#​#​#​#​#​ .as34v::before, #​#​#​#​#​#​#​#​#​#​ .as34v::after { --s3-padding-top-ref: var(--s-15zabbl); } #​#​#​#​#​#​#​#​#​#​ .as34v { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: var(--s-15zabbl); } #​#​#​#​#​#​#​#​#​#​ .as35w > *, #​#​#​#​#​#​#​#​#​#​ .as35w::before, #​#​#​#​#​#​#​#​#​#​ .as35w::after { --s3-padding-top-ref: var(--s-1gn97fj); } #​#​#​#​#​#​#​#​#​#​ .as35w { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: var(--s-1gn97fj); } #​#​#​#​#​#​#​#​#​#​ .as341 { border-radius: var(--bt1rux); } #​#​#​#​#​#​#​#​#​#​ .as323 { border-color: var(--s-1skr90y); } #​#​#​#​#​#​#​#​#​#​ .as34x > *, #​#​#​#​#​#​#​#​#​#​ .as34x::before, #​#​#​#​#​#​#​#​#​#​ .as34x::after { --s3-padding-left-ref: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as34x { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-left: var(--s-19ca524); } #​#​#​#​#​#​#​#​#​#​ .as32s > *, #​#​#​#​#​#​#​#​#​#​ .as32s::before, #​#​#​#​#​#​#​#​#​#​ .as32s::after { --s3-padding-top-ref: 1px; } #​#​#​#​#​#​#​#​#​#​ .as32s { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-top: 1px; } #​#​#​#​#​#​#​#​#​#​ .as365 { margin-left: 1px; } #​#​#​#​#​#​#​#​#​#​ .as34a { border-color: var(--s-1hy7tmi); } #​#​#​#​#​#​#​#​#​#​ .as33r { text-align: center; } #​#​#​#​#​#​#​#​#​#​ .as34n { margin-top: var(--s-15zabbl); } #​#​#​#​#​#​#​#​#​#​ .as33w { max-height: var(--g0nwl4); } #​#​#​#​#​#​#​#​#​#​ .as30 { background-color: var(--s-11qhdid); } #​#​#​#​#​#​#​#​#​#​ .as35e { text-align: left; } #​#​#​#​#​#​#​#​#​#​ .as328 { min-width: var(--w6gdcy); } #​#​#​#​#​#​#​#​#​#​ .as364 > *, #​#​#​#​#​#​#​#​#​#​ .as364::before, #​#​#​#​#​#​#​#​#​#​ .as364::after { --s3-padding-right-ref: 4px; } #​#​#​#​#​#​#​#​#​#​ .as364 { padding: var(--s3-padding-top) var(--s3-padding-right) var(--s3-padding-bottom) var(--s3-padding-left);--s3-padding-right: 4px; } #​#​#​#​#​#​#​#​#​#​ .as367 { border-left-color: var(--s-1iay420); } #​#​#​#​#​#​#​#​#​#​ .as35l:first-child { border-left-width: var(--he5dgk); } #​#​#​#​#​#​#​#​#​#​ .as35u { transition-timing-function: ease; } #​#​#​#​#​#​#​#​#​#​ .as35k { border-bottom-width: var(--he5dgk); } #​#​#​#​#​#​#​#​#​#​ .as346 { border-left-style: var(--fouhz); } #​#​#​#​#​#​#​#​#​#​ .as321 { border-right-width: var(--he5dgk); } #​#​#​#​#​#​#​#​#​#​ .as345 { border-left-width: var(--s-1bf5356); } #​#​#​#​#​#​#​#​#​#​ .as3y { transition-timing-function: var(--s-1v2483h); } #​#​#​#​#​#​#​#​#​#​ .as35m:last-child { border-right-width: var(--he5dgk); } #​#​#​#​#​#​#​#​#​#​ .as335 { border-top-width: 1px; } .__sn-sheet-order { --order: 'a20yay2c8,a103cx5hn:2,a00bmeaac,a101onkw2o,a201x73dxx,a2013srv7f:2,a20o8q7l4,a10qaqzbh,a101qm9g0w,a101ojh389,a2010e8p8g,a10e8c2i8,a10nxht8,a101twiesn,a104tfj7f:2,a1040enfm:2,a2095zxwg,a10vydl29,a101yoxu2x,a204gaksm,a101q8pjb1,a10vfp95f:2,a1017ncrlb,a10apeln5,60017dmaa7:5,800cla09p,90018kkj7c:2,9001ysyao7:2,a201n8ash7,a101f9gxzh,a201imlo78,a201tlhfnv,a20156gw78,a208p67u5,a30j1xkc,a10nr7hxm:2,a106phain,a201giam32,a0011naxye,a001eweu54:9,a209lrwaz,a20fwyt4j:2,a2026hhif:2,a20e3uatd:2,a208zxmvw:2,a1061rcto:2,a201p524xi,a201loc8kv,a1014yzbdw,a10d5wzj0,a001pywtwc,a00109jcgk,a2010xuld9,a00p0nikl,a0016es8iz,a20l230i6,a101d3g7cd,a10b4vj5k,a00o6ss8f,a2011fwq17,a2096x0o5,a101642o7k,a10ecoufb,a0088jvmu,a20146ec0n,a10beqw7r,a20c0jkrg,a20c5yg01,a00174f58o,a104ew5og,a1012ruzb6:2,a10tohiy6,a109mcm4k:2,a306q86ku,a203u5x9v,a20srtmf8,a20bag3dc:2,600393gd8:4,a001ty1o4f:3,a1011rld2b,a20yutc0n,a10rsvhf,a2013afzi2:2,a20mn0vj0:2,a201kr0z7x:2,a201xbs9vq,a101pwrgo2:2,a2016dp4on:3,a20113v5b2,a00s4jpt8:9,a201jzpqkn:2,a105rd1b1,a10pd9hkt,a10oqtmb9:2,a10lywl2v,80014rakel,a201e26h52,a003fo9mr,a001rx495l,a201fvrfb4:2,a20u3tvlj:2,a201g5rdfk,a201gd55t,a103noxlj,a202hgpy4,a1029m30l,a202skar,a102dsuky,a201foqnvo,a10t9ii6m,a201bi909q,a10i10966,a1016boq6m,a30wzsbp6,a1016pobg3,a101dlrzsh,a201ugzttt,a201ugdwh4,a101bbbqd8:2,a101aftp4u,a10jenvbp,a20nb5h3s:2,a208qmu39:2,a206rntmx:2,a201f2mpzy:2,a10vy5q59,a001o9ae8p:9,a10dasmwx,a101nhytla:2,a001koagn4:9,a20covycv:2,a20agj3hu,a20bx8m2u,a10grhq17:2,a008ar7vt:9,a20w7yhn1,a108yce3x,a201ixleah,a10myitnl:2,a201gtala9,a20xko2ru,a10kkhv6f,a001l0npin,a2089mjtv,a001r4cw3w,a20s3og6r,a209ybvel,a10hqag66,a101r53v6p,a30d8h5sc,a301ss3w35,a101vrhe6a:2,a201wvw8vc,a201w5x5zv,a20uw2ytj,a207r71zc,a2012t5w1e:2,a20182xofv,a201s3x6xh,a101tpw0tk,a10vnc9mp,90010p1k6e:2,a101tau51i:206,a101al0k6e,a20gy5e6j,a201ipkd5k,a101kda336:2,a20w85etd,a207wy2wa,a10p9z7p2,a101cxetvo,a202ztne8:3,a20big3pb,a20o6ziww,a10o55quo,a20ozmo7v:2,a206kp2n0:2,a20tcejr6:2,a202ggk5j:2,a20la2xiq:2,a2010mly6l,800qjb4ge,a201mm3knq,a2011e23c0,a204046z,a201i3b61r,a201jtbt56,a2018xw74c,a20f4dqsh,a201mr4uhi,a201ugryp5,a201uyi949,a2011vv77o,a201pyxv02,a20yj4gxb,a101mn36cs,a20189skj,a202bzd8y:3,a101saucu6:2,a201yg4njl,a301rf121s,a3010qnnc5,a30nimnau,a10rado2q:2,a20174jyhz,a201l4otj3,a1012c8jk2:2,a10cugshk,a101p54oor,a201nnyth8,a301b4fulp,a20kc5alt,a20ri49mt:2,a201e1bnhk:2,a10kn9qql:2,a001pqz5z1:9,a2012m6p5l,a201bc6mr1,a20muuuub:2,a00py1sof:9,a20z6pwt5:2,a20up4kkf,a20gedw8f:2,a3010britu,a20bfib3y'; }</style> </head> <body > <div id="root"><div class="sn-12touxo sn-nw7ta8"><div class="⚙ ⚙"><div class="Shell Shell-loaded Sidebar--expanded sn-token-provider ⚙ t0 t1 as30 as31 ⚙1tpr5ff"><a href="#main-content" tabindex="1" class="⚙ rs30 rs31 as32 as33 as34 as35 as36 as37 as38 as39 as3a as3b as3c as3d as3e as3f as3g as3h as3i as3j as3k as3l as3m as3n ⚙dc77ju">Skip to content</a><div class="Header Box-root Flex-flex Flex-direction--column Flex-justifyContent--spaceBetween"><div class="Header--small Box-root"><div class="MobileNav Box-root"><button class="UnstyledLink MobileNav-button" type="button"><div class="Box-root Flex-flex Flex-alignItems--center"><div class="Box-root Margin-right--8 Margin-left--8"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--mobilenav Icon-color Icon-color--gray600 Box-root Flex-flex"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--mobilenav-svg Icon-color-svg Icon-color--gray600-svg" height="12" width="12"><path d="M0 4a1 1 0 011-1h14a1 1 0 110 2H1a1 1 0 01-1-1zm0 4a1 1 0 011-1h14a1 1 0 110 2H1a1 1 0 01-1-1zm1 3a1 1 0 100 2h14a1 1 0 100-2H1z" fill="#4F566B"></path></svg></div></div><span style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis" class="Text-color--dark Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Accept a payment</span></div></button></div><div class="Header-buttons--small MobileNavRightLink--loggedOutWrapper Box-root Padding-right--8 Padding-left--16 Flex-flex Flex-alignItems--center"><a class="UnstyledLink ButtonLink MobileNavRightLink--loggedOutButtonLink Flex-flex" href="https://dashboard.stripe.com/register"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><span style="margin-top:-1px" class="ButtonLink-label Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block">Create account</span></div></div></a> or <a class="UnstyledLink ButtonLink MobileNavRightLink--loggedOutButtonLink Flex-flex" href="https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fdocs.stripe.com%2Fpayments%2Faccept-a-payment"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><span style="margin-top:-1px" class="ButtonLink-label Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block">Sign in</span></div></div></a></div></div><div class="Header--full Box-root"><div class="Header-top Box-root Box-background--offset Margin-left--4 Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween"><div class="Box-root Box-background--offset Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart" style="flex-basis:25%;flex-shrink:0"><a class="UnstyledLink InlineLink Text-color--blue" href="/"><div class="Box-root Padding-all--20" style="margin-bottom:-1px"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px"><div class="Box-root Box-hideIfEmpty Margin-left--4" style="pointer-events:auto"><svg width="121" height="25" viewBox="0 0 943 187" fill="none" xmlns="http://www.w3.org/2000/svg"><title>The Stripe Docs logo</title><path fill-rule="evenodd" clip-rule="evenodd" d="M447 96.1048C447 64.3182 431.603 39.2366 402.176 39.2366C372.624 39.2366 354.744 64.3182 354.744 95.8565C354.744 133.231 375.852 152.104 406.149 152.104C420.925 152.104 432.1 148.751 440.543 144.033V119.2C432.1 123.421 422.415 126.029 410.122 126.029C398.078 126.029 387.4 121.807 386.034 107.156H446.752C446.752 105.541 447 99.0848 447 96.1048ZM385.662 84.309C385.662 70.2782 394.229 64.4424 402.052 64.4424C409.626 64.4424 417.697 70.2782 417.697 84.309H385.662Z" fill="#0A2540"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M306.816 39.2366C294.648 39.2366 286.825 44.9482 282.48 48.9216L280.865 41.2232H253.549V186.001L284.59 179.42L284.715 144.281C289.185 147.51 295.765 152.104 306.692 152.104C328.918 152.104 349.157 134.224 349.157 94.8631C349.033 58.8549 328.545 39.2366 306.816 39.2366ZM299.366 124.787C292.04 124.787 287.695 122.18 284.715 118.951L284.59 72.8857C287.819 69.2848 292.289 66.8015 299.366 66.8015C310.665 66.8015 318.488 79.4665 318.488 95.7323C318.488 112.371 310.79 124.787 299.366 124.787Z" fill="#0A2540"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M210.835 31.9108L242.001 25.2058V0L210.835 6.58082V31.9108Z" fill="#0A2540"></path><path d="M242.001 41.3474H210.835V149.993H242.001V41.3474Z" fill="#0A2540"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M177.435 50.5357L175.448 41.3474H148.628V149.993H179.67V76.3624C186.995 66.8015 199.412 68.5399 203.261 69.9057V41.3474C199.288 39.8574 184.76 37.1258 177.435 50.5357Z" fill="#0A2540"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M115.351 14.4033L85.0539 20.86L84.9297 120.317C84.9297 138.694 98.7122 152.228 117.089 152.228C127.271 152.228 134.721 150.366 138.818 148.131V122.925C134.845 124.539 115.226 130.251 115.226 111.874V67.7949H138.818V41.3474H115.226L115.351 14.4033Z" fill="#0A2540"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M31.4142 72.8857C31.4142 68.0432 35.3875 66.1807 41.9683 66.1807C51.405 66.1807 63.325 69.0365 72.7617 74.1273V44.9482C62.4558 40.8507 52.2742 39.2366 41.9683 39.2366C16.7625 39.2366 0 52.3982 0 74.3757C0 108.646 47.1833 103.182 47.1833 117.958C47.1833 123.67 42.2167 125.532 35.2633 125.532C24.9575 125.532 11.7958 121.311 1.36583 115.599V145.151C12.9133 150.117 24.585 152.228 35.2633 152.228C61.09 152.228 78.8458 139.439 78.8458 117.213C78.7217 80.2115 31.4142 86.7923 31.4142 72.8857Z" fill="#0A2540"></path><path d="M502.828 150H541.36C576.616 150 598.144 128.16 598.144 93.9959C598.144 59.8319 576.616 37.9919 541.36 37.9919H502.828V150ZM525.292 130.344V57.6479H541.204C563.044 57.6479 575.524 71.8439 575.524 93.9959C575.524 115.992 563.044 130.344 541.36 130.344H525.292Z" fill="#556CD6"></path><path d="M617.021 93.9959C617.021 127.848 639.173 151.716 670.061 151.716C700.793 151.716 722.945 127.848 722.945 93.9959C722.945 60.1439 700.793 36.2759 670.061 36.2759C639.173 36.2759 617.021 60.1439 617.021 93.9959ZM699.857 93.9959C699.857 116.928 687.533 131.592 670.061 131.592C652.433 131.592 640.109 116.928 640.109 93.9959C640.109 71.0639 652.433 56.3999 670.061 56.3999C687.533 56.3999 699.857 71.0639 699.857 93.9959Z" fill="#556CD6"></path><path d="M763.879 93.9959C763.879 71.2199 775.892 56.3999 793.052 56.3999C805.22 56.3999 814.112 64.0439 817.232 76.5239L838.759 69.3479C832.207 49.0679 816.296 36.2759 793.052 36.2759C762.788 36.2759 740.792 60.1439 740.792 93.9959C740.792 127.848 762.788 151.716 793.052 151.716C816.296 151.716 832.207 138.924 838.759 118.644L817.232 111.468C814.112 123.948 805.22 131.592 793.052 131.592C775.892 131.592 763.879 116.772 763.879 93.9959Z" fill="#556CD6"></path><path d="M851.06 129.564C860.108 143.136 879.764 151.716 898.64 151.716C922.508 151.716 942.476 138.144 942.476 115.524C942.476 91.0319 920.636 86.5079 902.852 82.6079C888.188 79.3319 880.076 77.6159 880.076 68.8799C880.076 60.7679 887.564 55.4639 898.484 55.4639C910.964 55.4639 919.7 61.7039 926.252 70.9079L941.384 56.0879C933.584 44.8559 918.452 36.2759 899.108 36.2759C875.864 36.2759 857.456 49.6919 857.456 71.0639C857.456 93.2159 875.552 98.5199 892.244 102.42C909.092 106.164 919.7 107.568 919.7 117.864C919.7 127.38 911.12 132.528 899.42 132.528C887.096 132.528 875.084 125.976 866.816 114.276L851.06 129.564Z" fill="#556CD6"></path></svg></div></div></div></div></a></div><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--center"><a class="sn-1vwnd89 sn-1vwnd89-disabled-false sn-1vwnd89-pressed-false sn-9hkfqz sn-1cmisr4 sn-1rzg82o sn-1bgjyx sn-tlgbr3 sn-16d3z3s sn-1ndmri1" tabindex="0" role="button"><svg class="sn-1mj7mtw sn-1mj7mtw-size-xsmall sn-bdr0jk" aria-hidden="true" width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.883 9.085a5 5 0 1 1 1.202-1.202l2.666 2.666a.847.847 0 0 1 0 1.202.847.847 0 0 1-1.202 0L7.883 9.085ZM8.3 5a3.3 3.3 0 1 1-6.6 0 3.3 3.3 0 0 1 6.6 0Z"></path></svg><div class="sn-1mkggb0 sn-13p7c65 sn-npe8dn"><div class="sn-1cmisr4 sn-1rzg82o sn-126ouik"><div class="sn-9hkfqz sn-1cmisr4 sn-1rzg82o sn-ziqpk sn-2p5cb3"><label for="react-aria-1" id="react-aria-4" class="sn-9hkfqz sn-ziqpk sn-hmryvg">Search the docs or ask a question</label></div><div class="sn-1cmisr4 sn-1h0a3cy"><input type="text" tabindex="-1" placeholder="Search the docs or ask a question" class="sn-1euh7h0 sn-1euh7h0-invalid-false sn-1euh7h0-size-large sn-tlgbr3 sn-1bgjyx sn-pkkl96 sn-1malqd9 sn-19eq7z1 sn-13xo93g sn-19wjju sn-1uppz9z sn-izbrso" id="react-aria-1" aria-invalid="false" aria-labelledby="react-aria-4"/></div></div></div><kbd class="sn-9hkfqz sn-ez40f1">/</kbd></a></div><div class="Box-root Padding-right--24 Padding-left--32 Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexEnd" style="flex-basis:25%;flex-shrink:0"><div data-testid="docs-header-logged-out-view" class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-24px;margin-top:-24px"><div class="Box-root Box-hideIfEmpty Margin-top--24 Margin-left--24" style="pointer-events:auto"><span class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--inline"><a class="UnstyledLink InlineLink Text-color--blue" href="https://dashboard.stripe.com/register">Create account</a></span></div><div class="Box-root Box-hideIfEmpty Margin-top--24 Margin-left--24" style="pointer-events:auto"><div class="PressableCore PressableCore--cursor--pointer PressableCore--height--medium PressableCore--radius--all PressableCore--width PressableCore--width--auto PressableButton Button Button--color--white Box-root Flex-inlineFlex" style="background-color:#ffffff;box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 1px 1px 0 rgba(0, 0, 0, 0.12),0 0 0 1px rgba(60, 66, 87, 0.16), 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 2px 5px 0 rgba(60, 66, 87, 0.08)"><div class="PressableCore-base Box-root"><a target="_self" data-testid="docs-sign-in-button-selector" class="UnstyledLink Button-element PressableContext Padding-horizontal--8 Padding-vertical--4 PressableContext--cursor--pointer PressableContext--display--inlineFlex PressableContext--fontLineHeight--20 PressableContext--fontSize--14 PressableContext--fontWeight--medium PressableContext--height PressableContext--height--medium PressableContext--radius--all PressableContext--width PressableContext--width--auto" href="https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fdocs.stripe.com%2Fpayments%2Faccept-a-payment" style="color:#3c4257"><div class="Button-align Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--center" style="width:100%;line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><span style="margin-top:-1px" class="Button-label Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block">Sign in</span></div></div></a></div><div class="PressableCore-overlay PressableCore-overlay--extendBy1 Box-root Box-background--white"></div></div></div></div></div></div></div><div data-db-analytics-name="docs_top_right_nav" class="Header-collapsable Box-root Box-background--offset Box-divider--light-bottom-1 Padding-left--24 Flex-flex Flex-alignItems--flexEnd Flex-justifyContent--spaceBetween"><div class="Header-menu Header-menu--widest Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"><div data-testid="docs-header-get-started-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="1" aria-selected="false" aria-setsize="6" class="UnstyledLink ContentTab-link" href="/get-started" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Header-tab-text-active Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Get started</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-payments-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="2" aria-selected="false" aria-setsize="6" class="UnstyledLink ContentTab-link" href="/payments" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Payments</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-finance-automation-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="3" aria-selected="false" aria-setsize="6" class="UnstyledLink ContentTab-link" href="/finance-automation" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Finance automation</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-platforms-and-marketplaces-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="4" aria-selected="false" aria-setsize="6" class="UnstyledLink ContentTab-link" href="/connect" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Platforms and marketplaces</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-banking-as-a-service-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="5" aria-selected="false" aria-setsize="6" class="UnstyledLink ContentTab-link" href="/financial-services" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Banking as a service</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-developer-tools-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="6" aria-selected="false" aria-setsize="6" class="UnstyledLink ContentTab-link" href="/development" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Developer tools</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div></div></div></div></div><div class="Header-menu Header-menu--skinny Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"><div data-testid="docs-header-get-started-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="1" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" href="/get-started" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Header-tab-text-active Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Get started</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-payments-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="2" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" href="/payments" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Payments</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-finance-automation-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="3" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" href="/finance-automation" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Finance automation</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><a tabindex="0" role="button" aria-haspopup="true" aria-expanded="false" id="react-aria-5" style="user-select:none" class="⚙ rs30 rs31 rs32 rs33 rs31 rs30 rs34 rs35 as32 as33 as34 as3o as3p as3q as3r as3s as3t as3u as3v as3w as3x as3y as3z as310 as311 as312 as313 as314 as315 as316 as317 as318 as319 as31a as31b as31c as31d as31e as31f as31g as31h as31i as31j as31k as31l as31m as31n as31o as31p as31q as31r as31s as31t ⚙1f7z6ll"><svg aria-hidden="true" width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as31x as31y as31z ⚙1r6r1l7"><path d="M6 7.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm4.5 0a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm-9 0a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Z"></path></svg></a></div></div></div><div class="Header-menu Header-menu--wide Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"><div data-testid="docs-header-get-started-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="1" aria-selected="false" aria-setsize="5" class="UnstyledLink ContentTab-link" href="/get-started" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Header-tab-text-active Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Get started</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-payments-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="2" aria-selected="false" aria-setsize="5" class="UnstyledLink ContentTab-link" href="/payments" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Payments</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-finance-automation-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="3" aria-selected="false" aria-setsize="5" class="UnstyledLink ContentTab-link" href="/finance-automation" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Finance automation</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-platforms-and-marketplaces-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="4" aria-selected="false" aria-setsize="5" class="UnstyledLink ContentTab-link" href="/connect" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Platforms and marketplaces</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div><div data-testid="docs-header-banking-as-a-service-tab-selector" class="ContentTab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><a aria-posinset="5" aria-selected="false" aria-setsize="5" class="UnstyledLink ContentTab-link" href="/financial-services" role="tab" tabindex="-1"><div class="ContentTab-inner Box-root Margin-right--12 Padding-horizontal--0 Padding-vertical--4"><span class="Text-color--gray Text-align--center Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><span class="Header-tab-text Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Banking as a service</span> </span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></a></div></div></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><a tabindex="0" role="button" aria-haspopup="true" aria-expanded="false" id="react-aria-7" style="user-select:none" class="⚙ rs30 rs31 rs32 rs33 rs31 rs30 rs34 rs35 as32 as33 as34 as3o as3p as3q as3r as3s as3t as3u as3v as3w as3x as3y as3z as310 as311 as312 as313 as314 as315 as316 as317 as318 as319 as31a as31b as31c as31d as31e as31f as31g as31h as31i as31j as31k as31l as31m as31n as31o as31p as31q as31r as31s as31t ⚙1f7z6ll"><svg aria-hidden="true" width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as31x as31y as31z ⚙1r6r1l7"><path d="M6 7.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm4.5 0a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm-9 0a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Z"></path></svg></a></div></div></div><div class="Box-root Margin-right--24" style="pointer-events:none;margin-bottom:10px"><div class="Box-root Flex-flex Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-24px;margin-top:-24px"><div class="Box-root Box-hideIfEmpty Margin-top--24 Margin-left--24" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink ButtonLink IconParent Flex-flex" type="button"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--rowReversed" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--rowReversed Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Icon-color Icon-color--gray700 Box-root Margin-left--4 Flex-flex" style="transform:translateY(1.08px)"><svg margin="[object Object]" aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Icon-color-svg Icon-color--gray700-svg" height="12" width="12" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div><span style="margin-top:-1px" class="ButtonLink-label Text-color--gray700 Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block">APIs &amp; SDKs</span></div></div></button></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--24 Margin-left--24" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink ButtonLink IconParent Flex-flex" type="button"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--rowReversed" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--rowReversed Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Icon-color Icon-color--gray700 Box-root Margin-left--4 Flex-flex" style="transform:translateY(1.08px)"><svg margin="[object Object]" aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Icon-color-svg Icon-color--gray700-svg" height="12" width="12" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div><span style="margin-top:-1px" class="ButtonLink-label Text-color--gray700 Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block">Help</span></div></div></button></div></div></div></div></div></div></div></div><div class="Shell-container Box-root Flex-flex"><div class="SidebarContainer ⚙ as320 as3t ⚙1drjzq4" data-db-analytics-name="docs_sidebar"><div class="⚙ rs32 as3t as321 as322 as323 as324 as325 as320 as326 as327 as3b as328 as329 ⚙194pv1w"><div class="⚙ as3t as329 as315 as32a as32b as32c as32d as320 ⚙par4fc"><div style="opacity:1"><div class="sn-1cmisr4 sn-1rzg82o sn-9hkfqz sn-1g6zy7t"><a data-testid="docs-sidebar-node-link" href="/get-started" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32i as32j ⚙1daa55y"><span class="⚙">Overview</span></a><a data-testid="docs-sidebar-node-link" href="/products" title="See all of Stripe&#x27;s available products" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32i as32j ⚙1daa55y"><span class="⚙"><span>Explore all products</span></span></a><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Use our resources to plan your Stripe integration" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Plan your integration</span></span></a><div class="sn-bxgxhf"></div></div><span role="separator" style="flex:0 0 1px" class="⚙ as32n as32o as32p as32q as32r as32s as32t as32u as32v ⚙ryvuy9"></span><div class="⚙ rs31 as32w as313 as32x ⚙ocryd2">Set up Stripe</div><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Activate and manage your Stripe account" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Create an account</span></span></a><div class="sn-bxgxhf"></div></div><a data-testid="docs-sidebar-node-link" aria-current="true" class="⚙ rs32 rs31 as3o as32e as33 as32f as32y as32h as32i as32z as330 as331 as332 as333 as334 ⚙dm8yi3"><span class="⚙"><span>Accept a payment</span></span></a><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Use products and prices to build your Stripe integration" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Products and prices</span></span></a><div class="sn-bxgxhf"></div></div><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Get started quickly, without writing any code" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Use Stripe without code</span></span></a><div class="sn-bxgxhf"></div></div><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Learn how Stripe handles regulatory requirements" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Regulation support</span></span></a><div class="sn-bxgxhf"></div></div><span role="separator" style="flex:0 0 1px" class="⚙ as32n as32o as32p as32q as32r as32s as32t as32u as32v ⚙ryvuy9"></span><div class="⚙ rs31 as32w as313 as32x ⚙ocryd2">Stripe Dashboard</div><a data-testid="docs-sidebar-node-link" href="/dashboard/basics" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32i as32j ⚙1daa55y"><span class="⚙"><span>Web Dashboard</span></span></a><a data-testid="docs-sidebar-node-link" href="/dashboard/mobile" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32i as32j ⚙1daa55y"><span class="⚙"><span>Mobile Dashboard</span></span></a><span role="separator" style="flex:0 0 1px" class="⚙ as32n as32o as32p as32q as32r as32s as32t as32u as32v ⚙ryvuy9"></span><div class="⚙ rs31 as32w as313 as32x ⚙ocryd2">For developers</div><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Set up your development environment and send an API request" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Start developing</span></span></a><div class="sn-bxgxhf"></div></div><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Browse a few of Stripe&#x27;s sample projects" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Sample projects</span></span></a><div class="sn-bxgxhf"></div></div><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Learn about Stripe&#x27;s core APIs" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>About the APIs</span></span></a><div class="sn-bxgxhf"></div></div><span role="separator" style="flex:0 0 1px" class="⚙ as32n as32o as32p as32q as32r as32s as32t as32u as32v ⚙ryvuy9"></span><div class="⚙ rs31 as32w as313 as32x ⚙ocryd2">Migrate to Stripe</div><a data-testid="docs-sidebar-node-link" href="/get-started/data-migrations" title="Migrate your sensitive payments data" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32i as32j ⚙1daa55y"><span class="⚙"><span>Migrate customer data</span></span></a><div data-testid="docs-sidebar-null-product-selector"><a data-testid="docs-sidebar-node-link" title="Learn how to migrate sensitive payment data to Stripe" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Migrate payment data</span></span></a><div class="sn-bxgxhf"></div></div><a data-testid="docs-sidebar-node-link" href="/get-started/subscription-migrations" title="Migrate your existing subscriptions to Stripe" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32i as32j ⚙1daa55y"><span class="⚙"><span>Migrate subscriptions</span></span></a><span role="separator" style="flex:0 0 1px" class="⚙ as32n as32o as32p as32q as32r as32s as32t as32u as32v ⚙ryvuy9"></span><div class="⚙ rs31 as32w as313 as32x ⚙ocryd2">Manage fraud risk</div><div data-testid="docs-sidebar-radar-product-selector"><a data-testid="docs-sidebar-node-link" title="Learn how to identify and guard against fraud." class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Understand fraud</span></span></a><div class="sn-bxgxhf"></div></div><div data-testid="docs-sidebar-radar-product-selector"><a data-testid="docs-sidebar-node-link" title="Use Stripe Radar to fight fraud with machine learning" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Radar fraud protection</span></span></a><div class="sn-bxgxhf"></div></div><div data-testid="docs-sidebar-payments-product-selector"><a data-testid="docs-sidebar-node-link" title="Learn how to avoid and respond to disputed payments." class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Manage disputes</span></span></a><div class="sn-bxgxhf"></div></div><div data-testid="docs-sidebar-identity-product-selector"><a data-testid="docs-sidebar-node-link" title="Use Stripe Identity to confirm the identity of global users" class="⚙ rs32 rs31 as3o as32e as33 as32f as32g as32h as32j ⚙sds9kf"><svg data-testid="docs-sidebar-node-chevron" role="img" aria-hidden="false" aria-label="Dropdown closed" width="8" height="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as32l as32m ⚙ygwpu"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.334.606a.75.75 0 0 1 1.06-.022l3 2.875a.75.75 0 0 1 0 1.082L3.4 7.416a.75.75 0 1 1-1.038-1.082L4.79 4 2.357 1.666a.75.75 0 0 1-.022-1.06Z"></path></svg><span class="⚙"><span>Verify identities</span></span></a><div class="sn-bxgxhf"></div></div></div></div></div><div class="⚙ rs32 as325 as32e as3f as335 as322 as323 as329 ⚙405nde"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><div style="outline:none" tabindex="-1"><button color="gray" aria-controls="menu2370" aria-haspopup="menu" id="menu2370-button" aria-label="Change the country setting" type="button" class="UnstyledLink"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div title="SG" class="SVGInline SVGInline--cleaned SVG Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg class="SVGInline-svg SVGInline--cleaned-svg SVG-svg" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g fill="none"><path fill="#F6F9FC" d="M16 8v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8h16Z"></path><path fill="#EAEEF3" d="M14 14H2a2 2 0 0 1-2-2V8h1v4a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V8h1v4a2 2 0 0 1-2 2Z"></path><path fill="#E25950" d="M0 8V4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4H0Z"></path><path fill="#FFF" d="M3.364 5.205c0 .75.606 1.36 1.356 1.363a1.691 1.691 0 0 1-1.015.342 1.705 1.705 0 1 1 0-3.41c.382 0 .73.13 1.015.342a1.363 1.363 0 0 0-1.356 1.363ZM9.02 5a.5.5 0 1 1-.04-1 .5.5 0 0 1 .04 1ZM7.5 4.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1ZM7 6a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0ZM6 5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2.5.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Z"></path></g></svg></div><div class="Box-root Margin-left--2 Padding-left--8"><span style="margin-top:-1px" class="Text-color--gray Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block"><span style="white-space:nowrap">Singapore</span></span></div></div></div></button></div></div></div><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><div style="outline:none" tabindex="-1"><button aria-controls="menu2371" aria-haspopup="menu" id="menu2371-button" aria-label="Change the language setting" type="button" class="UnstyledLink"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--locale Icon-color Icon-color--gray Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg xmlns="http://www.w3.org/2000/svg" viewBox="2 2 16 16" aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--locale-svg Icon-color-svg Icon-color--gray-svg" height="16" width="16"><path d="M11.6 13.1l-2 2.5c-.3.3-.7.3-.9 0-.1-.1-.2-.3-.2-.5v-2c-2.5-.5-4-2.3-4-4.4 0-2.5 2.1-4.5 5.5-4.5s5.5 2 5.5 4.5c-.1 2.3-1.7 4.1-3.9 4.4z"></path></svg></div><div class="Box-root Margin-left--2 Padding-left--8"><span style="margin-top:-1px" class="Text-color--gray Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block"><span style="white-space:nowrap">English (United Kingdom)</span></span></div></div></div></button></div></div></div></div></div><a tabindex="0" role="button" class="⚙ rs30 rs31 rs30 as32 as33 as34 as35 as36 as336 as337 as37 as338 as339 ⚙pat3qw"><svg aria-label="Click to collapse the sidebar and hide the navigation" aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as33a as33b as33c ⚙1gmneja"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.125 1c.483 0 .875.392.875.875v12.25a.875.875 0 0 1-1.75 0V1.875c0-.483.392-.875.875-.875Zm-6.899.867c.35.333.363.887.03 1.237L3.418 7.125h6.706a.875.875 0 0 1 0 1.75H3.487l3.754 3.757a.875.875 0 1 1-1.238 1.236L.756 8.618a.873.873 0 0 1-.014-1.222l5.247-5.5a.875.875 0 0 1 1.237-.03Z"></path></svg></a></div><div class="Box-root" style="display:flex;width:100%;flex-flow:column nowrap;align-items:stretch;justify-content:flex-start;flex-grow:1"><div class="Content Box-root"><a id="main-content" tabindex="-1"></a><div class="Content-container Box-root"><div class="Content-articleContainer sn-token-provider ⚙ t2 as33d as33e as33f as33g as30 as33h ⚙d8u1k8"><div role="navigation" aria-label="Breadcrumbs" class="Breadcrumbs-container Box-root" style="pointer-events:none;padding-bottom:16px"><div class="Box-root Flex-flex Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px;margin-top:-4px"><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"><div class="Breadcrumbs Box-root"><span class="Breadcrumbs-link Text-color--gray Text-fontWeight--regular Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline"><a title="Home" href="/" class="UnstyledLink">Home</a></span><span class="Breadcrumbs-link Text-color--gray Text-fontWeight--regular Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline"><a title="Get started" href="/get-started" class="UnstyledLink">Get started</a></span></div></div></div></div><div class="Box-root Flex-flex Flex-direction--row"><div class="Content-article MarkdocContentWrapper Box-root" style="flex-basis:100%"><article id="content" data-locale="en-GB"><div class="Box-root Padding-bottom--24"><h1 data-testid="docs-markdoc-content-title" class="⚙ rs31 as33i as33j as33k ⚙1wujdjl">Accept a payment</h1><h2 data-testid="docs-markdoc-content-subtitle" class="⚙ rs31 as33l as33j as33m as33k ⚙1nxy685">Securely accept payments online.</h2></div><div class="Document" data-testid="docs-content"><p>Build a payment form or use a prebuilt checkout page to start accepting online payments.</p><div class="AdvancedPageSelector Box-root"><fieldset class="Toggle"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-wrap--wrap"><div class="Box-root Padding-right--8"><label class="ToggleItem" for="ToggleItem-2373"><div class="PressableCore PressableCore--cursor--pointer PressableCore--height--medium PressableCore--radius--all PressableCore--width PressableCore--width--auto PressableToggle Box-root Flex-inlineFlex" style="background-color:#ffffff;box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 1px rgba(60, 66, 87, 0.16), 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0)"><div class="PressableCore-base Box-root"><input type="radio" class="ToggleItem-source" id="ToggleItem-2373" tabindex="0" name="Toggle-2372"/><div class="ToggleItem-fill Box-root Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center Flex-direction--row" style="color:#3c4257"><span class="ToggleItem-label Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Web</span></div></div><div class="PressableCore-overlay PressableCore-overlay--extendBy1 Box-root Box-background--white"></div></div></label></div><div class="Box-root Padding-right--8"><label class="ToggleItem" for="ToggleItem-2374"><div class="PressableCore PressableCore--cursor--pointer PressableCore--height--medium PressableCore--radius--all PressableCore--width PressableCore--width--auto PressableToggle Box-root Flex-inlineFlex" style="background-color:#ffffff;box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 2px #5469d4, 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0)"><div class="PressableCore-base Box-root"><input type="radio" class="ToggleItem-source" id="ToggleItem-2374" tabindex="0" checked="" name="Toggle-2372"/><div class="ToggleItem-fill Box-root Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center Flex-direction--row" style="color:#5469d4"><span class="ToggleItem-label Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">iOS</span></div></div><div class="PressableCore-overlay PressableCore-overlay--extendBy2 Box-root Box-background--white"></div></div></label></div><div class="Box-root Padding-right--8"><label class="ToggleItem" for="ToggleItem-2375"><div class="PressableCore PressableCore--cursor--pointer PressableCore--height--medium PressableCore--radius--all PressableCore--width PressableCore--width--auto PressableToggle Box-root Flex-inlineFlex" style="background-color:#ffffff;box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 1px rgba(60, 66, 87, 0.16), 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0)"><div class="PressableCore-base Box-root"><input type="radio" class="ToggleItem-source" id="ToggleItem-2375" tabindex="0" name="Toggle-2372"/><div class="ToggleItem-fill Box-root Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center Flex-direction--row" style="color:#3c4257"><span class="ToggleItem-label Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Android</span></div></div><div class="PressableCore-overlay PressableCore-overlay--extendBy1 Box-root Box-background--white"></div></div></label></div><div class="Box-root Padding-right--8"><label class="ToggleItem" for="ToggleItem-2376"><div class="PressableCore PressableCore--cursor--pointer PressableCore--height--medium PressableCore--radius--all PressableCore--width PressableCore--width--auto PressableToggle Box-root Flex-inlineFlex" style="background-color:#ffffff;box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 1px rgba(60, 66, 87, 0.16), 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0)"><div class="PressableCore-base Box-root"><input type="radio" class="ToggleItem-source" id="ToggleItem-2376" tabindex="0" name="Toggle-2372"/><div class="ToggleItem-fill Box-root Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center Flex-direction--row" style="color:#3c4257"><span class="ToggleItem-label Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">React Native</span></div></div><div class="PressableCore-overlay PressableCore-overlay--extendBy1 Box-root Box-background--white"></div></div></label></div><div class="Box-root"><label class="ToggleItem" for="ToggleItem-2377"><div class="PressableCore PressableCore--cursor--pointer PressableCore--height--medium PressableCore--radius--all PressableCore--width PressableCore--width--auto PressableToggle Box-root Flex-inlineFlex" style="background-color:#ffffff;box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 1px rgba(60, 66, 87, 0.16), 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0)"><div class="PressableCore-base Box-root"><input type="radio" class="ToggleItem-source" id="ToggleItem-2377" tabindex="0" name="Toggle-2372"/><div class="ToggleItem-fill Box-root Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center Flex-direction--row" style="color:#3c4257"><span class="ToggleItem-label Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Plugins</span></div></div><div class="PressableCore-overlay PressableCore-overlay--extendBy1 Box-root Box-background--white"></div></div></label></div></div></fieldset><div class="Box-root Box-divider--light-bottom-1 Padding-top--16"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"></div></div></div><div role="tabpanel" class="Page ⚙ as3t as3b as33n as33o as33p ⚙35ivjt" id="content-In-app integration for iOS" aria-labelledby="tab-In-app integration for iOS"><div class="Page--transition Page--is-showing" style="z-index:1;opacity:1;position:relative;transform:none"><div class="image-wrapper ⚙ rs36 rs32 rs31 as325 as32e as3q as33q as33r as33s as33d as32c ⚙83jdx3"><img src="https://b.stripecdn.com/docs-statics-srv/assets/ios-overview.9e0d68d009dc005f73a6f5df69e00458.png" width="828" height="517" style="width:100%;max-width:100%" role="button" tabindex="0" class="⚙ rs37 as32n as310 as33t as3b as33u as33v as33w as323 as31t as33x as33y ⚙m0kibx"/></div><p>Integrate Stripe’s prebuilt payment UI into the checkout of your iOS app with the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html" tabindex="0"><span>PaymentSheet</span></a> class. See our sample integration <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://github.com/stripe/stripe-ios/tree/master/Example/PaymentSheet%20Example" tabindex="0"><span>on GitHub</span></a>.</p><div class="CalloutWrapper ⚙ rs32 as345 as346 as325 as347 as315 as348 as349 as34a ⚙lhd4og"><h4 data-component="CalloutHeading" class="⚙ rs31 as34b as34c as34d as33q as32j ⚙ibsxja">Interested in displaying payment methods directly in your checkout screen?</h4><div class="⚙ rs31 as32h ⚙1vfqi45"><p>We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. <a tabindex="0" role="button" class="⚙ rs30 rs31 rs31 as32 as33 as34 as35 as36 as340 as3z as310 as341 as32e as330 as32z as331 as34e as34f as34g ⚙1d4ii0y">Sign up for early access.</a></p></div></div><div aria-expanded="true" class="Section Section--numbered Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-setup"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-setup"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span>Set up <span class="Section-title-with-badges">Stripe<div class="Section-badge-list Box-root Padding-left--8"><div aria-label="Server-side" class="Badge Badge--variant--status Section-badge Box-root Box-background--gray100 Flex-inlineFlex Flex-alignItems--center Flex-direction--row"><span class="Badge-text Text-color--gray600 Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--inline">Server-side</span></div><div aria-label="Client-side" class="Badge Badge--variant--status Section-badge Box-root Box-background--gray100 Flex-inlineFlex Flex-alignItems--center Flex-direction--row"><span class="Badge-text Text-color--gray600 Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--inline">Client-side</span></div></div></span></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronUp Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronUp-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 11.619a.875.875 0 0 0 1.238 0L8 5.237l6.381 6.382a.875.875 0 1 0 1.238-1.238l-7-7a.875.875 0 0 0-1.238 0l-7 7a.875.875 0 0 0 0 1.238Z"></path></svg></div></div></div></a><div tabindex="-1" class="Section-content Box-root Padding-top--0 Padding-bottom--32"><p>First, you need a Stripe account. <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://dashboard.stripe.com/register" tabindex="0"><span>Register now</span></a>.</p><h3 class="Heading Heading--anchored" id="setup-server-side"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73">Server-side </span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h3><p>This integration requires endpoints on your server that talk to the Stripe API. Use our official libraries for access to the Stripe API from your server:</p><div id="codetab_dfc4a6aff5f3711c66bdb90a3f37589faa94b1f4" class="CodeTabGroup Box-root"><div class="CodeTabGroup-content-dropdown-select ControlledContentGroup-content" style="height:auto;overflow:hidden;width:100%;display:flex;justify-content:center;position:relative;flex-direction:row"><span style="width:100%;height:auto;origin-x:0.5px;origin-y:0.5px"><div class="Box-root"><div data-language="bash" class="CodeBlock Box-root Box-background--blue800"><div class="CodeBlock-header Box-root Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween"><div title="Command Line" class="CodeBlock-filename Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px;margin-top:-4px"><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--api CodeBlock-file-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--api-svg CodeBlock-file-icon-svg Icon-color-svg Icon-color--gray300-svg" height="12" width="12" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13 2.5H3A1.5 1.5 0 0 0 1.5 4v8A1.5 1.5 0 0 0 3 13.5h10a1.5 1.5 0 0 0 1.5-1.5V4A1.5 1.5 0 0 0 13 2.5ZM3 1a3 3 0 0 0-3 3v8a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V4a3 3 0 0 0-3-3H3Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M3.43 4.512a.75.75 0 0 1 1.058-.081l3.5 3a.75.75 0 0 1 0 1.138l-3.5 3a.75.75 0 1 1-.976-1.138L6.348 8 3.512 5.57a.75.75 0 0 1-.081-1.058ZM8 10.75a.75.75 0 0 1 .75-.75h3.5a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1-.75-.75Z"></path></svg></div></div><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto">Command Line</div></div></div><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div role="codeblock-dropdown" class="sn-token-provider ⚙ rs32 t3 t4 t5 t6 t7 t8 t9 ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t1a t1b t1c t1d t1e t1f t1g t1h t1i t1j t1k t1l t1m t1n t1o t1p t1q t1r t1s t1t t1u t1v t1w t1x t1y t1z t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t2a t2b t2c t2d t2e t2f t2g t2h t2i t2j t2k t2l t2m t2n t2o t2p t2q t2r t2s t2t t2u t2v t2w t2x t2y t2z t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t3a t3b t3c t3d t3e t3f t3g t3h t3i t3j t3k t3l t3m t3n t3o t3p t3q t3r t3s t3t t3u t3v t3w t3x t3y t3z t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t4a t4b t4c t4d t4e t4f t4g t4h t4i t4j t4k t4l t4m t4n t4o t4p t4q t4r t4s t4t t4u t4v t4w t4x t4y t4z t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t5a t5b t5c t5d t5e t5f t5g t5h t5i t5j t5k t5l t5m t5n t5o t5p t5q t5r t5s as3o as34h as316 as347 as34i ⚙10cnxl9"><a tabindex="0" role="button" aria-haspopup="true" aria-expanded="false" id="react-aria-9" style="user-select:none" class="⚙ rs30 rs31 rs31 rs32 as32 as33 as34 as34j as34k as34l as34m as3j as32h as34n as34o as32j as3o as3r as32e ⚙701j5a">Ruby<svg aria-hidden="true" width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as34p as31y as31z ⚙1wa8kue"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.926 7.243a.8.8 0 0 1 1.131-.017L6 10.085l2.943-2.859a.8.8 0 0 1 1.114 1.148l-3.5 3.4a.798.798 0 0 1-1.114 0l-3.5-3.4a.8.8 0 0 1-.017-1.131ZM5.443.226a.798.798 0 0 1 1.114 0l3.5 3.4a.8.8 0 0 1-1.114 1.148L6 1.915 3.057 4.774a.8.8 0 1 1-1.114-1.148l3.5-3.4Z"></path></svg></a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--stretch Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-12px;margin-top:-12px"><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button aria-label="Report incorrect code" type="button" class="UnstyledLink"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--warningCircle CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--warningCircle-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.5A6.5 6.5 0 0 0 14.5 8c0-3.592-2.9-6.5-6.5-6.5A6.5 6.5 0 0 0 1.5 8 6.5 6.5 0 0 0 8 14.5ZM8 16a8 8 0 0 0 8-8c0-4.419-3.57-8-8-8a8 8 0 0 0-8 8 8 8 0 0 0 8 8Z"></path><path d="M9.25 11.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM7.053 4.999a.949.949 0 1 1 1.894 0L8.79 8a.79.79 0 0 1-1.578 0l-.159-3Z"></path></svg></div></button></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink CodeBlock-copy-button" aria-label="Copy" type="button"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></div></div></div></div></div></div></div></div></div><div style="opacity:1;transform:none"><pre class="CodeBlock-content"><div class="CodeBlock-wrapper"><code class="CodeBlock-code"><span class="token comment"># Available as a gem</span><span class="token function"> sudo</span><span class="token function"> gem</span><span class="token function"> install</span><span class="token stripe"> stripe</span></code></div></pre></div></div><div data-language="ruby" class="CodeBlock Box-root Box-background--blue800"><div class="CodeBlock-header Box-root Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween"><div title="Gemfile" class="CodeBlock-filename Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px;margin-top:-4px"><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--document CodeBlock-file-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--document-svg CodeBlock-file-icon-svg Icon-color-svg Icon-color--gray300-svg" height="12" width="12" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.25 11a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5h-5.5ZM4.5 8.75A.75.75 0 0 1 5.25 8h5.5a.75.75 0 0 1 0 1.5h-5.5a.75.75 0 0 1-.75-.75ZM9.25 5a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M14.5 13.5v-11A2.5 2.5 0 0 0 12 0H6.328a2 2 0 0 0-1.414.586L2.086 3.414A2 2 0 0 0 1.5 4.828V13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5ZM13 2.5a1 1 0 0 0-1-1H8v3.25A1.75 1.75 0 0 1 6.25 6.5H3v7a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-11Zm-6.672-1H6.5v3.25a.25.25 0 0 1-.25.25H3v-.172a.5.5 0 0 1 .146-.353l2.829-2.829a.5.5 0 0 1 .353-.146Z"></path></svg></div></div><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto">Gemfile</div></div></div><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div role="codeblock-dropdown" class="sn-token-provider ⚙ rs32 t3 t4 t5 t6 t7 t8 t9 ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t1a t1b t1c t1d t1e t1f t1g t1h t1i t1j t1k t1l t1m t1n t1o t1p t1q t1r t1s t1t t1u t1v t1w t1x t1y t1z t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t2a t2b t2c t2d t2e t2f t2g t2h t2i t2j t2k t2l t2m t2n t2o t2p t2q t2r t2s t2t t2u t2v t2w t2x t2y t2z t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t3a t3b t3c t3d t3e t3f t3g t3h t3i t3j t3k t3l t3m t3n t3o t3p t3q t3r t3s t3t t3u t3v t3w t3x t3y t3z t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t4a t4b t4c t4d t4e t4f t4g t4h t4i t4j t4k t4l t4m t4n t4o t4p t4q t4r t4s t4t t4u t4v t4w t4x t4y t4z t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t5a t5b t5c t5d t5e t5f t5g t5h t5i t5j t5k t5l t5m t5n t5o t5p t5q t5r t5s as3o as34h as316 as347 as34i ⚙10cnxl9"><a tabindex="0" role="button" aria-haspopup="true" aria-expanded="false" id="react-aria-11" style="user-select:none" class="⚙ rs30 rs31 rs31 rs32 as32 as33 as34 as34j as34k as34l as34m as3j as32h as34n as34o as32j as3o as3r as32e ⚙701j5a">Ruby<svg aria-hidden="true" width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as34p as31y as31z ⚙1wa8kue"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.926 7.243a.8.8 0 0 1 1.131-.017L6 10.085l2.943-2.859a.8.8 0 0 1 1.114 1.148l-3.5 3.4a.798.798 0 0 1-1.114 0l-3.5-3.4a.8.8 0 0 1-.017-1.131ZM5.443.226a.798.798 0 0 1 1.114 0l3.5 3.4a.8.8 0 0 1-1.114 1.148L6 1.915 3.057 4.774a.8.8 0 1 1-1.114-1.148l3.5-3.4Z"></path></svg></a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--stretch Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-12px;margin-top:-12px"><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button aria-label="Report incorrect code" type="button" class="UnstyledLink"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--warningCircle CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--warningCircle-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.5A6.5 6.5 0 0 0 14.5 8c0-3.592-2.9-6.5-6.5-6.5A6.5 6.5 0 0 0 1.5 8 6.5 6.5 0 0 0 8 14.5ZM8 16a8 8 0 0 0 8-8c0-4.419-3.57-8-8-8a8 8 0 0 0-8 8 8 8 0 0 0 8 8Z"></path><path d="M9.25 11.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM7.053 4.999a.949.949 0 1 1 1.894 0L8.79 8a.79.79 0 0 1-1.578 0l-.159-3Z"></path></svg></div></button></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink CodeBlock-copy-button" aria-label="Copy" type="button"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></div></div></div></div></div></div></div></div></div><div style="opacity:1;transform:none"><pre class="CodeBlock-content"><div class="CodeBlock-wrapper"><code class="CodeBlock-code"><span class="token comment"># If you use bundler, you can add this line to your Gemfile</span><span class="token unknown-token"> gem </span><span class="token string">&#x27;stripe&#x27;</span></code></div></pre></div></div></div></span></div></div><h3 class="Heading Heading--anchored" id="setup-client-side"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73">Client-side </span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h3><p>The <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://github.com/stripe/stripe-ios" tabindex="0"><span>Stripe iOS SDK</span></a> is open source, <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://stripe.dev/stripe-ios/index.html" tabindex="0"><span>fully documented</span></a>, and compatible with apps supporting iOS <!-- -->13<!-- --> or above.</p><div class="TabGroup TabGroup--tabs Box-root"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="1" aria-selected="false" aria-setsize="4" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">Swift Package Manager</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="2" aria-selected="false" aria-setsize="4" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">CocoaPods</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="3" aria-selected="false" aria-setsize="4" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">Carthage</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="4" aria-selected="false" aria-setsize="4" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">Manual Framework</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div></div><div style="height:auto;overflow:hidden;width:100%;display:flex;justify-content:center;position:relative;flex-direction:row" class="ControlledContentGroup-content"><span style="width:100%;height:auto;z-index:1;opacity:1;position:relative;transform:none;transform-origin:50% 50% 0"><div class="TabGroup-Tab Box-root"><p>To install the SDK, follow these steps:</p><ol class="List default" style="column-count:1"><li class="ListItem--hasMultipleChildren">In Xcode, select <strong>File</strong> &gt; <strong>Add Packages…</strong> and enter <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">https://github<!-- -->.<wbr/>com/stripe/stripe-ios-spm</code> as the repository URL.</li><li class="ListItem--hasMultipleChildren">Select the latest version number from our <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://github.com/stripe/stripe-ios/releases" tabindex="0"><span>releases page</span></a>.</li><li class="ListItem--hasMultipleChildren">Add the <strong>StripePaymentSheet</strong> product to the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app" tabindex="0"><span>target of your app</span></a>.</li></ol></div></span></div></div><div class="CalloutWrapper ⚙ rs32 as345 as346 as325 as347 as315 as348 as349 as34a ⚙lhd4og"><h4 data-component="CalloutHeading" class="⚙ rs31 as34b as34c as34d as33q as32j ⚙ibsxja">Note</h4><div class="⚙ rs31 as32h ⚙1vfqi45"><p>For details on the latest SDK release and past versions, see the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://github.com/stripe/stripe-ios/releases" tabindex="0"><span>Releases</span></a> page on GitHub. To receive notifications when a new release is published, <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository" tabindex="0"><span>watch releases</span></a> for the repository.</p></div></div></div></div><div aria-expanded="true" class="Section Section--numbered Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-enable-payment-methods"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-enable-payment-methods"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span>Enable payment methods<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronUp Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronUp-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 11.619a.875.875 0 0 0 1.238 0L8 5.237l6.381 6.382a.875.875 0 1 0 1.238-1.238l-7-7a.875.875 0 0 0-1.238 0l-7 7a.875.875 0 0 0 0 1.238Z"></path></svg></div></div></div></a><div tabindex="-1" class="Section-content Box-root Padding-top--0 Padding-bottom--32"><p>View your <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://dashboard.stripe.com/settings/payment_methods" tabindex="0"><span>payment methods settings</span></a> and enable the payment methods you want to support. You need at least one payment method enabled to create a <span><span><a title="Payment Intents API" class="UnstyledLink InlineLink Text-color--blue Glossary-term no-api-tag" href="/payments/payment-intents">PaymentIntent</a></span></span>.</p><p>By default, Stripe enables cards and other prevalent payment methods that can help you reach more customers, but we recommend turning on additional payment methods that are relevant for your business and customers. See <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/payments/payment-methods/payment-method-support" tabindex="0"><span>Payment method support</span></a> for product and payment method support, and our <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://stripe.com/pricing/local-payment-methods" tabindex="0"><span>pricing page</span></a> for fees.</p></div></div><div aria-expanded="true" class="Section Section--numbered Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#add-server-endpoint"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="add-server-endpoint"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span>Add an <span class="Section-title-with-badges">endpoint<div class="Section-badge-list Box-root Padding-left--8"><div aria-label="Server-side" class="Badge Badge--variant--status Section-badge Box-root Box-background--gray100 Flex-inlineFlex Flex-alignItems--center Flex-direction--row"><span class="Badge-text Text-color--gray600 Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--inline">Server-side</span></div></div></span></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronUp Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronUp-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 11.619a.875.875 0 0 0 1.238 0L8 5.237l6.381 6.382a.875.875 0 1 0 1.238-1.238l-7-7a.875.875 0 0 0-1.238 0l-7 7a.875.875 0 0 0 0 1.238Z"></path></svg></div></div></div></a><div tabindex="-1" class="Section-content Box-root Padding-top--0 Padding-bottom--32"><div class="CalloutWrapper ⚙ rs32 as345 as346 as325 as347 as315 as348 as349 as34a ⚙lhd4og"><h4 data-component="CalloutHeading" class="⚙ rs31 as34b as34c as34d as33q as32j ⚙ibsxja">Note</h4><div class="⚙ rs31 as32h ⚙1vfqi45"><p>If you want to present the PaymentSheet before creating a PaymentIntent, see <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/payments/accept-a-payment-deferred?type=payment" tabindex="0"><span>Collect payment details before creating an Intent</span></a>.</p></div></div><p>This integration uses three Stripe API objects:</p><ol class="List default" style="column-count:1"><li class=""><p><a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/payment_intents" tabindex="0"><span>PaymentIntent</span></a>: Stripe uses this to represent your intent to collect payment from a customer, tracking your charge attempts and payment state changes throughout the process.</p></li><li class=""><p>(Optional) <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/customers" tabindex="0"><span>Customer</span></a>: To set up a payment method for future payments, you must attach it to a <span><span><a title="Customers" class="UnstyledLink InlineLink Text-color--blue Glossary-term no-api-tag" href="/api/customers">Customer</a></span></span>. Create a Customer object when your customer creates an account with your business. If your customer is making a payment as a guest, you can create a Customer object before payment and associate it with your own internal representation of the customer’s account later.</p></li><li class=""><p>(Optional) <!-- -->Customer Ephemeral Key: Information on the Customer object is sensitive, and can’t be retrieved directly from an app. An Ephemeral Key grants the SDK temporary access to the Customer.</p></li></ol><div class="CalloutWrapper ⚙ rs32 as345 as346 as325 as347 as315 as348 as349 as34a ⚙lhd4og"><h4 data-component="CalloutHeading" class="⚙ rs31 as34b as34c as34d as33q as32j ⚙ibsxja">Note</h4><div class="⚙ rs31 as32h ⚙1vfqi45"><p>If you never save cards to a Customer and don’t allow returning Customers to reuse saved cards, you can omit the Customer and Customer Ephemeral Key objects from your integration.</p></div></div><p>For security reasons, your app can’t create these objects. Instead, add an endpoint on your server that:</p><ol class="List default" style="column-count:1"><li class="">Retrieves the Customer, or creates a new one.</li><li class="">Creates an Ephemeral Key for the Customer.</li><li class="ListItem--hasMultipleChildren">Creates a PaymentIntent with the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/payment_intents/create#create_payment_intent-amount" tabindex="0"><span>amount</span></a>, <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/payment_intents/create#create_payment_intent-currency" tabindex="0"><span>currency</span></a>, and <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/payment_intents/create#create_payment_intent-customer" tabindex="0"><span>customer</span></a>. You can also optionally include the <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">automatic<!-- -->_<wbr/>payment<!-- -->_<wbr/>methods</code> parameter. Stripe enables its functionality by default in the latest version of the API.</li><li class="ListItem--hasMultipleChildren">Returns the Payment Intent’s <span><span><a title="PaymentIntent client secret" class="UnstyledLink InlineLink Text-color--blue Glossary-term no-api-tag" href="/api/payment_intents/object#payment_intent_object-client_secret">client secret</a></span></span>, the Ephemeral Key’s <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">secret</code>, the Customer’s <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/customers/object#customer_object-id" tabindex="0"><span>id</span></a>, and your <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://dashboard.stripe.com/apikeys" tabindex="0"><span>publishable key</span></a> to your app.</li></ol><p>The payment methods shown to customers during the checkout process are also included on the PaymentIntent. You can let Stripe pull payment methods from your Dashboard settings or you can list them manually. Regardless of the option you choose, know that the currency passed in the PaymentIntent filters the payment methods shown to the customer. For example, if you pass <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">eur</code> on the PaymentIntent and have OXXO enabled in the Dashboard, OXXO won’t be shown to the customer because OXXO doesn’t support <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">eur</code> payments.</p><p>Unless your integration requires a code-based option for offering payment methods, Stripe recommends the automated option. This is because Stripe evaluates the currency, payment method restrictions, and other parameters to determine the list of supported payment methods. Payment methods that increase conversion and that are most relevant to the currency and customer’s location are prioritized.</p><div class="TabGroup TabGroup--tabs Box-root"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="1" aria-selected="false" aria-setsize="2" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">Manage payment methods from the Dashboard</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="2" aria-selected="false" aria-setsize="2" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">Listing payment methods manually</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div></div><div style="height:auto;overflow:hidden;width:100%;display:flex;justify-content:center;position:relative;flex-direction:row" class="ControlledContentGroup-content"><span style="width:100%;height:auto;z-index:1;opacity:1;position:relative;transform:none;transform-origin:50% 50% 0"><div class="TabGroup-Tab Box-root"><div class="CalloutWrapper ⚙ rs32 as345 as346 as325 as347 as315 as348 as349 as34a ⚙lhd4og"><h4 data-component="CalloutHeading" class="⚙ rs31 as34b as34c as34d as33q as32j ⚙ibsxja">Note</h4><div class="⚙ rs31 as32h ⚙1vfqi45"><p>Test a running implementation of this endpoint on <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://glitch.com/edit/#!/remix/stripe-mobile-payment-sheet-automatic" tabindex="0"><span>Glitch</span></a>.</p></div></div><p>You can manage payment methods from the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://dashboard.stripe.com/settings/payment_methods" tabindex="0"><span>Dashboard</span></a>. Stripe handles the return of eligible payment methods based on factors such as the transaction’s amount, currency, and payment flow. The PaymentIntent is created using the payment methods you configured in the Dashboard. If you don’t want to use the Dashboard or if you want to specify payment methods manually, you can list them using the <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">payment<!-- -->_<wbr/>method<!-- -->_<wbr/>types</code> attribute.</p><div id="codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b" class="CodeTabGroup Box-root"><div class="CodeTabGroup-content-dropdown-select ControlledContentGroup-content" style="height:auto;overflow:hidden;width:100%;display:flex;justify-content:center;position:relative;flex-direction:row"><span style="width:100%;height:auto;origin-x:0.5px;origin-y:0.5px"><div class="Box-root"><div data-language="bash" class="CodeBlock CodeBlock-numbered Box-root Box-background--blue800"><div class="CodeBlock-header Box-root Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween"><div title="Command Line" class="CodeBlock-filename Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px;margin-top:-4px"><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--api CodeBlock-file-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--api-svg CodeBlock-file-icon-svg Icon-color-svg Icon-color--gray300-svg" height="12" width="12" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13 2.5H3A1.5 1.5 0 0 0 1.5 4v8A1.5 1.5 0 0 0 3 13.5h10a1.5 1.5 0 0 0 1.5-1.5V4A1.5 1.5 0 0 0 13 2.5ZM3 1a3 3 0 0 0-3 3v8a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V4a3 3 0 0 0-3-3H3Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M3.43 4.512a.75.75 0 0 1 1.058-.081l3.5 3a.75.75 0 0 1 0 1.138l-3.5 3a.75.75 0 1 1-.976-1.138L6.348 8 3.512 5.57a.75.75 0 0 1-.081-1.058ZM8 10.75a.75.75 0 0 1 .75-.75h3.5a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1-.75-.75Z"></path></svg></div></div><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto">Command Line</div></div></div><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div role="codeblock-dropdown" class="sn-token-provider ⚙ rs32 t3 t4 t5 t6 t7 t8 t9 ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t1a t1b t1c t1d t1e t1f t1g t1h t1i t1j t1k t1l t1m t1n t1o t1p t1q t1r t1s t1t t1u t1v t1w t1x t1y t1z t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t2a t2b t2c t2d t2e t2f t2g t2h t2i t2j t2k t2l t2m t2n t2o t2p t2q t2r t2s t2t t2u t2v t2w t2x t2y t2z t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t3a t3b t3c t3d t3e t3f t3g t3h t3i t3j t3k t3l t3m t3n t3o t3p t3q t3r t3s t3t t3u t3v t3w t3x t3y t3z t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t4a t4b t4c t4d t4e t4f t4g t4h t4i t4j t4k t4l t4m t4n t4o t4p t4q t4r t4s t4t t4u t4v t4w t4x t4y t4z t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t5a t5b t5c t5d t5e t5f t5g t5h t5i t5j t5k t5l t5m t5n t5o t5p t5q t5r t5s as3o as34h as316 as347 as34i ⚙10cnxl9"><a tabindex="0" role="button" aria-haspopup="true" aria-expanded="false" id="react-aria-13" style="user-select:none" class="⚙ rs30 rs31 rs31 rs32 as32 as33 as34 as34j as34k as34l as34m as3j as32h as34n as34o as32j as3o as3r as32e ⚙701j5a">curl<svg aria-hidden="true" width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as34p as31y as31z ⚙1wa8kue"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.926 7.243a.8.8 0 0 1 1.131-.017L6 10.085l2.943-2.859a.8.8 0 0 1 1.114 1.148l-3.5 3.4a.798.798 0 0 1-1.114 0l-3.5-3.4a.8.8 0 0 1-.017-1.131ZM5.443.226a.798.798 0 0 1 1.114 0l3.5 3.4a.8.8 0 0 1-1.114 1.148L6 1.915 3.057 4.774a.8.8 0 1 1-1.114-1.148l3.5-3.4Z"></path></svg></a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--stretch Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-12px;margin-top:-12px"><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button aria-label="Report incorrect code" type="button" class="UnstyledLink"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--warningCircle CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--warningCircle-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.5A6.5 6.5 0 0 0 14.5 8c0-3.592-2.9-6.5-6.5-6.5A6.5 6.5 0 0 0 1.5 8 6.5 6.5 0 0 0 8 14.5ZM8 16a8 8 0 0 0 8-8c0-4.419-3.57-8-8-8a8 8 0 0 0-8 8 8 8 0 0 0 8 8Z"></path><path d="M9.25 11.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM7.053 4.999a.949.949 0 1 1 1.894 0L8.79 8a.79.79 0 0 1-1.578 0l-.159-3Z"></path></svg></div></button></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink CodeBlock-copy-button" aria-label="Copy" type="button"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></div></div></div></div></div></div></div></div></div><div style="opacity:1;transform:none"><pre class="CodeBlock-content"><div class="CodeBlock-wrapper"><code class="CodeBlock-code"><span class="token comment"># Create a Customer (use an existing Customer ID if this is a returning customer)</span><span class="token function"> curl</span><span class="token unknown-token"> </span><span class="token url">https://api.stripe.com/v1/customers</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -u</span><span class="token unknown-token"> <div class="Box-root Flex-flex" style="display:inline"><div class="Box-root Flex-flex" style="display:inline"><span class="KeyToken" data-key-type="secret" data-testid="keytoken-secret" role="button">sk_test_Ou1w6LVt3zmVipDVJsvMeQsc</span></div></div>: </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -X</span><span class="token unknown-token"> </span><span class="token string">&quot;POST&quot;</span><span class="token unknown-token"> </span><span class="token comment"># Create an Ephemeral Key for the Customer</span><span class="token function"> curl</span><span class="token unknown-token"> </span><span class="token url">https://api.stripe.com/v1/ephemeral_keys</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -u</span><span class="token unknown-token"> <div class="Box-root Flex-flex" style="display:inline"><div class="Box-root Flex-flex" style="display:inline"><span class="KeyToken" data-key-type="secret" data-testid="keytoken-secret" role="button">sk_test_Ou1w6LVt3zmVipDVJsvMeQsc</span></div></div>: </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -H</span><span class="token unknown-token"> </span><span class="token string">&quot;Stripe-Version: 2024-11-20.acacia&quot;</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -X</span><span class="token unknown-token"> </span><span class="token string">&quot;POST&quot;</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -d</span><span class="token unknown-token"> </span><span class="token string">&quot;customer&quot;</span><span class="token operator">=</span><span class="token string">&quot;{{CUSTOMER_ID}}&quot;</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token comment"># Create a PaymentIntent</span><span class="token function"> curl</span><span class="token unknown-token"> </span><span class="token url">https://api.stripe.com/v1/payment_intents</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -u</span><span class="token unknown-token"> <div class="Box-root Flex-flex" style="display:inline"><div class="Box-root Flex-flex" style="display:inline"><span class="KeyToken" data-key-type="secret" data-testid="keytoken-secret" role="button">sk_test_Ou1w6LVt3zmVipDVJsvMeQsc</span></div></div>: </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -X</span><span class="token unknown-token"> </span><span class="token string">&quot;POST&quot;</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -d</span><span class="token unknown-token"> </span><span class="token string">&quot;customer&quot;</span><span class="token operator">=</span><span class="token string">&quot;{{CUSTOMER_ID}}&quot;</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -d</span><span class="token unknown-token"> </span><span class="token string">&quot;amount&quot;</span><span class="token operator">=</span><span class="token number">1099</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token option"> -d</span><span class="token unknown-token"> </span><span class="token string">&quot;currency&quot;</span><span class="token operator">=</span><span class="token string">&quot;eur&quot;</span><span class="token unknown-token"> </span><span class="token punctuation">\</span><span class="token unknown-token"> </span><span class="token comment"># In the latest version of the API, specifying the `automatic_payment_methods` parameter</span><span class="token unknown-token"> </span><span class="token comment"># is optional because Stripe enables its functionality by default.</span><span class="token unknown-token"> </span><span class="token option"> -d</span><span class="token unknown-token"> </span><span class="token string">&quot;automatic_payment_methods[enabled]&quot;</span><span class="token operator">=</span><span class="token unknown-token">true </span><span class="token punctuation">\</span></code><span class="CodeBlock-lineNumbers" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></div></pre></div></div></div></span></div></div></div></span></div></div></div></div><div aria-expanded="true" class="Section Section--numbered Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-collect-payment-details"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-collect-payment-details"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span>Collect payment <span class="Section-title-with-badges">details<div class="Section-badge-list Box-root Padding-left--8"><div aria-label="Client-side" class="Badge Badge--variant--status Section-badge Box-root Box-background--gray100 Flex-inlineFlex Flex-alignItems--center Flex-direction--row"><span class="Badge-text Text-color--gray600 Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--inline">Client-side</span></div></div></span></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronUp Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronUp-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 11.619a.875.875 0 0 0 1.238 0L8 5.237l6.381 6.382a.875.875 0 1 0 1.238-1.238l-7-7a.875.875 0 0 0-1.238 0l-7 7a.875.875 0 0 0 0 1.238Z"></path></svg></div></div></div></a><div tabindex="-1" class="Section-content Box-root Padding-top--0 Padding-bottom--32"><p>To display the mobile Payment Element on your checkout screen, make sure you:</p><ul class="List default" style="column-count:1"><li class="">Display the products the customer is purchasing along with the total amount</li><li class="ListItem--hasMultipleChildren">Use the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/elements/address-element?platform=ios" tabindex="0"><span>Address Element</span></a> to collect any required shipping information from the customer</li><li class="">Add a checkout button to display Stripe’s UI</li></ul><div class="TabGroup TabGroup--tabs Box-root"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="1" aria-selected="false" aria-setsize="2" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">UIKit</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="2" aria-selected="false" aria-setsize="2" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">SwiftUI</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div></div><div style="height:auto;overflow:hidden;width:100%;display:flex;justify-content:center;position:relative;flex-direction:row" class="ControlledContentGroup-content"><span style="width:100%;height:auto;z-index:1;opacity:1;position:relative;transform:none;transform-origin:50% 50% 0"><div class="TabGroup-Tab Box-root"><p>In your app’s checkout screen, fetch the <!-- -->Payment<!-- -->Intent client secret, Ephemeral Key secret, Customer ID, and publishable key from the endpoint you created in the previous step. Set your publishable key using <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">StripeAPI<!-- -->.<wbr/>shared</code> and initialize <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html" tabindex="0"><span>PaymentSheet</span></a>.</p><div class="Box-root"><div data-language="swift" class="CodeBlock CodeBlock-numbered Box-root Box-background--blue800"><div class="CodeBlock-header Box-root Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween"><div title="" class="CodeBlock-filename Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px;margin-top:-4px"><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"></div><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"></div></div></div><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--stretch Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-12px;margin-top:-12px"><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button aria-label="Report incorrect code" type="button" class="UnstyledLink"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--warningCircle CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--warningCircle-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.5A6.5 6.5 0 0 0 14.5 8c0-3.592-2.9-6.5-6.5-6.5A6.5 6.5 0 0 0 1.5 8 6.5 6.5 0 0 0 8 14.5ZM8 16a8 8 0 0 0 8-8c0-4.419-3.57-8-8-8a8 8 0 0 0-8 8 8 8 0 0 0 8 8Z"></path><path d="M9.25 11.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM7.053 4.999a.949.949 0 1 1 1.894 0L8.79 8a.79.79 0 0 1-1.578 0l-.159-3Z"></path></svg></div></button></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink CodeBlock-copy-button" aria-label="Copy" type="button"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></div></div></div></div></div></div></div></div></div><div style="opacity:1;transform:none"><pre class="CodeBlock-content"><div class="CodeBlock-wrapper"><code class="CodeBlock-code"><span class="token keyword">import</span><span class="token unknown-token"> </span><span class="token builtin">UIKit</span><span class="token unknown-token"> </span><span class="token keyword">import</span><span class="token unknown-token"> </span><span class="token builtin">StripePaymentSheet</span><span class="token unknown-token"> </span><span class="token keyword">class</span><span class="token unknown-token"> </span><span class="token class-name">CheckoutViewController</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token builtin">UIViewController</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token atrule">@IBOutlet</span><span class="token unknown-token"> </span><span class="token keyword">weak</span><span class="token unknown-token"> </span><span class="token keyword">var</span><span class="token unknown-token"> checkoutButton</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token builtin">UIButton</span><span class="token operator">!</span><span class="token unknown-token"> </span><span class="token keyword">var</span><span class="token unknown-token"> paymentSheet</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token builtin">PaymentSheet</span><span class="token operator">?</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> backendCheckoutUrl </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token function">URL</span><span class="token punctuation">(</span><span class="token unknown-token">string</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token string">&quot;Your backend endpoint/payment-sheet&quot;</span><span class="token punctuation">)</span><span class="token operator">!</span><span class="token unknown-token"> </span><span class="token comment">// Your backend endpoint</span><span class="token unknown-token"> </span><span class="token keyword">override</span><span class="token unknown-token"> </span><span class="token keyword">func</span><span class="token unknown-token"> </span><span class="token function">viewDidLoad</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">viewDidLoad</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token unknown-token"> checkoutButton</span><span class="token punctuation">.</span><span class="token function">addTarget</span><span class="token punctuation">(</span><span class="token keyword">self</span><span class="token punctuation">,</span><span class="token unknown-token"> action</span><span class="token punctuation">:</span><span class="token unknown-token"> #</span><span class="token function">selector</span><span class="token punctuation">(</span><span class="token unknown-token">didTapCheckoutButton</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token unknown-token"> </span><span class="token keyword">for</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token punctuation">.</span><span class="token unknown-token">touchUpInside</span><span class="token punctuation">)</span><span class="token unknown-token"> checkoutButton</span><span class="token punctuation">.</span><span class="token unknown-token">isEnabled </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token boolean">false</span><span class="token unknown-token"> </span><span class="token comment">// MARK: Fetch the PaymentIntent client secret, Ephemeral Key secret, Customer ID, and publishable key</span><span class="token unknown-token"> </span><span class="token keyword">var</span><span class="token unknown-token"> request </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token function">URLRequest</span><span class="token punctuation">(</span><span class="token unknown-token">url</span><span class="token punctuation">:</span><span class="token unknown-token"> backendCheckoutUrl</span><span class="token punctuation">)</span><span class="token unknown-token"> request</span><span class="token punctuation">.</span><span class="token unknown-token">httpMethod </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token string">&quot;POST&quot;</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> task </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token builtin">URLSession</span><span class="token punctuation">.</span><span class="token unknown-token">shared</span><span class="token punctuation">.</span><span class="token function">dataTask</span><span class="token punctuation">(</span><span class="token unknown-token">with</span><span class="token punctuation">:</span><span class="token unknown-token"> request</span><span class="token punctuation">,</span><span class="token unknown-token"> completionHandler</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token punctuation">[</span><span class="token keyword">weak</span><span class="token unknown-token"> </span><span class="token keyword">self</span><span class="token punctuation">]</span><span class="token unknown-token"> </span><span class="token punctuation">(</span><span class="token unknown-token">data</span><span class="token punctuation">,</span><span class="token unknown-token"> response</span><span class="token punctuation">,</span><span class="token unknown-token"> error</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token keyword">in</span><span class="token unknown-token"> </span><span class="token keyword">guard</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> data </span><span class="token operator">=</span><span class="token unknown-token"> data</span><span class="token punctuation">,</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> json </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token keyword">try</span><span class="token operator">?</span><span class="token unknown-token"> </span><span class="token builtin">JSONSerialization</span><span class="token punctuation">.</span><span class="token function">jsonObject</span><span class="token punctuation">(</span><span class="token unknown-token">with</span><span class="token punctuation">:</span><span class="token unknown-token"> data</span><span class="token punctuation">,</span><span class="token unknown-token"> options</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token keyword">as</span><span class="token operator">?</span><span class="token unknown-token"> </span><span class="token punctuation">[</span><span class="token builtin">String</span><span class="token unknown-token"> </span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token builtin">Any</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> customerId </span><span class="token operator">=</span><span class="token unknown-token"> json</span><span class="token punctuation">[</span><span class="token string">&quot;customer&quot;</span><span class="token punctuation">]</span><span class="token unknown-token"> </span><span class="token keyword">as</span><span class="token operator">?</span><span class="token unknown-token"> </span><span class="token builtin">String</span><span class="token punctuation">,</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> customerEphemeralKeySecret </span><span class="token operator">=</span><span class="token unknown-token"> json</span><span class="token punctuation">[</span><span class="token string">&quot;ephemeralKey&quot;</span><span class="token punctuation">]</span><span class="token unknown-token"> </span><span class="token keyword">as</span><span class="token operator">?</span><span class="token unknown-token"> </span><span class="token builtin">String</span><span class="token punctuation">,</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> paymentIntentClientSecret </span><span class="token operator">=</span><span class="token unknown-token"> json</span><span class="token punctuation">[</span><span class="token string">&quot;paymentIntent&quot;</span><span class="token punctuation">]</span><span class="token unknown-token"> </span><span class="token keyword">as</span><span class="token operator">?</span><span class="token unknown-token"> </span><span class="token builtin">String</span><span class="token punctuation">,</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> publishableKey </span><span class="token operator">=</span><span class="token unknown-token"> json</span><span class="token punctuation">[</span><span class="token string">&quot;publishableKey&quot;</span><span class="token punctuation">]</span><span class="token unknown-token"> </span><span class="token keyword">as</span><span class="token operator">?</span><span class="token unknown-token"> </span><span class="token builtin">String</span><span class="token punctuation">,</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> </span><span class="token keyword">self</span><span class="token unknown-token"> </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token keyword">self</span><span class="token unknown-token"> </span><span class="token keyword">else</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token comment">// Handle error</span><span class="token unknown-token"> </span><span class="token keyword">return</span><span class="token unknown-token"> </span><span class="token punctuation">}</span><span class="token unknown-token"> </span><span class="token builtin">STPAPIClient</span><span class="token punctuation">.</span><span class="token unknown-token">shared</span><span class="token punctuation">.</span><span class="token unknown-token">publishableKey </span><span class="token operator">=</span><span class="token unknown-token"> publishableKey </span><span class="token comment">// MARK: Create a PaymentSheet instance</span><span class="token unknown-token"> </span><span class="token keyword">var</span><span class="token unknown-token"> configuration </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token builtin">PaymentSheet</span><span class="token punctuation">.</span><span class="token function">Configuration</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token unknown-token"> configuration</span><span class="token punctuation">.</span><span class="token unknown-token">merchantDisplayName </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token string">&quot;Example, Inc.&quot;</span><span class="token unknown-token"> configuration</span><span class="token punctuation">.</span><span class="token unknown-token">customer </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token punctuation">.</span><span class="token keyword">init</span><span class="token punctuation">(</span><span class="token unknown-token">id</span><span class="token punctuation">:</span><span class="token unknown-token"> customerId</span><span class="token punctuation">,</span><span class="token unknown-token"> ephemeralKeySecret</span><span class="token punctuation">:</span><span class="token unknown-token"> customerEphemeralKeySecret</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token comment">// Set `allowsDelayedPaymentMethods` to true if your business handles</span><span class="token unknown-token"> </span><span class="token comment">// delayed notification payment methods like US bank accounts.</span><span class="token unknown-token"> configuration</span><span class="token punctuation">.</span><span class="token unknown-token">allowsDelayedPaymentMethods </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token boolean">true</span><span class="token unknown-token"> </span><span class="token keyword">self</span><span class="token punctuation">.</span><span class="token unknown-token">paymentSheet </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token function">PaymentSheet</span><span class="token punctuation">(</span><span class="token unknown-token">paymentIntentClientSecret</span><span class="token punctuation">:</span><span class="token unknown-token"> paymentIntentClientSecret</span><span class="token punctuation">,</span><span class="token unknown-token"> configuration</span><span class="token punctuation">:</span><span class="token unknown-token"> configuration</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token builtin">DispatchQueue</span><span class="token punctuation">.</span><span class="token unknown-token">main</span><span class="token punctuation">.</span><span class="token unknown-token">async </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token keyword">self</span><span class="token punctuation">.</span><span class="token unknown-token">checkoutButton</span><span class="token punctuation">.</span><span class="token unknown-token">isEnabled </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token boolean">true</span><span class="token unknown-token"> </span><span class="token punctuation">}</span><span class="token unknown-token"> </span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token unknown-token"> task</span><span class="token punctuation">.</span><span class="token function">resume</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token punctuation">}</span><span class="token unknown-token"> </span><span class="token punctuation">}</span></code><span class="CodeBlock-lineNumbers" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span><div class="CodeBlock-highlightedRange default" style="top:567px;height:171px"></div></div></pre></div></div></div><p>When the customer taps the <strong>Checkout</strong> button, call <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">present</code> to present the PaymentSheet. After the customer completes the payment, Stripe dismisses the PaymentSheet and calls the completion block with <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://stripe.dev/stripe-ios/stripe-paymentsheet/Enums/PaymentSheetResult.html" tabindex="0"><span>PaymentSheetResult</span></a>.</p><div class="Box-root"><div data-language="swift" class="CodeBlock CodeBlock-numbered Box-root Box-background--blue800"><div class="CodeBlock-header Box-root Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween"><div title="" class="CodeBlock-filename Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px;margin-top:-4px"><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"></div><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"></div></div></div><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--stretch Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-12px;margin-top:-12px"><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button aria-label="Report incorrect code" type="button" class="UnstyledLink"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--warningCircle CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--warningCircle-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.5A6.5 6.5 0 0 0 14.5 8c0-3.592-2.9-6.5-6.5-6.5A6.5 6.5 0 0 0 1.5 8 6.5 6.5 0 0 0 8 14.5ZM8 16a8 8 0 0 0 8-8c0-4.419-3.57-8-8-8a8 8 0 0 0-8 8 8 8 0 0 0 8 8Z"></path><path d="M9.25 11.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM7.053 4.999a.949.949 0 1 1 1.894 0L8.79 8a.79.79 0 0 1-1.578 0l-.159-3Z"></path></svg></div></button></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink CodeBlock-copy-button" aria-label="Copy" type="button"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></div></div></div></div></div></div></div></div></div><div style="opacity:1;transform:none"><pre class="CodeBlock-content"><div class="CodeBlock-wrapper"><code class="CodeBlock-code"><span class="token atrule">@objc</span><span class="token unknown-token"> </span><span class="token keyword">func</span><span class="token unknown-token"> </span><span class="token function">didTapCheckoutButton</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token comment">// MARK: Start the checkout process</span><span class="token unknown-token"> paymentSheet</span><span class="token operator">?</span><span class="token punctuation">.</span><span class="token function">present</span><span class="token punctuation">(</span><span class="token unknown-token">from</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token keyword">self</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> paymentResult </span><span class="token keyword">in</span><span class="token unknown-token"> </span><span class="token comment">// MARK: Handle the payment result</span><span class="token unknown-token"> </span><span class="token keyword">switch</span><span class="token unknown-token"> paymentResult </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token keyword">case</span><span class="token unknown-token"> </span><span class="token punctuation">.</span><span class="token unknown-token">completed</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Your order is confirmed&quot;</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token keyword">case</span><span class="token unknown-token"> </span><span class="token punctuation">.</span><span class="token unknown-token">canceled</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Canceled!&quot;</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token keyword">case</span><span class="token unknown-token"> </span><span class="token punctuation">.</span><span class="token function">failed</span><span class="token punctuation">(</span><span class="token keyword">let</span><span class="token unknown-token"> error</span><span class="token punctuation">)</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Payment failed: </span><span class="token delimiter">\(</span><span class="token interpolation">error</span><span class="token delimiter">)</span><span class="token string">&quot;</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token punctuation">}</span><span class="token unknown-token"> </span><span class="token punctuation">}</span><span class="token unknown-token"> </span><span class="token punctuation">}</span></code><span class="CodeBlock-lineNumbers" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></div></pre></div></div></div></div></span></div></div><p>If <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">PaymentSheetResult</code> is <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">.<wbr/>completed</code>, inform the user (for example, by displaying an order confirmation screen).</p><p>Setting <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">allowsDelayedPaymentMethods</code> to true allows <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/payments/payment-methods#payment-notification" tabindex="0"><span>delayed notification</span></a> payment methods like US bank accounts. For these payment methods, the final payment status isn’t known when the <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">PaymentSheet</code> completes, and instead succeeds or fails later. If you support these types of payment methods, inform the customer their order is confirmed and only fulfill their order (for example, ship their product) when the payment is successful.</p></div></div><div aria-expanded="true" class="Section Section--numbered Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-set-up-return-url"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-set-up-return-url"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span>Set up a return <span class="Section-title-with-badges">URL<div class="Section-badge-list Box-root Padding-left--8"><div aria-label="Client-side" class="Badge Badge--variant--status Section-badge Box-root Box-background--gray100 Flex-inlineFlex Flex-alignItems--center Flex-direction--row"><span class="Badge-text Text-color--gray600 Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--inline">Client-side</span></div></div></span></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronUp Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronUp-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 11.619a.875.875 0 0 0 1.238 0L8 5.237l6.381 6.382a.875.875 0 1 0 1.238-1.238l-7-7a.875.875 0 0 0-1.238 0l-7 7a.875.875 0 0 0 0 1.238Z"></path></svg></div></div></div></a><div tabindex="-1" class="Section-content Box-root Padding-top--0 Padding-bottom--32"><p>The customer might navigate away from your app to authenticate (for example, in Safari or their banking app). To allow them to automatically return to your app after authenticating, <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app" tabindex="0"><span>configure a custom URL scheme</span></a> and set up your app delegate to forward the URL to the SDK. Stripe doesn’t support <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content" tabindex="0"><span>universal links</span></a>.</p><div class="TabGroup TabGroup--tabs Box-root"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="1" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">SceneDelegate</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="2" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">AppDelegate</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="3" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">SwiftUI</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div></div><div style="height:auto;overflow:hidden;width:100%;display:flex;justify-content:center;position:relative;flex-direction:row" class="ControlledContentGroup-content"><span style="width:100%;height:auto;z-index:1;opacity:1;position:relative;transform:none;transform-origin:50% 50% 0"><div class="TabGroup-Tab Box-root"><div id="codetab_15641d9fd456e671d8e96977cac2e11903b911bd" class="CodeTabGroup Box-root"><div class="CodeTabGroup-content-dropdown-select ControlledContentGroup-content" style="height:auto;overflow:hidden;width:100%;display:flex;justify-content:center;position:relative;flex-direction:row"><span style="width:100%;height:auto;origin-x:0.5px;origin-y:0.5px"><div class="Box-root"><div data-language="swift" class="CodeBlock CodeBlock-numbered Box-root Box-background--blue800"><div class="CodeBlock-header Box-root Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween"><div title="SceneDelegate.swift" class="CodeBlock-filename Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px;margin-top:-4px"><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--document CodeBlock-file-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--document-svg CodeBlock-file-icon-svg Icon-color-svg Icon-color--gray300-svg" height="12" width="12" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.25 11a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5h-5.5ZM4.5 8.75A.75.75 0 0 1 5.25 8h5.5a.75.75 0 0 1 0 1.5h-5.5a.75.75 0 0 1-.75-.75ZM9.25 5a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M14.5 13.5v-11A2.5 2.5 0 0 0 12 0H6.328a2 2 0 0 0-1.414.586L2.086 3.414A2 2 0 0 0 1.5 4.828V13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5ZM13 2.5a1 1 0 0 0-1-1H8v3.25A1.75 1.75 0 0 1 6.25 6.5H3v7a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-11Zm-6.672-1H6.5v3.25a.25.25 0 0 1-.25.25H3v-.172a.5.5 0 0 1 .146-.353l2.829-2.829a.5.5 0 0 1 .353-.146Z"></path></svg></div></div><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto">SceneDelegate.swift</div></div></div><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div role="codeblock-dropdown" class="sn-token-provider ⚙ rs32 t3 t4 t5 t6 t7 t8 t9 ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t1a t1b t1c t1d t1e t1f t1g t1h t1i t1j t1k t1l t1m t1n t1o t1p t1q t1r t1s t1t t1u t1v t1w t1x t1y t1z t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t2a t2b t2c t2d t2e t2f t2g t2h t2i t2j t2k t2l t2m t2n t2o t2p t2q t2r t2s t2t t2u t2v t2w t2x t2y t2z t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t3a t3b t3c t3d t3e t3f t3g t3h t3i t3j t3k t3l t3m t3n t3o t3p t3q t3r t3s t3t t3u t3v t3w t3x t3y t3z t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t4a t4b t4c t4d t4e t4f t4g t4h t4i t4j t4k t4l t4m t4n t4o t4p t4q t4r t4s t4t t4u t4v t4w t4x t4y t4z t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t5a t5b t5c t5d t5e t5f t5g t5h t5i t5j t5k t5l t5m t5n t5o t5p t5q t5r t5s as3o as34h as316 as347 as34i ⚙10cnxl9"><a tabindex="0" role="button" aria-haspopup="true" aria-expanded="false" id="react-aria-15" style="user-select:none" class="⚙ rs30 rs31 rs31 rs32 as32 as33 as34 as34j as34k as34l as34m as3j as32h as34n as34o as32j as3o as3r as32e ⚙701j5a">Swift<svg aria-hidden="true" width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as34p as31y as31z ⚙1wa8kue"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.926 7.243a.8.8 0 0 1 1.131-.017L6 10.085l2.943-2.859a.8.8 0 0 1 1.114 1.148l-3.5 3.4a.798.798 0 0 1-1.114 0l-3.5-3.4a.8.8 0 0 1-.017-1.131ZM5.443.226a.798.798 0 0 1 1.114 0l3.5 3.4a.8.8 0 0 1-1.114 1.148L6 1.915 3.057 4.774a.8.8 0 1 1-1.114-1.148l3.5-3.4Z"></path></svg></a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--stretch Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-12px;margin-top:-12px"><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button aria-label="Report incorrect code" type="button" class="UnstyledLink"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--warningCircle CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--warningCircle-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.5A6.5 6.5 0 0 0 14.5 8c0-3.592-2.9-6.5-6.5-6.5A6.5 6.5 0 0 0 1.5 8 6.5 6.5 0 0 0 8 14.5ZM8 16a8 8 0 0 0 8-8c0-4.419-3.57-8-8-8a8 8 0 0 0-8 8 8 8 0 0 0 8 8Z"></path><path d="M9.25 11.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM7.053 4.999a.949.949 0 1 1 1.894 0L8.79 8a.79.79 0 0 1-1.578 0l-.159-3Z"></path></svg></div></button></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink CodeBlock-copy-button" aria-label="Copy" type="button"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></div></div></div></div></div></div></div></div></div><div style="opacity:1;transform:none"><pre class="CodeBlock-content"><div class="CodeBlock-wrapper"><code class="CodeBlock-code"><span class="token comment">// This method handles opening custom URL schemes (for example, &quot;your-app://stripe-redirect&quot;)</span><span class="token unknown-token"> </span><span class="token keyword">func</span><span class="token unknown-token"> </span><span class="token function">scene</span><span class="token punctuation">(</span><span class="token number">_</span><span class="token unknown-token"> scene</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token builtin">UIScene</span><span class="token punctuation">,</span><span class="token unknown-token"> openURLContexts </span><span class="token builtin">URLContexts</span><span class="token punctuation">:</span><span class="token unknown-token"> </span><span class="token builtin">Set</span><span class="token operator">&lt;</span><span class="token builtin">UIOpenURLContext</span><span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token keyword">guard</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> url </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token builtin">URLContexts</span><span class="token punctuation">.</span><span class="token builtin">first</span><span class="token operator">?</span><span class="token punctuation">.</span><span class="token unknown-token">url </span><span class="token keyword">else</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token keyword">return</span><span class="token unknown-token"> </span><span class="token punctuation">}</span><span class="token unknown-token"> </span><span class="token keyword">let</span><span class="token unknown-token"> stripeHandled </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token builtin">StripeAPI</span><span class="token punctuation">.</span><span class="token function">handleURLCallback</span><span class="token punctuation">(</span><span class="token unknown-token">with</span><span class="token punctuation">:</span><span class="token unknown-token"> url</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token keyword">if</span><span class="token unknown-token"> </span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token unknown-token">stripeHandled</span><span class="token punctuation">)</span><span class="token unknown-token"> </span><span class="token punctuation">{</span><span class="token unknown-token"> </span><span class="token comment">// This was not a Stripe url – handle the URL normally as you would</span><span class="token unknown-token"> </span><span class="token punctuation">}</span><span class="token unknown-token"> </span><span class="token punctuation">}</span></code><span class="CodeBlock-lineNumbers" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></div></pre></div></div></div></span></div></div></div></span></div></div><p>Additionally, set the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:6Stripe12PaymentSheetC13ConfigurationV9returnURLSSSgvp" tabindex="0"><span>returnURL</span></a> on your <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html" tabindex="0"><span>PaymentSheet.Configuration</span></a> object to the URL for your app.</p><div data-language="swift" class="CodeBlock CodeBlock-numbered Box-root Box-background--blue800"><div class="CodeBlock-header Box-root Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween"><div title="" class="CodeBlock-filename Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-4px;margin-top:-4px"><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"></div><div class="Box-root Box-hideIfEmpty Margin-top--4 Margin-left--4" style="pointer-events:auto"></div></div></div><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-alignItems--stretch Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-12px;margin-top:-12px"><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button aria-label="Report incorrect code" type="button" class="UnstyledLink"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--warningCircle CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--warningCircle-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.5A6.5 6.5 0 0 0 14.5 8c0-3.592-2.9-6.5-6.5-6.5A6.5 6.5 0 0 0 1.5 8 6.5 6.5 0 0 0 8 14.5ZM8 16a8 8 0 0 0 8-8c0-4.419-3.57-8-8-8a8 8 0 0 0-8 8 8 8 0 0 0 8 8Z"></path><path d="M9.25 11.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM7.053 4.999a.949.949 0 1 1 1.894 0L8.79 8a.79.79 0 0 1-1.578 0l-.159-3Z"></path></svg></div></button></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><button class="UnstyledLink CodeBlock-copy-button" aria-label="Copy" type="button"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CodeBlock-action-icon Icon-color Icon-color--gray300 Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CodeBlock-action-icon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></div></div></div></div></div></div></div></div></div><div style="opacity:1;transform:none"><pre class="CodeBlock-content"><div class="CodeBlock-wrapper"><code class="CodeBlock-code"><span class="token keyword">var</span><span class="token unknown-token"> configuration </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token builtin">PaymentSheet</span><span class="token punctuation">.</span><span class="token function">Configuration</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token unknown-token"> configuration</span><span class="token punctuation">.</span><span class="token unknown-token">returnURL </span><span class="token operator">=</span><span class="token unknown-token"> </span><span class="token string">&quot;your-app://stripe-redirect&quot;</span></code><span class="CodeBlock-lineNumbers" aria-hidden="true"><span></span><span></span></span></div></pre></div></div></div></div><div aria-expanded="true" class="Section Section--numbered Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-post-payment"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-post-payment"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span>Handle post-payment <span class="Section-title-with-badges">events<div class="Section-badge-list Box-root Padding-left--8"><div aria-label="Server-side" class="Badge Badge--variant--status Section-badge Box-root Box-background--gray100 Flex-inlineFlex Flex-alignItems--center Flex-direction--row"><span class="Badge-text Text-color--gray600 Text-fontSize--12 Text-fontWeight--medium Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--inline">Server-side</span></div></div></span></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronUp Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronUp-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 11.619a.875.875 0 0 0 1.238 0L8 5.237l6.381 6.382a.875.875 0 1 0 1.238-1.238l-7-7a.875.875 0 0 0-1.238 0l-7 7a.875.875 0 0 0 0 1.238Z"></path></svg></div></div></div></a><div tabindex="-1" class="Section-content Box-root Padding-top--0 Padding-bottom--32"><p>Stripe sends a <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/events/types#event_types-payment_intent.succeeded" tabindex="0"><span>payment_intent.succeeded</span></a> event when the payment completes. Use the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://dashboard.stripe.com/webhooks" tabindex="0"><span>Dashboard webhook tool</span></a> or follow the <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/webhooks/quickstart" tabindex="0"><span>webhook guide</span></a> to receive these events and run actions, such as sending an order confirmation email to your customer, logging the sale in a database, or starting a shipping workflow.</p><p>Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events is what enables you to accept <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="https://stripe.com/payments/payment-methods-guide" tabindex="0"><span>different types of payment methods</span></a> with a single integration.</p><p>In addition to handling the <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">payment<!-- -->_<wbr/>intent<!-- -->.<wbr/>succeeded</code> event, we recommend handling these other events when collecting payments with the Payment Element:</p><div class="Table Table--striped ⚙ as3t as32b as34z as350 as32v as351 as352 as353 as354 as355 as356 ⚙dccqgk"><table class="⚙ as357 as358 as359 as35a as32v as35b as338 as32u ⚙1ywd97a"><thead><tr class="⚙ as35c ⚙8byfbi"><th class="⚙ rs31 as35d as35e as35f as35g as35h as33s as32k as32w as35i ⚙9lovz1" scope="column">Event</th><th class="⚙ rs31 as35d as35e as35f as35g as35h as33s as32k as32w as35i ⚙9lovz1" scope="column">Description</th><th class="⚙ rs31 as35d as35e as35f as35g as35h as33s as32k as32w as35i ⚙9lovz1" scope="column">Action</th></tr></thead><tbody><tr class="⚙ as35c ⚙8byfbi"><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig"><a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/events/types?lang=php#event_types-payment_intent.succeeded" tabindex="0"><span>payment_intent.succeeded</span></a></td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Sent when a customer successfully completes a payment.</td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Send the customer an order confirmation and <span><span><span tabindex="0" class="Glossary-term Text-color--blue Text-fontWeight--medium Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">fulfill</span></span></span> their order.</td></tr><tr class="⚙ as35c ⚙8byfbi"><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig"><a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/events/types?lang=php#event_types-payment_intent.processing" tabindex="0"><span>payment_intent.processing</span></a></td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Sent when a customer successfully initiates a payment, but the payment has yet to complete. This event is most commonly sent when the customer initiates a bank debit. It’s followed by either a <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">payment<!-- -->_<wbr/>intent<!-- -->.<wbr/>succeeded</code> or <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">payment<!-- -->_<wbr/>intent<!-- -->.<wbr/>payment<!-- -->_<wbr/>failed</code> event in the future.</td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Send the customer an order confirmation that indicates their payment is pending. For digital goods, you might want to fulfill the order before waiting for payment to complete.</td></tr><tr class="⚙ as35c ⚙8byfbi"><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig"><a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/api/events/types?lang=php#event_types-payment_intent.payment_failed" tabindex="0"><span>payment_intent.payment_failed</span></a></td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Sent when a customer attempts a payment, but the payment fails.</td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">If a payment transitions from <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">processing</code> to <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">payment<!-- -->_<wbr/>failed</code>, offer the customer another attempt to pay.</td></tr></tbody></table></div></div></div><div aria-expanded="true" class="Section Section--numbered Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-test-the-integration"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-test-the-integration"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span>Test the integration<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronUp Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronUp-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 11.619a.875.875 0 0 0 1.238 0L8 5.237l6.381 6.382a.875.875 0 1 0 1.238-1.238l-7-7a.875.875 0 0 0-1.238 0l-7 7a.875.875 0 0 0 0 1.238Z"></path></svg></div></div></div></a><div tabindex="-1" class="Section-content Box-root Padding-top--0 Padding-bottom--32"><div class="TabGroup TabGroup--tabs Box-root"><div role="tablist" class="ContentTabs Box-root Box-divider--light-bottom-1 Flex-flex"><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="1" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">Cards</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="2" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">Bank redirects</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div><div class="ContentTab TabGroup-tab Box-root"><div style="outline:none" tabindex="-1"><div class="Box-root Flex-flex"><button aria-posinset="3" aria-selected="false" aria-setsize="3" class="UnstyledLink ContentTab-link" role="tab" tabindex="-1" type="button"><div class="ContentTab-inner Box-root Padding-horizontal--20 Padding-vertical--16"><span class="Text-color--gray Text-align--center Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block"><span class="ContentTab-text"><div class="Box-root" style="pointer-events:none;display:inline-flex"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto">Bank debits</div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"></div></div></div></span></span><div class="ContentTab-chip ContentTab-chip--small Box-root Box-background--blue"></div></div></button></div></div></div></div><div style="height:auto;overflow:hidden;width:100%;display:flex;justify-content:center;position:relative;flex-direction:row" class="ControlledContentGroup-content"><span style="width:100%;height:auto;z-index:1;opacity:1;position:relative;transform:none;transform-origin:50% 50% 0"><div class="TabGroup-Tab Box-root"><div class="Table Table--striped ⚙ as3t as32b as34z as350 as32v as351 as352 as353 as354 as355 as356 ⚙dccqgk"><table class="⚙ as357 as358 as359 as35a as32v as35b as338 as32u ⚙1ywd97a"><thead><tr class="⚙ as35c ⚙8byfbi"><th class="⚙ rs31 as35d as35e as35f as35g as35h as33s as32k as32w as35i ⚙9lovz1" scope="column">Card number</th><th class="⚙ rs31 as35d as35e as35f as35g as35h as33s as32k as32w as35i ⚙9lovz1" scope="column">Scenario</th><th class="⚙ rs31 as35d as35e as35f as35g as35h as33s as32k as32w as35i ⚙9lovz1" scope="column">How to test</th></tr></thead><tbody><tr class="⚙ as35c ⚙8byfbi"><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig"><button title="Copy to clipboard" class="UnstyledLink InlineLink Text-color--blue CardNumber-Clipboard" type="button"><span class="CardNumber"><span>4242</span><span>4242</span><span>4242</span><span>4242</span></span><div aria-hidden="true" title="Copy to clipboard" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CardNumber-CopyIcon Icon-color Icon-color--gray300 Box-root Flex-flex" style="position:relative;top:+1px"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CardNumber-CopyIcon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">The card payment succeeds and doesn’t require authentication.</td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Fill out the credit card form using the credit card number with any expiration, CVC, and postal code.</td></tr><tr class="⚙ as35c ⚙8byfbi"><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig"><button title="Copy to clipboard" class="UnstyledLink InlineLink Text-color--blue CardNumber-Clipboard" type="button"><span class="CardNumber"><span>4000</span><span>0025</span><span>0000</span><span>3155</span></span><div aria-hidden="true" title="Copy to clipboard" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CardNumber-CopyIcon Icon-color Icon-color--gray300 Box-root Flex-flex" style="position:relative;top:+1px"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CardNumber-CopyIcon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">The card payment requires <span><span><a title="Strong Customer Authentication" class="UnstyledLink InlineLink Text-color--blue Glossary-term no-api-tag" href="/strong-customer-authentication">authentication</a></span></span>.</td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Fill out the credit card form using the credit card number with any expiration, CVC, and postal code.</td></tr><tr class="⚙ as35c ⚙8byfbi"><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig"><button title="Copy to clipboard" class="UnstyledLink InlineLink Text-color--blue CardNumber-Clipboard" type="button"><span class="CardNumber"><span>4000</span><span>0000</span><span>0000</span><span>9995</span></span><div aria-hidden="true" title="Copy to clipboard" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CardNumber-CopyIcon Icon-color Icon-color--gray300 Box-root Flex-flex" style="position:relative;top:+1px"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CardNumber-CopyIcon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">The card is declined with a decline code like <code class="InlineCode ⚙ rs31 as34q as31x as34r as34s as36 as34t as34u as323 as33t as34v as34w as34x as34y ⚙14oglxj">insufficient<!-- -->_<wbr/>funds</code>.</td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Fill out the credit card form using the credit card number with any expiration, CVC, and postal code.</td></tr><tr class="⚙ as35c ⚙8byfbi"><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig"><button title="Copy to clipboard" class="UnstyledLink InlineLink Text-color--blue CardNumber-Clipboard" type="button"><span class="CardNumber"><span>6205</span><span>5000</span><span>0000</span><span>0000</span><span>004</span></span><div aria-hidden="true" title="Copy to clipboard" class="SVGInline SVGInline--cleaned SVG Icon Icon--clipboard CardNumber-CopyIcon Icon-color Icon-color--gray300 Box-root Flex-flex" style="position:relative;top:+1px"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--clipboard-svg CardNumber-CopyIcon-svg Icon-color-svg Icon-color--gray300-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.75 11.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Zm0-3a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.83 2H12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h1.17a3.001 3.001 0 0 1 5.66 0ZM8 1.5A1.5 1.5 0 0 1 9.5 3v1h-3V3A1.5 1.5 0 0 1 8 1.5Zm3 3a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-1H4a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V4a.5.5 0 0 0-.5-.5h-1v1Z"></path></svg></div></button></td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">The UnionPay card has a variable length of 13-19 digits.</td><td class="⚙ as35e as3f as35j as322 as35k as35l as35m ⚙1pwykig">Fill out the credit card form using the credit card number with any expiration, CVC, and postal code.</td></tr></tbody></table></div></div></span></div></div><p>See <a class="Link ⚙ rs30 rs31 rs31 as32 as33 as34 as35 as33z as340 as3z as310 as341 as32e as330 as32z as331 as342 as343 as344 ⚙ajq4ta" href="/testing" tabindex="0"><span>Testing</span></a> for additional information to test your integration.</p></div></div><div aria-expanded="false" class="Section Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-link"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-link"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span class="Section--optional Text-color--default Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Optional</span><span>Enable Link<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div></div></div></a></div><div aria-expanded="false" class="Section Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-apple-pay"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-apple-pay"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span class="Section--optional Text-color--default Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Optional</span><span>Enable Apple Pay<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div></div></div></a></div><div aria-expanded="false" class="Section Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-card-scanning"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-card-scanning"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span class="Section--optional Text-color--default Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Optional</span><span>Enable card scanning<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div></div></div></a></div><div aria-expanded="false" class="Section Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-ach"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-ach"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span class="Section--optional Text-color--default Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Optional</span><span>Enable ACH payments<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div></div></div></a></div><div aria-expanded="false" class="Section Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-customization"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-customization"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span class="Section--optional Text-color--default Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Optional</span><span>Customize the sheet<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div></div></div></a></div><div aria-expanded="false" class="Section Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-logout"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-logout"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span class="Section--optional Text-color--default Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Optional</span><span>Handle user logout<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div></div></div></a></div><div aria-expanded="false" class="Section Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-flowcontroller"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-flowcontroller"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span class="Section--optional Text-color--default Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Optional</span><span>Complete payment in your UI<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div></div></div></a></div><div aria-expanded="false" class="Section Box-root"><a class="UnstyledLink InlineLink Text-color--blue" href="#ios-cvc-recollection"><div class="Box-root Padding-top--16 Padding-bottom--12"><div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--spaceBetween"><h2 class="Heading Heading--anchored Section-header" id="ios-cvc-recollection"><span class="⚙ rs32 as3o as3r as347 ⚙1lbcpb3"><span class="algolia-heading-content ⚙ rs32 as3o as3r as347 as326 ⚙1ef4l73"><span class="Section--optional Text-color--default Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Optional</span><span>Enable CVC recollection on confirmation<div class="Section-badge-list Box-root Padding-left--8"></div></span></span><img alt="" src="https://b.stripecdn.com/docs-statics-srv/assets/fcc3a1c24df6fcffface6110ca4963de.svg" width="13" height="13" class="Heading-Anchor"/></span></h2><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--chevronDown Section-expand-icon Icon-color Icon-color--gray Box-root Flex-flex"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--chevronDown-svg Section-expand-icon-svg Icon-color-svg Icon-color--gray-svg" height="14" width="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M.381 4.381a.875.875 0 0 1 1.238 0L8 10.763l6.381-6.382A.875.875 0 1 1 15.62 5.62l-7 7a.875.875 0 0 1-1.238 0l-7-7a.875.875 0 0 1 0-1.238Z"></path></svg></div></div></div></a></div><div class="⚙ rs32 as35n as35o as35p as3q as3r as3o as34t ⚙jmse5h"><svg role="status" aria-label="Loading" aria-hidden="true" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="⚙ as31u as31v as31w as3p as32k as35q as35r as35s as35t as35u as35v ⚙1yyrvl9"><g transform="translate(1 1)" fill-rule="nonzero"><circle cx="11" cy="11" r="11" fill="none"></circle><path d="M10.998 22a.846.846 0 0 1 0-1.692 9.308 9.308 0 0 0 0-18.616 9.286 9.286 0 0 0-7.205 3.416.846.846 0 1 1-1.31-1.072A10.978 10.978 0 0 1 10.998 0c6.075 0 11 4.925 11 11s-4.925 11-11 11z" fill="inherit"></path></g></svg></div></div></div></div></article><div class="Footer Box-root Margin-top--80" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-20px;margin-top:-20px"><div class="Box-root Box-hideIfEmpty Margin-top--20 Margin-left--20" style="pointer-events:auto"><div class="FeedbackContainer"><div style="opacity:1"><div class="⚙ as35w as35x ⚙zfstxn"><div class="⚙ rs32 as35y as3o as3r ⚙13ytya8"><span class="⚙ rs31 as35z ⚙cbv6cm">Was this page helpful?</span><div class="⚙"><div class="sn-1cmisr4 sn-1rzg82o sn-16sbyrz"><a class="sn-1vwnd89 sn-1vwnd89-disabled-false sn-1vwnd89-pressed-false sn-1w3n5ld sn-1w3n5ld-size-medium sn-1w3n5ld-type-secondary sn-9hkfqz sn-1cmisr4 sn-tlgbr3 sn-v0fir4 sn-zevn6e sn-153u4ok sn-1k1rrhg sn-12ey9he sn-186kdhj sn-1rdnowh sn-8cs70r sn-1ty5nmm sn-16iz8cd sn-1aipvhu sn-108ojii sn-ytqtrc sn-1cj2i3h sn-s9lwb5 sn-1ul9b8v" tabindex="0" role="button"><svg class="sn-1mj7mtw sn-1mj7mtw-size-xsmall sn-bdr0jk" aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.152 0a2.62 2.62 0 0 1 2.612 2.838l-.255 3.054a.1.1 0 0 0 .1.108H13.5C14.88 6 16 7.143 16 8.523c0 .31-.072.622-.211.9L15.25 10.5v1.145a1 1 0 0 1-.224.63l-.588.725-.28.895A3 3 0 0 1 11.294 16H2a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2l.001-.002 2.545-5.94A1.747 1.747 0 0 1 8.152 0ZM5.5 7.308V14.5h5.794a1.5 1.5 0 0 0 1.432-1.053l.28-.894a1.5 1.5 0 0 1 .267-.499l.477-.587V10.5a1.5 1.5 0 0 1 .158-.67l.54-1.079a.519.519 0 0 0 .052-.228 1.02 1.02 0 0 0-1-1.023h-2.891a1.6 1.6 0 0 1-1.595-1.733l.255-3.053A1.12 1.12 0 0 0 8.152 1.5a.247.247 0 0 0-.227.15L5.5 7.308ZM4 8.5H2a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 .5.5h2v-6Z"></path></svg>Yes</a><a class="sn-1vwnd89 sn-1vwnd89-disabled-false sn-1vwnd89-pressed-false sn-1w3n5ld sn-1w3n5ld-size-medium sn-1w3n5ld-type-secondary sn-9hkfqz sn-1cmisr4 sn-tlgbr3 sn-v0fir4 sn-zevn6e sn-153u4ok sn-1k1rrhg sn-12ey9he sn-186kdhj sn-1rdnowh sn-8cs70r sn-1ty5nmm sn-16iz8cd sn-1aipvhu sn-108ojii sn-ytqtrc sn-1cj2i3h sn-s9lwb5 sn-1ul9b8v" tabindex="0" role="button"><svg class="sn-1mj7mtw sn-1mj7mtw-size-xsmall sn-bdr0jk" aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.848 16a2.62 2.62 0 0 1-2.611-2.838l.254-3.054a.1.1 0 0 0-.1-.108H2.5C1.12 10 0 8.857 0 7.477c0-.31.072-.622.211-.9L.75 5.5V4.355a1 1 0 0 1 .224-.63L1.563 3l.28-.895A3 3 0 0 1 4.705 0H14a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2l-.001.002-2.545 5.94A1.747 1.747 0 0 1 7.848 16ZM10.5 8.692V1.5H4.706a1.5 1.5 0 0 0-1.432 1.053l-.28.894a1.5 1.5 0 0 1-.267.499l-.477.587V5.5a1.5 1.5 0 0 1-.158.67l-.54 1.079a.519.519 0 0 0-.052.228c0 .57.466 1.023 1 1.023h2.891a1.6 1.6 0 0 1 1.595 1.733l-.255 3.053A1.12 1.12 0 0 0 7.848 14.5a.247.247 0 0 0 .227-.15L10.5 8.692ZM12 7.5h2a.5.5 0 0 0 .5-.5V2a.5.5 0 0 0-.5-.5h-2v6Z"></path></svg>No</a></div></div></div></div></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--20 Margin-left--20" style="pointer-events:auto"><div data-db-analytics-name="docs_footer" class="Footer-content Box-root Box-divider--light-top-1 Padding-vertical--32 Flex-flex Flex-justifyContent--spaceBetween"><div class="Footer-links Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root Margin-top--4 Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div class="Box-root Margin-right--12"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--support Icon-color Icon-color--gray600 Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--support-svg Icon-color-svg Icon-color--gray600-svg" height="16" width="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-1.5 0a6.472 6.472 0 0 1-1.404 4.035l-1.07-1.07a5.032 5.032 0 0 1-1.06 1.061l1.07 1.07A6.472 6.472 0 0 1 8 14.5a6.472 6.472 0 0 1-4.035-1.404l1.07-1.07A4.98 4.98 0 0 0 8 13a5 5 0 0 0 4.026-7.965l1.07-1.07A6.472 6.472 0 0 1 14.5 8Zm-2.464-5.096A6.472 6.472 0 0 0 8 1.5a6.472 6.472 0 0 0-4.035 1.404l1.07 1.07A4.978 4.978 0 0 1 8 3c1.11 0 2.136.362 2.966.974l1.07-1.07Zm-8.062 8.062A4.977 4.977 0 0 1 3 8c0-1.11.362-2.136.974-2.965l-1.07-1.07A6.472 6.472 0 0 0 1.5 8c0 1.525.525 2.927 1.404 4.036l1.07-1.07ZM11.5 8a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0Z"></path></svg></div></div><span style="margin-top:-1px" class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">Need help? <a target="_blank" data-db-analytics-name="docs_footer_support_link" class="UnstyledLink InlineLink Text-color--blue" href="https://support.stripe.com/" rel="noopener noreferrer">Contact Support</a>.</span></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root Margin-top--4 Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div class="Box-root Margin-right--12"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--rocket Icon-color Icon-color--gray600 Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--rocket-svg Icon-color-svg Icon-color--gray600-svg" height="16" width="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.959 5.473a1.013 1.013 0 1 1-1.433-1.432 1.013 1.013 0 0 1 1.433 1.432Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M14.842 1.742a.75.75 0 0 0-.584-.585c-1.957-.4-4.02-.105-5.548.808a12.33 12.33 0 0 0-1.404.968.76.76 0 0 0-.085.004l-3.223.358a.75.75 0 0 0-.54.33L.591 7.922a.75.75 0 0 0 .442 1.144l2.73.682a.75.75 0 0 0 .135.185l2.168 2.168a.75.75 0 0 0 .185.135l.682 2.73a.75.75 0 0 0 1.144.442l4.297-2.865a.75.75 0 0 0 .33-.541l.357-3.223a.74.74 0 0 0 .005-.085c.335-.417.657-.883.969-1.404.912-1.528 1.206-3.591.806-5.548Zm-6.71 11.827-.384-1.534c1.08-.316 2.092-.705 3.032-1.29a8.95 8.95 0 0 0 .6-.41l-.128 1.154-3.12 2.08ZM3.964 8.252c.316-1.08.705-2.092 1.29-3.032a8.95 8.95 0 0 1 .41-.6l-1.154.128-2.08 3.12 1.534.384Zm5.514-5c1.045-.623 2.5-.902 3.978-.709.193 1.477-.086 2.933-.71 3.978-.855 1.433-1.76 2.326-2.76 2.95-.914.57-1.94.937-3.163 1.265l-1.56-1.56c.328-1.223.695-2.249 1.265-3.162.624-1.002 1.517-1.906 2.95-2.762Z"></path><path d="M1.76 11.03a.75.75 0 0 1 1.06 0l2.15 2.15a.75.75 0 1 1-1.061 1.06L1.76 12.09a.75.75 0 0 1 0-1.06Z"></path></svg></div></div><span style="margin-top:-1px" class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">Join our <a target="_blank" data-db-analytics-name="docs_footer_stripe_insiders_link" class="UnstyledLink InlineLink Text-color--blue" href="https://insiders.stripe.dev/" rel="noopener noreferrer">early access programme</a>.</span></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root Margin-top--4 Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div class="Box-root Margin-right--12"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--document Icon-color Icon-color--gray600 Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--document-svg Icon-color-svg Icon-color--gray600-svg" height="16" width="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.25 11a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5h-5.5ZM4.5 8.75A.75.75 0 0 1 5.25 8h5.5a.75.75 0 0 1 0 1.5h-5.5a.75.75 0 0 1-.75-.75ZM9.25 5a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M14.5 13.5v-11A2.5 2.5 0 0 0 12 0H6.328a2 2 0 0 0-1.414.586L2.086 3.414A2 2 0 0 0 1.5 4.828V13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5ZM13 2.5a1 1 0 0 0-1-1H8v3.25A1.75 1.75 0 0 1 6.25 6.5H3v7a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-11Zm-6.672-1H6.5v3.25a.25.25 0 0 1-.25.25H3v-.172a.5.5 0 0 1 .146-.353l2.829-2.829a.5.5 0 0 1 .353-.146Z"></path></svg></div></div><span style="margin-top:-1px" class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">Check out our <a target="_blank" class="UnstyledLink InlineLink Text-color--blue" href="https://stripe.com/blog/changelog" rel="noopener noreferrer">product changelog</a>.</span></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root Margin-top--4 Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div class="Box-root Margin-right--12"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--help Icon-color Icon-color--gray600 Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--help-svg Icon-color-svg Icon-color--gray600-svg" height="16" width="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.886 4.923c-.232.25-.386.63-.386 1.122a.75.75 0 1 1-1.5 0c0-.803.254-1.57.788-2.144C6.33 3.32 7.1 3 8 3c.9 0 1.67.32 2.212.901.534.574.788 1.341.788 2.144 0 1.234-.869 1.922-1.436 2.332-.094.068-.178.127-.255.181-.19.134-.33.233-.449.343a.64.64 0 0 0-.11.121V9.5a.75.75 0 0 1-1.5 0V9c0-.563.326-.956.593-1.202.198-.183.457-.364.672-.516l.17-.121c.559-.404.815-.693.815-1.116 0-.492-.154-.872-.386-1.122C8.888 4.68 8.533 4.5 8 4.5c-.533 0-.888.18-1.114.423Z"></path><path d="M9 12a1.001 1.001 0 0 1-2 0 1.001 1.001 0 0 1 2 0Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.5A6.5 6.5 0 1 0 1.5 8c0 1.022.179 1.608.603 2.399.316.59.407 1.313.178 2.003l-.66 1.976 1.977-.659a2.541 2.541 0 0 1 2.004.178c.79.424 1.376.603 2.398.603ZM8 16a8 8 0 1 0-8-8c0 1.29.25 2.117.78 3.107.136.252.168.549.078.82l-.807 2.42a1 1 0 0 0-.051.315V15a1 1 0 0 0 1 1h.338a1 1 0 0 0 .316-.051l2.419-.807c.271-.09.568-.057.82.078.99.53 1.817.78 3.107.78Z"></path></svg></div></div><span style="margin-top:-1px" class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">Questions? <a target="_blank" data-db-analytics-name="docs_footer_sales_link" class="UnstyledLink InlineLink Text-color--blue" href="https://stripe.com/contact/sales" rel="noopener noreferrer">Contact Sales</a>.</span></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Footer-powered-by Box-root"><span class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Powered by <a target="_blank" class="UnstyledLink InlineLink Text-color--blue" href="https://markdoc.dev" rel="noopener noreferrer">Markdoc</a></span></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Footer-selectors Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--row Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><div style="outline:none" tabindex="-1"><button color="gray" aria-controls="menu2395" aria-haspopup="menu" id="menu2395-button" aria-label="Change the country setting" type="button" class="UnstyledLink"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div title="SG" class="SVGInline SVGInline--cleaned SVG Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg class="SVGInline-svg SVGInline--cleaned-svg SVG-svg" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g fill="none"><path fill="#F6F9FC" d="M16 8v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8h16Z"></path><path fill="#EAEEF3" d="M14 14H2a2 2 0 0 1-2-2V8h1v4a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V8h1v4a2 2 0 0 1-2 2Z"></path><path fill="#E25950" d="M0 8V4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4H0Z"></path><path fill="#FFF" d="M3.364 5.205c0 .75.606 1.36 1.356 1.363a1.691 1.691 0 0 1-1.015.342 1.705 1.705 0 1 1 0-3.41c.382 0 .73.13 1.015.342a1.363 1.363 0 0 0-1.356 1.363ZM9.02 5a.5.5 0 1 1-.04-1 .5.5 0 0 1 .04 1ZM7.5 4.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1ZM7 6a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0ZM6 5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2.5.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Z"></path></g></svg></div></div></div></button></div></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root Flex-flex"><div class="Box-root Flex-flex"><div style="outline:none" tabindex="-1"><button aria-controls="menu2396" aria-haspopup="menu" id="menu2396-button" aria-label="Change the language setting" type="button" class="UnstyledLink"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--locale Icon-color Icon-color--gray Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg xmlns="http://www.w3.org/2000/svg" viewBox="2 2 16 16" aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--locale-svg Icon-color-svg Icon-color--gray-svg" height="16" width="16"><path d="M11.6 13.1l-2 2.5c-.3.3-.7.3-.9 0-.1-.1-.2-.3-.2-.5v-2c-2.5-.5-4-2.3-4-4.4 0-2.5 2.1-4.5 5.5-4.5s5.5 2 5.5 4.5c-.1 2.3-1.7 4.1-3.9 4.4z"></path></svg></div></div></div></button></div></div></div></div></div></div></div></div></div><div id="footer-digest-signup" class="Footer-digest-signup Box-root Margin-top--4"><div style="opacity:1"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8" style="pointer-events:auto"><label for="Footer-DevDigest"><span class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">Sign up for developer updates:</span></label></div><div class="Box-root Box-hideIfEmpty Margin-top--8" style="pointer-events:auto"><div class="Box-root Flex-flex Flex-direction--column"><div class="PressableCore PressableCore--cursor--text PressableCore--height--large PressableCore--radius--all PressableCore--width PressableCore--width--maximized PressableField InputBase Box-root Flex-inlineFlex" style="background-color:#ffffff;box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 1px rgba(60, 66, 87, 0.16), 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0)"><div class="PressableCore-base Box-root"><div class="InputBase-row Box-root Flex-flex"><div class="InputBase-item Box-root Flex-flex" style="align-self:stretch;flex-basis:auto;flex-grow:1;flex-shrink:1"><div class="PressableCore PressableCore--cursor--text PressableCore--height--large PressableCore--radius--all PressableCore--width PressableCore--width--maximized PressableField TextInput InputBase-pressable Box-root Flex-inlineFlex" style="box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0), 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0)"><div class="PressableCore-base Box-root"><input type="email" aria-invalid="false" id="Footer-DevDigest" placeholder="" style="color:#3c4257" value="" class="Input Input--nowrap PressableContext Padding-horizontal--12 Padding-vertical--8 PressableContext--cursor--text PressableContext--display--inlineFlex PressableContext--fontLineHeight--20 PressableContext--fontSize--14 PressableContext--fontWeight--regular PressableContext--height PressableContext--height--large PressableContext--radius--all PressableContext--width PressableContext--width--maximized TextInput-element TextInput-element--align--left PressableContext Padding-horizontal--12 Padding-vertical--8 PressableContext--cursor--text PressableContext--display--inlineFlex PressableContext--fontLineHeight--20 PressableContext--fontSize--14 PressableContext--fontWeight--regular PressableContext--height PressableContext--height--large PressableContext--radius--all PressableContext--width PressableContext--width--maximized"/></div><div class="PressableCore-overlay PressableCore-overlay--extendBy1 Box-root Box-background--white"></div></div></div><div class="InputBase-item Box-root Flex-flex" style="align-self:flex-start;flex-basis:auto;flex-grow:0;flex-shrink:0"><div class="PressableCore PressableCore--height--large PressableCore--radius--all PressableCore--width PressableCore--width--auto PressableButton Button Button--color--white Is--disabled Box-root Flex-inlineFlex" style="box-shadow:0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0), 0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0),0 0 0 0 rgba(0,0,0,0)"><div class="PressableCore-base Box-root"><button class="UnstyledLink Button-element PressableContext Padding-horizontal--12 Padding-vertical--4 PressableContext--display--inlineFlex PressableContext--fontLineHeight--28 PressableContext--fontSize--16 PressableContext--fontWeight--medium PressableContext--height PressableContext--height--large PressableContext--radius--all PressableContext--width PressableContext--width--auto" disabled="" type="button" style="color:#a3acb9"><div class="Button-align Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:28px;font-size:16px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--center" style="width:100%;line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><span style="margin-top:-1px" class="Button-label Text-color--disabled Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--28 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block">Sign up</span></div></div></button></div><div class="PressableCore-overlay PressableCore-overlay--extendBy1 Box-root Box-background--white"></div></div></div></div></div><div class="PressableCore-overlay PressableCore-overlay--extendBy1 Box-root Box-background--white"></div></div><div class="Box-root Margin-top--8"><span class="Text-color--default Text-fontSize--12 Text-fontWeight--regular Text-lineHeight--16 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--inline">You can unsubscribe at any time. Read our <a class="UnstyledLink InlineLink Text-color--blue" href="https://stripe.com/privacy">privacy policy</a>.</span></div></div></div></div></div></div></div></div></div></div></div></div><div class="RightPane Box-root"><div class="RightPaneScrollable--has-no-video Box-root"><div class="Box-root Padding-bottom--24"><a class="UnstyledLink ButtonLink IconParent Flex-flex" href="/payments/quickstart"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--rowReversed" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--rowReversed Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div aria-hidden="true" class="SVGInline SVGInline--cleaned SVG Icon Icon--arrowRight Icon-color Icon-color--blue Box-root Margin-left--4 Flex-flex" style="transform:translateY(1.08px)"><svg margin="[object Object]" aria-hidden="true" class="SVGInline-svg SVGInline--cleaned-svg SVG-svg Icon-svg Icon--arrowRight-svg Icon-color-svg Icon-color--blue-svg" height="12" width="12" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.619 1.381A.875.875 0 1 0 8.38 2.62l4.507 4.506H1a.875.875 0 1 0 0 1.75h11.888L8.38 13.381a.875.875 0 1 0 1.24 1.239l6-6a.872.872 0 0 0 0-1.238l-6-6Z"></path></svg></div><span style="margin-top:-1px" class="ButtonLink-label Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--noWrap Text-display--block">Code quickstart</span></div></div></a></div><div class="TableOfContents Box-root Padding-bottom--24"><span class="TableOfContents-header Text-color--dark Text-fontSize--13 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--upper Text-wrap--wrap Text-display--inline">On this page</span><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="ios-setup" class="⚙ as360 as361 as362 ⚙5kvd18"><a href="#ios-setup" title="Set up Stripe" class="⚙ rs31 as35g as363 as330 as32z as331 ⚙ah352s">Set up Stripe</a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="setup-server-side" class="⚙ as360 as361 as364 as365 as366 as367 as368 ⚙1ac3nn0"><a href="#setup-server-side" title="Server-side " class="⚙ rs31 as363 as32j ⚙tjcsoz">Server-side </a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="setup-client-side" class="⚙ as360 as361 as364 as365 as366 as367 as368 ⚙1ac3nn0"><a href="#setup-client-side" title="Client-side " class="⚙ rs31 as363 as32j ⚙tjcsoz">Client-side </a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="ios-enable-payment-methods" class="⚙ as360 as361 as364 ⚙1d3cvgm"><a href="#ios-enable-payment-methods" title="Enable payment methods" class="⚙ rs31 as363 as32j ⚙tjcsoz">Enable payment methods</a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="add-server-endpoint" class="⚙ as360 as361 as364 ⚙1d3cvgm"><a href="#add-server-endpoint" title="Add an endpoint" class="⚙ rs31 as363 as32j ⚙tjcsoz">Add an endpoint</a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="ios-collect-payment-details" class="⚙ as360 as361 as364 ⚙1d3cvgm"><a href="#ios-collect-payment-details" title="Collect payment details" class="⚙ rs31 as363 as32j ⚙tjcsoz">Collect payment details</a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="ios-set-up-return-url" class="⚙ as360 as361 as364 ⚙1d3cvgm"><a href="#ios-set-up-return-url" title="Set up a return URL" class="⚙ rs31 as363 as32j ⚙tjcsoz">Set up a return URL</a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="ios-post-payment" class="⚙ as360 as361 as364 ⚙1d3cvgm"><a href="#ios-post-payment" title="Handle post-payment events" class="⚙ rs31 as363 as32j ⚙tjcsoz">Handle post-payment events</a></div></div><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><div data-toc-id="ios-test-the-integration" class="⚙ as360 as361 as364 ⚙1d3cvgm"><a href="#ios-test-the-integration" title="Test the integration" class="⚙ rs31 as363 as32j ⚙tjcsoz">Test the integration</a></div></div></div></div></div><div class="RightPaneList Box-root"><span class="RightPaneList-header Text-color--dark Text-fontSize--13 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--upper Text-wrap--wrap Text-display--inline">Related Guides</span><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-12px;margin-top:-12px"><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><a class="UnstyledLink ButtonLink Flex-flex" href="/elements/appearance-api"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><span style="margin-top:-1px" class="ButtonLink-label Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">Elements Appearance API</span></div></div></a></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><a class="UnstyledLink ButtonLink Flex-flex" href="/payments/more-payment-scenarios"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><span style="margin-top:-1px" class="ButtonLink-label Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">More payment scenarios</span></div></div></a></div><div class="Box-root Box-hideIfEmpty Margin-top--12 Margin-left--12" style="pointer-events:auto"><a class="UnstyledLink ButtonLink Flex-flex" href="/payments/cards/overview"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><span style="margin-top:-1px" class="ButtonLink-label Text-color--blue Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">How cards work</span></div></div></a></div></div></div></div><div class="RightPaneList Box-root"><span class="RightPaneList-header Text-color--dark Text-fontSize--13 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--upper Text-wrap--wrap Text-display--inline">Products Used</span><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap" style="margin-left:-8px;margin-top:-8px"><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><a href="/payments" class="UnstyledLink"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div class="SVGInline SVGInline--cleaned SVG ProductIcon Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg class="SVGInline-svg SVGInline--cleaned-svg SVG-svg ProductIcon-svg" height="16" width="16" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M34.613 11.275a2.563 2.563 0 0 0-1.223-1.031L8.545.19a2.574 2.574 0 0 0-2.409.252A2.582 2.582 0 0 0 5 2.584V15c0 1.053.638 2 1.613 2.394L13.053 20l21.56 8.722c.254-.409.388-.881.387-1.363V12.637a2.566 2.566 0 0 0-.387-1.362Z" fill="url(#pi_payments__a)"></path><path d="M34.625 11.278 13.06 20l-6.446 2.61A2.578 2.578 0 0 0 5 25v12.416a2.576 2.576 0 0 0 3.543 2.394l24.858-10.054a2.54 2.54 0 0 0 1.212-1.037c.254-.41.388-.881.387-1.363V12.641a2.566 2.566 0 0 0-.375-1.363Z" fill="#96F"></path><path d="m34.617 11.282.097.172c.189.365.287.77.286 1.184l-.001-.023v14.741c.001.482-.133.954-.387 1.363l-.001.001-21.554-8.719h.003l21.557-8.719Z" fill="url(#pi_payments__b)"></path><defs><linearGradient id="pi_payments__a" x1="20" y1="4.128" x2="20" y2="21.128" gradientUnits="userSpaceOnUse"><stop stop-color="#11EFE3"></stop><stop offset="1" stop-color="#21CFE0"></stop></linearGradient><linearGradient id="pi_payments__b" x1="35" y1="11.282" x2="35" y2="28.72" gradientUnits="userSpaceOnUse"><stop stop-color="#0048E5"></stop><stop offset="1" stop-color="#9B66FF"></stop></linearGradient></defs></svg></div><div class="Box-root Padding-left--8"><span style="margin-top:-1px" class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">Payments</span></div></div></div></a></div></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><a href="/payments/elements" class="UnstyledLink"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div class="SVGInline SVGInline--cleaned SVG ProductIcon Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg class="SVGInline-svg SVGInline--cleaned-svg SVG-svg ProductIcon-svg" height="16" width="16" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M2 10.6c0-.91.486-1.75 1.274-2.206l12.215-7.053a2.548 2.548 0 0 1 2.548 0l12.216 7.053a2.548 2.548 0 0 1 1.274 2.207v5.751l-4.797-2.77a2.548 2.548 0 0 0-2.546-.002l-9.11 5.248a2.548 2.548 0 0 0-1.277 2.207v10.489c0 .855.43 1.65 1.135 2.12L3.274 26.913A2.548 2.548 0 0 1 2 24.706V10.601Z" fill="url(#pi_elements__a)"></path><path fill-rule="evenodd" clip-rule="evenodd" d="m14.933 33.645.556.32c.789.456 1.76.456 2.548 0l12.216-7.052a2.548 2.548 0 0 0 1.274-2.206v-8.355l4.284 2.475a2.548 2.548 0 0 1 1.273 2.206v10.493c0 .91-.485 1.75-1.273 2.206l-9.08 5.246a2.548 2.548 0 0 1-2.547.002l-9.11-5.248a2.61 2.61 0 0 1-.14-.087Z" fill="#96F"></path><path fill-rule="evenodd" clip-rule="evenodd" d="m31.527 16.353-4.797-2.771a2.548 2.548 0 0 0-2.546-.002l-9.11 5.248a2.548 2.548 0 0 0-1.277 2.208v10.488c0 .857.43 1.651 1.137 2.122l.555.32c.789.456 1.76.456 2.548 0l12.216-7.052a2.548 2.548 0 0 0 1.274-2.207v-8.354Z" fill="url(#pi_elements__b)"></path><defs><linearGradient id="pi_elements__a" x1="16.763" y1="3.144" x2="16.367" y2="31.828" gradientUnits="userSpaceOnUse"><stop stop-color="#11EFE3"></stop><stop offset="0.33" stop-color="#15E8E2"></stop><stop offset="0.74" stop-color="#1FD3E0"></stop><stop offset="1" stop-color="#21CFE0"></stop></linearGradient><linearGradient id="pi_elements__b" x1="21.108" y1="40.096" x2="29.388" y2="10.16" gradientUnits="userSpaceOnUse"><stop stop-color="#0048E5"></stop><stop offset="0.64" stop-color="#625AF5"></stop><stop offset="1" stop-color="#8A62FC"></stop></linearGradient></defs></svg></div><div class="Box-root Padding-left--8"><span style="margin-top:-1px" class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">Elements</span></div></div></div></a></div></div></div></div><div class="Box-root Box-hideIfEmpty Margin-top--8 Margin-left--8" style="pointer-events:auto"><div class="Box-root" style="pointer-events:none"><div class="Box-root Flex-flex Flex-direction--column Flex-justifyContent--flexStart Flex-wrap--nowrap"><div class="Box-root Box-hideIfEmpty" style="pointer-events:auto"><a href="/payments/checkout" class="UnstyledLink"><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position:relative"><div aria-hidden="true" class="TextAligner Box-root" style="line-height:20px;font-size:14px;flex-basis:auto;flex-grow:0;flex-shrink:0"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="line-height:0;flex-basis:auto;flex-grow:1;flex-shrink:1"><div class="SVGInline SVGInline--cleaned SVG ProductIcon Box-root Flex-flex" style="margin-top:-2.19px;transform:translateY(3.08px)"><svg class="SVGInline-svg SVGInline--cleaned-svg SVG-svg ProductIcon-svg" height="16" width="16" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M31.535 4H11.837c-.842 0-1.627.43-2.084 1.143a2.522 2.522 0 0 0-.18 2.387l5.1 11.456a2.483 2.483 0 0 1 0 2.028L8 36h23.535a2.48 2.48 0 0 0 2.262-1.48l5.987-13.497a2.524 2.524 0 0 0 0-2.043l-5.987-13.5A2.48 2.48 0 0 0 31.536 4Z" fill="#96F"></path><path d="M7.228 36a2.309 2.309 0 0 1-.868-.166 1.22 1.22 0 0 1-.111-.056h.043A2.434 2.434 0 0 1 5.06 34.55L.217 23.533a2.542 2.542 0 0 1 .177-2.388A2.453 2.453 0 0 1 2.461 20h19.507c.959 0 1.828.573 2.22 1.462l4.794 10.849c.198.45.564 1.271.684 1.531.103.214.232.414.385.595.489.648 1.202 1.305 1.977 1.516a2.239 2.239 0 0 1-.545.047c-.21 0-.296-.002-.35-.003h-.055a1.32 1.32 0 0 0-.06.003H7.228Z" fill="url(#pi_checkout__a)"></path><path d="M21.968 20a2.43 2.43 0 0 1 2.141 1.3l.08.162 4.793 10.849c.198.45.564 1.271.684 1.531.103.214.232.414.385.595.448.594 1.19 1.165 1.908 1.42l.195.06a2.353 2.353 0 0 1-.619.083h-.462l-.055.001L8 35.999l6.673-14.985A2.48 2.48 0 0 0 14.889 20h7.079Z" fill="url(#pi_checkout__b)"></path><defs><linearGradient id="pi_checkout__a" x1="16.008" y1="35.587" x2="16.008" y2="21.16" gradientUnits="userSpaceOnUse"><stop stop-color="#21CFE0"></stop><stop offset="0.17" stop-color="#20D1E0"></stop><stop offset="0.38" stop-color="#18E2E2"></stop><stop offset="0.61" stop-color="#13ECE3"></stop><stop offset="1" stop-color="#11EFE3"></stop></linearGradient><linearGradient id="pi_checkout__b" x1="21.066" y1="43" x2="21.066" y2="14.5" gradientUnits="userSpaceOnUse"><stop stop-color="#0048E5"></stop><stop offset="1" stop-color="#9B66FF"></stop></linearGradient></defs></svg></div><div class="Box-root Padding-left--8"><span style="margin-top:-1px" class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-numericSpacing--proportional Text-typeface--base Text-wrap--wrap Text-display--block">Checkout</span></div></div></div></a></div></div></div></div></div></div></div></div><div class="RightPane--fade"></div></div></div></div></div></div></div></div><div class="CookieBanner" style="opacity:0;transform:translateY(100px) translateZ(0)"></div></div></div></div></div> </body> <script nonce="7GWNEaN1gUgdwjiIYfJOqQ=="> window.__INITIAL_STATE__ = {"account":{"availableCountries":[{"code":"AE","beta":false},{"code":"AT","beta":false},{"code":"AU","beta":false},{"code":"BE","beta":false},{"code":"BG","beta":false},{"code":"BR","beta":false},{"code":"CA","beta":false},{"code":"CH","beta":false},{"code":"CY","beta":false},{"code":"CZ","beta":false},{"code":"DE","beta":false},{"code":"DK","beta":false},{"code":"EE","beta":false},{"code":"ES","beta":false},{"code":"FI","beta":false},{"code":"FR","beta":false},{"code":"GB","beta":false},{"code":"GI","beta":false},{"code":"GR","beta":false},{"code":"HK","beta":false},{"code":"HR","beta":false},{"code":"HU","beta":false},{"code":"IE","beta":false},{"code":"IT","beta":false},{"code":"JP","beta":false},{"code":"LI","beta":false},{"code":"LT","beta":false},{"code":"LU","beta":false},{"code":"LV","beta":false},{"code":"MT","beta":false},{"code":"MX","beta":false},{"code":"MY","beta":false},{"code":"NL","beta":false},{"code":"NO","beta":false},{"code":"NZ","beta":false},{"code":"PL","beta":false},{"code":"PT","beta":false},{"code":"RO","beta":false},{"code":"SE","beta":false},{"code":"SG","beta":false},{"code":"SI","beta":false},{"code":"SK","beta":false},{"code":"TH","beta":false},{"code":"US","beta":false},{"code":"IN","beta":true}],"availableLocales":[{"code":"id-ID","name":"Bahasa Indonesia","generated":false},{"code":"de-DE","name":"Deutsch","generated":false},{"code":"en-GB","name":"English \u0028United Kingdom\u0029","generated":false},{"code":"en-US","name":"English \u0028United States\u0029","generated":false},{"code":"es-419","name":"Español \u0028América Latina\u0029","generated":false},{"code":"es-ES","name":"Español \u0028España\u0029","generated":false},{"code":"fr-CA","name":"Français \u0028Canada\u0029","generated":false},{"code":"fr-FR","name":"Français \u0028France\u0029","generated":false},{"code":"it-IT","name":"Italiano","generated":false},{"code":"pt-BR","name":"Português \u0028Brasil\u0029","generated":false},{"code":"ja-JP","name":"日本語","generated":false},{"code":"zh-CN","name":"简体中文","generated":false}],"latestApiVersion":"2024-11-20.acacia","cookieEnforcementMode":"restricted","country":{"code":"SG","beta":false},"isSearchIndexer":false,"flags":{"dev_community_link_kill_switch":false,"docs_disable_report_code_snippet":false,"docs_disable_api_ref_syntax_highlighting":false,"docs_disable_image_source_dimensions":false,"docs_disable_prefetch_articles":true,"use_beta_index_for_docs_search":false,"docs_enable_gpt_search":true,"docs_enable_codegen_snippet_flavors":true,"connect_display_account_traits":true,"enable_link_to_stripe_insiders":true,"docs_emergency_disable_surveys":false,"api_reference_version_picker":true,"docs_enable_hcaptcha":true,"sandboxes_beta_ux_improvements":true,"docs_disable_content_cache":false,"docs_enable_optimized_markdoc_transformer":true,"docs_uplevel_toc":true,"docs_upload_static_assets":false,"docs_enable_v1_keys_in_v2_code_snippets":true},"hosts":{"dashboard.stripe.com":"https:\u002F\u002Fdashboard.stripe.com","support.stripe.com":"https:\u002F\u002Fsupport.stripe.com","api.stripe.com":"https:\u002F\u002Fapi.stripe.com"},"keys":{"publishable":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H","secret":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc","is_merchant_key":false},"locale":{"code":"en-GB","name":"English \u0028United Kingdom\u0029","generated":false},"merchant":{"apiVersion":"2024-11-20.acacia","isLoggedIn":false,"isSandbox":false,"currency":"usd","defaultCurrency":"usd","country":"US","created":null,"iconUrl":"","nickname":"","token":""},"treatments":{"variants":{},"arb_id":"3aa1e8b1-b640-4831-8b7d-3b304b3d5697"},"user":null,"xray":null},"article":{"content":{"\u0024\u0024mdtype":"Tag","name":"Document","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Build a payment form or use a prebuilt checkout page to start accepting online payments."]},{"\u0024\u0024mdtype":"Tag","name":"AdvancedPageSelector","attributes":{"options":[{"children":[{"children":[],"prefs":{"platform":"web","ui":"stripe-hosted"},"title":"Stripe-hosted page"},{"children":[],"prefs":{"platform":"web","ui":"embedded-form"},"title":"Embedded form"},{"children":[],"prefs":{"platform":"web","ui":"elements"},"title":"Advanced integration"}],"prefs":{"platform":"web"},"title":"Web"},{"children":[],"prefs":{"platform":"ios"},"title":"iOS"},{"children":[],"prefs":{"platform":"android"},"title":"Android"},{"children":[],"prefs":{"platform":"react-native"},"title":"React Native"},{"children":[],"prefs":{"platform":"plugins"},"title":"Plugins"}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Page","attributes":{"prefs":{"platform":"web","ui":"stripe-hosted"},"title":"Stripe-hosted page"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Redirect to a Stripe-hosted payment page using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout"},"children":["Stripe Checkout"]},". See how this integration ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fonline-payments#compare-features-and-availability"},"children":["compares to Stripe’s other integration types"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCallout","attributes":{"demo":"checkout","isHorizontal":true},"children":[{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"Integration effort"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ComplexityRating","attributes":{"rating":2,"color":"purple"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"Integration type"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Redirect to Stripe-hosted payment page"]}]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"UI customization"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CustomizabilityTooltip","attributes":{"text":"Limited customization"},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["20 preset fonts"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["3 preset border radius"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Custom background and border color"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Custom logo"]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"DocsButton","attributes":{"type":"button","variant":"secondary","href":"https:\u002F\u002Fcheckout.stripe.dev\u002F","icon":"external","iconPosition":"right"},"children":["Try it out"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fpartials\u002F01-set-up-stripe.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["First, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fregister"},"children":["register"]}," for a Stripe account."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use our official libraries to access the Stripe API from your application:"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Flibraries.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Available as a gem\nsudo gem install stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"Gemfile","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# If you use bundler, you can add this line to your Gemfile\ngem 'stripe'\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install through pip\npip3 install --upgrade stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"PyPi","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or find the Stripe package on http:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fstripe\u002F\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"requirements.txt","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Find the version you want to pin:\n# https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-python\u002Fblob\u002Fmaster\u002FCHANGELOG.md\n# Specify that version in your requirements.txt file\nstripe\u003E=5.0.0\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install the PHP library with Composer\ncomposer require stripe\u002Fstripe-php\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Source","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or download the source directly: https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-php\u002Freleases\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"build.gradle","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F*\n For Gradle, add the following dependency to your build.gradle and replace with\n the version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n*\u002F\nimplementation \"com.stripe:stripe-java:","28.0.0","\"\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"xml","filename":"pom.xml","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C\u0021--\n For Maven, add the following dependency to your POM and replace with the\n version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n--\u003E\n\u003Cdependency\u003E\n \u003CgroupId\u003Ecom.stripe\u003C\u002FgroupId\u003E\n \u003CartifactId\u003Estripe-java\u003C\u002FartifactId\u003E\n \u003Cversion\u003E","28.0.0","\u003C\u002Fversion\u003E\n\u003C\u002Fdependency\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Other environments","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# For other environments, manually install the following JARs:\n# - The Stripe JAR from https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n# - Google Gson from https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fgson\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with npm\nnpm install stripe --save\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Make sure your project is using Go Modules\ngo mod init\n# Install stripe-go\ngo get -u github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F Then import the package\nimport \u0028\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\"\n\u0029\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with dotnet\ndotnet add package Stripe.net\ndotnet restore\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or install with NuGet\nInstall-Package Stripe.net\n"]}]}}],"codeTabGroupID":"codetab_dfc4a6aff5f3711c66bdb90a3f37589faa94b1f4"},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fcheckout\u002F02-redirect-customers.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"redirect-customers","beta":false,"preview":false,"badges":["Client-side","Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Redirect your customer to Stripe Checkout","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fcheckout\u002Fpartials\u002Fcreate-hosted-checkout-session.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Add a checkout button to your website that calls a server-side endpoint to create a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate"},"children":["Checkout Session"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can also create a Checkout Session for an ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fexisting-customers?platform=web\u0026ui=stripe-hosted"},"children":["existing customer"]},", allowing you to prefill Checkout fields with known contact information and unify your purchase history for that customer."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"checkout.html","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Chtml\u003E\n \u003Chead\u003E\n \u003Ctitle\u003EBuy cool new product\u003C\u002Ftitle\u003E\n \u003C\u002Fhead\u003E\n \u003Cbody\u003E\n \u003C\u0021-- Use action=\"\u002Fcreate-checkout-session.php\" if your server is PHP based. --\u003E\n \u003Cform action=\"\u002Fcreate-checkout-session\" method=\"POST\"\u003E\n \u003Cbutton type=\"submit\"\u003ECheckout\u003C\u002Fbutton\u003E\n \u003C\u002Fform\u003E\n \u003C\u002Fbody\u003E\n\u003C\u002Fhtml\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["A Checkout Session is the programmatic representation of what your customer sees when they’re redirected to the payment form. You can configure it with options such as:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-line_items"},"children":["Line items"]}," to charge"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Currencies to use"]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You must populate ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"success_url"},"children":[]}," with the URL value of a page on your website that Checkout returns your customer to after they complete the payment. You can optionally also provide a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"cancel_url"},"children":[]}," value of a page on your website that Checkout returns your customer to if they terminate the payment process before completion."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Checkout Sessions expire 24 hours after creation by default."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["After creating a Checkout Session, redirect your customer to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fobject#checkout_session_object-url"},"children":["URL"]}," returned in the response."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":13,"end":30}],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n\nrequire 'json'\nrequire 'sinatra'\nrequire 'stripe'\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\npost '\u002Fcreate-checkout-session' do",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n session = Stripe::Checkout::Session.create\u0028{\n line_items: [{\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n }],\n mode: 'payment',\n # These placeholder URLs will be replaced in a following step.\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel',\n }\u0029\n\n redirect session.url, 303"},"children":["\n session = Stripe::Checkout::Session.create\u0028{\n line_items: [{\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n }],\n mode: 'payment',\n # These placeholder URLs will be replaced in a following step.\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel',\n }\u0029\n\n redirect session.url, 303"]},"\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":15,"end":31}],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n\nimport os\nimport stripe\n\nfrom flask import Flask, redirect\n\napp = Flask\u0028__name__\u0029\n\nstripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\n\n@app.route\u0028'\u002Fcreate-checkout-session', methods=['POST']\u0029\ndef create_checkout_session\u0028\u0029:",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n session = stripe.checkout.Session.create\u0028\n line_items=[{\n 'price_data': {\n 'currency': 'usd',\n 'product_data': {\n 'name': 'T-shirt',\n },\n 'unit_amount': 2000,\n },\n 'quantity': 1,\n }],\n mode='payment',\n success_url='http:\u002F\u002Flocalhost:4242\u002Fsuccess',\n cancel_url='http:\u002F\u002Flocalhost:4242\u002Fcancel',\n \u0029\n\n return redirect\u0028session.url, code=303\u0029"},"children":["\n session = stripe.checkout.Session.create\u0028\n line_items=[{\n 'price_data': {\n 'currency': 'usd',\n 'product_data': {\n 'name': 'T-shirt',\n },\n 'unit_amount': 2000,\n },\n 'quantity': 1,\n }],\n mode='payment',\n success_url='http:\u002F\u002Flocalhost:4242\u002Fsuccess',\n cancel_url='http:\u002F\u002Flocalhost:4242\u002Fcancel',\n \u0029\n\n return redirect\u0028session.url, code=303\u0029"]},"\n\nif __name__== '__main__':\n app.run\u0028port=4242\u0029\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"create-checkout-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":7,"end":24}],"add":[],"remove":[]}},"children":["\u003C?php\n\nrequire 'vendor\u002Fautoload.php';\n\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n\u0024checkout_session = \u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'line_items' =\u003E [[\n 'price_data' =\u003E [\n 'currency' =\u003E 'usd',\n 'product_data' =\u003E [\n 'name' =\u003E 'T-shirt',\n ],\n 'unit_amount' =\u003E 2000,\n ],\n 'quantity' =\u003E 1,\n ]],\n 'mode' =\u003E 'payment',\n 'success_url' =\u003E 'http:\u002F\u002Flocalhost:4242\u002Fsuccess',\n 'cancel_url' =\u003E 'http:\u002F\u002Flocalhost:4242\u002Fcancel',\n]\u0029;\n\nheader\u0028\"HTTP\u002F1.1 303 See Other\"\u0029;\nheader\u0028\"Location: \" . \u0024checkout_session-\u003Eurl\u0029;"},"children":["\n\u0024checkout_session = \u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'line_items' =\u003E [[\n 'price_data' =\u003E [\n 'currency' =\u003E 'usd',\n 'product_data' =\u003E [\n 'name' =\u003E 'T-shirt',\n ],\n 'unit_amount' =\u003E 2000,\n ],\n 'quantity' =\u003E 1,\n ]],\n 'mode' =\u003E 'payment',\n 'success_url' =\u003E 'http:\u002F\u002Flocalhost:4242\u002Fsuccess',\n 'cancel_url' =\u003E 'http:\u002F\u002Flocalhost:4242\u002Fcancel',\n]\u0029;\n\nheader\u0028\"HTTP\u002F1.1 303 See Other\"\u0029;\nheader\u0028\"Location: \" . \u0024checkout_session-\u003Eurl\u0029;"]},"\n?\u003E\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":19,"end":43}],"add":[],"remove":[]}},"children":["import java.util.HashMap;\nimport java.util.Map;\nimport static spark.Spark.get;\nimport static spark.Spark.post;\nimport static spark.Spark.port;\nimport static spark.Spark.staticFiles;\n\nimport com.stripe.Stripe;\nimport com.stripe.model.checkout.Session;\nimport com.stripe.param.checkout.SessionCreateParams;\n\npublic class Server {\n\n public static void main\u0028String[] args\u0029 {\n port\u00284242\u0029;\n Stripe.apiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";\n\n post\u0028\"\u002Fcreate-checkout-session\", \u0028request, response\u0029 -\u003E {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n\n SessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"http:\u002F\u002Flocalhost:4242\u002Fsuccess\"\u0029\n .setCancelUrl\u0028\"http:\u002F\u002Flocalhost:4242\u002Fcancel\"\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setQuantity\u00281L\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setUnitAmount\u00282000L\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029;\n\n Session session = Session.create\u0028params\u0029;\n\n response.redirect\u0028session.getUrl\u0028\u0029, 303\u0029;\n return \"\";"},"children":["\n\n SessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"http:\u002F\u002Flocalhost:4242\u002Fsuccess\"\u0029\n .setCancelUrl\u0028\"http:\u002F\u002Flocalhost:4242\u002Fcancel\"\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setQuantity\u00281L\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setUnitAmount\u00282000L\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029;\n\n Session session = Session.create\u0028params\u0029;\n\n response.redirect\u0028session.getUrl\u0028\u0029, 303\u0029;\n return \"\";"]},"\n }\u0029;\n }\n}\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":9,"end":27}],"add":[],"remove":[]}},"children":["\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\nconst express = require\u0028'express'\u0029;\nconst app = express\u0028\u0029;\nconst stripe = require\u0028'stripe'\u0029\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029\n\napp.post\u0028'\u002Fcreate-checkout-session', async \u0028req, res\u0029 =\u003E {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n const session = await stripe.checkout.sessions.create\u0028{\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'http:\u002F\u002Flocalhost:4242\u002Fsuccess',\n cancel_url: 'http:\u002F\u002Flocalhost:4242\u002Fcancel',\n }\u0029;\n\n res.redirect\u0028303, session.url\u0029;"},"children":["\n const session = await stripe.checkout.sessions.create\u0028{\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'http:\u002F\u002Flocalhost:4242\u002Fsuccess',\n cancel_url: 'http:\u002F\u002Flocalhost:4242\u002Fcancel',\n }\u0029;\n\n res.redirect\u0028303, session.url\u0029;"]},"\n}\u0029;\n\napp.listen\u00284242, \u0028\u0029 =\u003E console.log\u0028\u0060Listening on port \u0024{4242}\u0021\u0060\u0029\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":28,"end":52}],"add":[],"remove":[]}},"children":["package main\n\nimport \u0028\n \"net\u002Fhttp\"\n\n \"github.com\u002Flabstack\u002Fecho\"\n \"github.com\u002Flabstack\u002Fecho\u002Fmiddleware\"\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","76.0.0","\"\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","76.0.0","\u002Fcheckout\u002Fsession\"\n\u0029\n\n\u002F\u002F This example sets up an endpoint using the Echo framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FePmEVBu8w6Y.\n\nfunc main\u0028\u0029 {\n stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"\n\n e := echo.New\u0028\u0029\n e.Use\u0028middleware.Logger\u0028\u0029\u0029\n e.Use\u0028middleware.Recover\u0028\u0029\u0029\n\n e.POST\u0028\"\u002Fcreate-checkout-session\", createCheckoutSession\u0029\n\n e.Logger.Fatal\u0028e.Start\u0028\"localhost:4242\"\u0029\u0029\n}\n\nfunc createCheckoutSession\u0028c echo.Context\u0029 \u0028err error\u0029 {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n params := \u0026stripe.CheckoutSessionParams{\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n PriceData: \u0026stripe.CheckoutSessionLineItemPriceDataParams{\n Currency: stripe.String\u0028\"usd\"\u0029,\n ProductData: \u0026stripe.CheckoutSessionLineItemPriceDataProductDataParams{\n Name: stripe.String\u0028\"T-shirt\"\u0029,\n },\n UnitAmount: stripe.Int64\u00282000\u0029,\n },\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n SuccessURL: stripe.String\u0028\"http:\u002F\u002Flocalhost:4242\u002Fsuccess\"\u0029,\n CancelURL: stripe.String\u0028\"http:\u002F\u002Flocalhost:4242\u002Fcancel\"\u0029,\n }\n\n s, _ := session.New\u0028params\u0029\n\n if err \u0021= nil {\n return err\n }\n\n return c.Redirect\u0028http.StatusSeeOther, s.URL\u0029"},"children":["\n params := \u0026stripe.CheckoutSessionParams{\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n PriceData: \u0026stripe.CheckoutSessionLineItemPriceDataParams{\n Currency: stripe.String\u0028\"usd\"\u0029,\n ProductData: \u0026stripe.CheckoutSessionLineItemPriceDataProductDataParams{\n Name: stripe.String\u0028\"T-shirt\"\u0029,\n },\n UnitAmount: stripe.Int64\u00282000\u0029,\n },\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n SuccessURL: stripe.String\u0028\"http:\u002F\u002Flocalhost:4242\u002Fsuccess\"\u0029,\n CancelURL: stripe.String\u0028\"http:\u002F\u002Flocalhost:4242\u002Fcancel\"\u0029,\n }\n\n s, _ := session.New\u0028params\u0029\n\n if err \u0021= nil {\n return err\n }\n\n return c.Redirect\u0028http.StatusSeeOther, s.URL\u0029"]},"\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":22,"end":49}],"add":[],"remove":[]}},"children":["\u002F\u002F This example sets up an endpoint using the ASP.NET MVC framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F2-mMOB8MhmE.\n\nusing System.Collections.Generic;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Options;\nusing Stripe;\nusing Stripe.Checkout;\n\nnamespace server.Controllers\n{\n public class PaymentsController : Controller\n {\n public PaymentsController\u0028\u0029\n {\n StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";\n }\n\n [HttpPost\u0028\"create-checkout-session\"\u0029]\n public ActionResult CreateCheckoutSession\u0028\u0029\n {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n var options = new SessionCreateOptions\n {\n LineItems = new List\u003CSessionLineItemOptions\u003E\n {\n new SessionLineItemOptions\n {\n PriceData = new SessionLineItemPriceDataOptions\n {\n UnitAmount = 2000,\n Currency = \"usd\",\n ProductData = new SessionLineItemPriceDataProductDataOptions\n {\n Name = \"T-shirt\",\n },\n },\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n SuccessUrl = \"http:\u002F\u002Flocalhost:4242\u002Fsuccess\",\n CancelUrl = \"http:\u002F\u002Flocalhost:4242\u002Fcancel\",\n };\n\n var service = new SessionService\u0028\u0029;\n Session session = service.Create\u0028options\u0029;\n\n Response.Headers.Add\u0028\"Location\", session.Url\u0029;\n return new StatusCodeResult\u0028303\u0029;"},"children":["\n var options = new SessionCreateOptions\n {\n LineItems = new List\u003CSessionLineItemOptions\u003E\n {\n new SessionLineItemOptions\n {\n PriceData = new SessionLineItemPriceDataOptions\n {\n UnitAmount = 2000,\n Currency = \"usd\",\n ProductData = new SessionLineItemPriceDataProductDataOptions\n {\n Name = \"T-shirt\",\n },\n },\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n SuccessUrl = \"http:\u002F\u002Flocalhost:4242\u002Fsuccess\",\n CancelUrl = \"http:\u002F\u002Flocalhost:4242\u002Fcancel\",\n };\n\n var service = new SessionService\u0028\u0029;\n Session session = service.Create\u0028options\u0029;\n\n Response.Headers.Add\u0028\"Location\", session.Url\u0029;\n return new StatusCodeResult\u0028303\u0029;"]},"\n }\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_82a7d2ccaa66bda25769d41f3fac2e337603e00d"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fpartials\u002Fdashboard-lpm-checker.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Payment methods","id":"payment-methods"},"children":["Payment methods"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, Stripe enables cards and other common payment methods. You can turn individual payment methods on or off in the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Stripe Dashboard"]},". In Checkout, Stripe evaluates the currency and any restrictions, then dynamically presents the supported payment methods to the customer."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To see how your payment methods appear to customers, enter a transaction ID or set an order amount and currency in the Dashboard."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can enable Apple Pay and Google Pay in your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["payment methods settings"]},". By default, Apple Pay is enabled and Google Pay is disabled. However, in some cases Stripe filters them out even when they’re enabled. We filter Google Pay if you ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftax\u002Fcheckout"},"children":["enable automatic tax"]}," without collecting a shipping address."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Checkout’s Stripe-hosted pages don’t need integration changes to enable Apple Pay or Google Pay. Stripe handles these payments the same way as other card payments."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Confirm your endpoint","id":"confirm-your-endpoint"},"children":["Confirm your endpoint"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Confirm your endpoint is accessible by starting your web server \u0028for example, ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"localhost:4242"},"children":[]},"\u0029 and running the following command:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["curl -X POST -is \"http:\u002F\u002Flocalhost:4242\u002Fcreate-checkout-session\" -d \"\"\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You should see a response in your terminal that looks like this:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["HTTP\u002F1.1 303 See Other\nLocation: https:\u002F\u002Fcheckout.stripe.com\u002Fc\u002Fpay\u002Fcs_test_...\n...\n"]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"redirect-stripe-checkout-testing","level":3,"anchored":true,"toc":"Testing "},"children":["Testing "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You should now have a working checkout button that redirects your customer to Stripe Checkout."]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click the checkout button."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["You’re redirected to the Stripe Checkout payment form."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If your integration isn’t working:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Open the Network tab in your browser’s developer tools."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click the checkout button and confirm it sent an XHR request to your server-side endpoint \u0028",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"POST \u002Fcreate-checkout-session"},"children":[]},"\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Verify the request is returning a 200 status."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"console.log\u0028session\u0029"},"children":[]}," inside your button click listener to confirm the correct data returned."]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fcheckout\u002F03-success-page.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"success-page","beta":false,"preview":false,"badges":["Client-side","Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Show a success page","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["It’s important for your customer to see a success page after they successfully submit the payment form. Host this success page on your site."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create a minimal success page:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"success.html","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Chtml\u003E\n \u003Chead\u003E\u003Ctitle\u003EThanks for your order\u0021\u003C\u002Ftitle\u003E\u003C\u002Fhead\u003E\n \u003Cbody\u003E\n \u003Ch1\u003EThanks for your order\u0021\u003C\u002Fh1\u003E\n \u003Cp\u003E\n We appreciate your business\u0021\n If you have any questions, please email\n \u003Ca href=\"mailto:orders@example.com\"\u003Eorders@example.com\u003C\u002Fa\u003E.\n \u003C\u002Fp\u003E\n \u003C\u002Fbody\u003E\n\u003C\u002Fhtml\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Next, update the Checkout Session creation endpoint to use this new page:"]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n --data-urlencode success_url=\"http:\u002F\u002Flocalhost:4242\u002Fsuccess.html\" \\\n --data-urlencode cancel_url=\"http:\u002F\u002Flocalhost:4242\u002Fcancel.html\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n --success-url=\"http:\u002F\u002Flocalhost:4242\u002Fsuccess.html\" \\\n --cancel-url=\"http:\u002F\u002Flocalhost:4242\u002Fcancel.html\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {name: 'T-shirt'},\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'http:\u002F\u002Flocalhost:4242\u002Fsuccess.html',\n cancel_url: 'http:\u002F\u002Flocalhost:4242\u002Fcancel.html',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n line_items=[\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n mode=\"payment\",\n success_url=\"http:\u002F\u002Flocalhost:4242\u002Fsuccess.html\",\n cancel_url=\"http:\u002F\u002Flocalhost:4242\u002Fcancel.html\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"line_items\": [\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n \"mode\": \"payment\",\n \"success_url\": \"http:\u002F\u002Flocalhost:4242\u002Fsuccess.html\",\n \"cancel_url\": \"http:\u002F\u002Flocalhost:4242\u002Fcancel.html\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'line_items' =\u003E [\n [\n 'price_data' =\u003E [\n 'currency' =\u003E 'usd',\n 'product_data' =\u003E ['name' =\u003E 'T-shirt'],\n 'unit_amount' =\u003E 2000,\n ],\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'success_url' =\u003E 'http:\u002F\u002Flocalhost:4242\u002Fsuccess.html',\n 'cancel_url' =\u003E 'http:\u002F\u002Flocalhost:4242\u002Fcancel.html',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"http:\u002F\u002Flocalhost:4242\u002Fsuccess.html\"\u0029\n .setCancelUrl\u0028\"http:\u002F\u002Flocalhost:4242\u002Fcancel.html\"\u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"http:\u002F\u002Flocalhost:4242\u002Fsuccess.html\"\u0029\n .setCancelUrl\u0028\"http:\u002F\u002Flocalhost:4242\u002Fcancel.html\"\u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'http:\u002F\u002Flocalhost:4242\u002Fsuccess.html',\n cancel_url: 'http:\u002F\u002Flocalhost:4242\u002Fcancel.html',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n PriceData: \u0026stripe.CheckoutSessionLineItemPriceDataParams{\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n ProductData: \u0026stripe.CheckoutSessionLineItemPriceDataProductDataParams{\n Name: stripe.String\u0028\"T-shirt\"\u0029,\n },\n UnitAmount: stripe.Int64\u00282000\u0029,\n },\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n SuccessURL: stripe.String\u0028\"http:\u002F\u002Flocalhost:4242\u002Fsuccess.html\"\u0029,\n CancelURL: stripe.String\u0028\"http:\u002F\u002Flocalhost:4242\u002Fcancel.html\"\u0029,\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n PriceData = new Stripe.Checkout.SessionLineItemPriceDataOptions\n {\n Currency = \"usd\",\n ProductData = new Stripe.Checkout.SessionLineItemPriceDataProductDataOptions\n {\n Name = \"T-shirt\",\n },\n UnitAmount = 2000,\n },\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n SuccessUrl = \"http:\u002F\u002Flocalhost:4242\u002Fsuccess.html\",\n CancelUrl = \"http:\u002F\u002Flocalhost:4242\u002Fcancel.html\",\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_18302f5e44f1f810cb71f94276073eaca2e998b8","argsToHighlight":["success"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you want to customize your success page, read the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustom-success-page"},"children":["custom success page"]}," guide."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Testing","id":"testing"},"children":["Testing"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click your checkout button."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Fill out the payment details with the test card information:",{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"4242 4242 4242 4242"},"children":[]}," as the card number."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any future date for card expiry."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any 3-digit number for CVC."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any billing postal code."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Pay"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["You’re redirected to your new success page."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Next, find the new payment in the Stripe Dashboard. Successful payments appear in the Dashboard’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fpayments"},"children":["list of payments"]},". When you click a payment, it takes you to the payment details page. The ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Checkout summary"]}," section contains billing information and the list of items purchased, which you can use to manually fulfill the order."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"additional-testing-resources","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Test your integration","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To test your Stripe-hosted payment form integration:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Create a Checkout Session."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Fill out the payment details with a method from the following table.",{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any future date for card expiry."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any 3-digit number for CVC."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any billing postal code."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Pay"]},". You’re redirected to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"success_url"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Go to the Dashboard and look for the payment on the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Ftest\u002Fpayments?status%5B0%5D=successful"},"children":["Payments page"]},". If your payment succeeded, you’ll see it in that list."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click your payment to see more details, like a Checkout summary with billing information and the list of purchased items. You can use this information to fulfill the order."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn more about ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["testing your integration"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Ftesting-auto-pm.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"test-cards","title":"Cards","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-cards","title":"Cards"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Card number"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4242424242424242","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment succeeds and doesn’t require authentication."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000002500003155","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment requires ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"sca"},"children":["authentication"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000000000009995","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card is declined with a decline code like ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"insufficient_funds"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"6205500000000000004","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The UnionPay card has a variable length of 13-19 digits."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]}]}]}]}},{"id":"test-wallets","title":"Wallets","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-wallets","title":"Wallets"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Alipay"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["immediate notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]}]}]}]}},{"id":"test-bank-redirects","title":"Bank redirects","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-redirects","title":"Bank redirects"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BECS Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with BECS Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"900123456"},"children":[]}," and BSB ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"000-000"},"children":[]},". The confirmed PaymentIntent initially transitions to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]},", then transitions to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"succeeded"},"children":[]}," status 3 minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BECS Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment fails with an ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"account_closed"},"children":[]}," error code."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"111111113"},"children":[]}," and BSB ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"000-000"},"children":[]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Bancontact, EPS, iDEAL, and Przelewy24"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and immediate notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and delayed notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK payments fail in a variety of ways—immediate failures \u0028for example, the code is expired or invalid\u0029, delayed errors \u0028the bank declines\u0029 or timeouts \u0028the customer didn’t respond in time\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Use email patterns to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fblik\u002Faccept-a-payment#simulate-failures"},"children":["simulate the different failures."]}]}]}]}]}]}},{"id":"test-bank-debits","title":"Bank debits","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-debits","title":"Bank debits"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with SEPA Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT321904300235473204"},"children":[]},". The confirmed PaymentIntent initially transitions to processing, then transitions to the succeeded status three minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment intent status transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_payment_method"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT861904300235473202"},"children":[]},"."]}]}]}]}]}},{"id":"test-vouchers","title":"Vouchers","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-vouchers","title":"Vouchers"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Boleto, OXXO"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer pays with a Boleto or OXXO voucher."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Select Boleto or OXXO as the payment method and submit the payment. Close the dialog after it appears."]}]}]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["Testing"]}," for additional information to test your integration."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Test cards","id":"test-cards"},"children":["Test cards"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fpartials\u002Fadditional-testing-resources.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Number"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Description"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4242 4242 4242 4242","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Succeeds and immediately processes the payment."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000 0000 0000 3220","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Requires 3D Secure 2 authentication for a successful payment."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000 0000 0000 9995","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Always fails with a decline code of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"insufficient_funds"},"children":[]},"."]}]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"create-product-prices-upfront","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Create products and prices","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fpartials\u002Fcreate-product-prices-upfront.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Aside","attributes":{"title":"Let customers decide what to pay","wide":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fpay-what-you-want"},"children":["set up your Checkout Session"]}," to accept tips and donations, or sell pay-what-you-want products and services."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Before you create a Checkout Session, you can create ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"products"},"children":["Products"]}," and ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"prices"},"children":["Prices"]}," upfront. Use products to represent different physical goods or levels of service, and ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"prices"},"children":["Prices"]}," to represent each product’s pricing."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For example, you can create a T-shirt as a product with a price of 20 USD. This allows you to update and add prices without needing to change the details of your underlying products. You can either create products and prices with the Stripe Dashboard or API. Learn more about ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fproducts-prices\u002Fhow-products-and-prices-work"},"children":["how products and prices work"]}," and how to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fproducts-prices\u002Fgetting-started"},"children":["get started"]}," with them."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"api","title":"API","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"API"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The API only requires a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"name"},"children":[]}," to create a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fproducts"},"children":["Product"]},". Checkout displays the product ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"name"},"children":[]},", ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"description"},"children":[]},", and ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"images"},"children":[]}," that you supply."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fproducts \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d name=T-shirt"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe products create \\\n --name=T-shirt"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Product.create\u0028{name: 'T-shirt'}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.Product.create\u0028name=\"T-shirt\"\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.products.create\u0028{\"name\": \"T-shirt\"}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Eproducts-\u003Ecreate\u0028['name' =\u003E 'T-shirt']\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nProductCreateParams params = ProductCreateParams.builder\u0028\u0029.setName\u0028\"T-shirt\"\u0029.build\u0028\u0029;\n\nProduct product = Product.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nProductCreateParams params = ProductCreateParams.builder\u0028\u0029.setName\u0028\"T-shirt\"\u0029.build\u0028\u0029;\n\nProduct product = client.products\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst product = await stripe.products.create\u0028{\n name: 'T-shirt',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.ProductParams{Name: stripe.String\u0028\"T-shirt\"\u0029};\nresult, err := product.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new ProductCreateOptions { Name = \"T-shirt\" };\nvar service = new ProductService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_67c43228db362de216a919ba023af4d5e8b7e599","httpPath":"\u002Fv1\u002Fproducts","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Next, create a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fprices"},"children":["Price"]}," to define how much to charge for your product. This includes how much the product costs and what currency to use."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fprices \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d product=\"\u0024\u0024_RESOURCE_product\u0024\u0024\" \\\n -d unit_amount=2000 \\\n -d currency=usd"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe prices create \\\n --product=\"\u0024\u0024_RESOURCE_product\u0024\u0024\" \\\n --unit-amount=2000 \\\n --currency=usd"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Price.create\u0028{\n product: '\u0024\u0024_RESOURCE_product\u0024\u0024',\n unit_amount: 2000,\n currency: 'usd',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.Price.create\u0028\n product=\"\u0024\u0024_RESOURCE_product\u0024\u0024\",\n unit_amount=2000,\n currency=\"usd\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.prices.create\u0028{\n \"product\": \"\u0024\u0024_RESOURCE_product\u0024\u0024\",\n \"unit_amount\": 2000,\n \"currency\": \"usd\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Eprices-\u003Ecreate\u0028[\n 'product' =\u003E '\u0024\u0024_RESOURCE_product\u0024\u0024',\n 'unit_amount' =\u003E 2000,\n 'currency' =\u003E 'usd',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nPriceCreateParams params =\n PriceCreateParams.builder\u0028\u0029\n .setProduct\u0028\"\u0024\u0024_RESOURCE_product\u0024\u0024\"\u0029\n .setUnitAmount\u00282000L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .build\u0028\u0029;\n\nPrice price = Price.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nPriceCreateParams params =\n PriceCreateParams.builder\u0028\u0029\n .setProduct\u0028\"\u0024\u0024_RESOURCE_product\u0024\u0024\"\u0029\n .setUnitAmount\u00282000L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .build\u0028\u0029;\n\nPrice price = client.prices\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst price = await stripe.prices.create\u0028{\n product: '\u0024\u0024_RESOURCE_product\u0024\u0024',\n unit_amount: 2000,\n currency: 'usd',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.PriceParams{\n Product: stripe.String\u0028\"\u0024\u0024_RESOURCE_product\u0024\u0024\"\u0029,\n UnitAmount: stripe.Int64\u00282000\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n};\nresult, err := price.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new PriceCreateOptions\n{\n Product = \"\u0024\u0024_RESOURCE_product\u0024\u0024\",\n UnitAmount = 2000,\n Currency = \"usd\",\n};\nvar service = new PriceService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_ace8d55a6d8468c7cd3ed1fa63b5a4eb23243f2d","httpPath":"\u002Fv1\u002Fprices","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]}},{"id":"dashboard","title":"Dashboard","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"Dashboard"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Copy products created in test mode to live mode so that you don’t need to re-create them. In the Product detail view in the Dashboard, click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Copy to live mode"]}," in the upper right corner. You can only do this once for each product created in test mode. Subsequent updates to the test product aren’t reflected for the live product."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Make sure you’re in test mode by toggling the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["View test data"]}," button at the bottom of the Stripe Dashboard. Next, define the items you want to sell. To create a new product and price:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Navigate to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Ftest\u002Fproducts"},"children":["Products"]}," section in the Dashboard."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Add product"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["One time"]}," when setting the price."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Checkout displays the product name, description, and images that you supply."]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Each price you create has an ID. When you create a Checkout Session, reference the price ID and quantity. If you’re selling in multiple currencies, make your Price ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"multi-currency-price"},"children":["multi-currency"]},". Checkout automatically ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fmanual-currency-prices"},"children":["determines the customer’s local currency"]}," and presents that currency if the Price supports it."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d mode=payment \\\n -d \"line_items[0][price]\"={{PRICE_ID}} \\\n -d \"line_items[0][quantity]\"=1 \\\n --data-urlencode success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}\" \\\n --data-urlencode cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n --mode=payment \\\n -d \"line_items[0][price]\"={{PRICE_ID}} \\\n -d \"line_items[0][quantity]\"=1 \\\n --success-url=\"https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}\" \\\n --cancel-url=\"https:\u002F\u002Fexample.com\u002Fcancel\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n mode: 'payment',\n line_items: [\n {\n price: '{{PRICE_ID}}',\n quantity: 1,\n },\n ],\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n mode=\"payment\",\n line_items=[{\"price\": \"{{PRICE_ID}}\", \"quantity\": 1}],\n success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}\",\n cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"mode\": \"payment\",\n \"line_items\": [{\"price\": \"{{PRICE_ID}}\", \"quantity\": 1}],\n \"success_url\": \"https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}\",\n \"cancel_url\": \"https:\u002F\u002Fexample.com\u002Fcancel\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'mode' =\u003E 'payment',\n 'line_items' =\u003E [\n [\n 'price' =\u003E '{{PRICE_ID}}',\n 'quantity' =\u003E 1,\n ],\n ],\n 'success_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}',\n 'cancel_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fcancel',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"{{PRICE_ID}}\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel\"\u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"{{PRICE_ID}}\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel\"\u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n mode: 'payment',\n line_items: [\n {\n price: '{{PRICE_ID}}',\n quantity: 1,\n },\n ],\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n Price: stripe.String\u0028\"{{PRICE_ID}}\"\u0029,\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n SuccessURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}\"\u0029,\n CancelURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fcancel\"\u0029,\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n Mode = \"payment\",\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n Price = \"{{PRICE_ID}}\",\n Quantity = 1,\n },\n },\n SuccessUrl = \"https:\u002F\u002Fexample.com\u002Fsuccess?session_id={CHECKOUT_SESSION_ID}\",\n CancelUrl = \"https:\u002F\u002Fexample.com\u002Fcancel\",\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_a8f2182026178203bd08956f56578380b6897f20","httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"prefill-customer-data","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":true,"title":"Prefill customer data","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you’ve already collected your customer’s email and want to prefill it in the Checkout Session for them, pass ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-customer_email"},"children":["customer_email"]}," when creating a Checkout Session."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n --data-urlencode customer_email=\"customer@example.com\" \\\n -d \"line_items[0][price]\"=\"\u0024\u0024_RESOURCE_price\u0024\u0024\" \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n --data-urlencode success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess\" \\\n --data-urlencode cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n --customer-email=\"customer@example.com\" \\\n -d \"line_items[0][price]\"=\"\u0024\u0024_RESOURCE_price\u0024\u0024\" \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n --success-url=\"https:\u002F\u002Fexample.com\u002Fsuccess\" \\\n --cancel-url=\"https:\u002F\u002Fexample.com\u002Fcancel\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n customer_email: 'customer@example.com',\n line_items: [\n {\n price: '\u0024\u0024_RESOURCE_price\u0024\u0024',\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n customer_email=\"customer@example.com\",\n line_items=[{\"price\": \"\u0024\u0024_RESOURCE_price\u0024\u0024\", \"quantity\": 1}],\n mode=\"payment\",\n success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess\",\n cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"customer_email\": \"customer@example.com\",\n \"line_items\": [{\"price\": \"\u0024\u0024_RESOURCE_price\u0024\u0024\", \"quantity\": 1}],\n \"mode\": \"payment\",\n \"success_url\": \"https:\u002F\u002Fexample.com\u002Fsuccess\",\n \"cancel_url\": \"https:\u002F\u002Fexample.com\u002Fcancel\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'customer_email' =\u003E 'customer@example.com',\n 'line_items' =\u003E [\n [\n 'price' =\u003E '\u0024\u0024_RESOURCE_price\u0024\u0024',\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'success_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fsuccess',\n 'cancel_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fcancel',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerEmail\u0028\"customer@example.com\"\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"\u0024\u0024_RESOURCE_price\u0024\u0024\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel\"\u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerEmail\u0028\"customer@example.com\"\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"\u0024\u0024_RESOURCE_price\u0024\u0024\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel\"\u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n customer_email: 'customer@example.com',\n line_items: [\n {\n price: '\u0024\u0024_RESOURCE_price\u0024\u0024',\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n CustomerEmail: stripe.String\u0028\"customer@example.com\"\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n Price: stripe.String\u0028\"\u0024\u0024_RESOURCE_price\u0024\u0024\"\u0029,\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n SuccessURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess\"\u0029,\n CancelURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fcancel\"\u0029,\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n CustomerEmail = \"customer@example.com\",\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n Price = \"\u0024\u0024_RESOURCE_price\u0024\u0024\",\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n SuccessUrl = \"https:\u002F\u002Fexample.com\u002Fsuccess\",\n CancelUrl = \"https:\u002F\u002Fexample.com\u002Fcancel\",\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_3af1bdc4b1ef27cfa1c67be08c8b4397c90b3589","argsToHighlight":["customer_email"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"save-payment-method-details","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":true,"title":"Save payment method details","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fsave-payment-method-checkout.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, payment methods used to make a one-time payment with Checkout aren’t available for future use."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Save payment methods to charge them off-session","id":"save-payment-methods-to-charge-them-off-session"},"children":["Save payment methods to charge them off-session"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can set Checkout to save payment methods used to make a one-time payment by passing the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-payment_intent_data-setup_future_usage"},"children":["payment_intent_data.setup_future_usage"]}," argument. This is useful if you need to capture a payment method on-file to use for future fees, such as cancellation or no-show fees."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d customer_creation=always \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n --data-urlencode success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\" \\\n --data-urlencode cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\" \\\n -d \"payment_intent_data[setup_future_usage]\"=off_session"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n --customer-creation=always \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n --success-url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\" \\\n --cancel-url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\" \\\n -d \"payment_intent_data[setup_future_usage]\"=off_session"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n customer_creation: 'always',\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {name: 'T-shirt'},\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n payment_intent_data: {setup_future_usage: 'off_session'},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n customer_creation=\"always\",\n line_items=[\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n mode=\"payment\",\n success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n payment_intent_data={\"setup_future_usage\": \"off_session\"},\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"customer_creation\": \"always\",\n \"line_items\": [\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n \"mode\": \"payment\",\n \"success_url\": \"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n \"cancel_url\": \"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n \"payment_intent_data\": {\"setup_future_usage\": \"off_session\"},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'customer_creation' =\u003E 'always',\n 'line_items' =\u003E [\n [\n 'price_data' =\u003E [\n 'currency' =\u003E 'usd',\n 'product_data' =\u003E ['name' =\u003E 'T-shirt'],\n 'unit_amount' =\u003E 2000,\n ],\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'success_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n 'cancel_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n 'payment_intent_data' =\u003E ['setup_future_usage' =\u003E 'off_session'],\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerCreation\u0028SessionCreateParams.CustomerCreation.ALWAYS\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029\n .setPaymentIntentData\u0028\n SessionCreateParams.PaymentIntentData.builder\u0028\u0029\n .setSetupFutureUsage\u0028\n SessionCreateParams.PaymentIntentData.SetupFutureUsage.OFF_SESSION\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerCreation\u0028SessionCreateParams.CustomerCreation.ALWAYS\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029\n .setPaymentIntentData\u0028\n SessionCreateParams.PaymentIntentData.builder\u0028\u0029\n .setSetupFutureUsage\u0028\n SessionCreateParams.PaymentIntentData.SetupFutureUsage.OFF_SESSION\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n customer_creation: 'always',\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n payment_intent_data: {\n setup_future_usage: 'off_session',\n },\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n CustomerCreation: stripe.String\u0028string\u0028stripe.CheckoutSessionCustomerCreationAlways\u0029\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n PriceData: \u0026stripe.CheckoutSessionLineItemPriceDataParams{\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n ProductData: \u0026stripe.CheckoutSessionLineItemPriceDataProductDataParams{\n Name: stripe.String\u0028\"T-shirt\"\u0029,\n },\n UnitAmount: stripe.Int64\u00282000\u0029,\n },\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n SuccessURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029,\n CancelURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029,\n PaymentIntentData: \u0026stripe.CheckoutSessionPaymentIntentDataParams{\n SetupFutureUsage: stripe.String\u0028\"off_session\"\u0029,\n },\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n CustomerCreation = \"always\",\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n PriceData = new Stripe.Checkout.SessionLineItemPriceDataOptions\n {\n Currency = \"usd\",\n ProductData = new Stripe.Checkout.SessionLineItemPriceDataProductDataOptions\n {\n Name = \"T-shirt\",\n },\n UnitAmount = 2000,\n },\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n SuccessUrl = \"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n CancelUrl = \"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n PaymentIntentData = new Stripe.Checkout.SessionPaymentIntentDataOptions\n {\n SetupFutureUsage = \"off_session\",\n },\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_d62f8e9e57472d95829a6b698547d807caf297c6","argsToHighlight":["payment_intent_data"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you use Checkout in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"subscription"},"children":[]}," mode, Stripe automatically saves the payment method to charge it for subsequent payments. Card payment methods saved to customers using either ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"setup_future_usage"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"subscription"},"children":[]}," mode don’t appear for return purchases in Checkout \u0028more on this below\u0029. We recommend using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustomization\u002Fpolicies"},"children":["custom text"]}," to link out to any relevant terms regarding the usage of saved payment information."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"caution"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Global privacy laws are complicated and nuanced. We recommend contacting your legal and privacy team prior to implementing ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-payment_intent_data-setup_future_usage"},"children":["setup_future_usage"]}," because it might implicate your existing privacy compliance framework. Refer to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fedpb.europa.eu\u002Fsystem\u002Ffiles\u002F2021-05\u002Frecommendations022021_on_storage_of_credit_card_data_en_1.pdf"},"children":["the guidance issued by the European Protection Board"]}," to learn more about saving payment details."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Save payment methods to prefill them in Checkout","id":"save-payment-methods-to-prefill-them-in-checkout"},"children":["Save payment methods to prefill them in Checkout"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, Checkout uses ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustomization\u002Fbehavior#link"},"children":["Link"]}," to provide your customers with the option to securely save and reuse their payment information. If you prefer to manage payment methods yourself, use ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-saved_payment_method_options-payment_method_save"},"children":["saved_payment_method_options.payment_method_save"]}," when creating a Checkout Session to let your customers save their payment methods for future purchases in Checkout."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d customer_creation=always \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n --data-urlencode success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\" \\\n --data-urlencode cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\" \\\n -d \"saved_payment_method_options[payment_method_save]\"=enabled"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n --customer-creation=always \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n --success-url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\" \\\n --cancel-url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\" \\\n -d \"saved_payment_method_options[payment_method_save]\"=enabled"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n customer_creation: 'always',\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {name: 'T-shirt'},\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n saved_payment_method_options: {payment_method_save: 'enabled'},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n customer_creation=\"always\",\n line_items=[\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n mode=\"payment\",\n success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n saved_payment_method_options={\"payment_method_save\": \"enabled\"},\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"customer_creation\": \"always\",\n \"line_items\": [\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n \"mode\": \"payment\",\n \"success_url\": \"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n \"cancel_url\": \"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n \"saved_payment_method_options\": {\"payment_method_save\": \"enabled\"},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'customer_creation' =\u003E 'always',\n 'line_items' =\u003E [\n [\n 'price_data' =\u003E [\n 'currency' =\u003E 'usd',\n 'product_data' =\u003E ['name' =\u003E 'T-shirt'],\n 'unit_amount' =\u003E 2000,\n ],\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'success_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n 'cancel_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n 'saved_payment_method_options' =\u003E ['payment_method_save' =\u003E 'enabled'],\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerCreation\u0028SessionCreateParams.CustomerCreation.ALWAYS\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029\n .setSavedPaymentMethodOptions\u0028\n SessionCreateParams.SavedPaymentMethodOptions.builder\u0028\u0029\n .setPaymentMethodSave\u0028\n SessionCreateParams.SavedPaymentMethodOptions.PaymentMethodSave.ENABLED\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerCreation\u0028SessionCreateParams.CustomerCreation.ALWAYS\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029\n .setSavedPaymentMethodOptions\u0028\n SessionCreateParams.SavedPaymentMethodOptions.builder\u0028\u0029\n .setPaymentMethodSave\u0028\n SessionCreateParams.SavedPaymentMethodOptions.PaymentMethodSave.ENABLED\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n customer_creation: 'always',\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n saved_payment_method_options: {\n payment_method_save: 'enabled',\n },\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n CustomerCreation: stripe.String\u0028string\u0028stripe.CheckoutSessionCustomerCreationAlways\u0029\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n PriceData: \u0026stripe.CheckoutSessionLineItemPriceDataParams{\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n ProductData: \u0026stripe.CheckoutSessionLineItemPriceDataProductDataParams{\n Name: stripe.String\u0028\"T-shirt\"\u0029,\n },\n UnitAmount: stripe.Int64\u00282000\u0029,\n },\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n SuccessURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029,\n CancelURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029,\n SavedPaymentMethodOptions: \u0026stripe.CheckoutSessionSavedPaymentMethodOptionsParams{\n PaymentMethodSave: stripe.String\u0028string\u0028stripe.CheckoutSessionSavedPaymentMethodOptionsPaymentMethodSaveEnabled\u0029\u0029,\n },\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n CustomerCreation = \"always\",\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n PriceData = new Stripe.Checkout.SessionLineItemPriceDataOptions\n {\n Currency = \"usd\",\n ProductData = new Stripe.Checkout.SessionLineItemPriceDataProductDataOptions\n {\n Name = \"T-shirt\",\n },\n UnitAmount = 2000,\n },\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n SuccessUrl = \"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n CancelUrl = \"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n SavedPaymentMethodOptions = new Stripe.Checkout.SessionSavedPaymentMethodOptionsOptions\n {\n PaymentMethodSave = \"enabled\",\n },\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_9211bb2fce18794b07bdd87b4edd41244857eb16","argsToHighlight":["saved_payment_method_options"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Passing this parameter in either ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-mode"},"children":["payment"]}," or ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-mode"},"children":["subscription"]}," mode displays an optional checkbox to let customers explicitly save their payment method for future purchases. When customers check this checkbox, Checkout saves the payment method with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_methods\u002Fobject#payment_method_object-allow_redisplay"},"children":["allow_redisplay: always"]},". Checkout uses this parameter to determine whether a payment method can be prefilled on future purchases. When using ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"saved_payment_method_options.payment_method_save"},"children":[]},", you don’t need to pass in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"setup_future_usage"},"children":[]}," to save the payment method."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-saved_payment_method_options-payment_method_save"},"children":["saved_payment_method_options.payment_method_save"]}," requires a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Customer"},"children":[]},". To save a new customer, set the Checkout Session’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate"},"children":["customer_creation"]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"always"},"children":[]},". Otherwise, the session doesn’t save the customer or the payment method."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_method_save"},"children":[]}," isn’t passed in or if the customer doesn’t agree to save the payment method, Checkout still saves payment methods created in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"subscription"},"children":[]}," mode or using ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"setup_future_usage"},"children":[]},". These payment methods have an ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allow_redisplay"},"children":[]}," value of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"limited"},"children":[]},", which prevents them from being prefilled for returning purchases and allows you to comply with card network rules and data protection regulations. Learn how to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fsupport.stripe.com\u002Fquestions\u002Fprefilling-saved-cards-in-checkout"},"children":["change the default behavior enabled by these modes"]}," and how to change or override ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allow_redisplay"},"children":[]}," behavior."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can use Checkout to save cards and other payment methods to charge them off-session, but Checkout only prefills saved cards. Learn how to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fsupport.stripe.com\u002Fquestions\u002Fprefilling-saved-cards-in-checkout"},"children":["prefill saved cards"]},". To save a payment method without an initial payment, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fsave-and-reuse?platform=checkout"},"children":["use Checkout in setup mode"]},"."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fpartials\u002Fauth-and-capture.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"auth-and-capture","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":true,"title":"Separate authorization and capture","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe supports two-step card payments so you can first authorize a card, then capture funds later. When Stripe authorizes a payment, the card issuer guarantees the funds and places a hold for the payment amount on the customer’s card. You then have a certain amount of time to capture the funds, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fplace-a-hold-on-a-payment-method#auth-capture-limitations"},"children":["depending on the card"]},"\u0029. If you don’t capture the payment before the authorization expires, the payment is cancelled and the issuer releases the held funds."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Separating authorization and capture is useful if you need to take additional actions between confirming that a customer is able to pay and collecting their payment. For example, if you’re selling stock-limited items, you may need to confirm that an item purchased by your customer using Checkout is still available before capturing their payment and fulfilling the purchase. Accomplish this using the following workflow:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Confirm that Stripe authorized the customer’s payment method."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Consult your inventory management system to confirm that the item is still available."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Update your inventory management system to indicate that a customer has purchased the item."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Capture the customer’s payment."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Inform your customer whether their purchase was successful on your confirmation page."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To indicate that you want to separate authorization and capture, you must set the value of ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-payment_intent_data-capture_method"},"children":["payment_intent_data.capture_method"]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"manual"},"children":[]}," when creating the Checkout Session. This instructs Stripe to only authorize the amount on the customer’s card."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d \"line_items[0][price]\"={{PRICE_ID}} \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n -d \"payment_intent_data[capture_method]\"=manual \\\n --data-urlencode success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\" \\\n --data-urlencode cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n -d \"line_items[0][price]\"={{PRICE_ID}} \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n -d \"payment_intent_data[capture_method]\"=manual \\\n --success-url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\" \\\n --cancel-url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n line_items: [\n {\n price: '{{PRICE_ID}}',\n quantity: 1,\n },\n ],\n mode: 'payment',\n payment_intent_data: {capture_method: 'manual'},\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n line_items=[{\"price\": \"{{PRICE_ID}}\", \"quantity\": 1}],\n mode=\"payment\",\n payment_intent_data={\"capture_method\": \"manual\"},\n success_url=\"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n cancel_url=\"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"line_items\": [{\"price\": \"{{PRICE_ID}}\", \"quantity\": 1}],\n \"mode\": \"payment\",\n \"payment_intent_data\": {\"capture_method\": \"manual\"},\n \"success_url\": \"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n \"cancel_url\": \"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'line_items' =\u003E [\n [\n 'price' =\u003E '{{PRICE_ID}}',\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'payment_intent_data' =\u003E ['capture_method' =\u003E 'manual'],\n 'success_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n 'cancel_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"{{PRICE_ID}}\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setPaymentIntentData\u0028\n SessionCreateParams.PaymentIntentData.builder\u0028\u0029\n .setCaptureMethod\u0028SessionCreateParams.PaymentIntentData.CaptureMethod.MANUAL\u0029\n .build\u0028\u0029\n \u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"{{PRICE_ID}}\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setPaymentIntentData\u0028\n SessionCreateParams.PaymentIntentData.builder\u0028\u0029\n .setCaptureMethod\u0028SessionCreateParams.PaymentIntentData.CaptureMethod.MANUAL\u0029\n .build\u0028\u0029\n \u0029\n .setSuccessUrl\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029\n .setCancelUrl\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n line_items: [\n {\n price: '{{PRICE_ID}}',\n quantity: 1,\n },\n ],\n mode: 'payment',\n payment_intent_data: {\n capture_method: 'manual',\n },\n success_url: 'https:\u002F\u002Fexample.com\u002Fsuccess.html',\n cancel_url: 'https:\u002F\u002Fexample.com\u002Fcancel.html',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n Price: stripe.String\u0028\"{{PRICE_ID}}\"\u0029,\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n PaymentIntentData: \u0026stripe.CheckoutSessionPaymentIntentDataParams{\n CaptureMethod: stripe.String\u0028\"manual\"\u0029,\n },\n SuccessURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fsuccess.html\"\u0029,\n CancelURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fcancel.html\"\u0029,\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n Price = \"{{PRICE_ID}}\",\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n PaymentIntentData = new Stripe.Checkout.SessionPaymentIntentDataOptions\n {\n CaptureMethod = \"manual\",\n },\n SuccessUrl = \"https:\u002F\u002Fexample.com\u002Fsuccess.html\",\n CancelUrl = \"https:\u002F\u002Fexample.com\u002Fcancel.html\",\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_a82682ce933f25288fb7240dcb5c51fa26c2f4df","argsToHighlight":["payment_intent_data","capture_method"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To capture an uncaptured payment, you can use either the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Ftest\u002Fpayments?status%5B%5D=uncaptured"},"children":["Dashboard"]}," or the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcapture"},"children":["capture"]}," endpoint. Programmatically capturing payments requires access to the PaymentIntent created during the Checkout Session, which you can get from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcapture"},"children":["Session"]}," object."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fcheckout\u002F10-let-customers-manage-subscriptions.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"customer-portal","beta":false,"preview":false,"badges":["No code"],"collapsable":true,"numbered":true,"optional":true,"title":"Customer account management","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Let your customers ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fcustomer-management"},"children":["manage"]}," their own accounts by sharing a link to your ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"customer-portal"},"children":["customer portal"]},". The customer portal lets customers can log in with their email to manage subscriptions, update payment methods, and so on."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Now that you have your basic integration working, learn how to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fcheckout\u002Ffulfillment"},"children":["programmatically get a notification"]}," whenever a customer pays."]},{"\u0024\u0024mdtype":"Tag","name":"SeeAlso","attributes":{"level":2,"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1,"type":"guide"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fdiscounts"},"children":["Add discounts"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Ftaxes"},"children":["Collect taxes"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftax\u002Fcheckout\u002Ftax-ids"},"children":["Collect tax IDs"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcollect-addresses?payment-ui=checkout"},"children":["Add shipping"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustomization"},"children":["Customize your branding"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustom-success-page"},"children":["Customize your success page"]}]}]}],"titleDescriptor":{"id":"docsApp.components.seealso.defaultHeading","defaultMessage":"See also"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1,"type":"guide"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fdiscounts"},"children":["Add discounts"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Ftaxes"},"children":["Collect taxes"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftax\u002Fcheckout\u002Ftax-ids"},"children":["Collect tax IDs"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcollect-addresses?payment-ui=checkout"},"children":["Add shipping"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustomization"},"children":["Customize your branding"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustom-success-page"},"children":["Customize your success page"]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Page","attributes":{"prefs":{"platform":"web","ui":"embedded-form"},"title":"Embedded form"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fembedded-checkout\u002Faccept-a-payment-web-embedded-checkout.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Embed a prebuilt payment form on your site using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout"},"children":["Stripe Checkout"]},". See how this integration ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fonline-payments#compare-features-and-availability"},"children":["compares to Stripe’s other integration types"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCallout","attributes":{"demo":"embedded-checkout","isHorizontal":true,"embeddedCheckoutHost":"https:\u002F\u002Fjs.stripe.com\u002Fv3\u002Fembedded-checkout-inner.html"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"Integration effort"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ComplexityRating","attributes":{"rating":2,"color":"purple"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"Integration type"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Embed prebuilt payment form on your site"]}]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"UI customization"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CustomizabilityTooltip","attributes":{"text":"Limited customization"},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["20 preset fonts"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["3 preset border radius"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Custom background and border color"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Custom logo"]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fbranding\u002Fcheckout"},"children":["branding settings"]}," in the Stripe Dashboard to match Checkout to your site design."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fpartials\u002F01-set-up-stripe.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["First, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fregister"},"children":["register"]}," for a Stripe account."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use our official libraries to access the Stripe API from your application:"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Flibraries.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Available as a gem\nsudo gem install stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"Gemfile","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# If you use bundler, you can add this line to your Gemfile\ngem 'stripe'\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install through pip\npip3 install --upgrade stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"PyPi","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or find the Stripe package on http:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fstripe\u002F\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"requirements.txt","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Find the version you want to pin:\n# https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-python\u002Fblob\u002Fmaster\u002FCHANGELOG.md\n# Specify that version in your requirements.txt file\nstripe\u003E=5.0.0\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install the PHP library with Composer\ncomposer require stripe\u002Fstripe-php\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Source","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or download the source directly: https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-php\u002Freleases\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"build.gradle","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F*\n For Gradle, add the following dependency to your build.gradle and replace with\n the version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n*\u002F\nimplementation \"com.stripe:stripe-java:","28.0.0","\"\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"xml","filename":"pom.xml","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C\u0021--\n For Maven, add the following dependency to your POM and replace with the\n version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n--\u003E\n\u003Cdependency\u003E\n \u003CgroupId\u003Ecom.stripe\u003C\u002FgroupId\u003E\n \u003CartifactId\u003Estripe-java\u003C\u002FartifactId\u003E\n \u003Cversion\u003E","28.0.0","\u003C\u002Fversion\u003E\n\u003C\u002Fdependency\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Other environments","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# For other environments, manually install the following JARs:\n# - The Stripe JAR from https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n# - Google Gson from https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fgson\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with npm\nnpm install stripe --save\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Make sure your project is using Go Modules\ngo mod init\n# Install stripe-go\ngo get -u github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F Then import the package\nimport \u0028\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\"\n\u0029\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with dotnet\ndotnet add package Stripe.net\ndotnet restore\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or install with NuGet\nInstall-Package Stripe.net\n"]}]}}],"codeTabGroupID":"codetab_dfc4a6aff5f3711c66bdb90a3f37589faa94b1f4"},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"create-checkout-session","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Create a Checkout Session","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fembedded-checkout\u002Fcreate-checkout-session.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["From your server, create a ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"checkout-session"},"children":["Checkout Session"]}," and set the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-ui_mode"},"children":["ui_mode"]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"embedded"},"children":[]},". You can configure the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate"},"children":["Checkout Session"]}," with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-line_items"},"children":["line items"]}," to include and options such as ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fobject#checkout_session_object-currency"},"children":["currency"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can also create a Checkout Session for an ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fexisting-customers?platform=web\u0026ui=stripe-hosted"},"children":["existing customer"]},", allowing you to prefill Checkout fields with known contact information and unify your purchase history for that customer."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To return customers to a custom page that you host on your website, specify that page’s URL in the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-return_url"},"children":["return_url"]}," parameter. Include the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"{CHECKOUT_SESSION_ID}"},"children":[]}," template variable in the URL to retrieve the session’s status on the return page. Checkout automatically substitutes the variable with the Checkout Session ID before redirecting."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Read more about ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment?platform=web\u0026ui=embedded-form#return-page"},"children":["configuring the return page"]}," and other options for ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustom-success-page?payment-ui=embedded-form"},"children":["customizing redirect behavior"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["After you create the Checkout Session, use the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"client_secret"},"children":[]}," returned in the response to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"#mount-checkout"},"children":["mount Checkout"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":24,"end":25}],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# To learn more about Sinatra, watch this video: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\nrequire 'json'\nrequire 'sinatra'\nrequire 'stripe'\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\npost '\u002Fcreate-checkout-session' do\n session = Stripe::Checkout::Session.create\u0028{\n line_items: [{\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n }],\n mode: 'payment',",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}'"},"children":["\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}'"]},"\n }\u0029\n\n {clientSecret: session.client_secret}.to_json\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":25,"end":26}],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# To learn more about Flask, watch this video: https:\u002F\u002Fyoutu.be\u002F7Ul1vfsmsDck.\nimport os\nimport stripe\nfrom flask import Flask, redirect\n\napp = Flask\u0028__name__\u0029\n\nstripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\n\n@app.route\u0028'\u002Fcreate-checkout-session', methods=['POST']\u0029\ndef create_checkout_session\u0028\u0029:\n session = stripe.checkout.Session.create\u0028\n line_items = [{\n 'price_data': {\n 'currency': 'usd',\n 'product_data': {\n 'name': 'T-shirt',\n },\n 'unit_amount': 2000,\n },\n 'quantity': 1,\n }],\n mode = 'payment',",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n ui_mode = 'embedded',\n return_url = 'https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}',"},"children":["\n ui_mode = 'embedded',\n return_url = 'https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}',"]},"\n \u0029\n\n return jsonify\u0028clientSecret=session.client_secret\u0029\n\nif __name__ == '__main__':\n app.run\u0028port=4242\u0029\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"create-checkout-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":21,"end":22}],"add":[],"remove":[]}},"children":["\u003C?php\n\nrequire 'vendor\u002Fautoload.php';\n\n\u0024stripe = new \\Stripe\\StripeClient\u0028[\n \"api_key\" =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\n]\u0029;\n\n\u0024checkout_session = \u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'line_items' =\u003E [[\n 'price_data' =\u003E [\n 'currency' =\u003E 'usd',\n 'product_data' =\u003E [\n 'name' =\u003E 'T-shirt',\n ],\n 'unit_amount' =\u003E 2000,\n ],\n 'quantity' =\u003E 1,\n ]],\n 'mode' =\u003E 'payment',",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n 'ui_mode' =\u003E 'embedded',\n 'return_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}',"},"children":["\n 'ui_mode' =\u003E 'embedded',\n 'return_url' =\u003E 'https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}',"]},"\n]\u0029;\n\n echo json_encode\u0028array\u0028'clientSecret' =\u003E \u0024checkout_session-\u003Eclient_secret\u0029\u0029;\n?\u003E\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":26,"end":27}],"add":[],"remove":[]}},"children":["\nimport java.util.HashMap;\nimport java.util.Map;\nimport static spark.Spark.get;\nimport static spark.Spark.post;\nimport static spark.Spark.port;\nimport static spark.Spark.staticFiles;\nimport com.google.gson.Gson;\n\nimport com.stripe.Stripe;\nimport com.stripe.model.checkout.Session;\nimport com.stripe.param.checkout.SessionCreateParams;\n\npublic class Server {\n\n public static void main\u0028String[] args\u0029 {\n port\u00284242\u0029;\n Stripe.apiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";\n\n Gson gson = new Gson\u0028\u0029;\n\n post\u0028\"\u002Fcreate-checkout-session\", \u0028request, response\u0029 -\u003E {\n\n SessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn?session_id={CHECKOUT_SESSION_ID}\"\u0029"},"children":["\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn?session_id={CHECKOUT_SESSION_ID}\"\u0029"]},"\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setQuantity\u00281L\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setUnitAmount\u00282000L\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029\u0029\n .build\u0028\u0029;\n\n Session session = Session.create\u0028params\u0029;\n\n Map\u003CString, String\u003E map = new HashMap\u0028\u0029;\n map.put\u0028\"clientSecret\", session.getRawJsonObject\u0028\u0029.getAsJsonPrimitive\u0028\"client_secret\"\u0029.getAsString\u0028\u0029\u0029;\n\n return map;\n }, gson::toJson\u0029;\n }\n}\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":21,"end":22}],"add":[],"remove":[]}},"children":["\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F To learn more about Express, watch this video: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\nconst express = require\u0028'express'\u0029;\nconst app = express\u0028\u0029;\n\nconst stripe = require\u0028'stripe'\u0029\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\napp.post\u0028'\u002Fcreate-checkout-session', async \u0028req, res\u0029 =\u003E {\n const session = await stripe.checkout.sessions.create\u0028{\n line_items: [{\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n }],\n mode: 'payment',",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}'"},"children":["\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}'"]},"\n }\u0029;\n\n res.send\u0028{clientSecret: session.client_secret}\u0029;\n}\u0029;\n\napp.listen\u00284242, \u0028\u0029 =\u003E console.log\u0028\u0060Listening on port \u0024{4242}\u0021\u0060\u0029\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":34,"end":35}],"add":[],"remove":[]}},"children":["\npackage main\n\nimport \u0028\n \"net\u002Fhttp\"\n\n \"github.com\u002Flabstack\u002Fecho\"\n \"github.com\u002Flabstack\u002Fecho\u002Fmiddleware\"\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","76.0.0","\"\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","76.0.0","\u002Fcheckout\u002Fsession\"\n\u0029\n\n\u002F\u002F This example sets up an endpoint using the Echo framework.\n\u002F\u002F To learn more about Echo, watch this video: https:\u002F\u002Fyoutu.be\u002FePmEVBu8w6Y.\n\nfunc main\u0028\u0029 {\n stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"\n\n e := echo.New\u0028\u0029\n e.Use\u0028middleware.Logger\u0028\u0029\u0029\n e.Use\u0028middleware.Recover\u0028\u0029\u0029\n\n e.POST\u0028\"\u002Fcreate-checkout-session\", createCheckoutSession\u0029\n\n e.Logger.Fatal\u0028e.Start\u0028\"localhost:4242\"\u0029\u0029\n}\n\ntype CheckoutData struct {\n ClientSecret string \u0060json:\"clientSecret\"\u0060\n}\n\nfunc createCheckoutSession\u0028c echo.Context\u0029 \u0028err error\u0029 {\n params := \u0026stripe.CheckoutSessionParams{\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n UIMode: stripe.String\u0028\"embedded\"\u0029,\n ReturnURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}\"\u0029,"},"children":["\n UIMode: stripe.String\u0028\"embedded\"\u0029,\n ReturnURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Fcheckout\u002Freturn?session_id={CHECKOUT_SESSION_ID}\"\u0029,"]},"\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n PriceData: \u0026stripe.CheckoutSessionLineItemPriceDataParams{\n Currency: stripe.String\u0028\"usd\"\u0029,\n ProductData: \u0026stripe.CheckoutSessionLineItemPriceDataProductDataParams{\n Name: stripe.String\u0028\"T-shirt\"\u0029,\n },\n UnitAmount: stripe.Int64\u00282000\u0029,\n },\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n }\n\n s, _ := session.New\u0028params\u0029\n\n if err \u0021= nil {\n return err\n }\n\n data := CheckoutData{\n ClientSecret: s.ClientSecret,\n }\n\n return c.JSON\u0028http.StatusOK, data\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F This example sets up an endpoint using the ASP.NET MVC framework.\n\u002F\u002F To learn more about ASP.NET MVC, watch this video: https:\u002F\u002Fyoutu.be\u002F2-mMOB8MhmE.\n\nusing System.Collections.Generic;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Options;\nusing Stripe;\nusing Stripe.Checkout;\n\nnamespace server.Controllers\n{\n public class PaymentsController : Controller\n {\n public PaymentsController\u0028\u0029\n {\n StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";\n }\n\n [HttpPost\u0028\"create-checkout-session\"\u0029]\n public ActionResult CreateCheckoutSession\u0028\u0029\n {\n var options = new SessionCreateOptions\n {\n LineItems = new List\u003CSessionLineItemOptions\u003E\n {\n new SessionLineItemOptions\n {\n PriceData = new SessionLineItemPriceDataOptions\n {\n UnitAmount = 2000,\n Currency = \"usd\",\n ProductData = new SessionLineItemPriceDataProductDataOptions\n {\n Name = \"T-shirt\",\n },\n },\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n UiMode = \"embedded\",\n ReturnUrl = \"https:\u002F\u002Fexample.com\u002Freturn?session_id={CHECKOUT_SESSION_ID}\",\n };\n\n var service = new SessionService\u0028\u0029;\n Session session = service.Create\u0028options\u0029;\n\n return Json\u0028new {clientSecret = session.ClientSecret}\u0029;\n }\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_ffc05beb7b9a52fb57cbfb220728832caf2fb7b6"},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fembedded-checkout\u002F03-mount-checkout.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"mount-checkout","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Mount Checkout","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fcheckout\u002Fpartials\u002Fmounting-embedded-checkout.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"pref":"client","selector":"tabs","items":[{"id":"html","title":"HTML \u002B JS","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"html","title":"HTML \u002B JS"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Checkout is available as part of ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs"},"children":["Stripe.js"]},". Include the Stripe.js script on your page by adding it to the head of your HTML file. Next, create an empty DOM node \u0028container\u0029 to use for mounting."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"index.html","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Chead\u003E\n \u003Cscript src=\"https:\u002F\u002Fjs.stripe.com\u002Fv3\u002F\"\u003E\u003C\u002Fscript\u003E\n\u003C\u002Fhead\u003E\n\u003Cbody\u003E\n \u003Cdiv id=\"checkout\"\u003E\n \u003C\u0021-- Checkout will insert the payment form here --\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Fbody\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Initialize Stripe.js with your publishable API key."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create an asynchronous ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"fetchClientSecret"},"children":[]}," function that makes a request to your server to create the Checkout Session and retrieve the client secret. Pass this function into ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"options"},"children":[]}," when you create the Checkout instance:"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fcheckout\u002Fclient\u002Finit-embedded-checkout.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"index.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F Initialize Stripe.js","\nconst stripe = Stripe\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029;","\n\ninitialize\u0028\u0029;\n\n\u002F\u002F Fetch Checkout Session and retrieve the client secret\nasync function initialize\u0028\u0029 {\n const fetchClientSecret = async \u0028\u0029 =\u003E {\n const response = await fetch\u0028\"\u002Fcreate-checkout-session\", {\n method: \"POST\",\n }\u0029;\n const { clientSecret } = await response.json\u0028\u0029;\n return clientSecret;\n };\n\n \u002F\u002F Initialize Checkout\n const checkout = await stripe.initEmbeddedCheckout\u0028{\n fetchClientSecret,\n }\u0029;\n\n \u002F\u002F Mount Checkout\n checkout.mount\u0028'#checkout'\u0029;\n}\n"]}]}]}},{"id":"react","title":"React","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"react","title":"React"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Install ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fsdks\u002Fstripejs-react"},"children":["react-stripe-js"]}," and the Stripe.js loader from npm:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["npm install --save @stripe\u002Freact-stripe-js @stripe\u002Fstripe-js\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To use the Embedded Checkout component, create an ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"EmbeddedCheckoutProvider"},"children":[]},". Call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"loadStripe"},"children":[]}," with your publishable API key and pass the returned ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Promise"},"children":[]}," to the provider."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create an asynchronous ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"fetchClientSecret"},"children":[]}," function that makes a request to your server to create the Checkout Session and retrieve the client secret. Pass this function into the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"options"},"children":[]}," prop accepted by the provider."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"jsx","filename":"index.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import * as React from 'react';\nimport {loadStripe} from '@stripe\u002Fstripe-js';\nimport {\n EmbeddedCheckoutProvider,\n EmbeddedCheckout\n} from '@stripe\u002Freact-stripe-js';\n\n\u002F\u002F Make sure to call \u0060loadStripe\u0060 outside of a component’s render to avoid\n\u002F\u002F recreating the \u0060Stripe\u0060 object on every render.\nconst stripePromise = loadStripe\u0028'pk_test_123'\u0029;\n\nconst App = \u0028\u0029 =\u003E {\n const fetchClientSecret = useCallback\u0028\u0028\u0029 =\u003E {\n \u002F\u002F Create a Checkout Session\n return fetch\u0028\"\u002Fcreate-checkout-session\", {\n method: \"POST\",\n }\u0029\n .then\u0028\u0028res\u0029 =\u003E res.json\u0028\u0029\u0029\n .then\u0028\u0028data\u0029 =\u003E data.clientSecret\u0029;\n }, []\u0029;\n\n const options = {fetchClientSecret};\n\n return \u0028\n \u003Cdiv id=\"checkout\"\u003E\n \u003CEmbeddedCheckoutProvider\n stripe={stripePromise}\n options={options}\n \u003E\n \u003CEmbeddedCheckout \u002F\u003E\n \u003C\u002FEmbeddedCheckoutProvider\u003E\n \u003C\u002Fdiv\u003E\n \u0029\n}\n"]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Checkout renders in an iframe that securely sends payment information to Stripe over an HTTPS connection."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"mistake"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Avoid placing Checkout within another iframe because some payment methods require redirecting to another page for payment confirmation."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Customize appearance","id":"customize-appearance"},"children":["Customize appearance"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Customize Checkout to match the design of your site by setting the background color, button color, border radius, and fonts in your account’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fbranding"},"children":["branding settings"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, Checkout renders with no external padding or margin. We recommend using a container element such as a div to apply your desired margin \u0028for example, 16px on all sides\u0029."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"return-page","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Show a return page","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["After your customer attempts payment, Stripe redirects them to a return page that you host on your site. When you created the Checkout Session, you specified the URL of the return page in the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-return_url"},"children":["return_url"]}," parameter. Read more about other options for ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustom-success-page?payment-ui=embedded-form"},"children":["customizing redirect behavior"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When rendering your return page, retrieve the Checkout Session status using the Checkout Session ID in the URL. Handle the result according to the session status as follows:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"complete"},"children":[]},": The payment succeeded. Use the information from the Checkout Session to render a success page."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"open"},"children":[]},": The payment failed or was canceled. Remount Checkout so that your customer can try again."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["get '\u002Fsession-status' do\n session = Stripe::Checkout::Session.retrieve\u0028params[:session_id]\u0029\n\n {status: session.status, customer_email: session.customer_details.email}.to_json\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["@app.route\u0028'\u002Fsession-status', methods=['GET']\u0029\ndef session_status\u0028\u0029:\n session = stripe.checkout.Session.retrieve\u0028request.args.get\u0028'session_id'\u0029\u0029\n\n return jsonify\u0028status=session.status, customer_email=session.customer_details.email\u0029\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"status.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["try {\n \u002F\u002F retrieve JSON from POST body\n \u0024jsonStr = file_get_contents\u0028'php:\u002F\u002Finput'\u0029;\n \u0024jsonObj = json_decode\u0028\u0024jsonStr\u0029;\n\n \u0024session = \u0024stripe-\u003Echeckout-\u003Esessions-\u003Eretrieve\u0028\u0024jsonObj-\u003Esession_id\u0029;\n\n echo json_encode\u0028['status' =\u003E \u0024session-\u003Estatus, 'customer_email' =\u003E \u0024session-\u003Ecustomer_details-\u003Eemail]\u0029;\n http_response_code\u0028200\u0029;\n} catch \u0028Error \u0024e\u0029 {\n http_response_code\u0028500\u0029;\n echo json_encode\u0028['error' =\u003E \u0024e-\u003EgetMessage\u0028\u0029]\u0029;\n}\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["get\u0028\"\u002Fsession-status\", \u0028request, response\u0029 -\u003E {\n Session session = Session.retrieve\u0028request.queryParams\u0028\"session_id\"\u0029\u0029;\n\n Map\u003CString, String\u003E map = new HashMap\u0028\u0029;\n map.put\u0028\"status\", session.getRawJsonObject\u0028\u0029.getAsJsonPrimitive\u0028\"status\"\u0029.getAsString\u0028\u0029\u0029;\n map.put\u0028\"customer_email\", session.getRawJsonObject\u0028\u0029.getAsJsonObject\u0028\"customer_details\"\u0029.getAsJsonPrimitive\u0028\"email\"\u0029.getAsString\u0028\u0029\u0029;\n\n return map;\n }, gson::toJson\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["app.get\u0028'\u002Fsession_status', async \u0028req, res\u0029 =\u003E {\n const session = await stripe.checkout.sessions.retrieve\u0028req.query.session_id\u0029;\n\n res.send\u0028{\n status: session.status,\n payment_status: session.payment_status,\n customer_email: session.customer_details.email\n }\u0029;\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["func retrieveCheckoutSession\u0028w http.ResponseWriter, r *http.Request\u0029 {\n s, _ := session.Get\u0028r.URL.Query\u0028\u0029.Get\u0028\"session_id\"\u0029, nil\u0029\n\n writeJSON\u0028w, struct {\n Status string \u0060json:\"status\"\u0060\n CustomerEmail string \u0060json:\"customer_email\"\u0060\n }{\n Status: string\u0028s.Status\u0029,\n CustomerEmail: string\u0028s.CustomerDetails.Email\u0029,\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["[Route\u0028\"session-status\"\u0029]\n[ApiController]\npublic class SessionStatusController : Controller\n{\n [HttpGet]\n public ActionResult SessionStatus\u0028[FromQuery] string session_id\u0029\n {\n var sessionService = new SessionService\u0028\u0029;\n Session session = sessionService.Get\u0028session_id\u0029;\n\n return Json\u0028new {status = session.Status, customer_email = session.CustomerDetails.Email}\u0029;\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_f050cd931d23b67f79e97de4463d270a3c367be5"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"client.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["const session = await fetch\u0028\u0060\u002Fsession_status?session_id=\u0024{session_id}\u0060\u0029\nif \u0028session.status == 'open'\u0029 {\n \u002F\u002F Remount embedded Checkout\n} else if \u0028session.status == 'complete'\u0029 {\n \u002F\u002F Show success page\n \u002F\u002F Optionally use session.payment_status or session.customer_email\n \u002F\u002F to customize the success page\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":4,"anchored":true,"id":"redirect-based-payment-methods"},"children":["Redirect-based payment methods"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["During payment, some payment methods redirect the customer to an intermediate page, such as a bank authorization page. When they complete that page, Stripe redirects them to your return page."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn more about ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustom-success-page?payment-ui=embedded-form#redirect-based-payment-methods"},"children":["redirect-based payment methods and redirect behavior"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"testing","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Test your integration","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To test your embedded payment form integration:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Create an embedded Checkout Session and mount Checkout on your page."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Fill out the payment details with a method from the table below.",{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any future date for card expiry."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any 3-digit number for CVC."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any billing postal code."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Pay"]},". You’re redirected to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Go to the Dashboard and look for the payment on the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Ftest\u002Fpayments?status%5B0%5D=successful"},"children":["payments page"]},". If your payment succeeded, you’ll see it in that list."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click your payment to see more details, like a Checkout summary with billing information and the list of purchased items. You can use this information to fulfill the order."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn more about ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["testing your integration"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Ftesting-auto-pm.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"test-cards","title":"Cards","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-cards","title":"Cards"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Card number"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4242424242424242","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment succeeds and doesn’t require authentication."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000002500003155","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment requires ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"sca"},"children":["authentication"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000000000009995","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card is declined with a decline code like ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"insufficient_funds"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"6205500000000000004","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The UnionPay card has a variable length of 13-19 digits."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]}]}]}]}},{"id":"test-wallets","title":"Wallets","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-wallets","title":"Wallets"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Alipay"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["immediate notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]}]}]}]}},{"id":"test-bank-redirects","title":"Bank redirects","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-redirects","title":"Bank redirects"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BECS Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with BECS Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"900123456"},"children":[]}," and BSB ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"000-000"},"children":[]},". The confirmed PaymentIntent initially transitions to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]},", then transitions to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"succeeded"},"children":[]}," status 3 minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BECS Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment fails with an ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"account_closed"},"children":[]}," error code."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"111111113"},"children":[]}," and BSB ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"000-000"},"children":[]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Bancontact, EPS, iDEAL, and Przelewy24"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and immediate notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and delayed notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK payments fail in a variety of ways—immediate failures \u0028for example, the code is expired or invalid\u0029, delayed errors \u0028the bank declines\u0029 or timeouts \u0028the customer didn’t respond in time\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Use email patterns to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fblik\u002Faccept-a-payment#simulate-failures"},"children":["simulate the different failures."]}]}]}]}]}]}},{"id":"test-bank-debits","title":"Bank debits","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-debits","title":"Bank debits"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with SEPA Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT321904300235473204"},"children":[]},". The confirmed PaymentIntent initially transitions to processing, then transitions to the succeeded status three minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment intent status transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_payment_method"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT861904300235473202"},"children":[]},"."]}]}]}]}]}},{"id":"test-vouchers","title":"Vouchers","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-vouchers","title":"Vouchers"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Boleto, OXXO"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer pays with a Boleto or OXXO voucher."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Select Boleto or OXXO as the payment method and submit the payment. Close the dialog after it appears."]}]}]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["Testing"]}," for additional information to test your integration."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"apple-pay-google-pay","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Add more payment methods","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, Checkout ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fintegration-options#choose-how-to-add-payment-methods"},"children":["supports many payment methods"]},". You have to take additional steps to enable and display some methods, like Apple Pay, Google Pay, and buy now, pay later methods."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Apple Pay and Google Pay","id":"apple-pay-and-google-pay"},"children":["Apple Pay and Google Pay"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To accept payments from Apple Pay and Google Pay, you must:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enable them in your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["payment methods settings"]},". Apple Pay is enabled by default."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Serve your application over HTTPS in development and production."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fpmd-registration"},"children":["Register and verify your domain"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Serve your application over HTTPS in development and production. You can use a service like ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fngrok.com\u002F"},"children":["ngrok"]}," to serve your application for local testing."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In addition, a Checkout Session only displays the Apple Pay button to customers when ",{"\u0024\u0024mdtype":"Tag","name":"em","attributes":{},"children":["all"]}," of the following conditions are true:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["The customer’s device is running ","macOS version 17 or later or iOS version 17 or later","."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["The customer is using the Safari browser."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["The customer has a valid card registered with Apple Pay."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["A Checkout Session only displays the Google Pay button to customers when ",{"\u0024\u0024mdtype":"Tag","name":"em","attributes":{},"children":["all"]}," of the following conditions are true:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["The customer’s device is running Chrome 61 or newer."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["The customer has a valid card registered with Google Pay."]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"regional","title":"Regional testing","countries":["IN"]},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe Checkout doesn’t support Apple Pay or Google Pay for Stripe accounts or customers in India. If your IP address is in India, you can’t test your Apple Pay or Google Pay integration, even if the Stripe account is outside India."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"create-product-prices-upfront","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Create products and prices","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fpartials\u002Fcreate-product-prices-upfront.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Aside","attributes":{"title":"Let customers decide what to pay","wide":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fpay-what-you-want"},"children":["set up your Checkout Session"]}," to accept tips and donations, or sell pay-what-you-want products and services."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Before you create a Checkout Session, you can create ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"products"},"children":["Products"]}," and ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"prices"},"children":["Prices"]}," upfront. Use products to represent different physical goods or levels of service, and ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"prices"},"children":["Prices"]}," to represent each product’s pricing."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For example, you can create a T-shirt as a product with a price of 20 USD. This allows you to update and add prices without needing to change the details of your underlying products. You can either create products and prices with the Stripe Dashboard or API. Learn more about ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fproducts-prices\u002Fhow-products-and-prices-work"},"children":["how products and prices work"]}," and how to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fproducts-prices\u002Fgetting-started"},"children":["get started"]}," with them."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"api","title":"API","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"API"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The API only requires a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"name"},"children":[]}," to create a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fproducts"},"children":["Product"]},". Checkout displays the product ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"name"},"children":[]},", ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"description"},"children":[]},", and ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"images"},"children":[]}," that you supply."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fproducts \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d name=T-shirt"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe products create \\\n --name=T-shirt"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Product.create\u0028{name: 'T-shirt'}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.Product.create\u0028name=\"T-shirt\"\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.products.create\u0028{\"name\": \"T-shirt\"}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Eproducts-\u003Ecreate\u0028['name' =\u003E 'T-shirt']\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nProductCreateParams params = ProductCreateParams.builder\u0028\u0029.setName\u0028\"T-shirt\"\u0029.build\u0028\u0029;\n\nProduct product = Product.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nProductCreateParams params = ProductCreateParams.builder\u0028\u0029.setName\u0028\"T-shirt\"\u0029.build\u0028\u0029;\n\nProduct product = client.products\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst product = await stripe.products.create\u0028{\n name: 'T-shirt',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.ProductParams{Name: stripe.String\u0028\"T-shirt\"\u0029};\nresult, err := product.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new ProductCreateOptions { Name = \"T-shirt\" };\nvar service = new ProductService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_67c43228db362de216a919ba023af4d5e8b7e599","httpPath":"\u002Fv1\u002Fproducts","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Next, create a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fprices"},"children":["Price"]}," to define how much to charge for your product. This includes how much the product costs and what currency to use."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fprices \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d product=\"\u0024\u0024_RESOURCE_product\u0024\u0024\" \\\n -d unit_amount=2000 \\\n -d currency=usd"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe prices create \\\n --product=\"\u0024\u0024_RESOURCE_product\u0024\u0024\" \\\n --unit-amount=2000 \\\n --currency=usd"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Price.create\u0028{\n product: '\u0024\u0024_RESOURCE_product\u0024\u0024',\n unit_amount: 2000,\n currency: 'usd',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.Price.create\u0028\n product=\"\u0024\u0024_RESOURCE_product\u0024\u0024\",\n unit_amount=2000,\n currency=\"usd\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.prices.create\u0028{\n \"product\": \"\u0024\u0024_RESOURCE_product\u0024\u0024\",\n \"unit_amount\": 2000,\n \"currency\": \"usd\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Eprices-\u003Ecreate\u0028[\n 'product' =\u003E '\u0024\u0024_RESOURCE_product\u0024\u0024',\n 'unit_amount' =\u003E 2000,\n 'currency' =\u003E 'usd',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nPriceCreateParams params =\n PriceCreateParams.builder\u0028\u0029\n .setProduct\u0028\"\u0024\u0024_RESOURCE_product\u0024\u0024\"\u0029\n .setUnitAmount\u00282000L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .build\u0028\u0029;\n\nPrice price = Price.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nPriceCreateParams params =\n PriceCreateParams.builder\u0028\u0029\n .setProduct\u0028\"\u0024\u0024_RESOURCE_product\u0024\u0024\"\u0029\n .setUnitAmount\u00282000L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .build\u0028\u0029;\n\nPrice price = client.prices\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst price = await stripe.prices.create\u0028{\n product: '\u0024\u0024_RESOURCE_product\u0024\u0024',\n unit_amount: 2000,\n currency: 'usd',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.PriceParams{\n Product: stripe.String\u0028\"\u0024\u0024_RESOURCE_product\u0024\u0024\"\u0029,\n UnitAmount: stripe.Int64\u00282000\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n};\nresult, err := price.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new PriceCreateOptions\n{\n Product = \"\u0024\u0024_RESOURCE_product\u0024\u0024\",\n UnitAmount = 2000,\n Currency = \"usd\",\n};\nvar service = new PriceService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_ace8d55a6d8468c7cd3ed1fa63b5a4eb23243f2d","httpPath":"\u002Fv1\u002Fprices","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]}},{"id":"dashboard","title":"Dashboard","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"Dashboard"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Copy products created in test mode to live mode so that you don’t need to re-create them. In the Product detail view in the Dashboard, click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Copy to live mode"]}," in the upper right corner. You can only do this once for each product created in test mode. Subsequent updates to the test product aren’t reflected for the live product."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Make sure you’re in test mode by toggling the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["View test data"]}," button at the bottom of the Stripe Dashboard. Next, define the items you want to sell. To create a new product and price:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Navigate to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Ftest\u002Fproducts"},"children":["Products"]}," section in the Dashboard."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Add product"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["One time"]}," when setting the price."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Checkout displays the product name, description, and images that you supply."]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Each price you create has an ID. When you create a Checkout Session, reference the price ID and quantity. If you’re selling in multiple currencies, make your Price ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"multi-currency-price"},"children":["multi-currency"]},". Checkout automatically ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fmanual-currency-prices"},"children":["determines the customer’s local currency"]}," and presents that currency if the Price supports it."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d mode=payment \\\n -d \"line_items[0][price]\"={{PRICE_ID}} \\\n -d \"line_items[0][quantity]\"=1 \\\n -d ui_mode=embedded \\\n --data-urlencode return_url=\"https:\u002F\u002Fexample.com\u002Freturn\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n --mode=payment \\\n -d \"line_items[0][price]\"={{PRICE_ID}} \\\n -d \"line_items[0][quantity]\"=1 \\\n --ui-mode=embedded \\\n --return-url=\"https:\u002F\u002Fexample.com\u002Freturn\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n mode: 'payment',\n line_items: [\n {\n price: '{{PRICE_ID}}',\n quantity: 1,\n },\n ],\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n mode=\"payment\",\n line_items=[{\"price\": \"{{PRICE_ID}}\", \"quantity\": 1}],\n ui_mode=\"embedded\",\n return_url=\"https:\u002F\u002Fexample.com\u002Freturn\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"mode\": \"payment\",\n \"line_items\": [{\"price\": \"{{PRICE_ID}}\", \"quantity\": 1}],\n \"ui_mode\": \"embedded\",\n \"return_url\": \"https:\u002F\u002Fexample.com\u002Freturn\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'mode' =\u003E 'payment',\n 'line_items' =\u003E [\n [\n 'price' =\u003E '{{PRICE_ID}}',\n 'quantity' =\u003E 1,\n ],\n ],\n 'ui_mode' =\u003E 'embedded',\n 'return_url' =\u003E 'https:\u002F\u002Fexample.com\u002Freturn',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"{{PRICE_ID}}\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"{{PRICE_ID}}\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n mode: 'payment',\n line_items: [\n {\n price: '{{PRICE_ID}}',\n quantity: 1,\n },\n ],\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n Price: stripe.String\u0028\"{{PRICE_ID}}\"\u0029,\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n UIMode: stripe.String\u0028string\u0028stripe.CheckoutSessionUIModeEmbedded\u0029\u0029,\n ReturnURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029,\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n Mode = \"payment\",\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n Price = \"{{PRICE_ID}}\",\n Quantity = 1,\n },\n },\n UiMode = \"embedded\",\n ReturnUrl = \"https:\u002F\u002Fexample.com\u002Freturn\",\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_97c7eaa8b6f963629c46b51e518dc4bf2b68ce33","httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"prefill-customer-data","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":true,"title":"Prefill customer data","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you’ve already collected your customer’s email and want to prefill it in the Checkout Session for them, pass ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-customer_email"},"children":["customer_email"]}," when creating a Checkout Session."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n --data-urlencode customer_email=\"customer@example.com\" \\\n -d \"line_items[0][price]\"=\"\u0024\u0024_RESOURCE_price\u0024\u0024\" \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n -d ui_mode=embedded \\\n --data-urlencode return_url=\"https:\u002F\u002Fexample.com\u002Freturn\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n --customer-email=\"customer@example.com\" \\\n -d \"line_items[0][price]\"=\"\u0024\u0024_RESOURCE_price\u0024\u0024\" \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n --ui-mode=embedded \\\n --return-url=\"https:\u002F\u002Fexample.com\u002Freturn\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n customer_email: 'customer@example.com',\n line_items: [\n {\n price: '\u0024\u0024_RESOURCE_price\u0024\u0024',\n quantity: 1,\n },\n ],\n mode: 'payment',\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n customer_email=\"customer@example.com\",\n line_items=[{\"price\": \"\u0024\u0024_RESOURCE_price\u0024\u0024\", \"quantity\": 1}],\n mode=\"payment\",\n ui_mode=\"embedded\",\n return_url=\"https:\u002F\u002Fexample.com\u002Freturn\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"customer_email\": \"customer@example.com\",\n \"line_items\": [{\"price\": \"\u0024\u0024_RESOURCE_price\u0024\u0024\", \"quantity\": 1}],\n \"mode\": \"payment\",\n \"ui_mode\": \"embedded\",\n \"return_url\": \"https:\u002F\u002Fexample.com\u002Freturn\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'customer_email' =\u003E 'customer@example.com',\n 'line_items' =\u003E [\n [\n 'price' =\u003E '\u0024\u0024_RESOURCE_price\u0024\u0024',\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'ui_mode' =\u003E 'embedded',\n 'return_url' =\u003E 'https:\u002F\u002Fexample.com\u002Freturn',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerEmail\u0028\"customer@example.com\"\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"\u0024\u0024_RESOURCE_price\u0024\u0024\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerEmail\u0028\"customer@example.com\"\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"\u0024\u0024_RESOURCE_price\u0024\u0024\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n customer_email: 'customer@example.com',\n line_items: [\n {\n price: '\u0024\u0024_RESOURCE_price\u0024\u0024',\n quantity: 1,\n },\n ],\n mode: 'payment',\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n CustomerEmail: stripe.String\u0028\"customer@example.com\"\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n Price: stripe.String\u0028\"\u0024\u0024_RESOURCE_price\u0024\u0024\"\u0029,\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n UIMode: stripe.String\u0028string\u0028stripe.CheckoutSessionUIModeEmbedded\u0029\u0029,\n ReturnURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029,\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n CustomerEmail = \"customer@example.com\",\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n Price = \"\u0024\u0024_RESOURCE_price\u0024\u0024\",\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n UiMode = \"embedded\",\n ReturnUrl = \"https:\u002F\u002Fexample.com\u002Freturn\",\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_1c5b4b23e221935914244532c7e7cc2fa3d13c73","argsToHighlight":["customer_email"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"save-payment-method-details","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":true,"title":"Save payment method details","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fsave-payment-method-checkout.md","variables":{"isEmbeddedCheckout":true}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, payment methods used to make a one-time payment with Checkout aren’t available for future use."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Save payment methods to charge them off-session","id":"save-payment-methods-to-charge-them-off-session"},"children":["Save payment methods to charge them off-session"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can set Checkout to save payment methods used to make a one-time payment by passing the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-payment_intent_data-setup_future_usage"},"children":["payment_intent_data.setup_future_usage"]}," argument. This is useful if you need to capture a payment method on-file to use for future fees, such as cancellation or no-show fees."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d customer_creation=always \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n -d ui_mode=embedded \\\n --data-urlencode return_url=\"https:\u002F\u002Fexample.com\u002Freturn\" \\\n -d \"payment_intent_data[setup_future_usage]\"=off_session"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n --customer-creation=always \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n --ui-mode=embedded \\\n --return-url=\"https:\u002F\u002Fexample.com\u002Freturn\" \\\n -d \"payment_intent_data[setup_future_usage]\"=off_session"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n customer_creation: 'always',\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {name: 'T-shirt'},\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n payment_intent_data: {setup_future_usage: 'off_session'},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n customer_creation=\"always\",\n line_items=[\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n mode=\"payment\",\n ui_mode=\"embedded\",\n return_url=\"https:\u002F\u002Fexample.com\u002Freturn\",\n payment_intent_data={\"setup_future_usage\": \"off_session\"},\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"customer_creation\": \"always\",\n \"line_items\": [\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n \"mode\": \"payment\",\n \"ui_mode\": \"embedded\",\n \"return_url\": \"https:\u002F\u002Fexample.com\u002Freturn\",\n \"payment_intent_data\": {\"setup_future_usage\": \"off_session\"},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'customer_creation' =\u003E 'always',\n 'line_items' =\u003E [\n [\n 'price_data' =\u003E [\n 'currency' =\u003E 'usd',\n 'product_data' =\u003E ['name' =\u003E 'T-shirt'],\n 'unit_amount' =\u003E 2000,\n ],\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'ui_mode' =\u003E 'embedded',\n 'return_url' =\u003E 'https:\u002F\u002Fexample.com\u002Freturn',\n 'payment_intent_data' =\u003E ['setup_future_usage' =\u003E 'off_session'],\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerCreation\u0028SessionCreateParams.CustomerCreation.ALWAYS\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .setPaymentIntentData\u0028\n SessionCreateParams.PaymentIntentData.builder\u0028\u0029\n .setSetupFutureUsage\u0028\n SessionCreateParams.PaymentIntentData.SetupFutureUsage.OFF_SESSION\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerCreation\u0028SessionCreateParams.CustomerCreation.ALWAYS\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .setPaymentIntentData\u0028\n SessionCreateParams.PaymentIntentData.builder\u0028\u0029\n .setSetupFutureUsage\u0028\n SessionCreateParams.PaymentIntentData.SetupFutureUsage.OFF_SESSION\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n customer_creation: 'always',\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n payment_intent_data: {\n setup_future_usage: 'off_session',\n },\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n CustomerCreation: stripe.String\u0028string\u0028stripe.CheckoutSessionCustomerCreationAlways\u0029\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n PriceData: \u0026stripe.CheckoutSessionLineItemPriceDataParams{\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n ProductData: \u0026stripe.CheckoutSessionLineItemPriceDataProductDataParams{\n Name: stripe.String\u0028\"T-shirt\"\u0029,\n },\n UnitAmount: stripe.Int64\u00282000\u0029,\n },\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n UIMode: stripe.String\u0028string\u0028stripe.CheckoutSessionUIModeEmbedded\u0029\u0029,\n ReturnURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029,\n PaymentIntentData: \u0026stripe.CheckoutSessionPaymentIntentDataParams{\n SetupFutureUsage: stripe.String\u0028\"off_session\"\u0029,\n },\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n CustomerCreation = \"always\",\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n PriceData = new Stripe.Checkout.SessionLineItemPriceDataOptions\n {\n Currency = \"usd\",\n ProductData = new Stripe.Checkout.SessionLineItemPriceDataProductDataOptions\n {\n Name = \"T-shirt\",\n },\n UnitAmount = 2000,\n },\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n UiMode = \"embedded\",\n ReturnUrl = \"https:\u002F\u002Fexample.com\u002Freturn\",\n PaymentIntentData = new Stripe.Checkout.SessionPaymentIntentDataOptions\n {\n SetupFutureUsage = \"off_session\",\n },\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_116f3285cbb78f1c2ebd78df6726c46d1e66d443","argsToHighlight":["payment_intent_data"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you use Checkout in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"subscription"},"children":[]}," mode, Stripe automatically saves the payment method to charge it for subsequent payments. Card payment methods saved to customers using either ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"setup_future_usage"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"subscription"},"children":[]}," mode don’t appear for return purchases in Checkout \u0028more on this below\u0029. We recommend using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustomization\u002Fpolicies"},"children":["custom text"]}," to link out to any relevant terms regarding the usage of saved payment information."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"caution"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Global privacy laws are complicated and nuanced. We recommend contacting your legal and privacy team prior to implementing ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-payment_intent_data-setup_future_usage"},"children":["setup_future_usage"]}," because it might implicate your existing privacy compliance framework. Refer to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fedpb.europa.eu\u002Fsystem\u002Ffiles\u002F2021-05\u002Frecommendations022021_on_storage_of_credit_card_data_en_1.pdf"},"children":["the guidance issued by the European Protection Board"]}," to learn more about saving payment details."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Save payment methods to prefill them in Checkout","id":"save-payment-methods-to-prefill-them-in-checkout"},"children":["Save payment methods to prefill them in Checkout"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, Checkout uses ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustomization\u002Fbehavior#link"},"children":["Link"]}," to provide your customers with the option to securely save and reuse their payment information. If you prefer to manage payment methods yourself, use ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-saved_payment_method_options-payment_method_save"},"children":["saved_payment_method_options.payment_method_save"]}," when creating a Checkout Session to let your customers save their payment methods for future purchases in Checkout."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d customer_creation=always \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n -d ui_mode=embedded \\\n --data-urlencode return_url=\"https:\u002F\u002Fexample.com\u002Freturn\" \\\n -d \"saved_payment_method_options[payment_method_save]\"=enabled"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n --customer-creation=always \\\n -d \"line_items[0][price_data][currency]\"=usd \\\n -d \"line_items[0][price_data][product_data][name]\"=T-shirt \\\n -d \"line_items[0][price_data][unit_amount]\"=2000 \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n --ui-mode=embedded \\\n --return-url=\"https:\u002F\u002Fexample.com\u002Freturn\" \\\n -d \"saved_payment_method_options[payment_method_save]\"=enabled"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n customer_creation: 'always',\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {name: 'T-shirt'},\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n saved_payment_method_options: {payment_method_save: 'enabled'},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n customer_creation=\"always\",\n line_items=[\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n mode=\"payment\",\n ui_mode=\"embedded\",\n return_url=\"https:\u002F\u002Fexample.com\u002Freturn\",\n saved_payment_method_options={\"payment_method_save\": \"enabled\"},\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"customer_creation\": \"always\",\n \"line_items\": [\n {\n \"price_data\": {\n \"currency\": \"usd\",\n \"product_data\": {\"name\": \"T-shirt\"},\n \"unit_amount\": 2000,\n },\n \"quantity\": 1,\n },\n ],\n \"mode\": \"payment\",\n \"ui_mode\": \"embedded\",\n \"return_url\": \"https:\u002F\u002Fexample.com\u002Freturn\",\n \"saved_payment_method_options\": {\"payment_method_save\": \"enabled\"},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'customer_creation' =\u003E 'always',\n 'line_items' =\u003E [\n [\n 'price_data' =\u003E [\n 'currency' =\u003E 'usd',\n 'product_data' =\u003E ['name' =\u003E 'T-shirt'],\n 'unit_amount' =\u003E 2000,\n ],\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'ui_mode' =\u003E 'embedded',\n 'return_url' =\u003E 'https:\u002F\u002Fexample.com\u002Freturn',\n 'saved_payment_method_options' =\u003E ['payment_method_save' =\u003E 'enabled'],\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerCreation\u0028SessionCreateParams.CustomerCreation.ALWAYS\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .setSavedPaymentMethodOptions\u0028\n SessionCreateParams.SavedPaymentMethodOptions.builder\u0028\u0029\n .setPaymentMethodSave\u0028\n SessionCreateParams.SavedPaymentMethodOptions.PaymentMethodSave.ENABLED\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .setCustomerCreation\u0028SessionCreateParams.CustomerCreation.ALWAYS\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPriceData\u0028\n SessionCreateParams.LineItem.PriceData.builder\u0028\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setProductData\u0028\n SessionCreateParams.LineItem.PriceData.ProductData.builder\u0028\u0029\n .setName\u0028\"T-shirt\"\u0029\n .build\u0028\u0029\n \u0029\n .setUnitAmount\u00282000L\u0029\n .build\u0028\u0029\n \u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .setSavedPaymentMethodOptions\u0028\n SessionCreateParams.SavedPaymentMethodOptions.builder\u0028\u0029\n .setPaymentMethodSave\u0028\n SessionCreateParams.SavedPaymentMethodOptions.PaymentMethodSave.ENABLED\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n customer_creation: 'always',\n line_items: [\n {\n price_data: {\n currency: 'usd',\n product_data: {\n name: 'T-shirt',\n },\n unit_amount: 2000,\n },\n quantity: 1,\n },\n ],\n mode: 'payment',\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n saved_payment_method_options: {\n payment_method_save: 'enabled',\n },\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n CustomerCreation: stripe.String\u0028string\u0028stripe.CheckoutSessionCustomerCreationAlways\u0029\u0029,\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n PriceData: \u0026stripe.CheckoutSessionLineItemPriceDataParams{\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n ProductData: \u0026stripe.CheckoutSessionLineItemPriceDataProductDataParams{\n Name: stripe.String\u0028\"T-shirt\"\u0029,\n },\n UnitAmount: stripe.Int64\u00282000\u0029,\n },\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n UIMode: stripe.String\u0028string\u0028stripe.CheckoutSessionUIModeEmbedded\u0029\u0029,\n ReturnURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029,\n SavedPaymentMethodOptions: \u0026stripe.CheckoutSessionSavedPaymentMethodOptionsParams{\n PaymentMethodSave: stripe.String\u0028string\u0028stripe.CheckoutSessionSavedPaymentMethodOptionsPaymentMethodSaveEnabled\u0029\u0029,\n },\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n CustomerCreation = \"always\",\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n PriceData = new Stripe.Checkout.SessionLineItemPriceDataOptions\n {\n Currency = \"usd\",\n ProductData = new Stripe.Checkout.SessionLineItemPriceDataProductDataOptions\n {\n Name = \"T-shirt\",\n },\n UnitAmount = 2000,\n },\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n UiMode = \"embedded\",\n ReturnUrl = \"https:\u002F\u002Fexample.com\u002Freturn\",\n SavedPaymentMethodOptions = new Stripe.Checkout.SessionSavedPaymentMethodOptionsOptions\n {\n PaymentMethodSave = \"enabled\",\n },\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_b3befc19ced94437218460b3e1f9a400278327b1","argsToHighlight":["saved_payment_method_options"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Passing this parameter in either ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-mode"},"children":["payment"]}," or ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-mode"},"children":["subscription"]}," mode displays an optional checkbox to let customers explicitly save their payment method for future purchases. When customers check this checkbox, Checkout saves the payment method with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_methods\u002Fobject#payment_method_object-allow_redisplay"},"children":["allow_redisplay: always"]},". Checkout uses this parameter to determine whether a payment method can be prefilled on future purchases. When using ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"saved_payment_method_options.payment_method_save"},"children":[]},", you don’t need to pass in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"setup_future_usage"},"children":[]}," to save the payment method."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-saved_payment_method_options-payment_method_save"},"children":["saved_payment_method_options.payment_method_save"]}," requires a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Customer"},"children":[]},". To save a new customer, set the Checkout Session’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate"},"children":["customer_creation"]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"always"},"children":[]},". Otherwise, the session doesn’t save the customer or the payment method."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_method_save"},"children":[]}," isn’t passed in or if the customer doesn’t agree to save the payment method, Checkout still saves payment methods created in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"subscription"},"children":[]}," mode or using ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"setup_future_usage"},"children":[]},". These payment methods have an ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allow_redisplay"},"children":[]}," value of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"limited"},"children":[]},", which prevents them from being prefilled for returning purchases and allows you to comply with card network rules and data protection regulations. Learn how to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fsupport.stripe.com\u002Fquestions\u002Fprefilling-saved-cards-in-checkout"},"children":["change the default behavior enabled by these modes"]}," and how to change or override ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allow_redisplay"},"children":[]}," behavior."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can use Checkout to save cards and other payment methods to charge them off-session, but Checkout only prefills saved cards. Learn how to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fsupport.stripe.com\u002Fquestions\u002Fprefilling-saved-cards-in-checkout"},"children":["prefill saved cards"]},". To save a payment method without an initial payment, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fsave-and-reuse?platform=checkout"},"children":["use Checkout in setup mode"]},"."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fcheckout\u002F10-let-customers-manage-subscriptions.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"customer-portal","beta":false,"preview":false,"badges":["No code"],"collapsable":true,"numbered":true,"optional":true,"title":"Customer account management","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Let your customers ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fcustomer-management"},"children":["manage"]}," their own accounts by sharing a link to your ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"customer-portal"},"children":["customer portal"]},". The customer portal lets customers can log in with their email to manage subscriptions, update payment methods, and so on."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Fpartials\u002Fauth-and-capture.md","variables":{"isEmbeddedCheckout":true}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"auth-and-capture","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":true,"title":"Separate authorization and capture","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe supports two-step card payments so you can first authorize a card, then capture funds later. When Stripe authorizes a payment, the card issuer guarantees the funds and places a hold for the payment amount on the customer’s card. You then have a certain amount of time to capture the funds, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fplace-a-hold-on-a-payment-method#auth-capture-limitations"},"children":["depending on the card"]},"\u0029. If you don’t capture the payment before the authorization expires, the payment is cancelled and the issuer releases the held funds."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Separating authorization and capture is useful if you need to take additional actions between confirming that a customer is able to pay and collecting their payment. For example, if you’re selling stock-limited items, you may need to confirm that an item purchased by your customer using Checkout is still available before capturing their payment and fulfilling the purchase. Accomplish this using the following workflow:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Confirm that Stripe authorized the customer’s payment method."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Consult your inventory management system to confirm that the item is still available."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Update your inventory management system to indicate that a customer has purchased the item."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Capture the customer’s payment."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Inform your customer whether their purchase was successful on your confirmation page."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To indicate that you want to separate authorization and capture, you must set the value of ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcheckout\u002Fsessions\u002Fcreate#create_checkout_session-payment_intent_data-capture_method"},"children":["payment_intent_data.capture_method"]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"manual"},"children":[]}," when creating the Checkout Session. This instructs Stripe to only authorize the amount on the customer’s card."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcheckout\u002Fsessions \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d \"line_items[0][price]\"={{PRICE_ID}} \\\n -d \"line_items[0][quantity]\"=1 \\\n -d mode=payment \\\n -d \"payment_intent_data[capture_method]\"=manual \\\n -d ui_mode=embedded \\\n --data-urlencode return_url=\"https:\u002F\u002Fexample.com\u002Freturn\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe checkout sessions create \\\n -d \"line_items[0][price]\"={{PRICE_ID}} \\\n -d \"line_items[0][quantity]\"=1 \\\n --mode=payment \\\n -d \"payment_intent_data[capture_method]\"=manual \\\n --ui-mode=embedded \\\n --return-url=\"https:\u002F\u002Fexample.com\u002Freturn\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Checkout::Session.create\u0028{\n line_items: [\n {\n price: '{{PRICE_ID}}',\n quantity: 1,\n },\n ],\n mode: 'payment',\n payment_intent_data: {capture_method: 'manual'},\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.checkout.Session.create\u0028\n line_items=[{\"price\": \"{{PRICE_ID}}\", \"quantity\": 1}],\n mode=\"payment\",\n payment_intent_data={\"capture_method\": \"manual\"},\n ui_mode=\"embedded\",\n return_url=\"https:\u002F\u002Fexample.com\u002Freturn\",\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.checkout.sessions.create\u0028{\n \"line_items\": [{\"price\": \"{{PRICE_ID}}\", \"quantity\": 1}],\n \"mode\": \"payment\",\n \"payment_intent_data\": {\"capture_method\": \"manual\"},\n \"ui_mode\": \"embedded\",\n \"return_url\": \"https:\u002F\u002Fexample.com\u002Freturn\",\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Echeckout-\u003Esessions-\u003Ecreate\u0028[\n 'line_items' =\u003E [\n [\n 'price' =\u003E '{{PRICE_ID}}',\n 'quantity' =\u003E 1,\n ],\n ],\n 'mode' =\u003E 'payment',\n 'payment_intent_data' =\u003E ['capture_method' =\u003E 'manual'],\n 'ui_mode' =\u003E 'embedded',\n 'return_url' =\u003E 'https:\u002F\u002Fexample.com\u002Freturn',\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"{{PRICE_ID}}\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setPaymentIntentData\u0028\n SessionCreateParams.PaymentIntentData.builder\u0028\u0029\n .setCaptureMethod\u0028SessionCreateParams.PaymentIntentData.CaptureMethod.MANUAL\u0029\n .build\u0028\u0029\n \u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .build\u0028\u0029;\n\nSession session = Session.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nSessionCreateParams params =\n SessionCreateParams.builder\u0028\u0029\n .addLineItem\u0028\n SessionCreateParams.LineItem.builder\u0028\u0029\n .setPrice\u0028\"{{PRICE_ID}}\"\u0029\n .setQuantity\u00281L\u0029\n .build\u0028\u0029\n \u0029\n .setMode\u0028SessionCreateParams.Mode.PAYMENT\u0029\n .setPaymentIntentData\u0028\n SessionCreateParams.PaymentIntentData.builder\u0028\u0029\n .setCaptureMethod\u0028SessionCreateParams.PaymentIntentData.CaptureMethod.MANUAL\u0029\n .build\u0028\u0029\n \u0029\n .setUiMode\u0028SessionCreateParams.UiMode.EMBEDDED\u0029\n .setReturnUrl\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029\n .build\u0028\u0029;\n\nSession session = client.checkout\u0028\u0029.sessions\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst session = await stripe.checkout.sessions.create\u0028{\n line_items: [\n {\n price: '{{PRICE_ID}}',\n quantity: 1,\n },\n ],\n mode: 'payment',\n payment_intent_data: {\n capture_method: 'manual',\n },\n ui_mode: 'embedded',\n return_url: 'https:\u002F\u002Fexample.com\u002Freturn',\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CheckoutSessionParams{\n LineItems: []*stripe.CheckoutSessionLineItemParams{\n \u0026stripe.CheckoutSessionLineItemParams{\n Price: stripe.String\u0028\"{{PRICE_ID}}\"\u0029,\n Quantity: stripe.Int64\u00281\u0029,\n },\n },\n Mode: stripe.String\u0028string\u0028stripe.CheckoutSessionModePayment\u0029\u0029,\n PaymentIntentData: \u0026stripe.CheckoutSessionPaymentIntentDataParams{\n CaptureMethod: stripe.String\u0028\"manual\"\u0029,\n },\n UIMode: stripe.String\u0028string\u0028stripe.CheckoutSessionUIModeEmbedded\u0029\u0029,\n ReturnURL: stripe.String\u0028\"https:\u002F\u002Fexample.com\u002Freturn\"\u0029,\n};\nresult, err := session.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new Stripe.Checkout.SessionCreateOptions\n{\n LineItems = new List\u003CStripe.Checkout.SessionLineItemOptions\u003E\n {\n new Stripe.Checkout.SessionLineItemOptions\n {\n Price = \"{{PRICE_ID}}\",\n Quantity = 1,\n },\n },\n Mode = \"payment\",\n PaymentIntentData = new Stripe.Checkout.SessionPaymentIntentDataOptions\n {\n CaptureMethod = \"manual\",\n },\n UiMode = \"embedded\",\n ReturnUrl = \"https:\u002F\u002Fexample.com\u002Freturn\",\n};\nvar service = new Stripe.Checkout.SessionService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_29b7d495b97dc788e461c3b5103d5bb94db70988","argsToHighlight":["payment_intent_data","capture_method"],"httpPath":"\u002Fv1\u002Fcheckout\u002Fsessions","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To capture an uncaptured payment, you can use either the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Ftest\u002Fpayments?status%5B%5D=uncaptured"},"children":["Dashboard"]}," or the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcapture"},"children":["capture"]}," endpoint. Programmatically capturing payments requires access to the PaymentIntent created during the Checkout Session, which you can get from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcapture"},"children":["Session"]}," object."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"order-fulfillment","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Order fulfillment","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn how to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fcheckout\u002Ffulfillment"},"children":["programmatically get a notification"]}," whenever a customer pays."]}]},{"\u0024\u0024mdtype":"Tag","name":"SeeAlso","attributes":{"level":2,"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1,"type":"guide"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fdiscounts"},"children":["Add discounts"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Ftaxes"},"children":["Collect taxes"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftax\u002Fcheckout\u002Ftax-ids"},"children":["Collect tax IDs"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcollect-addresses?payment-ui=checkout"},"children":["Add shipping"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustomization"},"children":["Customize your branding"]}]}]}],"titleDescriptor":{"id":"docsApp.components.seealso.defaultHeading","defaultMessage":"See also"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1,"type":"guide"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fdiscounts"},"children":["Add discounts"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Ftaxes"},"children":["Collect taxes"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftax\u002Fcheckout\u002Ftax-ids"},"children":["Collect tax IDs"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcollect-addresses?payment-ui=checkout"},"children":["Add shipping"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcheckout\u002Fcustomization"},"children":["Customize your branding"]}]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Page","attributes":{"prefs":{"platform":"web","ui":"elements"},"title":"Advanced integration"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Build a custom payments integration by embedding UI components on your site, using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Felements"},"children":["Stripe Elements"]},"."," ","See how this integration ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fonline-payments#compare-features-and-availability"},"children":["compares to Stripe’s other integration types"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The client-side and server-side code builds a checkout form that accepts various payment methods."]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCallout","attributes":{"demo":"elements","isHorizontal":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"Integration effort"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ComplexityRating","attributes":{"rating":3,"color":"purple"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"Integration type"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Combine UI components into a custom payment flow"]}]},{"\u0024\u0024mdtype":"Tag","name":"ComplexityCalloutRow","attributes":{"title":"UI customization"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["CSS-level customization with the ",{"\u0024\u0024mdtype":"Tag","name":"DocsButton","attributes":{"type":"link","variant":"secondary","href":"\u002Felements\u002Fappearance-api","iconPosition":"right"},"children":["Appearance API"]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"beta","title":"Interested in using Stripe Tax, discounts, shipping, or currency conversion?"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["We’re developing a Payment Element integration that manages tax, discounts, shipping, and currency conversion. Read the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fcheckout\u002Fcustom-checkout"},"children":["Build a checkout page"]}," guide to learn more."]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Faccept-a-payment\u002Fweb\u002Felements\u002F01-set-up-stripe.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"set-up-stripe","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Set up Stripe","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fsign-up-or-log-in.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["First, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fregister"},"children":["create a Stripe account"]}," or ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Flogin"},"children":["sign in"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use our official libraries to access the Stripe API from your application:"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Flibraries.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Available as a gem\nsudo gem install stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"Gemfile","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# If you use bundler, you can add this line to your Gemfile\ngem 'stripe'\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install through pip\npip3 install --upgrade stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"PyPi","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or find the Stripe package on http:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fstripe\u002F\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"requirements.txt","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Find the version you want to pin:\n# https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-python\u002Fblob\u002Fmaster\u002FCHANGELOG.md\n# Specify that version in your requirements.txt file\nstripe\u003E=5.0.0\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install the PHP library with Composer\ncomposer require stripe\u002Fstripe-php\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Source","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or download the source directly: https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-php\u002Freleases\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"build.gradle","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F*\n For Gradle, add the following dependency to your build.gradle and replace with\n the version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n*\u002F\nimplementation \"com.stripe:stripe-java:","28.0.0","\"\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"xml","filename":"pom.xml","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C\u0021--\n For Maven, add the following dependency to your POM and replace with the\n version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n--\u003E\n\u003Cdependency\u003E\n \u003CgroupId\u003Ecom.stripe\u003C\u002FgroupId\u003E\n \u003CartifactId\u003Estripe-java\u003C\u002FartifactId\u003E\n \u003Cversion\u003E","28.0.0","\u003C\u002Fversion\u003E\n\u003C\u002Fdependency\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Other environments","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# For other environments, manually install the following JARs:\n# - The Stripe JAR from https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n# - Google Gson from https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fgson\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with npm\nnpm install stripe --save\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Make sure your project is using Go Modules\ngo mod init\n# Install stripe-go\ngo get -u github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F Then import the package\nimport \u0028\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\"\n\u0029\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with dotnet\ndotnet add package Stripe.net\ndotnet restore\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or install with NuGet\nInstall-Package Stripe.net\n"]}]}}],"codeTabGroupID":"codetab_dfc4a6aff5f3711c66bdb90a3f37589faa94b1f4"},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"web-create-intent","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Create a PaymentIntent","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Felements\u002Fpayment-element\u002Fpartials\u002Fdeferred-payment-intent-integration-callout.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you want to render the Payment Element without first creating a PaymentIntent, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment-deferred?type=payment"},"children":["Collect payment details before creating an Intent"]},"."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fpayments\u002Faccept-a-payment\u002Fcreate-paymentintent.md","variables":{"type":"acceptPayment"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents"},"children":["PaymentIntent"]}," object represents your intent to collect payment from a customer and tracks charge attempts and state changes throughout the payment process."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fpartials\u002Fdiagrams\u002Faccept-a-payment-diagram.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Diagram","attributes":{"type":"sequence","description":"A high-level overview of the payments integration this document describes.","size":"large","elements":[{"id":"customer","type":"sequenceActor","data":{"heading":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Customer"]}],"index":0,"rows":5},"position":{"x":0,"y":0}},{"id":"client","type":"sequenceActor","data":{"heading":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Client"]}],"index":1,"rows":5},"position":{"x":0,"y":0}},{"id":"server","type":"sequenceActor","data":{"heading":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Server"]}],"index":2,"rows":5},"position":{"x":0,"y":0}},{"id":"stripe","type":"sequenceActor","data":{"heading":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe"]}],"index":3,"rows":5},"position":{"x":0,"y":0}},{"id":"edge-1-customer-client-1","type":"smoothstep","source":"customer","target":"node-1-customer-client","arrowHeadType":"arrowclosed","sourceHandle":"customer-1-right","targetHandle":"left"},{"id":"node-1-customer-client","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Go to payment page"]}],"row":1,"event":"","from":"customer","to":"client"},"position":{"x":0,"y":0}},{"id":"edge-1-customer-client-2","type":"smoothstep","source":"node-1-customer-client","target":"client","arrowHeadType":"arrowclosed","sourceHandle":"right","targetHandle":"client-1-left"},{"id":"edge-1-client-server-1","type":"smoothstep","source":"client","target":"node-1-client-server","arrowHeadType":"arrowclosed","sourceHandle":"client-1-right","targetHandle":"left"},{"id":"node-1-client-server","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Send order information"]}],"row":1,"event":"","from":"client","to":"server"},"position":{"x":0,"y":0}},{"id":"edge-1-client-server-2","type":"smoothstep","source":"node-1-client-server","target":"server","arrowHeadType":"arrowclosed","sourceHandle":"right","targetHandle":"server-1-left"},{"id":"edge-1-server-stripe-1","type":"smoothstep","source":"server","target":"node-1-server-stripe","arrowHeadType":"arrowclosed","sourceHandle":"server-1-right","targetHandle":"left"},{"id":"node-1-server-stripe","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"POST \u002Fv1\u002Fpayment_intents"},"children":[]}]}],"row":1,"event":"","from":"server","to":"stripe"},"position":{"x":0,"y":0}},{"id":"edge-1-server-stripe-2","type":"smoothstep","source":"node-1-server-stripe","target":"stripe","arrowHeadType":"arrowclosed","sourceHandle":"right","targetHandle":"stripe-1-left"},{"id":"edge-2-stripe-stripe-1","type":"smoothstep","source":"stripe","target":"node-2-stripe-stripe","arrowHeadType":"arrowclosed","sourceHandle":"stripe-1-right","targetHandle":"top"},{"id":"node-2-stripe-stripe","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Creates new PaymentIntent"]}],"row":2,"event":"payment_intent.created","from":"stripe","to":"stripe"},"position":{"x":0,"y":0}},{"id":"edge-2-stripe-stripe-2","type":"smoothstep","source":"node-2-stripe-stripe","target":"stripe","arrowHeadType":"arrowclosed","sourceHandle":"bottom","targetHandle":"stripe-2-right"},{"id":"edge-2-stripe-server-1","type":"dashed","source":"stripe","target":"node-2-stripe-server","arrowHeadType":"arrowclosed","sourceHandle":"stripe-2-left","targetHandle":"right"},{"id":"node-2-stripe-server","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Return new PaymentIntent"]}],"row":2,"event":"","from":"stripe","to":"server"},"position":{"x":0,"y":0}},{"id":"edge-2-stripe-server-2","type":"dashed","source":"node-2-stripe-server","target":"server","arrowHeadType":"arrowclosed","sourceHandle":"left","targetHandle":"server-2-right"},{"id":"edge-2-server-client-1","type":"dashed","source":"server","target":"node-2-server-client","arrowHeadType":"arrowclosed","sourceHandle":"server-2-left","targetHandle":"right"},{"id":"node-2-server-client","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Return PaymentIntent ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"client_secret"},"children":[]}]}],"row":2,"event":"","from":"server","to":"client"},"position":{"x":0,"y":0}},{"id":"edge-2-server-client-2","type":"dashed","source":"node-2-server-client","target":"client","arrowHeadType":"arrowclosed","sourceHandle":"left","targetHandle":"client-2-right"},{"id":"edge-3-customer-client-1","type":"smoothstep","source":"customer","target":"node-3-customer-client","arrowHeadType":"arrowclosed","sourceHandle":"customer-3-right","targetHandle":"left"},{"id":"node-3-customer-client","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Provide billing details and finalize payment"]}],"row":3,"event":"","from":"customer","to":"client"},"position":{"x":0,"y":0}},{"id":"edge-3-customer-client-2","type":"smoothstep","source":"node-3-customer-client","target":"client","arrowHeadType":"arrowclosed","sourceHandle":"right","targetHandle":"client-3-left"},{"id":"edge-3-client-stripe-1","type":"smoothstep","source":"client","target":"node-3-client-stripe","arrowHeadType":"arrowclosed","sourceHandle":"client-3-right","targetHandle":"left"},{"id":"node-3-client-stripe","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"stripe.confirmPayment\u0028\u0029"},"children":[]}," with Elements instance"]}],"row":3,"event":"","from":"client","to":"stripe"},"position":{"x":0,"y":0}},{"id":"edge-3-client-stripe-2","type":"smoothstep","source":"node-3-client-stripe","target":"stripe","arrowHeadType":"arrowclosed","sourceHandle":"right","targetHandle":"stripe-3-left"},{"id":"edge-4-stripe-stripe-1","type":"smoothstep","source":"stripe","target":"node-4-stripe-stripe","arrowHeadType":"arrowclosed","sourceHandle":"stripe-3-right","targetHandle":"top"},{"id":"node-4-stripe-stripe","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Attempts payment \u0028may redirect to partner site\u0029"]}],"row":4,"event":"","from":"stripe","to":"stripe"},"position":{"x":0,"y":0}},{"id":"edge-4-stripe-stripe-2","type":"smoothstep","source":"node-4-stripe-stripe","target":"stripe","arrowHeadType":"arrowclosed","sourceHandle":"bottom","targetHandle":"stripe-4-right"},{"id":"edge-4-stripe-client-1","type":"smoothstep","source":"stripe","target":"node-4-stripe-client","arrowHeadType":"arrowclosed","sourceHandle":"stripe-4-left","targetHandle":"right"},{"id":"node-4-stripe-client","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Redirects user to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," page"]}],"row":4,"event":"","from":"stripe","to":"client"},"position":{"x":0,"y":0}},{"id":"edge-4-stripe-client-2","type":"smoothstep","source":"node-4-stripe-client","target":"client","arrowHeadType":"arrowclosed","sourceHandle":"left","targetHandle":"client-4-right"},{"id":"edge-4-client-customer-1","type":"smoothstep","source":"client","target":"node-4-client-customer","arrowHeadType":"arrowclosed","sourceHandle":"client-4-left","targetHandle":"right"},{"id":"node-4-client-customer","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Display payment status"]}],"row":4,"event":"","from":"client","to":"customer"},"position":{"x":0,"y":0}},{"id":"edge-4-client-customer-2","type":"smoothstep","source":"node-4-client-customer","target":"customer","arrowHeadType":"arrowclosed","sourceHandle":"left","targetHandle":"customer-4-right"},{"id":"edge-5-stripe-server-1","type":"smoothstep","source":"stripe","target":"node-5-stripe-server","arrowHeadType":"arrowclosed","sourceHandle":"stripe-5-left","targetHandle":"right"},{"id":"node-5-stripe-server","type":"sequenceAction","data":{"text":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Sends webhook event with payment status"]}],"row":5,"event":"","from":"stripe","to":"server"},"position":{"x":0,"y":0}},{"id":"edge-5-stripe-server-2","type":"smoothstep","source":"node-5-stripe-server","target":"server","arrowHeadType":"arrowclosed","sourceHandle":"left","targetHandle":"server-5-right"}],"positioning":"auto"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Create the PaymentIntent","id":"create-the-paymentintent"},"children":["Create the PaymentIntent"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create a PaymentIntent on your server with an ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-amount"},"children":["amount"]}," and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-currency"},"children":["currency"]},". In the latest version of the API, specifying the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"automatic_payment_methods"},"children":[]}," parameter is optional because Stripe enables its functionality by default. You can manage payment methods from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Dashboard"]},". Stripe handles the return of eligible payment methods based on factors such as the transaction’s amount, currency, and payment flow."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe uses your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["payment methods settings"]}," to display the payment methods you have enabled. To see how your payment methods appear to customers, enter a transaction ID or set an order amount and currency in the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods\u002Freview"},"children":["Dashboard"]},". To override payment methods, manually list any that you want to enable using the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fobject#payment_intent_object-payment_method_types"},"children":["payment_method_types"]}," attribute."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fcreate-payment-intent-automatic.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d amount=1099 \\\n -d currency=usd \\\n -d \"automatic_payment_methods[enabled]\"=true"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe payment_intents create \\\n --amount=1099 \\\n --currency=usd \\\n -d \"automatic_payment_methods[enabled]\"=true"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'usd',\n automatic_payment_methods: {enabled: true},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.PaymentIntent.create\u0028\n amount=1099,\n currency=\"usd\",\n automatic_payment_methods={\"enabled\": True},\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.payment_intents.create\u0028{\n \"amount\": 1099,\n \"currency\": \"usd\",\n \"automatic_payment_methods\": {\"enabled\": True},\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'usd',\n 'automatic_payment_methods' =\u003E ['enabled' =\u003E true],\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nPaymentIntentCreateParams params =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029.setEnabled\u0028true\u0029.build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nPaymentIntent paymentIntent = PaymentIntent.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nPaymentIntentCreateParams params =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029.setEnabled\u0028true\u0029.build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nPaymentIntent paymentIntent = client.paymentIntents\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'usd',\n automatic_payment_methods: {\n enabled: true,\n },\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n AutomaticPaymentMethods: \u0026stripe.PaymentIntentAutomaticPaymentMethodsParams{\n Enabled: stripe.Bool\u0028true\u0029,\n },\n};\nresult, err := paymentintent.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new PaymentIntentCreateOptions\n{\n Amount = 1099,\n Currency = \"usd\",\n AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions\n {\n Enabled = true,\n },\n};\nvar service = new PaymentIntentService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_3e7e6ba306aef4046260ac6ad1748dbec2c74030","httpPath":"\u002Fv1\u002Fpayment_intents","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Always decide how much to charge on the server side, a trusted environment, as opposed to the client. This prevents malicious customers from being able to choose their own prices."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Ffetch-client-secret.md","variables":{"intentKind":"PaymentIntent","useElements":true}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Retrieve the client secret","id":"retrieve-the-client-secret"},"children":["Retrieve the client secret"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ","PaymentIntent"," includes a ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"payment-intent-secret"},"children":["client secret"]}," that the client side uses to securely complete the payment process. You can use different approaches to pass the client secret to the client side."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"single-page-application","title":"Single-page application","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"Single-page application"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Retrieve the client secret from an endpoint on your server, using the browser’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"fetch"},"children":[]}," function. This approach is best if your client side is a single-page application, particularly one built with a modern frontend framework like React. Create the server endpoint that serves the client secret:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"main.rb","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["get '\u002Fsecret' do\n intent = # ... Create or retrieve the ","PaymentIntent","\n {client_secret: intent.client_secret}.to_json\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"app.py","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["from flask import Flask, jsonify\napp = Flask\u0028__name__\u0029\n\n@app.route\u0028'\u002Fsecret'\u0029\ndef secret\u0028\u0029:\n intent = # ... Create or retrieve the ","PaymentIntent","\n return jsonify\u0028client_secret=intent.client_secret\u0029\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"secret.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\n \u0024intent = # ... Create or retrieve the ","PaymentIntent","\n echo json_encode\u0028array\u0028'client_secret' =\u003E \u0024intent-\u003Eclient_secret\u0029\u0029;\n?\u003E\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"app.java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import java.util.HashMap;\nimport java.util.Map;\n\nimport com.stripe.model.","PaymentIntent",";\n\nimport com.google.gson.Gson;\n\nimport static spark.Spark.get;\n\npublic class StripeJavaQuickStart {\n public static void main\u0028String[] args\u0029 {\n Gson gson = new Gson\u0028\u0029;\n\n get\u0028\"\u002Fsecret\", \u0028request, response\u0029 -\u003E {\n ","PaymentIntent"," intent = \u002F\u002F ... Fetch or create the ","PaymentIntent","\n\n Map\u003CString, String\u003E map = new HashMap\u0028\u0029;\n map.put\u0028\"client_secret\", intent.getClientSecret\u0028\u0029\u0029;\n\n return map;\n }, gson::toJson\u0029;\n }\n}\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["const express = require\u0028'express'\u0029;\nconst app = express\u0028\u0029;\n\napp.get\u0028'\u002Fsecret', async \u0028req, res\u0029 =\u003E {\n const intent = \u002F\u002F ... Fetch or create the ","PaymentIntent","\n res.json\u0028{client_secret: intent.client_secret}\u0029;\n}\u0029;\n\napp.listen\u00283000, \u0028\u0029 =\u003E {\n console.log\u0028'Running on port 3000'\u0029;\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["package main\n\nimport \u0028\n \"encoding\u002Fjson\"\n \"net\u002Fhttp\"\n\n stripe \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","76.0.0","\"\n\u0029\n\ntype CheckoutData struct {\n ClientSecret string \u0060json:\"client_secret\"\u0060\n}\n\nfunc main\u0028\u0029 {\n http.HandleFunc\u0028\"\u002Fsecret\", func\u0028w http.ResponseWriter, r *http.Request\u0029 {\n intent := \u002F\u002F ... Fetch or create the ","PaymentIntent","\n data := CheckoutData{\n ClientSecret: intent.ClientSecret,\n }\n w.Header\u0028\u0029.Set\u0028\"Content-Type\", \"application\u002Fjson\"\u0029\n w.WriteHeader\u0028http.StatusOK\u0029\n json.NewEncoder\u0028w\u0029.Encode\u0028data\u0029\n }\u0029\n\n http.ListenAndServe\u0028\":3000\", nil\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"csharp","filename":"Controllers\u002FCheckoutApiController.cs","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["using System;\nusing Microsoft.AspNetCore.Mvc;\nusing Stripe;\n\nnamespace StripeExampleApi.Controllers\n{\n [Route\u0028\"secret\"\u0029]\n [ApiController]\n public class CheckoutApiController : Controller\n {\n [HttpGet]\n public ActionResult Get\u0028\u0029\n {\n var intent = \u002F\u002F ... Fetch or create the ","PaymentIntent","\n return Json\u0028new {client_secret = intent.ClientSecret}\u0029;\n }\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_54c7dd602f726f92ebe452fb1efbb87c7accf35f"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["And then fetch the client secret with JavaScript on the client side:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u0028async \u0028\u0029 =\u003E {\n const response = await fetch\u0028'\u002Fsecret'\u0029;\n const {client_secret: clientSecret} = await response.json\u0028\u0029;\n \u002F\u002F Render the form using the clientSecret\n}\u0029\u0028\u0029;\n"]}]}},{"id":"server-side-rendering","title":"Server-side rendering","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"Server-side rendering"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Pass the client secret to the client from your server. This approach works best if your application generates static content on the server before sending it to the browser."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Add the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fobject#payment_intent_object-payment_method_types"},"children":["client_secret"]}," in your checkout form. In your server-side code, retrieve the client secret from the PaymentIntent:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"erb","filename":"views\u002Fcheckout.erb","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Cform id=\"payment-form\" data-secret=\"\u003C%= @intent.client_secret %\u003E\"\u003E","\n \u003Cdiv id=\"payment-element\"\u003E\n \u003C\u0021-- placeholder for Elements --\u003E\n \u003C\u002Fdiv\u003E","\n \u003Cbutton id=\"submit\"\u003ESubmit\u003C\u002Fbutton\u003E\n\u003C\u002Fform\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"main.rb","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["get '\u002Fcheckout' do\n @intent = # ... Fetch or create the ","PaymentIntent","\n erb :checkout\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"checkout.html","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Cform id=\"payment-form\" data-secret=\"{{ client_secret }}\"\u003E","\n \u003Cdiv id=\"payment-element\"\u003E\n \u003C\u0021-- placeholder for Elements --\u003E\n \u003C\u002Fdiv\u003E","\n \u003Cbutton id=\"submit\"\u003ESubmit\u003C\u002Fbutton\u003E\n\u003C\u002Fform\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"app.py","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["@app.route\u0028'\u002Fcheckout'\u0029\ndef checkout\u0028\u0029:\n intent = # ... Fetch or create the ","PaymentIntent","\n return render_template\u0028'checkout.html', client_secret=intent.client_secret\u0029\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"checkout.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\n \u0024intent = # ... Fetch or create the ","PaymentIntent",";\n?\u003E\n...\n\u003Cform id=\"payment-form\" data-secret=\"\u003C?= \u0024intent-\u003Eclient_secret ?\u003E\"\u003E","\n \u003Cdiv id=\"payment-element\"\u003E\n \u003C\u0021-- placeholder for Elements --\u003E\n \u003C\u002Fdiv\u003E","\n \u003Cbutton id=\"submit\"\u003ESubmit\u003C\u002Fbutton\u003E\n\u003C\u002Fform\u003E\n...\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"resources\u002Ftemplates\u002Fcheckout.hbs","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Cform id=\"payment-form\" data-secret=\"{{ client_secret }}\"\u003E","\n \u003Cdiv id=\"payment-element\"\u003E\n \u003C\u0021-- placeholder for Elements --\u003E\n \u003C\u002Fdiv\u003E","\n \u003Cbutton id=\"submit\"\u003ESubmit\u003C\u002Fbutton\u003E\n\u003C\u002Fform\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"main.java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import java.util.HashMap;\nimport java.util.Map;\n\nimport com.stripe.model.","PaymentIntent",";\n\nimport spark.ModelAndView;\n\nimport static spark.Spark.get;\n\npublic class StripeJavaQuickStart {\n public static void main\u0028String[] args\u0029 {\n get\u0028\"\u002Fcheckout\", \u0028request, response\u0029 -\u003E {\n ","PaymentIntent"," intent = \u002F\u002F ... Fetch or create the ","PaymentIntent","\n\n Map map = new HashMap\u0028\u0029;\n map.put\u0028\"client_secret\", intent.getClientSecret\u0028\u0029\u0029;\n\n return new ModelAndView\u0028map, \"checkout.hbs\"\u0029;\n }, new HandlebarsTemplateEngine\u0028\u0029\u0029;\n }\n}\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"views\u002Fcheckout.hbs","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Cform id=\"payment-form\" data-secret=\"{{ client_secret }}\"\u003E\n \u003Cdiv id=\"payment-element\"\u003E\n \u003C\u0021-- Elements will create form elements here --\u003E\n \u003C\u002Fdiv\u003E\n\n \u003Cbutton id=\"submit\"\u003ESubmit\u003C\u002Fbutton\u003E\n\u003C\u002Fform\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["const express = require\u0028'express'\u0029;\nconst expressHandlebars = require\u0028'express-handlebars'\u0029;\nconst app = express\u0028\u0029;\n\napp.engine\u0028'.hbs', expressHandlebars\u0028{ extname: '.hbs' }\u0029\u0029;\napp.set\u0028'view engine', '.hbs'\u0029;\napp.set\u0028'views', '.\u002Fviews'\u0029;\n\napp.get\u0028'\u002Fcheckout', async \u0028req, res\u0029 =\u003E {\n const intent = \u002F\u002F ... Fetch or create the ","PaymentIntent","\n res.render\u0028'checkout', { client_secret: intent.client_secret }\u0029;\n}\u0029;\n\napp.listen\u00283000, \u0028\u0029 =\u003E {\n console.log\u0028'Running on port 3000'\u0029;\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"views\u002Fcheckout.html","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Cform id=\"payment-form\" data-secret=\"{{ .ClientSecret }}\"\u003E","\n \u003Cdiv id=\"payment-element\"\u003E\n \u003C\u0021-- placeholder for Elements --\u003E\n \u003C\u002Fdiv\u003E","\n \u003Cbutton id=\"submit\"\u003ESubmit\u003C\u002Fbutton\u003E\n\u003C\u002Fform\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["package main\n\nimport \u0028\n \"html\u002Ftemplate\"\n \"net\u002Fhttp\"\n\n stripe \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","76.0.0","\"\n\u0029\n\ntype CheckoutData struct {\n ClientSecret string\n}\n\nfunc main\u0028\u0029 {\n checkoutTmpl := template.Must\u0028template.ParseFiles\u0028\"views\u002Fcheckout.html\"\u0029\u0029\n\n http.HandleFunc\u0028\"\u002Fcheckout\", func\u0028w http.ResponseWriter, r *http.Request\u0029 {\n intent := \u002F\u002F ... Fetch or create the ","PaymentIntent","\n data := CheckoutData{\n ClientSecret: intent.ClientSecret,\n }\n checkoutTmpl.Execute\u0028w, data\u0029\n }\u0029\n\n http.ListenAndServe\u0028\":3000\", nil\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"Views\u002FCheckout\u002FIndex.cshtml","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Cform id=\"payment-form\" data-secret=\"@ViewData[\"ClientSecret\"]\"\u003E","\n \u003Cdiv id=\"payment-element\"\u003E\n \u003C\u0021-- placeholder for Elements --\u003E\n \u003C\u002Fdiv\u003E","\n \u003Cbutton id=\"submit\"\u003ESubmit\u003C\u002Fbutton\u003E\n\u003C\u002Fform\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"csharp","filename":"Controllers\u002FCheckoutApiController.cs","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["using System;\nusing Microsoft.AspNetCore.Mvc;\nusing Stripe;\n\nnamespace StripeExampleApi.Controllers\n{\n [Route\u0028\"\u002F[controller]\"\u0029]\n public class CheckoutApiController : Controller\n {\n public IActionResult Index\u0028\u0029\n {\n var intent = \u002F\u002F ... Fetch or create the ","PaymentIntent","\n ViewData[\"ClientSecret\"] = intent.ClientSecret;\n return View\u0028\u0029;\n }\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_91ef8fb20c2974f927a77d5c8b22a17585860039"},"children":[]}]}}]},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"web-collect-payment-details","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Collect payment details","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fcollect-payment-details.md","variables":{"intentKind":"PaymentIntent","advancedInfo":false,"showLink":false,"betas":false,"apiVersion":false,"showApplePay":true}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Collect payment details on the client with the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-element"},"children":["Payment Element"]},". The Payment Element is a prebuilt UI component that simplifies collecting payment details for a variety of payment methods."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The Payment Element contains an iframe that securely sends payment information to Stripe over an HTTPS connection. Avoid placing the Payment Element within another iframe because some payment methods require redirecting to another page for payment confirmation."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you do choose to use an iframe and want to accept Apple Pay or Google Pay, the iframe must have the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTML\u002FElement\u002Fiframe#attr-allowpaymentrequest"},"children":["allow"]}," attribute set to equal ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"\"payment *\""},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The checkout page address must start with ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"https:\u002F\u002F"},"children":[]}," rather than ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"http:\u002F\u002F"},"children":[]}," for your integration to work. You can test your integration without using HTTPS, but remember to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fsecurity\u002Fguide#tls"},"children":["enable it"]}," when you’re ready to accept live payments."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"pref":"client","selector":"tabs","items":[{"id":"js","title":"HTML \u002B JS","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"js","title":"HTML \u002B JS"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Set up Stripe.js","id":"set-up-stripe.js"},"children":["Set up Stripe.js"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The Payment Element is automatically available as a feature of Stripe.js. Include the Stripe.js script on your checkout page by adding it to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"head"},"children":[]}," of your HTML file. Always load Stripe.js directly from js.stripe.com to remain PCI compliant. Don’t include the script in a bundle or host a copy of it yourself."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"checkout.html","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Chead\u003E\n \u003Ctitle\u003ECheckout\u003C\u002Ftitle\u003E\n \u003Cscript src=\"https:\u002F\u002Fjs.stripe.com\u002Fv3\u002F\"\u003E\u003C\u002Fscript\u003E\n\u003C\u002Fhead\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create an instance of Stripe with the following JavaScript on your checkout page:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"checkout.js","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F Set your publishable key: remember to change this to your live publishable key in production\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys","\nconst stripe = Stripe\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029;","\n"]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Add the Payment Element to your payment page","id":"add-the-payment-element-to-your-payment-page"},"children":["Add the Payment Element to your payment page"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The Payment Element needs a place to live on your payment page. Create an empty DOM node \u0028container\u0029 with a unique ID in your payment form:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"html","filename":"checkout.html","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Cform id=\"payment-form\"\u003E\n \u003Cdiv id=\"payment-element\"\u003E\n \u003C\u0021-- Elements will create form elements here --\u003E\n \u003C\u002Fdiv\u003E\n \u003Cbutton id=\"submit\"\u003ESubmit\u003C\u002Fbutton\u003E\n \u003Cdiv id=\"error-message\"\u003E\n \u003C\u0021-- Display error message to your customers here --\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Fform\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When the previous form loads, create an instance of the Payment Element and mount it to the container DOM node. Pass the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fobject#payment_intent_object-client_secret"},"children":["client secret"]}," from the previous step into ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"options"},"children":[]}," when you create the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Felements_object\u002Fcreate"},"children":["Elements"]}," instance:"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Handle the client secret carefully because it can complete the charge. Don’t log it, embed it in URLs, or expose it to anyone but the customer."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"checkout.js","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":8,"end":8}],"add":[],"remove":[]}},"children":["const options = {\n clientSecret: '{{CLIENT_SECRET}}',\n \u002F\u002F Fully customizable with appearance API.\n appearance: {\u002F*...*\u002F},\n};\n\n\u002F\u002F Set up Stripe.js and Elements to use in checkout form, passing the client secret obtained in a previous step",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\nconst elements = stripe.elements\u0028options\u0029;"},"children":["\nconst elements = stripe.elements\u0028options\u0029;"]},"\n\n\u002F\u002F Create and mount the Payment Element\nconst paymentElementOptions = { layout: 'accordion'};\nconst paymentElement = elements.create\u0028'payment', paymentElementOptions\u0029;\npaymentElement.mount\u0028'#payment-element'\u0029;\n\n"]}]}},{"id":"react","title":"React","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"react","title":"React"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Set up Stripe.js","id":"set-up-stripe.js"},"children":["Set up Stripe.js"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Install React Stripe.js and the Stripe.js loader from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@stripe\u002Freact-stripe-js"},"children":["npm public registry"]},":"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["npm install --save @stripe\u002Freact-stripe-js @stripe\u002Fstripe-js\n"]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Add and configure the Elements provider to your payment page","id":"add-and-configure-the-elements-provider-to-your-payment-page"},"children":["Add and configure the Elements provider to your payment page"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To use the Payment Element component, wrap your checkout page component in an ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fsdks\u002Fstripejs-react#elements-provider"},"children":["Elements provider"]},". Call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"loadStripe"},"children":[]}," with your publishable key, and pass the returned ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Promise"},"children":[]}," to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Elements"},"children":[]}," provider. Also pass the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fobject#payment_intent_object-client_secret"},"children":["client secret"]}," from the previous step as ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"options"},"children":[]}," to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Elements"},"children":[]}," provider."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"jsx","filename":"index.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {Elements} from '@stripe\u002Freact-stripe-js';\nimport {loadStripe} from '@stripe\u002Fstripe-js';\n","\nimport CheckoutForm from '.\u002FCheckoutForm';","\n\n\u002F\u002F Make sure to call \u0060loadStripe\u0060 outside of a component’s render to avoid\n\u002F\u002F recreating the \u0060Stripe\u0060 object on every render.","\nconst stripePromise = loadStripe\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029;","\n\nfunction App\u0028\u0029 {\n const options = {\n \u002F\u002F passing the client secret obtained in step 3\n clientSecret: '{{CLIENT_SECRET}}',\n \u002F\u002F Fully customizable with appearance API.\n appearance: {\u002F*...*\u002F},\n };\n\n return \u0028\n \u003CElements stripe={stripePromise} options={options}\u003E","\n \u003CCheckoutForm \u002F\u003E","\n \u003C\u002FElements\u003E\n \u0029;\n};\n\nReactDOM.render\u0028\u003CApp \u002F\u003E, document.getElementById\u0028'root'\u0029\u0029;\n"]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Add the Payment Element component","id":"add-the-payment-element-component"},"children":["Add the Payment Element component"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentElement"},"children":[]}," component to build your form:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"jsx","filename":"CheckoutForm.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":7,"end":7}],"add":[],"remove":[]}},"children":["import React from 'react';\nimport {PaymentElement} from '@stripe\u002Freact-stripe-js';\n\nconst CheckoutForm = \u0028\u0029 =\u003E {\n return \u0028\n \u003Cform\u003E",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n \u003CPaymentElement \u002F\u003E"},"children":["\n \u003CPaymentElement \u002F\u003E"]},"\n \u003Cbutton\u003ESubmit\u003C\u002Fbutton\u003E\n \u003C\u002Fform\u003E\n \u0029;\n};\n\nexport default CheckoutForm;\n"]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Aside","attributes":{"title":"Browse Stripe Elements","wide":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe Elements is a collection of drop-in UI components. To further customize your form or collect different customer information, browse the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Felements"},"children":["Elements docs"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The Payment Element renders a dynamic form that allows your customer to pick a payment method. For each payment method, the form automatically asks the customer to fill in all necessary payment details."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Customize appearance","id":"customize-appearance"},"children":["Customize appearance"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Customize the Payment Element to match the design of your site by passing the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Felements_object\u002Fcreate#stripe_elements-options-appearance"},"children":["appearance object"]}," into ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"options"},"children":[]}," when creating the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Elements"},"children":[]}," provider."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Faddress-element\u002Fbilling-details-learn-more.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Collect addresses","id":"collect-addresses"},"children":["Collect addresses"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, the Payment Element only collects the necessary billing address details. To collect a customer’s full billing address \u0028to calculate the tax for digital goods and services, for example\u0029 or shipping address, use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Felements\u002Faddress-element"},"children":["Address Element"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Request Apple Pay merchant token","id":"request-apple-pay-merchant-token"},"children":["Request Apple Pay merchant token"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you’ve configured your integration to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment?platform=web\u0026ui=elements#apple-pay-and-google-pay"},"children":["accept Apple Pay payments"]},", we recommend configuring the Apple Pay interface to return a merchant token to enable merchant initiated transactions \u0028MIT\u0029. ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapple-pay\u002Fmerchant-tokens?pay-element=web-pe"},"children":["Request the relevant merchant token type"]}," in the Payment Element."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"save-payment-methods","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Save and retrieve customer payment methods","toc":true},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fsave-payment-method.md","variables":{"integration":"pi-first","isConfirmationToken":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can configure the Payment Element to save your customer’s payment methods for future use. This section shows you how to integrate the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fsave-customer-payment-methods"},"children":["saved payment methods feature"]},", which enables the Payment Element to:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Prompt buyers for consent to save a payment method"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Save payment methods when buyers provide consent"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Display saved payment methods to buyers for future purchases"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcards\u002Foverview#automatic-card-updates"},"children":["Automatically update lost or expired cards"]}," when buyers replace them"]}]},{"\u0024\u0024mdtype":"Tag","name":"ImageGroup","attributes":{"background":"white","columns":2},"children":[{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fspm-save.fe0b24afd0f0a06e0cf4eecb0ce2403a.png","alt":"The Payment Element and a saved payment method checkbox"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Save payment methods."]}]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fspm-saved.5dba5a8a190a9a0e9f1a99271bed3f4b.png","alt":"The Payment Element with a Saved payment method selected"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Reuse a previously saved payment method."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Enable saving the payment method in the Payment Element","id":"enable-saving-the-payment-method-in-the-payment-element"},"children":["Enable saving the payment method in the Payment Element"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When creating a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002F"},"children":["PaymentIntent"]}," on your server, also create a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomer_sessions\u002F"},"children":["CustomerSession"]}," providing the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers\u002Fobject#customer_object-id"},"children":["Customer ID"]}," and enabling the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomer_sessions\u002Fobject#customer_session_object-components-payment_element"},"children":["payment_element"]}," component for your session. Configure which saved payment method ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomer_sessions\u002Fcreate#create_customer_session-components-payment_element-features"},"children":["features"]}," you want to enable. For instance, enabling ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomer_sessions\u002Fcreate#create_customer_session-components-payment_element-features-payment_method_save"},"children":["payment_method_save"]}," displays a checkbox offering customers to save their payment details for future use."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"caution"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Allowing buyers to remove their saved payment methods by enabling ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomer_sessions\u002Fcreate#create_customer_session-components-payment_element-features-payment_method_remove"},"children":["payment_method_remove"]}," impacts subscriptions that depend on that payment method. Removing the payment method detaches the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_methods"},"children":["PaymentMethod"]}," from that ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers"},"children":["Customer"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fcreate-intent-and-customer-session.md","variables":{"integration":"pi-first"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"server.rb","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\npost '\u002Fcreate-intent-and-customer-session' do","\n intent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'usd',\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {enabled: true},\n customer: ",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"ruby"},"children":[]},",\n }\u0029","\n customer_session = Stripe::CustomerSession.create\u0028{\n customer: ",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"ruby"},"children":[]},",\n components: {\n payment_element: {\n enabled: true,\n features: {\n payment_method_redisplay: 'enabled',","\n payment_method_save: 'enabled',\n payment_method_save_usage: 'on_session',\n payment_method_remove: 'enabled',","\n },\n },\n },\n }\u0029\n {\n client_secret: intent.client_secret,\n customer_session_client_secret: customer_session.client_secret\n }.to_json\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"app.py","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\n@app.route\u0028'\u002Fcreate-intent-and-customer-session', methods=['POST']\u0029\ndef createIntentAndCustomerSession\u0028\u0029:","\n intent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='usd',\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods={\n 'enabled': True,\n },\n customer=",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"python"},"children":[]},",\n \u0029","\n customer_session = stripe.CustomerSession.create\u0028\n customer=",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"python"},"children":[]},",\n components={\n \"payment_element\": {\n \"enabled\": True,\n \"features\": {\n \"payment_method_redisplay\": \"enabled\",","\n \"payment_method_save\": \"enabled\",\n \"payment_method_save_usage\": \"on_session\",\n \"payment_method_remove\": \"enabled\",","\n },\n },\n },\n \u0029\n return jsonify\u0028\n client_secret=intent.client_secret,\n customer_session_client_secret=customer_session.client_secret\n \u0029\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"app.php","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","constructPhpClient":true,"value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;","\n","\n\u0024intent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028\n [\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'usd',\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n 'automatic_payment_methods' =\u003E ['enabled' =\u003E true],\n 'customer' =\u003E ",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"php"},"children":[]},",\n ]\n\u0029;","\n\u0024customer_session = \u0024stripe-\u003EcustomerSessions-\u003Ecreate\u0028[\n 'customer' =\u003E ",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"php"},"children":[]},",\n 'components' =\u003E [\n 'payment_element' =\u003E [\n 'enabled' =\u003E true,\n 'features' =\u003E [\n 'payment_method_redisplay' =\u003E 'enabled',","\n 'payment_method_save' =\u003E 'enabled',\n 'payment_method_save_usage' =\u003E 'on_session',\n 'payment_method_remove' =\u003E 'enabled',","\n ],\n ],\n ],\n]\u0029;\necho json_encode\u0028array\u0028\n 'client_secret' =\u003E \u0024intent-\u003Eclient_secret,\n 'customer_session_client_secret' =\u003E \u0024customer_session-\u003Eclient_secret\n\u0029\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"app.js","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","const stripe = require\u0028'stripe'\u0029\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;","\n\napp.post\u0028'\u002Fcreate-intent-and-customer-session', async \u0028req, res\u0029 =\u003E {","\n const intent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'usd',\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {enabled: true},\n customer: ",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"javascript"},"children":[]},",\n }\u0029;","\n const customerSession = await stripe.customerSessions.create\u0028{\n customer: ",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"javascript"},"children":[]},",\n components: {\n payment_element: {\n enabled: true,\n features: {\n payment_method_redisplay: 'enabled',","\n payment_method_save: 'enabled',\n payment_method_save_usage: 'on_session',\n payment_method_remove: 'enabled',","\n },\n },\n },\n }\u0029;\n res.json\u0028{\n client_secret: intent.client_secret,\n customer_session_client_secret: customerSession.client_secret\n }\u0029;\n}\u0029;\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"Server.java","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.apiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\npost\u0028\n \"\u002Fcreate-intent-and-customer-session\",\n \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n","\n PaymentIntentCreateParams intentParams = PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"usd\"\u0029\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029.setEnabled\u0028true\u0029.build\u0028\u0029\n \u0029\n .setCustomer\u0028",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"java"},"children":[]},"\u0029\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028intentParams\u0029;","\n\n CustomerSessionCreateParams csParams = CustomerSessionCreateParams.builder\u0028\u0029\n .setCustomer\u0028",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"java"},"children":[]},"\u0029\n .setComponents\u0028CustomerSessionCreateParams.Components.builder\u0028\u0029.build\u0028\u0029\u0029\n .putExtraParam\u0028\"components[payment_element][enabled]\", true\u0029\n .putExtraParam\u0028\n \"components[payment_element][features][payment_method_redisplay]\",\n \"enabled\"\n \u0029","\n .putExtraParam\u0028\n \"components[payment_element][features][payment_method_save]\",\n \"enabled\"\n \u0029\n .putExtraParam\u0028\n \"components[payment_element][features][payment_method_save_usage]\",\n \"on_session\"\n \u0029\n .putExtraParam\u0028\n \"components[payment_element][features][payment_method_remove]\",\n \"enabled\"\n \u0029","\n .build\u0028\u0029;\n\n CustomerSession customerSession = CustomerSession.create\u0028csParams\u0029;\n\n Map\u003CString, Object\u003E responseData = new HashMap\u003C\u003E\u0028\u0029;","\n responseData.put\u0028\"clientSecret\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"customerSessionClientSecret\", customerSession.getClientSecret\u0028\u0029\u0029;\n return StripeObject.PRETTY_PRINT_GSON.toJson\u0028responseData\u0029;\n }\n\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\ntype CheckoutData struct {\n ClientSecret string \u0060json:\"client_secret\"\u0060\n CustomerSessionClientSecret string \u0060json:\"customer_session_client_secret\"\u0060\n}\n\nfunc main\u0028\u0029 {\n http.HandleFunc\u0028\"\u002Fcreate-intent-and-customer-session\", func\u0028w http.ResponseWriter, r *http.Request\u0029 {","\n intentParams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods: \u0026stripe.PaymentIntentAutomaticPaymentMethodsParams{\n Enabled: stripe.Bool\u0028true\u0029,\n },\n Customer: stripe.String\u0028",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"go"},"children":[]},"\u0029,\n };","\n intent, _ := .New\u0028intentParams\u0029;\n\n csParams := \u0026stripe.CustomerSessionParams{\n Customer: stripe.String\u0028",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"go"},"children":[]},"\u0029,\n Components: \u0026stripe.CustomerSessionComponentsParams{},\n }\n csParam.AddExtra\u0028\"components[payment_element][enabled]\", true\u0029","\n csParam.AddExtra\u0028\n \"components[payment_element][features][payment_method_redisplay]\",\n \"enabled\",\n \u0029\n csParam.AddExtra\u0028\n \"components[payment_element][features][payment_method_save]\",\n \"enabled\",\n \u0029\n csParam.AddExtra\u0028\n \"components[payment_element][features][payment_method_save_usage]\",\n \"on_session\",\n \u0029\n csParam.AddExtra\u0028\n \"components[payment_element][features][payment_method_remove]\",\n \"enabled\",\n \u0029","\n\n customerSession, _ := customersession.New\u0028csParams\u0029\n data := CheckoutData{\n ClientSecret: intent.ClientSecret,\n CustomerSessionClientSecret: customerSession.ClientSecret\n }\n w.Header\u0028\u0029.Set\u0028\"Content-Type\", \"application\u002Fjson\"\u0029\n w.WriteHeader\u0028http.StatusOK\u0029\n json.NewEncoder\u0028w\u0029.Encode\u0028data\u0029\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"csharp","filename":"Controllers\u002FCheckoutApiController.cs","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\nnamespace StripeExampleApi.Controllers\n{\n [Route\u0028\"create-intent-and-customer-session\"\u0029]\n [ApiController]\n public class CheckoutApiController : Controller\n {\n [HttpPost]\n public ActionResult Post\u0028\u0029\n {","\n var intentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"usd\",\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions\n {\n Enabled = true,\n },\n Customer = ",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"csharp"},"children":[]},",\n };\n var intentService = new PaymentIntentService\u0028\u0029;","\n var intent = intentService.Create\u0028intentOptions\u0029;\n\n var customerSessionOptions = new CustomerSessionCreateOptions\n {\n Customer = ",{"\u0024\u0024mdtype":"Tag","name":"Identifier","attributes":{"type":"customer","quoteType":"none","value":"{{CUSTOMER_ID}}","lang":"csharp"},"children":[]},",\n Components = new CustomerSessionComponentsOptions\u0028\u0029,\n }\n customerSessionOptions.AddExtraParam\u0028\"components[payment_element][enabled]\", true\u0029;","\n customerSessionOptions.AddExtraParam\u0028\n \"components[payment_element][features][payment_method_redisplay]\",\n \"enabled\"\u0029;\n customerSessionOptions.AddExtraParam\u0028\n \"components[payment_element][features][payment_method_save]\",\n \"enabled\"\u0029;\n customerSessionOptions.AddExtraParam\u0028\n \"components[payment_element][features][payment_method_save_usage]\",\n \"on_session\"\u0029;\n customerSessionOptions.AddExtraParam\u0028\n \"components[payment_element][features][payment_method_remove]\",\n \"enabled\"\u0029;","\n var customerSessionService = new CustomerSessionService\u0028\u0029;\n var customerSession = customerSessionService.Create\u0028customerSessionOptions\u0029;\n\n return Json\u0028new {\n client_secret = intent.ClientSecret,\n customerSessionClientSecret = customerSession.ClientSecret\n }\u0029;\n }\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_f577a742c3c5094dd448337a8f7002e26d0cdac4"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Your Elements instance uses the CustomerSession’s ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"generic-client-secret"},"children":["client secret"]}," to access that customer’s saved payment methods."," ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ferror-handling"},"children":["Handle errors"]}," properly when you create the CustomerSession. If an error occurs, you don’t need to provide the CustomerSession client secret to the Elements instance, as it’s optional."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create the Elements instance using the client secrets for both the ","PaymentIntent"," and the CustomerSession. Then, use this Elements instance to create a Payment Element."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"checkout.js","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":12,"end":12}],"remove":[]}},"children":["\u002F\u002F Create the CustomerSession and obtain its clientSecret","\nconst res = await fetch\u0028\"\u002Fcreate-intent-and-customer-session\", {","\n method: \"POST\"\n}\u0029;\n\nconst {\n customer_session_client_secret: customerSessionclientSecret\n} = await res.json\u0028\u0029;\n\nconst elementsOptions = {","\n clientSecret: '{{CLIENT_SECRET}}',",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n customerSessionClientSecret,"},"children":["\n customerSessionClientSecret,"]},"\n \u002F\u002F Fully customizable with appearance API.\n appearance: {\u002F*...*\u002F},\n};\n\n\u002F\u002F Set up Stripe.js and Elements to use in checkout form, passing the client secret\n\u002F\u002F and CustomerSession's client secret obtained in a previous step\nconst elements = stripe.elements\u0028elementsOptions\u0029;\n\n\u002F\u002F Create and mount the Payment Element\nconst paymentElementOptions = { layout: 'accordion'};\nconst paymentElement = elements.create\u0028'payment', paymentElementOptions\u0029;\npaymentElement.mount\u0028'#payment-element'\u0029;\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When confirming the PaymentIntent, Stripe.js automatically controls setting ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fobject#payment_intent_object-setup_future_usage"},"children":["setup_future_usage"]}," on the PaymentIntent and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_methods\u002Fobject#payment_method_object-allow_redisplay"},"children":["allow_redisplay"]}," on the PaymentMethod, depending on whether the customer checked the box to save their payment details."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Enforce CVC recollection","id":"enforce-cvc-recollection"},"children":["Enforce CVC recollection"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Optionally, specify ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"require_cvc_recollection"},"children":[]}," ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-payment_method_options-card-require_cvc_recollection"},"children":["when creating the PaymentIntent"]}," to enforce CVC recollection when a customer is paying with a card."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Detect the selection of a saved payment method","id":"detect-the-selection-of-a-saved-payment-method"},"children":["Detect the selection of a saved payment method"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To control dynamic content when a saved payment method is selected, listen to the Payment Element ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"change"},"children":[]}," event, which is populated with the selected payment method."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"checkout.js","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["paymentElement.on\u0028'change', function\u0028event\u0029 {\n if \u0028event.value.payment_method\u0029 {\n \u002F\u002F Control dynamic content if a saved payment method is selected\n }\n}\u0029\n"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"enable-checkout-link","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":true,"title":"Link in your checkout page","toc":true},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Flink-elements\u002Fenable-link.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Flink-elements\u002Fintro-pe.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Let your customer check out faster by using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Flink"},"children":["Link"]}," in the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-element"},"children":["Payment Element"]},". You can autofill information for any logged-in customer already using Link, regardless of whether they initially saved their information in Link with another business. The default Payment Element integration includes a Link prompt in the card form. To manage Link in the Payment Element, go to your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["payment method settings"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Flink-in-pe.2efb5138a4708b781b8a913ebddd9aba.png","alt":"Authenticate or enroll with Link directly in the Payment Element during checkout","zoomable":true},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Collect a customer email address for Link authentication or enrollment"]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"integration-options","level":3,"anchored":true,"toc":"Integration options "},"children":["Integration options "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["There are two ways you can integrate Link with the Payment Element. Of these, Stripe recommends passing a customer email address to the Payment Element if available. Remember to consider how your checkout flow works when deciding between these options:"]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Integration option"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Checkout flow"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Description"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Flink\u002Fadd-link-elements-integration?link-integration-type=before-payment"},"children":["Pass a customer email address"]}," to the Payment Element ",{"\u0024\u0024mdtype":"Tag","name":"Badge","attributes":{"color":"blue","iconPosition":"right","label":"Recommended"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Your customer enters their email address before landing on the checkout page \u0028in a previous account creation step, for example\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["You prefer to use your own email input field."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Programmatically pass a customer email address to the Payment Element. In this scenario, a customer authenticates to Link directly in the payment form instead of a separate UI component."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Flink\u002Fadd-link-elements-integration?link-integration-type=collect-email"},"children":["Collect a customer email address"]}," in the Payment Element"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customers enter their email and authenticate or enroll with Link directly in the Payment Element during checkout."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["If a customer hasn’t enrolled with Link and they choose a supported payment method in the Payment Element, they’re prompted to save their details using Link. For those who have already enrolled, Link automatically populates their payment information."]}]}]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"fetch-updates","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":true,"title":"Fetch updates from the server","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Ffetch-server-updates.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You might want to update attributes on the PaymentIntent after the Payment Element renders, such as the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fupdate#update_payment_intent-amount"},"children":["amount"]}," \u0028for example, discount codes or shipping costs\u0029. You can ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fupdate"},"children":["update the PaymentIntent"]}," on your server, then call ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Felements_object\u002Ffetch_updates"},"children":["elements.fetchUpdates"]}," to see the new amount reflected in the Payment Element. This example shows you how to create the server endpoint that updates the amount on the PaymentIntent:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"main.rb","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["get '\u002Fupdate' do\n intent = Stripe::PaymentIntent.update\u0028\n '{{PAYMENT_INTENT_ID}}',\n {amount: 1499},\n \u0029\n {status: intent.status}.to_json\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"app.py","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["@app.route\u0028'\u002Fupdate'\u0029\ndef secret\u0028\u0029:\n intent = stripe.PaymentIntent.modify\u0028\n \"{{PAYMENT_INTENT_ID}}\",\n amount=1499,\n \u0029\n return jsonify\u0028status=intent.status\u0029\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"update.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\n \u0024intent = \u0024stripe-\u003EpaymentIntents-\u003Eupdate\u0028\n '{{PAYMENT_INTENT_ID}}',\n ['amount' =\u003E 1499]\n \u0029;\n echo json_encode\u0028array\u0028'status' =\u003E \u0024intent-\u003Estatus\u0029\u0029;\n?\u003E\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"app.java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import java.util.HashMap;\nimport java.util.Map;\n\nimport com.stripe.model.PaymentIntent;\n\nimport com.google.gson.Gson;\n\nimport static spark.Spark.get;\n\npublic class StripeJavaQuickStart {\n public static void main\u0028String[] args\u0029 {\n Gson gson = new Gson\u0028\u0029;\n\n get\u0028\"\u002Fupdate\", \u0028request, response\u0029 -\u003E {\n PaymentIntent paymentIntent =\n PaymentIntent.retrieve\u0028\n \"{{PAYMENT_INTENT_ID}}\"\n \u0029;\n\n Map\u003CString, Object\u003E params = new HashMap\u003C\u003E\u0028\u0029;\n params.put\u0028\"amount\", 1499\u0029;\n PaymentIntent updatedPaymentIntent =\n paymentIntent.update\u0028params\u0029;\n\n Map\u003CString, String\u003E response = new HashMap\u0028\u0029;\n response.put\u0028\"status\", updatedPaymentIntent.getStatus\u0028\u0029\u0029;\n\n return map;\n }, gson::toJson\u0029;\n }\n}\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"app.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["app.get\u0028'\u002Fupdate', async \u0028req, res\u0029 =\u003E {\n const intent = await stripe.paymentIntents.update\u0028\n '{{PAYMENT_INTENT_ID}}',\n {amount: 1499}\n \u0029;\n res.json\u0028{status: intent.status}\u0029;\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["package main\n\nimport \u0028\n \"encoding\u002Fjson\"\n \"net\u002Fhttp\"\n\n stripe \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","76.0.0","\"\n\u0029\n\ntype UpdateData struct {\n Status string \u0060json:\"status\"\u0060\n}\n\nfunc main\u0028\u0029 {\n http.HandleFunc\u0028\"\u002Fupdate\", func\u0028w http.ResponseWriter, r *http.Request\u0029 {\n params := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281499\u0029,\n }\n pi, _ := paymentintent.Update\u0028\n \"{{PAYMENT_INTENT_ID}}\",\n params,\n \u0029\n\n data := UpdateData{\n Status: pi.Status,\n }\n w.Header\u0028\u0029.Set\u0028\"Content-Type\", \"application\u002Fjson\"\u0029\n w.WriteHeader\u0028http.StatusOK\u0029\n json.NewEncoder\u0028w\u0029.Encode\u0028data\u0029\n }\u0029\n\n http.ListenAndServe\u0028\":3000\", nil\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"csharp","filename":"Controllers\u002FCheckoutApiController.cs","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["using System;\nusing Microsoft.AspNetCore.Mvc;\nusing Stripe;\n\nnamespace StripeExampleApi.Controllers\n{\n [Route\u0028\"update\"\u0029]\n [ApiController]\n public class CheckoutApiController : Controller\n {\n [HttpPost]\n public ActionResult Post\u0028\u0029\n {\n var options = new PaymentIntentUpdateOptions\n {\n Amount = 1499,\n };\n var service = new PaymentIntentService\u0028\u0029;\n var intent = service.Update\u0028\n \"{{PAYMENT_INTENT_ID}}\",\n options\u0029;\n return Json\u0028new {status = intent.Status}\u0029;\n }\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_91e98d0886a24297068dd6327c5a346a10fa1c7b"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This example demonstrates how to update the UI to reflect these changes on the client side:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u0028async \u0028\u0029 =\u003E {\n const response = await fetch\u0028'\u002Fupdate'\u0029;\n if \u0028response.status === 'requires_payment_method'\u0029 {\n const {error} = await elements.fetchUpdates\u0028\u0029;\n }\n}\u0029\u0028\u0029;\n"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"web-submit-payment","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Submit the payment to Stripe","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fsubmit-payment-to-stripe.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Fpayment_intents\u002Fconfirm_payment"},"children":["stripe.confirmPayment"]}," to complete the payment using details from the Payment Element. Provide a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-return_url"},"children":["return_url"]}," to this function to indicate where Stripe should redirect the user after they complete the payment. Your user may be first redirected to an intermediate site, like a bank authorization page, before being redirected to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},". Card payments immediately redirect to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," when a payment is successful."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you don’t want to redirect for card payments after payment completion, you can set ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Fpayment_intents\u002Fconfirm_payment#confirm_payment_intent-options-redirect"},"children":["redirect"]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"if_required"},"children":[]},". This only redirects customers that check out with redirect-based payment methods."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"pref":"client","selector":"tabs","items":[{"id":"html","title":"HTML \u002B JS","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"html","title":"HTML \u002B JS"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"checkout.js","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":6,"end":12}],"add":[],"remove":[]}},"children":["const form = document.getElementById\u0028'payment-form'\u0029;\n\nform.addEventListener\u0028'submit', async \u0028event\u0029 =\u003E {\n event.preventDefault\u0028\u0029;\n",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n const {error} = await stripe.confirmPayment\u0028{\n \u002F\u002F\u0060Elements\u0060 instance that was used to create the Payment Element\n elements,\n confirmParams: {\n return_url: 'https:\u002F\u002Fexample.com\u002Forder\u002F123\u002Fcomplete',\n },\n }\u0029;"},"children":["\n const {error} = await stripe.confirmPayment\u0028{\n \u002F\u002F\u0060Elements\u0060 instance that was used to create the Payment Element\n elements,\n confirmParams: {\n return_url: 'https:\u002F\u002Fexample.com\u002Forder\u002F123\u002Fcomplete',\n },\n }\u0029;"]},"\n\n if \u0028error\u0029 {\n \u002F\u002F This point will only be reached if there is an immediate error when\n \u002F\u002F confirming the payment. Show error to your customer \u0028for example, payment\n \u002F\u002F details incomplete\u0029\n const messageContainer = document.querySelector\u0028'#error-message'\u0029;\n messageContainer.textContent = error.message;\n } else {\n \u002F\u002F Your customer will be redirected to your \u0060return_url\u0060. For some payment\n \u002F\u002F methods like iDEAL, your customer will be redirected to an intermediate\n \u002F\u002F site first to authorize the payment, then redirected to the \u0060return_url\u0060.\n }\n}\u0029;\n"]}]}},{"id":"react","title":"React","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"react","title":"React"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To call ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Fpayment_intents\u002Fconfirm_payment"},"children":["stripe.confirmPayment"]}," from your payment form component, use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fsdks\u002Fstripejs-react#usestripe-hook"},"children":["useStripe"]}," and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fsdks\u002Fstripejs-react#useelements-hook"},"children":["useElements"]}," hooks."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you prefer traditional class components over hooks, you can instead use an ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fsdks\u002Fstripejs-react#elements-consumer"},"children":["ElementsConsumer"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"jsx","filename":"CheckoutForm.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":21,"end":27}],"add":[],"remove":[]}},"children":["import React, {useState} from 'react';\nimport {useStripe, useElements, PaymentElement} from '@stripe\u002Freact-stripe-js';\n\nconst CheckoutForm = \u0028\u0029 =\u003E {\n const stripe = useStripe\u0028\u0029;\n const elements = useElements\u0028\u0029;\n\n const [errorMessage, setErrorMessage] = useState\u0028null\u0029;\n\n const handleSubmit = async \u0028event\u0029 =\u003E {\n \u002F\u002F We don't want to let default form submission happen here,\n \u002F\u002F which would refresh the page.\n event.preventDefault\u0028\u0029;\n\n if \u0028\u0021stripe || \u0021elements\u0029 {\n \u002F\u002F Stripe.js hasn't yet loaded.\n \u002F\u002F Make sure to disable form submission until Stripe.js has loaded.\n return;\n }\n",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n const {error} = await stripe.confirmPayment\u0028{\n \u002F\u002F\u0060Elements\u0060 instance that was used to create the Payment Element\n elements,\n confirmParams: {\n return_url: 'https:\u002F\u002Fexample.com\u002Forder\u002F123\u002Fcomplete',\n },\n }\u0029;"},"children":["\n const {error} = await stripe.confirmPayment\u0028{\n \u002F\u002F\u0060Elements\u0060 instance that was used to create the Payment Element\n elements,\n confirmParams: {\n return_url: 'https:\u002F\u002Fexample.com\u002Forder\u002F123\u002Fcomplete',\n },\n }\u0029;"]},"\n\n\n if \u0028error\u0029 {\n \u002F\u002F This point will only be reached if there is an immediate error when\n \u002F\u002F confirming the payment. Show error to your customer \u0028for example, payment\n \u002F\u002F details incomplete\u0029\n setErrorMessage\u0028error.message\u0029;\n } else {\n \u002F\u002F Your customer will be redirected to your \u0060return_url\u0060. For some payment\n \u002F\u002F methods like iDEAL, your customer will be redirected to an intermediate\n \u002F\u002F site first to authorize the payment, then redirected to the \u0060return_url\u0060.\n }\n };\n\n return \u0028\n \u003Cform onSubmit={handleSubmit}\u003E\n \u003CPaymentElement \u002F\u003E\n \u003Cbutton disabled={\u0021stripe}\u003ESubmit\u003C\u002Fbutton\u003E\n {\u002F* Show error message to your customers *\u002F}\n {errorMessage \u0026\u0026 \u003Cdiv\u003E{errorMessage}\u003C\u002Fdiv\u003E}\n \u003C\u002Fform\u003E\n \u0029\n};\n\nexport default CheckoutForm;\n"]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Make sure the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," corresponds to a page on your website that provides the status of the payment. When Stripe redirects the customer to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},", we provide the following URL query parameters:"]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Parameter"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Description"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The unique identifier for the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentIntent"},"children":[]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent_client_secret"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fobject#payment_intent_object-client_secret"},"children":["client secret"]}," of the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentIntent"},"children":[]}," object."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"caution"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you have tooling that tracks the customer’s browser session, you might need to add the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"stripe.com"},"children":[]}," domain to the referrer exclude list. Redirects cause some tools to create new sessions, which prevents you from tracking the complete session."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use one of the query parameters to retrieve the PaymentIntent. Inspect the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpaymentintents\u002Flifecycle"},"children":["status of the PaymentIntent"]}," to decide what to show your customers. You can also append your own query parameters when providing the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},", which persist through the redirect process."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"pref":"client","selector":"tabs","items":[{"id":"html","title":"HTML \u002B JS","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"html","title":"HTML \u002B JS"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"status.js","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n\u002F\u002F Initialize Stripe.js using your publishable key\nconst stripe = Stripe\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029;\n\n\u002F\u002F Retrieve the \"payment_intent_client_secret\" query parameter appended to\n\u002F\u002F your return_url by Stripe.js\nconst clientSecret = new URLSearchParams\u0028window.location.search\u0029.get\u0028\n 'payment_intent_client_secret'\n\u0029;\n\n\u002F\u002F Retrieve the PaymentIntent\nstripe.retrievePaymentIntent\u0028clientSecret\u0029.then\u0028\u0028{paymentIntent}\u0029 =\u003E {\n const message = document.querySelector\u0028'#message'\u0029\n\n \u002F\u002F Inspect the PaymentIntent \u0060status\u0060 to indicate the status of the payment\n \u002F\u002F to your customer.\n \u002F\u002F\n \u002F\u002F Some payment methods will [immediately succeed or fail][0] upon\n \u002F\u002F confirmation, while others will first enter a \u0060processing\u0060 state.\n \u002F\u002F\n \u002F\u002F [0]: https:\u002F\u002Fstripe.com\u002Fdocs\u002Fpayments\u002Fpayment-methods#payment-notification\n switch \u0028paymentIntent.status\u0029 {\n case 'succeeded':\n message.innerText = 'Success\u0021 Payment received.';\n break;\n\n case 'processing':\n message.innerText = \"Payment processing. We'll update you when payment is received.\";\n break;\n\n case 'requires_payment_method':\n message.innerText = 'Payment failed. Please try another payment method.';\n \u002F\u002F Redirect your user back to your payment page to attempt collecting\n \u002F\u002F payment again\n break;\n\n default:\n message.innerText = 'Something went wrong.';\n break;\n }\n}\u0029;\n"]}]}},{"id":"react","title":"React","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"react","title":"React"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"jsx","filename":"PaymentStatus.jsx","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import React, {useState, useEffect} from 'react';\nimport {useStripe} from '@stripe\u002Freact-stripe-js';\n\nconst PaymentStatus = \u0028\u0029 =\u003E {\n const stripe = useStripe\u0028\u0029;\n const [message, setMessage] = useState\u0028null\u0029;\n\n useEffect\u0028\u0028\u0029 =\u003E {\n if \u0028\u0021stripe\u0029 {\n return;\n }\n\n \u002F\u002F Retrieve the \"payment_intent_client_secret\" query parameter appended to\n \u002F\u002F your return_url by Stripe.js\n const clientSecret = new URLSearchParams\u0028window.location.search\u0029.get\u0028\n 'payment_intent_client_secret'\n \u0029;\n\n \u002F\u002F Retrieve the PaymentIntent\n stripe\n .retrievePaymentIntent\u0028clientSecret\u0029\n .then\u0028\u0028{paymentIntent}\u0029 =\u003E {\n \u002F\u002F Inspect the PaymentIntent \u0060status\u0060 to indicate the status of the payment\n \u002F\u002F to your customer.\n \u002F\u002F\n \u002F\u002F Some payment methods will [immediately succeed or fail][0] upon\n \u002F\u002F confirmation, while others will first enter a \u0060processing\u0060 state.\n \u002F\u002F\n \u002F\u002F [0]: https:\u002F\u002Fstripe.com\u002Fdocs\u002Fpayments\u002Fpayment-methods#payment-notification\n switch \u0028paymentIntent.status\u0029 {\n case 'succeeded':\n setMessage\u0028'Success\u0021 Payment received.'\u0029;\n break;\n\n case 'processing':\n setMessage\u0028\"Payment processing. We'll update you when payment is received.\"\u0029;\n break;\n\n case 'requires_payment_method':\n \u002F\u002F Redirect your user back to your payment page to attempt collecting\n \u002F\u002F payment again\n setMessage\u0028'Payment failed. Please try another payment method.'\u0029;\n break;\n\n default:\n setMessage\u0028'Something went wrong.'\u0029;\n break;\n }\n }\u0029;\n }, [stripe]\u0029;\n\n\n return message;\n};\n\nexport default PaymentStatus;\n"]}]}}]},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"web-post-payment","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Handle post-payment events","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fhandle-post-payment-events.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe sends a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes#event_types-payment_intent.succeeded"},"children":["payment_intent.succeeded"]}," event when the payment completes. Use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fwebhooks"},"children":["Dashboard webhook tool"]}," or follow the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fwebhooks\u002Fquickstart"},"children":["webhook guide"]}," to receive these events and run actions, such as sending an order confirmation email to your customer, logging the sale in a database, or starting a shipping workflow."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events is what enables you to accept ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Fpayments\u002Fpayment-methods-guide"},"children":["different types of payment methods"]}," with a single integration."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In addition to handling the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.succeeded"},"children":[]}," event, we recommend handling these other events when collecting payments with the Payment Element:"]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Event"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Description"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Action"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.succeeded"},"children":["payment_intent.succeeded"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer successfully completes a payment."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Send the customer an order confirmation and ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"fulfillment"},"children":["fulfill"]}," their order."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.processing"},"children":["payment_intent.processing"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer successfully initiates a payment, but the payment has yet to complete. This event is most commonly sent when the customer initiates a bank debit. It’s followed by either a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.succeeded"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.payment_failed"},"children":[]}," event in the future."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Send the customer an order confirmation that indicates their payment is pending. For digital goods, you might want to fulfill the order before waiting for payment to complete."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.payment_failed"},"children":["payment_intent.payment_failed"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer attempts a payment, but the payment fails."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["If a payment transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_failed"},"children":[]},", offer the customer another attempt to pay."]}]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"web-test-the-integration","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Test your integration","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To test your custom payments integration:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Create a Payment Intent and retrieve the client secret."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Fill out the payment details with a method from the following table.",{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any future date for card expiry."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any 3-digit number for CVC."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enter any billing postal code."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Submit the payment to Stripe. You’re redirected to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Go to the Dashboard and look for the payment on the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Ftest\u002Fpayments?status%5B0%5D=successful"},"children":["Payments page"]},". If your payment succeeded, you’ll see it in that list."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Click your payment to see more details, like billing information and the list of purchased items. You can use this information to fulfill the order."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn more about ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["testing your integration"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Ftesting-auto-pm.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"test-cards","title":"Cards","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-cards","title":"Cards"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Card number"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4242424242424242","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment succeeds and doesn’t require authentication."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000002500003155","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment requires ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"sca"},"children":["authentication"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000000000009995","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card is declined with a decline code like ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"insufficient_funds"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"6205500000000000004","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The UnionPay card has a variable length of 13-19 digits."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]}]}]}]}},{"id":"test-wallets","title":"Wallets","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-wallets","title":"Wallets"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Alipay"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["immediate notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]}]}]}]}},{"id":"test-bank-redirects","title":"Bank redirects","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-redirects","title":"Bank redirects"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BECS Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with BECS Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"900123456"},"children":[]}," and BSB ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"000-000"},"children":[]},". The confirmed PaymentIntent initially transitions to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]},", then transitions to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"succeeded"},"children":[]}," status 3 minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BECS Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment fails with an ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"account_closed"},"children":[]}," error code."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"111111113"},"children":[]}," and BSB ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"000-000"},"children":[]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Bancontact, EPS, iDEAL, and Przelewy24"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and immediate notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and delayed notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK payments fail in a variety of ways—immediate failures \u0028for example, the code is expired or invalid\u0029, delayed errors \u0028the bank declines\u0029 or timeouts \u0028the customer didn’t respond in time\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Use email patterns to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fblik\u002Faccept-a-payment#simulate-failures"},"children":["simulate the different failures."]}]}]}]}]}]}},{"id":"test-bank-debits","title":"Bank debits","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-debits","title":"Bank debits"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with SEPA Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT321904300235473204"},"children":[]},". The confirmed PaymentIntent initially transitions to processing, then transitions to the succeeded status three minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment intent status transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_payment_method"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT861904300235473202"},"children":[]},"."]}]}]}]}]}},{"id":"test-vouchers","title":"Vouchers","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-vouchers","title":"Vouchers"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Boleto, OXXO"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer pays with a Boleto or OXXO voucher."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Select Boleto or OXXO as the payment method and submit the payment. Close the dialog after it appears."]}]}]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["Testing"]}," for additional information to test your integration."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"add-more-payment-methods","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Add more payment methods","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The Payment Element ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fintegration-options#choose-how-to-add-payment-methods"},"children":["supports many payment methods"]}," by default. You have to take additional steps to enable and display some payment methods."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"affirm","level":3,"anchored":true,"toc":"Affirm "},"children":["Affirm "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To begin using Affirm, you must enable it in the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Dashboard"]},". When you create a PaymentIntent with the Affirm payment method, you need to include a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-shipping"},"children":["shipping address"]},". This example suggests passing the shipping information on the client after the customer ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment#web-create-intent"},"children":["selects their payment method"]},". Learn more about using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faffirm"},"children":["Affirm"]}," with Stripe."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"pref":"client","selector":"tabs","items":[{"id":"html","title":"HTML \u002B JS","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"html","title":"HTML \u002B JS"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"checkout.js","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":11,"end":20}],"add":[],"remove":[]}},"children":["const form = document.getElementById\u0028'payment-form'\u0029;\n\nform.addEventListener\u0028'submit', async \u0028event\u0029 =\u003E {\n event.preventDefault\u0028\u0029;\n\n const {error} = await stripe.confirmPayment\u0028{\n \u002F\u002F\u0060Elements\u0060 instance that was used to create the Payment Element\n elements,\n confirmParams: {\n return_url: 'https:\u002F\u002Fmy-site.com\u002Forder\u002F123\u002Fcomplete',",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n shipping: {\n name: 'Jenny Rosen',\n address: {\n line1: '1 Street',\n city: 'Seattle',\n state: 'WA',\n postal_code: '95123',\n country: 'US',\n },\n },"},"children":["\n shipping: {\n name: 'Jenny Rosen',\n address: {\n line1: '1 Street',\n city: 'Seattle',\n state: 'WA',\n postal_code: '95123',\n country: 'US',\n },\n },"]},"\n\n },\n }\u0029;\n\n if \u0028error\u0029 {\n \u002F\u002F This point is reached if there's an immediate error when\n \u002F\u002F confirming the payment. Show error to your customer \u0028e.g., payment\n \u002F\u002F details incomplete\u0029\n const messageContainer = document.querySelector\u0028'#error-message'\u0029;\n messageContainer.textContent = error.message;\n } else {\n \u002F\u002F Your customer is redirected to your \u0060return_url\u0060. For some payment\n \u002F\u002F methods like iDEAL, your customer is redirected to an intermediate\n \u002F\u002F site first to authorize the payment, then redirected to the \u0060return_url\u0060.\n }\n}\u0029;\n"]}]}},{"id":"react","title":"React","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"react","title":"React"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"jsx","filename":"CheckoutForm.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":26,"end":35}],"add":[],"remove":[]}},"children":["\nimport React, {useState} from 'react';\nimport {useStripe, useElements, PaymentElement} from '@stripe\u002Freact-stripe-js';\n\nconst CheckoutForm = \u0028\u0029 =\u003E {\n const stripe = useStripe\u0028\u0029;\n const elements = useElements\u0028\u0029;\n\n const [errorMessage, setErrorMessage] = useState\u0028null\u0029;\n\n const handleSubmit = async \u0028event\u0029 =\u003E {\n \u002F\u002F We don't want to let default form submission happen here,\n \u002F\u002F which would refresh the page.\n event.preventDefault\u0028\u0029;\n\n if \u0028\u0021stripe || \u0021elements\u0029 {\n \u002F\u002F Stripe.js hasn't yet loaded.\n \u002F\u002F Make sure to disable form submission until Stripe.js has loaded.\n return;\n }\n\n const {error} = await stripe.confirmPayment\u0028{\n \u002F\u002F\u0060Elements\u0060 instance that was used to create the Payment Element\n elements,\n confirmParams: {\n return_url: 'https:\u002F\u002Fmy-site.com\u002Forder\u002F123\u002Fcomplete',",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n shipping: {\n name: 'Jenny Rosen',\n address: {\n line1: '1 Street',\n city: 'Seattle',\n state: 'WA',\n postal_code: '95123',\n country: 'US',\n },\n },"},"children":["\n shipping: {\n name: 'Jenny Rosen',\n address: {\n line1: '1 Street',\n city: 'Seattle',\n state: 'WA',\n postal_code: '95123',\n country: 'US',\n },\n },"]},"\n\n },\n }\u0029;\n\n\n if \u0028error\u0029 {\n \u002F\u002F This point will only be reached if there is an immediate error when\n \u002F\u002F confirming the payment. Show error to your customer \u0028e.g., payment\n \u002F\u002F details incomplete\u0029\n setErrorMessage\u0028error.message\u0029;\n } else {\n \u002F\u002F Your customer will be redirected to your \u0060return_url\u0060. For some payment\n \u002F\u002F methods like iDEAL, your customer will be redirected to an intermediate\n \u002F\u002F site first to authorize the payment, then redirected to the \u0060return_url\u0060.\n }\n };\n\n return \u0028\n \u003Cform onSubmit={handleSubmit}\u003E\n \u003CPaymentElement \u002F\u003E\n \u003Cbutton disabled={\u0021stripe}\u003ESubmit\u003C\u002Fbutton\u003E\n {\u002F* Show error message to your customers *\u002F}\n {errorMessage \u0026\u0026 \u003Cdiv\u003E{errorMessage}\u003C\u002Fdiv\u003E}\n \u003C\u002Fform\u003E\n \u0029\n};\n\nexport default CheckoutForm;\n"]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"test-affirm","level":4,"anchored":true},"children":["Test Affirm "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn how to test different scenarios using the following table:"]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with Affirm."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form \u0028make sure to include a shipping address\u0029 and authenticate the payment."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the Affirm redirect page."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form and click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"afterpay-clearpay","level":3,"anchored":true,"toc":"Afterpay \u0028Clearpay\u0029 "},"children":["Afterpay \u0028Clearpay\u0029 "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When you create a PaymentIntent with the Afterpay payment method, you need to include a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-shipping"},"children":["shipping address"]},". Learn more about using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fafterpay-clearpay"},"children":["Afterpay"]}," with Stripe."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fpayments\u002Fpayment-methods\u002Fafterpay-clearpay\u002Fcreate-payment-intent.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can manage payment methods from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Dashboard"]},". Stripe handles the return of eligible payment methods based on factors such as the transaction’s amount, currency, and payment flow. The example below uses the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fobject#payment_intent_object-automatic_payment_methods-enabled"},"children":["automatic_payment_methods"]}," attribute but you can list ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"afterpay_clearpay"},"children":[]}," with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-payment_method_types"},"children":["payment method types"]},". In the latest version of the API, specifying the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"automatic_payment_methods"},"children":[]}," parameter is optional because Stripe enables its functionality by default. Regardless of which option you choose, make sure that you enable Afterpay Clearpay in the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Dashboard"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d amount=1099 \\\n -d currency=usd \\\n -d \"automatic_payment_methods[enabled]\"=true \\\n -d \"shipping[name]\"=\"Jenny Rosen\" \\\n -d \"shipping[address][line1]\"=\"1234 Main Street\" \\\n -d \"shipping[address][city]\"=\"San Francisco\" \\\n -d \"shipping[address][state]\"=CA \\\n -d \"shipping[address][country]\"=US \\\n -d \"shipping[address][postal_code]\"=94111"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe payment_intents create \\\n --amount=1099 \\\n --currency=usd \\\n -d \"automatic_payment_methods[enabled]\"=true \\\n -d \"shipping[name]\"=\"Jenny Rosen\" \\\n -d \"shipping[address][line1]\"=\"1234 Main Street\" \\\n -d \"shipping[address][city]\"=\"San Francisco\" \\\n -d \"shipping[address][state]\"=CA \\\n -d \"shipping[address][country]\"=US \\\n -d \"shipping[address][postal_code]\"=94111"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'usd',\n automatic_payment_methods: {enabled: true},\n shipping: {\n name: 'Jenny Rosen',\n address: {\n line1: '1234 Main Street',\n city: 'San Francisco',\n state: 'CA',\n country: 'US',\n postal_code: '94111',\n },\n },\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.PaymentIntent.create\u0028\n amount=1099,\n currency=\"usd\",\n automatic_payment_methods={\"enabled\": True},\n shipping={\n \"name\": \"Jenny Rosen\",\n \"address\": {\n \"line1\": \"1234 Main Street\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"country\": \"US\",\n \"postal_code\": \"94111\",\n },\n },\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.payment_intents.create\u0028{\n \"amount\": 1099,\n \"currency\": \"usd\",\n \"automatic_payment_methods\": {\"enabled\": True},\n \"shipping\": {\n \"name\": \"Jenny Rosen\",\n \"address\": {\n \"line1\": \"1234 Main Street\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"country\": \"US\",\n \"postal_code\": \"94111\",\n },\n },\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'usd',\n 'automatic_payment_methods' =\u003E ['enabled' =\u003E true],\n 'shipping' =\u003E [\n 'name' =\u003E 'Jenny Rosen',\n 'address' =\u003E [\n 'line1' =\u003E '1234 Main Street',\n 'city' =\u003E 'San Francisco',\n 'state' =\u003E 'CA',\n 'country' =\u003E 'US',\n 'postal_code' =\u003E '94111',\n ],\n ],\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nPaymentIntentCreateParams params =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029.setEnabled\u0028true\u0029.build\u0028\u0029\n \u0029\n .setShipping\u0028\n PaymentIntentCreateParams.Shipping.builder\u0028\u0029\n .setName\u0028\"Jenny Rosen\"\u0029\n .setAddress\u0028\n PaymentIntentCreateParams.Shipping.Address.builder\u0028\u0029\n .setLine1\u0028\"1234 Main Street\"\u0029\n .setCity\u0028\"San Francisco\"\u0029\n .setState\u0028\"CA\"\u0029\n .setCountry\u0028\"US\"\u0029\n .setPostalCode\u0028\"94111\"\u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nPaymentIntent paymentIntent = PaymentIntent.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nPaymentIntentCreateParams params =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029.setEnabled\u0028true\u0029.build\u0028\u0029\n \u0029\n .setShipping\u0028\n PaymentIntentCreateParams.Shipping.builder\u0028\u0029\n .setName\u0028\"Jenny Rosen\"\u0029\n .setAddress\u0028\n PaymentIntentCreateParams.Shipping.Address.builder\u0028\u0029\n .setLine1\u0028\"1234 Main Street\"\u0029\n .setCity\u0028\"San Francisco\"\u0029\n .setState\u0028\"CA\"\u0029\n .setCountry\u0028\"US\"\u0029\n .setPostalCode\u0028\"94111\"\u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029;\n\nPaymentIntent paymentIntent = client.paymentIntents\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'usd',\n automatic_payment_methods: {\n enabled: true,\n },\n shipping: {\n name: 'Jenny Rosen',\n address: {\n line1: '1234 Main Street',\n city: 'San Francisco',\n state: 'CA',\n country: 'US',\n postal_code: '94111',\n },\n },\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n AutomaticPaymentMethods: \u0026stripe.PaymentIntentAutomaticPaymentMethodsParams{\n Enabled: stripe.Bool\u0028true\u0029,\n },\n Shipping: \u0026stripe.ShippingDetailsParams{\n Name: stripe.String\u0028\"Jenny Rosen\"\u0029,\n Address: \u0026stripe.AddressParams{\n Line1: stripe.String\u0028\"1234 Main Street\"\u0029,\n City: stripe.String\u0028\"San Francisco\"\u0029,\n State: stripe.String\u0028\"CA\"\u0029,\n Country: stripe.String\u0028\"US\"\u0029,\n PostalCode: stripe.String\u0028\"94111\"\u0029,\n },\n },\n};\nresult, err := paymentintent.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new PaymentIntentCreateOptions\n{\n Amount = 1099,\n Currency = \"usd\",\n AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions\n {\n Enabled = true,\n },\n Shipping = new ChargeShippingOptions\n {\n Name = \"Jenny Rosen\",\n Address = new AddressOptions\n {\n Line1 = \"1234 Main Street\",\n City = \"San Francisco\",\n State = \"CA\",\n Country = \"US\",\n PostalCode = \"94111\",\n },\n },\n};\nvar service = new PaymentIntentService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_430fc49613ac432654422f658aa0f0d524ae1eab","httpPath":"\u002Fv1\u002Fpayment_intents","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"test-afterpay","level":4,"anchored":true},"children":["Test Afterpay \u0028Clearpay\u0029 "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn how to test different scenarios using the following table:"]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with Afterpay."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form \u0028make sure to include a shipping address\u0029 and authenticate the payment."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the Afterpay redirect page."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form and click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"apple-pay-and-google-pay","level":3,"anchored":true,"toc":"Apple Pay and Google Pay "},"children":["Apple Pay and Google Pay "]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fpayments\u002Faccept-a-payment\u002Fapple-google-pay.md","variables":{"intentKind":"PaymentIntent"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When you ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment?platform=web\u0026ui=elements#create-the-paymentintent"},"children":["enable card payments"]},", we display Apple Pay and Google Pay for customers whose environment meets the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fstripe-js\u002Felements\u002Fpayment-request-button#testing"},"children":["wallet display conditions"]},". To accept payments from these wallets, you must also:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Enable them in your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["payment methods settings"]},". Apple Pay is enabled by default."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Serve your application over HTTPS in development and production."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fpmd-registration"},"children":["Register and verify your domain"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment?platform=web\u0026ui=elements#fetch-updates"},"children":["Fetch updates from the server"]}," if you update the amount of a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents"},"children":["PaymentIntent"]}," to keep the wallet’s payment modal in sync."]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"regional","title":"Regional Testing","countries":["IN"]},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe Elements doesn’t support Google Pay or Apple Pay for Stripe accounts and customers in India. Therefore, you can’t test your Google Pay or Apple Pay integration if the tester’s IP address is in India, even if the Stripe account is based outside India."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn more about using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapple-pay"},"children":["Apple Pay"]}," and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fgoogle-pay"},"children":["Google Pay"]}," with Stripe."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"ach-debit","level":3,"anchored":true,"toc":"ACH Direct Debit "},"children":["ACH Direct Debit "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When using the Payment Element with the ACH Direct Debit payment method, follow these steps:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers"},"children":["Customer object"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl -X POST https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fcustomers \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\""},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe customers create "},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::Customer.create\u0028\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.Customer.create\u0028\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.customers.create\u0028\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003Ecustomers-\u003Ecreate\u0028[]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nCustomerCreateParams params = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n\nCustomer customer = Customer.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nCustomerCreateParams params = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n\nCustomer customer = client.customers\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst customer = await stripe.customers.create\u0028\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.CustomerParams{};\nresult, err := customer.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new CustomerCreateOptions\u0028\u0029;\nvar service = new CustomerService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_cd0cfb75902460739899b1a28de71f1ac150e726","httpPath":"\u002Fv1\u002Fcustomers","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Specify the customer ID when creating the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentIntent"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fpayments\u002Fpayment-methods\u002Fus-bank-account\u002Fcreate-payment-intent.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodegenSnippet","attributes":{"generatedCodeBlocks":[{"lang":"curl","generatedCode":{"resources":"curl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024:\" \\\n -d amount=1099 \\\n -d currency=usd \\\n -d setup_future_usage=off_session \\\n -d customer={{CUSTOMER_ID}} \\\n -d \"payment_method_types[]\"=us_bank_account"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"cli","generatedCode":{"resources":"stripe payment_intents create \\\n --amount=1099 \\\n --currency=usd \\\n --setup-future-usage=off_session \\\n --customer={{CUSTOMER_ID}} \\\n -d \"payment_method_types[0]\"=us_bank_account"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"ruby","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.api_key = '\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\n\nStripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'usd',\n setup_future_usage: 'off_session',\n customer: '{{CUSTOMER_ID}}',\n payment_method_types: ['us_bank_account'],\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"python","generatedCode":{"resources":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nimport stripe\nstripe.api_key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nstripe.PaymentIntent.create\u0028\n amount=1099,\n currency=\"usd\",\n setup_future_usage=\"off_session\",\n customer=\"{{CUSTOMER_ID}}\",\n payment_method_types=[\"us_bank_account\"],\n\u0029","services":"# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nclient = StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029\n\nclient.payment_intents.create\u0028{\n \"amount\": 1099,\n \"currency\": \"usd\",\n \"setup_future_usage\": \"off_session\",\n \"customer\": \"{{CUSTOMER_ID}}\",\n \"payment_method_types\": [\"us_bank_account\"],\n}\u0029"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"php","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n\u0024stripe = new \\Stripe\\StripeClient\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\n\u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'usd',\n 'setup_future_usage' =\u003E 'off_session',\n 'customer' =\u003E '{{CUSTOMER_ID}}',\n 'payment_method_types' =\u003E ['us_bank_account'],\n]\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"java","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripe.apiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nPaymentIntentCreateParams params =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setSetupFutureUsage\u0028PaymentIntentCreateParams.SetupFutureUsage.OFF_SESSION\u0029\n .setCustomer\u0028\"{{CUSTOMER_ID}}\"\u0029\n .addPaymentMethodType\u0028\"us_bank_account\"\u0029\n .build\u0028\u0029;\n\nPaymentIntent paymentIntent = PaymentIntent.create\u0028params\u0029;","services":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeClient client = new StripeClient\u0028\"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\u0029;\n\nPaymentIntentCreateParams params =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"usd\"\u0029\n .setSetupFutureUsage\u0028PaymentIntentCreateParams.SetupFutureUsage.OFF_SESSION\u0029\n .setCustomer\u0028\"{{CUSTOMER_ID}}\"\u0029\n .addPaymentMethodType\u0028\"us_bank_account\"\u0029\n .build\u0028\u0029;\n\nPaymentIntent paymentIntent = client.paymentIntents\u0028\u0029.create\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"node","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nconst stripe = require\u0028'stripe'\u0029\u0028'\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024'\u0029;\n\nconst paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'usd',\n setup_future_usage: 'off_session',\n customer: '{{CUSTOMER_ID}}',\n payment_method_types: ['us_bank_account'],\n}\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"go","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nstripe.Key = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\"\n\nparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyUSD\u0029\u0029,\n SetupFutureUsage: stripe.String\u0028string\u0028stripe.PaymentIntentSetupFutureUsageOffSession\u0029\u0029,\n Customer: stripe.String\u0028\"{{CUSTOMER_ID}}\"\u0029,\n PaymentMethodTypes: []*string{stripe.String\u0028\"us_bank_account\"\u0029},\n};\nresult, err := paymentintent.New\u0028params\u0029;"},"codegenError":null,"overriddenCodeBlock":null},{"lang":"dotnet","generatedCode":{"resources":"\u002F\u002F Set your secret key. Remember to switch to your live secret key in production.\n\u002F\u002F See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\nStripeConfiguration.ApiKey = \"\u0024\u0024TEST_KEY_REPLACE_ME\u0024\u0024\";\n\nvar options = new PaymentIntentCreateOptions\n{\n Amount = 1099,\n Currency = \"usd\",\n SetupFutureUsage = \"off_session\",\n Customer = \"{{CUSTOMER_ID}}\",\n PaymentMethodTypes = new List\u003Cstring\u003E { \"us_bank_account\" },\n};\nvar service = new PaymentIntentService\u0028\u0029;\nservice.Create\u0028options\u0029;"},"codegenError":null,"overriddenCodeBlock":null}],"codeTabGroupID":"codetab_f6d5fb7c36346625d0fe6f88994f8199caa74093","httpPath":"\u002Fv1\u002Fpayment_intents","httpVerb":"post","v2ApiVersion":"2024-12-03.preview-v2"},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Select a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fobject#payment_intent_object-payment_method_options-us_bank_account-verification_method"},"children":["verification method"]},"."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When using the ACH Direct Debit payment method with the Payment Element, you can only select ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"automatic"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"instant"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Learn more about using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fach-direct-debit"},"children":["ACH Direct Debit"]}," with Stripe."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"test-ach-debit","level":4,"anchored":true},"children":["Test ACH Direct Debit "]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a US bank account using instant verification."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["US bank account"]}," and fill out the form. Click the test institution. Follow the instructions on the modal to link your bank account. Click your payment button."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a US bank account using microdeposits."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["US bank account"]}," and fill out the form. Click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Enter bank details manually instead"]},". Follow the instructions on the modal to link your bank account. You may use these ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fach-direct-debit\u002Faccept-a-payment?platform=web#test-account-numbers"},"children":["test account numbers"]},". Click your payment button."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to complete the bank account linking process."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["US bank account"]}," and click the test institution or ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Enter bank details manually instead"]},". Close the modal without completing it."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"blik","level":3,"anchored":true,"toc":"BLIK "},"children":["BLIK "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When using the Payment Element with BLIK, the user can close the modal prompting them to authorize the payment in their banking app. This triggers a redirect to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," and doesn’t return the user to the checkout page. Learn more about using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fblik"},"children":["BLIK"]}," with Stripe."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To handle users closing the modal, in the server-side handler for your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},", inspect the Payment Intent’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"status"},"children":[]}," to see if it’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"succeeded"},"children":[]}," or still ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_action"},"children":[]}," \u0028meaning the user has closed the modal without authorizing\u0029, dealing with each case as needed."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"qr-codes","level":3,"anchored":true,"toc":"QR code payment methods "},"children":["QR code payment methods "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When using the Payment Element with a QR code based payment method \u0028WeChat Pay, PayNow, Pix, PromptPay, Cash App Pay\u0029, the user can close the QR code modal. This triggers a redirect to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," and doesn’t return the user to the checkout page."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To handle users closing QR code modals, at the server-side handler for your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},", inspect the Payment Intent’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"status"},"children":[]}," to see if it’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"succeeded"},"children":[]}," or still ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_action"},"children":[]}," \u0028meaning the user has closed the modal without paying\u0029, dealing with each case as needed."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Alternatively, prevent the automatic redirect to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," by passing the advanced optional parameter ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Fpayment_intents\u002Fconfirm_payment#confirm_payment_intent-options-redirect"},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"redirect=if_required"},"children":[]}]},", which prevents the redirect when closing a QR code modal."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"cash-app-pay","level":3,"anchored":true,"toc":"Cash App Pay "},"children":["Cash App Pay "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The Payment Element renders a dynamic form differently in desktop web or mobile web since it uses different customer authentication methods. Learn more about using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fcash-app-pay"},"children":["Cash App Pay"]}," with Stripe."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"cash-app-pay-mobile","title":"Mobile web app element","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"cash-app-pay-mobile","title":"Mobile web app element"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Cash App Pay is a redirect based payment method in mobile web. It redirects your customer to Cash App in live mode or a test payment page in test mode. After the payment is complete, they’re redirected to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},", regardless of whether you set ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"redirect=if_required"},"children":[]}," or not."]}]}},{"id":"cash-app-pay-web","title":"Desktop web app element","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"cash-app-pay-web","title":"Desktop web app element"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Cash App Pay is a QR code payment method in desktop web, where the Payment Element renders a QR code modal. Your customer needs to scan the QR code with a QR code scanning application or the Cash App mobile application."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In live mode, it redirects the customer to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," as soon as they’re redirected to the Cash App. In test mode, they can approve or decline the payment before being redirected to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},". Customers can also close the QR code modal before completing the payment, which triggers a redirect to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Make sure the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," corresponds to a page on your website to inspect the Payment Intent’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"status"},"children":[]},". The Payment Intent’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"status"},"children":[]}," can be ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"succeeded"},"children":[]},", ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"failed"},"children":[]},", or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_action"},"children":[]}," \u0028for example, the customer has closed the modal without scanning the QR code\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Alternatively, prevent the automatic redirect to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"return_url"},"children":[]}," by passing the advanced optional parameter ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"redirect=if_required"},"children":[]},", which prevents the redirect when closing a QR code modal."]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"paypal","level":3,"anchored":true,"toc":"PayPal "},"children":["PayPal "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To use PayPal, make sure you’re on a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fpmd-registration"},"children":["registered domain"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fdisclosure-cookies.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"disclose-cookies","beta":false,"preview":false,"collapsable":false,"numbered":false,"optional":false,"title":"Disclose Stripe to your customers","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe collects information on customer interactions with Elements to provide services to you, prevent fraud, and improve its services. This includes using cookies and IP addresses to identify which Elements a customer saw during a single checkout session. You’re responsible for disclosing and obtaining all rights and consents necessary for Stripe to use data in these ways. For more information, visit our ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Flegal\u002Fprivacy-center#as-a-business-user-what-notice-do-i-provide-to-my-end-customers-about-stripe"},"children":["privacy center"]},"."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"SeeAlso","attributes":{"level":2,"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1,"type":"guide"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Felements"},"children":["Stripe Elements"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fsave-and-reuse"},"children":["Set up future payments"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fsave-during-payment"},"children":["Save payment details during payment"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftax\u002Fcustom"},"children":["Calculate sales tax, GST and VAT in your payment flow"]}]}]}],"titleDescriptor":{"id":"docsApp.components.seealso.defaultHeading","defaultMessage":"See also"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1,"type":"guide"},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Felements"},"children":["Stripe Elements"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fsave-and-reuse"},"children":["Set up future payments"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fsave-during-payment"},"children":["Save payment details during payment"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftax\u002Fcustom"},"children":["Calculate sales tax, GST and VAT in your payment flow"]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Page","attributes":{"prefs":{"platform":"ios"},"title":"In-app integration for iOS"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Faccept-a-payment-payment-sheet-preamble.md","variables":{"platform":"ios","link":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fios-overview.9e0d68d009dc005f73a6f5df69e00458.png","ignoreAltTextRequirement":true,"zoomable":true},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Integrate Stripe’s prebuilt payment UI into the checkout of your iOS app with the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet.html"},"children":["PaymentSheet"]}," class. See our sample integration ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Ftree\u002Fmaster\u002FExample\u002FPaymentSheet%20Example"},"children":["on GitHub"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Interested in displaying payment methods directly in your checkout screen?"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. ",{"\u0024\u0024mdtype":"Tag","name":"CollectEmail","attributes":{"list":"mobile-embeddable-payment-element-beta@stripe.com","send_direct_email":true,"intro_text":"Interested in displaying payment methods directly in your checkout screen?","body_text":"Provide your email address to join the pilot.","form_cta_text":"Sign up","show_email_confirmation":true,"success_text":"Thank you\u0021 We'll be in touch soon.","until":null,"modal":true,"modal_link_text":"Sign up for early access."},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-setup","beta":false,"preview":false,"badges":["Server-side","Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Set up Stripe","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["First, you need a Stripe account. ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fregister"},"children":["Register now"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"setup-server-side","level":3,"anchored":true,"toc":"Server-side "},"children":["Server-side "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This integration requires endpoints on your server that talk to the Stripe API. Use our official libraries for access to the Stripe API from your server:"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Flibraries.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Available as a gem\nsudo gem install stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"Gemfile","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# If you use bundler, you can add this line to your Gemfile\ngem 'stripe'\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install through pip\npip3 install --upgrade stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"PyPi","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or find the Stripe package on http:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fstripe\u002F\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"requirements.txt","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Find the version you want to pin:\n# https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-python\u002Fblob\u002Fmaster\u002FCHANGELOG.md\n# Specify that version in your requirements.txt file\nstripe\u003E=5.0.0\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install the PHP library with Composer\ncomposer require stripe\u002Fstripe-php\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Source","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or download the source directly: https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-php\u002Freleases\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"build.gradle","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F*\n For Gradle, add the following dependency to your build.gradle and replace with\n the version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n*\u002F\nimplementation \"com.stripe:stripe-java:","28.0.0","\"\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"xml","filename":"pom.xml","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C\u0021--\n For Maven, add the following dependency to your POM and replace with the\n version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n--\u003E\n\u003Cdependency\u003E\n \u003CgroupId\u003Ecom.stripe\u003C\u002FgroupId\u003E\n \u003CartifactId\u003Estripe-java\u003C\u002FartifactId\u003E\n \u003Cversion\u003E","28.0.0","\u003C\u002Fversion\u003E\n\u003C\u002Fdependency\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Other environments","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# For other environments, manually install the following JARs:\n# - The Stripe JAR from https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n# - Google Gson from https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fgson\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with npm\nnpm install stripe --save\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Make sure your project is using Go Modules\ngo mod init\n# Install stripe-go\ngo get -u github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F Then import the package\nimport \u0028\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\"\n\u0029\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with dotnet\ndotnet add package Stripe.net\ndotnet restore\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or install with NuGet\nInstall-Package Stripe.net\n"]}]}}],"codeTabGroupID":"codetab_dfc4a6aff5f3711c66bdb90a3f37589faa94b1f4"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"setup-client-side","level":3,"anchored":true,"toc":"Client-side "},"children":["Client-side "]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fios-install-sdk.md","variables":{"moduleName":"StripePaymentSheet","minimumiOSVersion":"13","includeInstallInstructions":["spm","cocoapods","carthage","manual-framework"],"requiredFrameworksLink":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Ftree\u002Fmaster\u002FStripePaymentSheet\u002FREADME.md#manual-linking"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios"},"children":["Stripe iOS SDK"]}," is open source, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Findex.html"},"children":["fully documented"]},", and compatible with apps supporting iOS ","13"," or above."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"install-spm","title":"Swift Package Manager","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-spm","title":"Swift Package Manager"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To install the SDK, follow these steps:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["In Xcode, select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["File"]}," \u003E ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Add Packages…"]}," and enter ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios-spm"},"children":[]}," as the repository URL."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Select the latest version number from our ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Freleases"},"children":["releases page"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Add the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["StripePaymentSheet"]}," product to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fswift_packages\u002Fadding_package_dependencies_to_your_app"},"children":["target of your app"]},"."]}]}]}},{"id":"install-cocoapods","title":"CocoaPods","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-cocoapods","title":"CocoaPods"},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["If you haven’t already, install the latest version of ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html"},"children":["CocoaPods"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["If you don’t have an existing ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fguides.cocoapods.org\u002Fsyntax\u002Fpodfile.html"},"children":["Podfile"]},", run the following command to create one:",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["pod init\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Add this line to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Podfile"},"children":[]},":",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"podfile","filename":"Podfile","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["pod '","StripePaymentSheet","'\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Run the following command:",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["pod install\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Don’t forget to use the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":".xcworkspace"},"children":[]}," file to open your project in Xcode, instead of the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":".xcodeproj"},"children":[]}," file, from here on out."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["In the future, to update to the latest version of the SDK, run:",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["pod update ","StripePaymentSheet","\n"]}]}]}]}},{"id":"install-carthage","title":"Carthage","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-carthage","title":"Carthage"},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["If you haven’t already, install the latest version of ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage#installing-carthage"},"children":["Carthage"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Add this line to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Cartfile"},"children":[]},":",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"cartfile","filename":"Cartfile","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["github \"stripe\u002Fstripe-ios\"\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Follow the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage#if-youre-building-for-ios-tvos-or-watchos"},"children":["Carthage installation instructions"]},". Make sure to embed all of the required frameworks listed ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Ftree\u002Fmaster\u002FStripePaymentSheet\u002FREADME.md#manual-linking"},"children":["here"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["In the future, to update to the latest version of the SDK, run the following command:",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["carthage update stripe-ios --platform ios\n"]}]}]}]}},{"id":"install-manual-framework","title":"Manual Framework","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-manual-framework","title":"Manual Framework"},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Head to our ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Freleases\u002Flatest"},"children":["GitHub releases page"]}," and download and unzip ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Stripe.xcframework.zip"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Drag ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["StripePaymentSheet",".xcframework"]}," to the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Embedded Binaries"]}," section of the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["General"]}," settings in your Xcode project. Make sure to select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Copy items if needed"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Repeat step 2 for all required frameworks listed ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Ftree\u002Fmaster\u002FStripePaymentSheet\u002FREADME.md#manual-linking"},"children":["here"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["In the future, to update to the latest version of our SDK, repeat steps 1–3."]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For details on the latest SDK release and past versions, see the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Freleases"},"children":["Releases"]}," page on GitHub. To receive notifications when a new release is published, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fhelp.github.com\u002Fen\u002Farticles\u002Fwatching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository"},"children":["watch releases"]}," for the repository."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-enable-payment-methods","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Enable payment methods","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fpayments\u002Faccept-a-payment\u002Fenable-payment-methods.md","variables":{"intentKind":"PaymentIntent"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["View your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["payment methods settings"]}," and enable the payment methods you want to support. You need at least one payment method enabled to create a ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"payment-intents"},"children":["PaymentIntent"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, Stripe enables cards and other prevalent payment methods that can help you reach more customers, but we recommend turning on additional payment methods that are relevant for your business and customers. See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fpayment-method-support"},"children":["Payment method support"]}," for product and payment method support, and our ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Fpricing\u002Flocal-payment-methods"},"children":["pricing page"]}," for fees."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"add-server-endpoint","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Add an endpoint","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fpayment-sheet-add-server-endpoint-apms.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fpayment-sheet-add-server-endpoint-apms-ephemeral-key.md","variables":{}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you want to present the PaymentSheet before creating a PaymentIntent, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment-deferred?type=payment"},"children":["Collect payment details before creating an Intent"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This integration uses three Stripe API objects:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents"},"children":["PaymentIntent"]},": Stripe uses this to represent your intent to collect payment from a customer, tracking your charge attempts and payment state changes throughout the process."]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["\u0028Optional\u0029 ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers"},"children":["Customer"]},": To set up a payment method for future payments, you must attach it to a ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"customers"},"children":["Customer"]},". Create a Customer object when your customer creates an account with your business. If your customer is making a payment as a guest, you can create a Customer object before payment and associate it with your own internal representation of the customer’s account later."]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["\u0028Optional\u0029 ","Customer Ephemeral Key: Information on the Customer object is sensitive, and can’t be retrieved directly from an app. An Ephemeral Key grants the SDK temporary access to the Customer."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you never save cards to a Customer and don’t allow returning Customers to reuse saved cards, you can omit the Customer and Customer Ephemeral Key objects from your integration."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For security reasons, your app can’t create these objects. Instead, add an endpoint on your server that:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Retrieves the Customer, or creates a new one."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Creates an Ephemeral Key for the Customer."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Creates a PaymentIntent with the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-amount"},"children":["amount"]},", ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-currency"},"children":["currency"]},", and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-customer"},"children":["customer"]},". You can also optionally include the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"automatic_payment_methods"},"children":[]}," parameter. Stripe enables its functionality by default in the latest version of the API."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Returns the Payment Intent’s ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"payment-intent-secret"},"children":["client secret"]},", the Ephemeral Key’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"secret"},"children":[]},", the Customer’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers\u002Fobject#customer_object-id"},"children":["id"]},", and your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys"},"children":["publishable key"]}," to your app."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The payment methods shown to customers during the checkout process are also included on the PaymentIntent. You can let Stripe pull payment methods from your Dashboard settings or you can list them manually. Regardless of the option you choose, know that the currency passed in the PaymentIntent filters the payment methods shown to the customer. For example, if you pass ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"eur"},"children":[]}," on the PaymentIntent and have OXXO enabled in the Dashboard, OXXO won’t be shown to the customer because OXXO doesn’t support ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"eur"},"children":[]}," payments."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Unless your integration requires a code-based option for offering payment methods, Stripe recommends the automated option. This is because Stripe evaluates the currency, payment method restrictions, and other parameters to determine the list of supported payment methods. Payment methods that increase conversion and that are most relevant to the currency and customer’s location are prioritized."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"manage-pm","title":"Manage payment methods from the Dashboard","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"manage-pm","title":"Manage payment methods from the Dashboard"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Test a running implementation of this endpoint on ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fglitch.com\u002Fedit\u002F#\u0021\u002Fremix\u002Fstripe-mobile-payment-sheet-automatic"},"children":["Glitch"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can manage payment methods from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Dashboard"]},". Stripe handles the return of eligible payment methods based on factors such as the transaction’s amount, currency, and payment flow. The PaymentIntent is created using the payment methods you configured in the Dashboard. If you don’t want to use the Dashboard or if you want to specify payment methods manually, you can list them using the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_method_types"},"children":[]}," attribute."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-server-endpoint-code.md","variables":{"automatic_payment_methods":true,"setup_intent":false,"cvc_recollection":false,"customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"curl","title":"curl","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"curl","title":"curl"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Create a Customer \u0028use an existing Customer ID if this is a returning customer\u0029\n","curl https:\u002F\u002Fapi.stripe.com","\u002Fv1\u002Fcustomers"," \\\n"," -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},":"," \\\n"," ","-X"," ","\"","POST","\"","\n","\n# Create an Ephemeral Key for the Customer\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fephemeral_keys \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -H \"Stripe-Version: ","2024-11-20.acacia","\" \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\","\n","\n# Create a PaymentIntent\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\\n -d \"amount\"=1099 \\\n -d \"currency\"=\"eur\" \\","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n -d \"automatic_payment_methods[enabled]\"=true \\","\n"]}]}},{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\npost '\u002Fpayment-sheet' do\n # Use an existing Customer ID if this is a returning customer\n customer = Stripe::Customer.create","\n ephemeralKey = Stripe::EphemeralKey.create\u0028{\n customer: customer['id'],\n }, {stripe_version: '","2024-11-20.acacia","'}\u0029","\n paymentIntent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer['id'],","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029","\n {\n paymentIntent: paymentIntent['client_secret'],","\n ephemeralKey: ephemeralKey['secret'],","\n customer: customer['id'],\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }.to_json","\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\n@app.route\u0028'\u002Fpayment-sheet', methods=['POST']\u0029\ndef payment_sheet\u0028\u0029:\n # Use an existing Customer ID if this is a returning customer\n customer = stripe.Customer.create\u0028\u0029","\n ephemeralKey = stripe.EphemeralKey.create\u0028\n customer=customer['id'],\n stripe_version='","2024-11-20.acacia","',\n \u0029","\n","\n paymentIntent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='eur',\n customer=customer['id'],","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods={\n 'enabled': True,\n },","\n \u0029\n return jsonify\u0028paymentIntent=paymentIntent.client_secret,","\n ephemeralKey=ephemeralKey.secret,","\n customer=customer.id,\n publishableKey='",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029","\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"cart-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\nrequire 'vendor\u002Fautoload.php';\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\n\u002F\u002F Use an existing Customer ID if this is a returning customer.\n\u0024customer = \u0024stripe-\u003Ecustomers-\u003Ecreate\u0028\u0029;","\n\u0024ephemeralKey = \u0024stripe-\u003EephemeralKeys-\u003Ecreate\u0028[\n 'customer' =\u003E \u0024customer-\u003Eid,\n], [\n 'stripe_version' =\u003E '","2024-11-20.acacia","',\n]\u0029;","\n","\n\u0024paymentIntent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'eur',\n 'customer' =\u003E \u0024customer-\u003Eid,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n 'automatic_payment_methods' =\u003E [\n 'enabled' =\u003E 'true',\n ],","\n]\u0029;\n\necho json_encode\u0028\n [\n 'paymentIntent' =\u003E \u0024paymentIntent-\u003Eclient_secret,","\n 'ephemeralKey' =\u003E \u0024ephemeralKey-\u003Esecret,","\n 'customer' =\u003E \u0024customer-\u003Eid,\n 'publishableKey' =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n ]\n\u0029;\nhttp_response_code\u0028200\u0029;","\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"Server.java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.apiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\npost\u0028\n \"\u002Fpayment-sheet\",\n \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n CustomerCreateParams customerParams = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n Customer customer = Customer.create\u0028customerParams\u0029;","\n EphemeralKeyCreateParams ephemeralKeyParams =\n EphemeralKeyCreateParams.builder\u0028\u0029\n .setStripeVersion\u0028\"","2024-11-20.acacia","\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029\n .build\u0028\u0029;\n\n EphemeralKey ephemeralKey = EphemeralKey.create\u0028ephemeralKeyParams\u0029;","\n PaymentIntentCreateParams paymentIntentParams =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"eur\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029\n .setEnabled\u0028true\u0029\n .build\u0028\u0029\n \u0029","\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028paymentIntentParams","\u0029;","\n\n Map\u003CString, String\u003E responseData = new HashMap\u0028\u0029;","\n responseData.put\u0028\"paymentIntent\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"ephemeralKey\", ephemeralKey.getSecret\u0028\u0029\u0029;","\n\n responseData.put\u0028\"customer\", customer.getId\u0028\u0029\u0029;\n responseData.put\u0028\"publishableKey\", \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\u0029;\n\n return gson.toJson\u0028responseData\u0029;\n}\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\nconst stripe = require\u0028'stripe'\u0029\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;","\n\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\napp.post\u0028'\u002Fpayment-sheet', async \u0028req, res\u0029 =\u003E {\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n const customer = await stripe.customers.create\u0028\u0029;","\n const ephemeralKey = await stripe.ephemeralKeys.create\u0028\n {customer: customer.id},\n {apiVersion: '","2024-11-20.acacia","'}\n \u0029;","\n const paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer.id,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029;\n\n res.json\u0028{\n paymentIntent: paymentIntent.client_secret,","\n ephemeralKey: ephemeralKey.secret,","\n customer: customer.id,\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }\u0029;","\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"server.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\nfunc handlePaymentSheet\u0028w http.ResponseWriter, r *http.Request\u0029 {\n if r.Method \u0021= \"POST\" {\n http.Error\u0028w, http.StatusText\u0028http.StatusMethodNotAllowed\u0029, http.StatusMethodNotAllowed\u0029\n return\n }\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n cparams := \u0026stripe.CustomerParams{}\n c, _ := customer.New\u0028cparams\u0029\n","\n ekparams := \u0026stripe.EphemeralKeyParams{\n Customer: stripe.String\u0028c.ID\u0029,\n StripeVersion: stripe.String\u0028\"","2024-11-20.acacia","\"\u0029,\n }\n ek, _ := ephemeralKey.New\u0028ekparams\u0029","\n","\n piparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyEUR\u0029\u0029,\n Customer: stripe.String\u0028c.ID\u0029,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods: \u0026stripe.PaymentIntentAutomaticPaymentMethodsParams{\n Enabled: stripe.Bool\u0028true\u0029,\n },","\n }","\n pi, _ := paymentintent.New\u0028piparams\u0029","\n\n writeJSON\u0028w, struct {","\n PaymentIntent string \u0060json:\"paymentIntent\"\u0060","\n EphemeralKey string \u0060json:\"ephemeralKey\"\u0060","\n Customer string \u0060json:\"customer\"\u0060\n PublishableKey string \u0060json:\"publishableKey\"\u0060\n }{","\n PaymentIntent: pi.ClientSecret,","\n EphemeralKey: ek.Secret,","\n Customer: c.ID,\n PublishableKey: \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\n[HttpPost\u0028\"payment-sheet\"\u0029]\npublic ActionResult\u003CPaymentSheetCreateResponse\u003E CreatePaymentSheet\u0028[FromBody] CreatePaymentSheetRequest req\u0029\n{\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n var customerOptions = new CustomerCreateOptions\u0028\u0029;\n var customerService = new CustomerService\u0028\u0029;\n var customer = customerService.Create\u0028customerOptions\u0029;","\n var ephemeralKeyOptions = new EphemeralKeyCreateOptions\n {\n Customer = customer.Id,\n StripeVersion = \"","2024-11-20.acacia","\",\n };\n var ephemeralKeyService = new EphemeralKeyService\u0028\u0029;\n var ephemeralKey = ephemeralKeyService.Create\u0028ephemeralKeyOptions\u0029;","\n","\n var paymentIntentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"eur\",\n Customer = customer.Id,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions\n {\n Enabled = true,\n },","\n };","\n var paymentIntentService = new PaymentIntentService\u0028\u0029;\n PaymentIntent paymentIntent = paymentIntentService.Create\u0028paymentIntentOptions\u0029;","\n\n return new PaymentSheetCreateResponse\n {","\n PaymentIntent = paymentIntent.ClientSecret,","\n EphemeralKey = ephemeralKey.Secret,","\n\n Customer = customer.Id,\n PublishableKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n };\n}\n"]}]}}],"codeTabGroupID":"codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b"},"children":[]}]}]}},{"id":"pm-manual","title":"Listing payment methods manually","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"pm-manual","title":"Listing payment methods manually"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Test a running implementation of this endpoint on ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fglitch.com\u002Fedit\u002F#\u0021\u002Fremix\u002Fstripe-mobile-payment-sheet-automatic"},"children":["Glitch"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-server-endpoint-code.md","variables":{"setup_intent":false,"automatic_payment_methods":false,"cvc_recollection":false,"customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"curl","title":"curl","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"curl","title":"curl"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Create a Customer \u0028use an existing Customer ID if this is a returning customer\u0029\n","curl https:\u002F\u002Fapi.stripe.com","\u002Fv1\u002Fcustomers"," \\\n"," -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},":"," \\\n"," ","-X"," ","\"","POST","\"","\n","\n# Create an Ephemeral Key for the Customer\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fephemeral_keys \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\","\n","\n# Create a PaymentIntent\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\\n -d \"amount\"=1099 \\\n -d \"currency\"=\"eur\" \\","\n -d \"payment_method_types[]\"=\"bancontact\" \\\n -d \"payment_method_types[]\"=\"card\" \\\n -d \"payment_method_types[]\"=\"ideal\" \\\n -d \"payment_method_types[]\"=\"klarna\" \\\n -d \"payment_method_types[]\"=\"sepa_debit\" \\","\n"]}]}},{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n","\n\npost '\u002Fpayment-sheet' do\n # Use an existing Customer ID if this is a returning customer\n customer = Stripe::Customer.create","\n ephemeralKey = Stripe::EphemeralKey.create\u0028{\n customer: customer['id'],\n }, {stripe_version: '","2024-11-20.acacia","'}\u0029","\n paymentIntent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer['id'],","\n payment_method_types: ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n }\u0029","\n {\n paymentIntent: paymentIntent['client_secret'],","\n ephemeralKey: ephemeralKey['secret'],","\n customer: customer['id'],\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }.to_json","\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n","\n\n@app.route\u0028'\u002Fpayment-sheet', methods=['POST']\u0029\ndef payment_sheet\u0028\u0029:\n # Use an existing Customer ID if this is a returning customer\n customer = stripe.Customer.create\u0028\u0029","\n ephemeralKey = stripe.EphemeralKey.create\u0028\n customer=customer['id'],\n stripe_version='","2024-11-20.acacia","',\n \u0029","\n","\n paymentIntent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='eur',\n customer=customer['id'],","\n payment_method_types=[\"bancontact\", \"card\", \"ideal\", \"klarna\", \"sepa_debit\"],","\n \u0029\n return jsonify\u0028paymentIntent=paymentIntent.client_secret,","\n ephemeralKey=ephemeralKey.secret,","\n customer=customer.id,\n publishableKey='",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029","\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"cart-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\nrequire 'vendor\u002Fautoload.php';\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\n\u002F\u002F Use an existing Customer ID if this is a returning customer.\n\u0024customer = \u0024stripe-\u003Ecustomers-\u003Ecreate\u0028\u0029;","\n\u0024ephemeralKey = \u0024stripe-\u003EephemeralKeys-\u003Ecreate\u0028[\n 'customer' =\u003E \u0024customer-\u003Eid,\n], [\n 'stripe_version' =\u003E '","2024-11-20.acacia","',\n]\u0029;","\n","\n\u0024paymentIntent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'eur',\n 'customer' =\u003E \u0024customer-\u003Eid,","\n 'payment_method_types' =\u003E ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n]\u0029;\n\necho json_encode\u0028\n [\n 'paymentIntent' =\u003E \u0024paymentIntent-\u003Eclient_secret,","\n 'ephemeralKey' =\u003E \u0024ephemeralKey-\u003Esecret,","\n 'customer' =\u003E \u0024customer-\u003Eid,\n 'publishableKey' =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n ]\n\u0029;\nhttp_response_code\u0028200\u0029;","\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F This example sets up an endpoint using the Spark framework.\n\npost\u0028\"\u002Fpayment-sheet\", \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n CustomerCreateParams customerParams = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n Customer customer = Customer.create\u0028customerParams\u0029;","\n EphemeralKeyCreateParams ephemeralKeyParams =\n EphemeralKeyCreateParams.builder\u0028\u0029\n .setStripeVersion\u0028\"","2024-11-20.acacia","\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029\n .build\u0028\u0029;\n\n EphemeralKey ephemeralKey = EphemeralKey.create\u0028ephemeralKeyParams\u0029;","\n","\n List\u003CString\u003E paymentMethodTypes = new ArrayList\u003CString\u003E\u0028\u0029;","\n paymentMethodTypes.add\u0028\"bancontact\"\u0029;\n paymentMethodTypes.add\u0028\"card\"\u0029;\n paymentMethodTypes.add\u0028\"ideal\"\u0029;\n paymentMethodTypes.add\u0028\"klarna\"\u0029;\n paymentMethodTypes.add\u0028\"sepa_debit\"\u0029;","\n\n PaymentIntentCreateParams paymentIntentParams =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"eur\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029","\n .addAllPaymentMethodType\u0028paymentMethodTypes\u0029","\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028paymentIntentParams","\u0029;","\n\n Map\u003CString, String\u003E responseData = new HashMap\u0028\u0029;","\n responseData.put\u0028\"paymentIntent\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"ephemeralKey\", ephemeralKey.getSecret\u0028\u0029\u0029;\n responseData.put\u0028\"customer\", customer.getId\u0028\u0029\u0029;\n responseData.put\u0028\"publishableKey\", \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\u0029;\n\n return gson.toJson\u0028responseData\u0029;\n}\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\napp.post\u0028'\u002Fpayment-sheet', async \u0028req, res\u0029 =\u003E {\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n const customer = await stripe.customers.create\u0028\u0029;","\n const ephemeralKey = await stripe.ephemeralKeys.create\u0028\n {customer: customer.id},\n {apiVersion: '","2024-11-20.acacia","'}\n \u0029;","\n const paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer.id,","\n payment_method_types: ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n }\u0029;\n\n res.json\u0028{\n paymentIntent: paymentIntent.client_secret,","\n ephemeralKey: ephemeralKey.secret,","\n customer: customer.id,\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }\u0029;","\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"server.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\nfunc handlePaymentSheet\u0028w http.ResponseWriter, r *http.Request\u0029 {\n if r.Method \u0021= \"POST\" {\n http.Error\u0028w, http.StatusText\u0028http.StatusMethodNotAllowed\u0029, http.StatusMethodNotAllowed\u0029\n return\n }\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n cparams := \u0026stripe.CustomerParams{}\n c, _ := customer.New\u0028cparams\u0029\n","\n ekparams := \u0026stripe.EphemeralKeyParams{\n Customer: stripe.String\u0028c.ID\u0029,\n StripeVersion: stripe.String\u0028\"","2024-11-20.acacia","\"\u0029,\n }\n ek, _ := ephemeralKey.New\u0028ekparams\u0029","\n","\n piparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyEUR\u0029\u0029,\n Customer: stripe.String\u0028c.ID\u0029,","\n PaymentMethodTypes: []*string{\n stripe.String\u0028\"bancontact\"\u0029,\n stripe.String\u0028\"card\"\u0029,\n stripe.String\u0028\"ideal\"\u0029,\n stripe.String\u0028\"klarna\"\u0029,\n stripe.String\u0028\"sepa_debit\"\u0029,\n },","\n }","\n pi, _ := paymentintent.New\u0028piparams\u0029","\n\n writeJSON\u0028w, struct {","\n PaymentIntent string \u0060json:\"paymentIntent\"\u0060","\n EphemeralKey string \u0060json:\"ephemeralKey\"\u0060","\n Customer string \u0060json:\"customer\"\u0060\n PublishableKey string \u0060json:\"publishableKey\"\u0060\n }{","\n PaymentIntent: pi.ClientSecret,","\n EphemeralKey: ek.Secret,","\n Customer: c.ID,\n PublishableKey: \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\n[HttpPost\u0028\"payment-sheet\"\u0029]\npublic ActionResult\u003CPaymentSheetCreateResponse\u003E CreatePaymentSheet\u0028[FromBody] CreatePaymentSheetRequest req\u0029\n{\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n var customerOptions = new CustomerCreateOptions\u0028\u0029;\n var customerService = new CustomerService\u0028\u0029;\n var customer = customerService.Create\u0028customerOptions\u0029;","\n var ephemeralKeyOptions = new EphemeralKeyCreateOptions\n {\n Customer = customer.Id,\n StripeVersion = \"","2024-11-20.acacia","\",\n };\n var ephemeralKeyService = new EphemeralKeyService\u0028\u0029;\n var ephemeralKey = ephemeralKeyService.Create\u0028ephemeralKeyOptions\u0029;","\n","\n var paymentIntentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"eur\",\n Customer = customer.Id,","\n PaymentMethodTypes = new List\u003Cstring\u003E\n {\n \"bancontact\",\n \"card\",\n \"ideal\",\n \"klarna\",\n \"sepa_debit\",\n },","\n };","\n var paymentIntentService = new PaymentIntentService\u0028\u0029;\n PaymentIntent paymentIntent = paymentIntentService.Create\u0028paymentIntentOptions\u0029;","\n\n return new PaymentSheetCreateResponse\n {","\n PaymentIntent = paymentIntent.ClientSecret,","\n EphemeralKey = ephemeralKey.Secret,","\n\n Customer = customer.Id,\n PublishableKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n };\n}\n"]}]}}],"codeTabGroupID":"codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"caution"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Each payment method needs to support the currency passed in the PaymentIntent and your business needs to be based in one of the countries each payment method supports. See the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fintegration-options"},"children":["Payment method integration options"]}," page for more details about what’s supported."]}]}]}}]},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-collect-payment-details","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Collect payment details","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fintegrate-payment-sheet-ios-apms.md","variables":{"payment_or_setup":"payment","Payment_or_Setup":"Payment","stripe_account":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fintegrate-payment-sheet-ios-apms-ephemeral-key.md","variables":{"payment_or_setup":"payment","Payment_or_Setup":"Payment","stripe_account":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To display the mobile Payment Element on your checkout screen, make sure you:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Display the products the customer is purchasing along with the total amount"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Felements\u002Faddress-element?platform=ios"},"children":["Address Element"]}," to collect any required shipping information from the customer"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Add a checkout button to display Stripe’s UI"]}]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"pref":"uikit-swiftui","selector":"tabs","items":[{"id":"uikit","title":"UIKit","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"uikit","title":"UIKit"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In your app’s checkout screen, fetch the ","Payment","Intent client secret, Ephemeral Key secret, Customer ID, and publishable key from the endpoint you created in the previous step. Set your publishable key using ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"StripeAPI.shared"},"children":[]}," and initialize ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet.html"},"children":["PaymentSheet"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"iOS \u0028Swift\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":30,"end":38}],"add":[],"remove":[]}},"children":["import UIKit\nimport StripePaymentSheet\n\nclass CheckoutViewController: UIViewController {\n @IBOutlet weak var checkoutButton: UIButton\u0021\n var paymentSheet: PaymentSheet?\n let backendCheckoutUrl = URL\u0028string: \"Your backend endpoint\u002Fpayment-sheet\"\u0029\u0021 \u002F\u002F Your backend endpoint\n\n override func viewDidLoad\u0028\u0029 {\n super.viewDidLoad\u0028\u0029\n\n checkoutButton.addTarget\u0028self, action: #selector\u0028didTapCheckoutButton\u0029, for: .touchUpInside\u0029\n checkoutButton.isEnabled = false\n\n \u002F\u002F MARK: Fetch the ","Payment","Intent client secret, Ephemeral Key secret, Customer ID, and publishable key\n var request = URLRequest\u0028url: backendCheckoutUrl\u0029\n request.httpMethod = \"POST\"\n let task = URLSession.shared.dataTask\u0028with: request, completionHandler: { [weak self] \u0028data, response, error\u0029 in\n guard let data = data,\n let json = try? JSONSerialization.jsonObject\u0028with: data, options: []\u0029 as? [String : Any],\n let customerId = json[\"customer\"] as? String,\n let customerEphemeralKeySecret = json[\"ephemeralKey\"] as? String,\n let ","payment","IntentClientSecret = json[\"","payment","Intent\"] as? String,\n let publishableKey = json[\"publishableKey\"] as? String,\n let self = self else {\n \u002F\u002F Handle error\n return\n }\n",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n STPAPIClient.shared.publishableKey = publishableKey\n \u002F\u002F MARK: Create a PaymentSheet instance\n var configuration = PaymentSheet.Configuration\u0028\u0029\n configuration.merchantDisplayName = \"Example, Inc.\"\n configuration.customer = .init\u0028id: customerId, ephemeralKeySecret: customerEphemeralKeySecret\u0029\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles\n \u002F\u002F delayed notification payment methods like US bank accounts.\n configuration.allowsDelayedPaymentMethods = true\n self.paymentSheet = PaymentSheet\u0028paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration\u0029"},"children":["\n STPAPIClient.shared.publishableKey = publishableKey","\n \u002F\u002F MARK: Create a PaymentSheet instance\n var configuration = PaymentSheet.Configuration\u0028\u0029\n configuration.merchantDisplayName = \"Example, Inc.\"\n configuration.customer = .init\u0028id: customerId, ephemeralKeySecret: customerEphemeralKeySecret\u0029\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles\n \u002F\u002F delayed notification payment methods like US bank accounts.\n configuration.allowsDelayedPaymentMethods = true\n self.paymentSheet = PaymentSheet\u0028","payment","IntentClientSecret: ","payment","IntentClientSecret, configuration: configuration\u0029"]},"\n\n DispatchQueue.main.async {\n self.checkoutButton.isEnabled = true\n }\n }\u0029\n task.resume\u0028\u0029\n }\n\n}\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When the customer taps the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Checkout"]}," button, call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"present"},"children":[]}," to present the PaymentSheet. After the customer completes the payment, Stripe dismisses the PaymentSheet and calls the completion block with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FEnums\u002FPaymentSheetResult.html"},"children":["PaymentSheetResult"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"iOS \u0028Swift\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["@objc\nfunc didTapCheckoutButton\u0028\u0029 {\n \u002F\u002F MARK: Start the checkout process\n paymentSheet?.present\u0028from: self\u0029 { paymentResult in\n \u002F\u002F MARK: Handle the payment result\n switch paymentResult {\n case .completed:\n print\u0028\"Your order is confirmed\"\u0029\n case .canceled:\n print\u0028\"Canceled\u0021\"\u0029\n case .failed\u0028let error\u0029:\n print\u0028\"Payment failed: \\\u0028error\u0029\"\u0029\n }\n }\n}\n"]}]}]}},{"id":"swiftui","title":"SwiftUI","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"swiftui","title":"SwiftUI"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create an ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"ObservableObject"},"children":[]}," model for your checkout screen. This model publishes a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet.html"},"children":["PaymentSheet"]}," and a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FEnums\u002FPaymentSheetResult.html"},"children":["PaymentSheetResult"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import StripePaymentSheet\nimport SwiftUI\n\nclass MyBackendModel: ObservableObject {\n let backendCheckoutUrl = URL\u0028string: \"Your backend endpoint\u002Fpayment-sheet\"\u0029\u0021 \u002F\u002F Your backend endpoint\n @Published var paymentSheet: PaymentSheet?\n @Published var paymentResult: PaymentSheetResult?\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In your app’s checkout screen, fetch the ","Payment","Intent client secret, Ephemeral Key secret, Customer ID, and publishable key from the endpoint you created in the previous step. Use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"StripeAPI.shared"},"children":[]}," to set your publishable key and initialize the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet.html"},"children":["PaymentSheet"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":9,"end":39},{"start":42,"end":54}],"remove":[]}},"children":["import StripePaymentSheet\nimport SwiftUI\n\nclass MyBackendModel: ObservableObject {\n let backendCheckoutUrl = URL\u0028string: \"Your backend endpoint\u002Fpayment-sheet\"\u0029\u0021 \u002F\u002F Your backend endpoint\n @Published var paymentSheet: PaymentSheet?\n @Published var paymentResult: PaymentSheetResult?\n",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n func preparePaymentSheet\u0028\u0029 {\n \u002F\u002F MARK: Fetch the PaymentIntent and Customer information from the backend\n var request = URLRequest\u0028url: backendCheckoutUrl\u0029\n request.httpMethod = \"POST\"\n let task = URLSession.shared.dataTask\u0028with: request, completionHandler: { [weak self] \u0028data, response, error\u0029 in\n guard let data = data,\n let json = try? JSONSerialization.jsonObject\u0028with: data, options: []\u0029 as? [String : Any],\n let customerId = json[\"customer\"] as? String,\n let customerEphemeralKeySecret = json[\"ephemeralKey\"] as? String,\n let paymentIntentClientSecret = json[\"paymentIntent\"] as? String,\n let publishableKey = json[\"publishableKey\"] as? String,\n let self = self else {\n \u002F\u002F Handle error\n return\n }\n\n STPAPIClient.shared.publishableKey = publishableKey\n \u002F\u002F MARK: Create a PaymentSheet instance\n var configuration = PaymentSheet.Configuration\u0028\u0029\n configuration.merchantDisplayName = \"Example, Inc.\"\n configuration.customer = .init\u0028id: customerId, ephemeralKeySecret: customerEphemeralKeySecret\u0029\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles\n \u002F\u002F delayed notification payment methods like US bank accounts.\n configuration.allowsDelayedPaymentMethods = true\n\n DispatchQueue.main.async {\n self.paymentSheet = PaymentSheet\u0028paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration\u0029\n }\n }\u0029\n task.resume\u0028\u0029\n }"},"children":["\n func preparePaymentSheet\u0028\u0029 {\n \u002F\u002F MARK: Fetch the ","Payment","Intent and Customer information from the backend\n var request = URLRequest\u0028url: backendCheckoutUrl\u0029\n request.httpMethod = \"POST\"\n let task = URLSession.shared.dataTask\u0028with: request, completionHandler: { [weak self] \u0028data, response, error\u0029 in\n guard let data = data,\n let json = try? JSONSerialization.jsonObject\u0028with: data, options: []\u0029 as? [String : Any],\n let customerId = json[\"customer\"] as? String,\n let customerEphemeralKeySecret = json[\"ephemeralKey\"] as? String,\n let ","payment","IntentClientSecret = json[\"","payment","Intent\"] as? String,\n let publishableKey = json[\"publishableKey\"] as? String,\n let self = self else {\n \u002F\u002F Handle error\n return\n }\n\n STPAPIClient.shared.publishableKey = publishableKey","\n \u002F\u002F MARK: Create a PaymentSheet instance\n var configuration = PaymentSheet.Configuration\u0028\u0029\n configuration.merchantDisplayName = \"Example, Inc.\"\n configuration.customer = .init\u0028id: customerId, ephemeralKeySecret: customerEphemeralKeySecret\u0029\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles\n \u002F\u002F delayed notification payment methods like US bank accounts.\n configuration.allowsDelayedPaymentMethods = true\n\n DispatchQueue.main.async {\n self.paymentSheet = PaymentSheet\u0028","payment","IntentClientSecret: ","payment","IntentClientSecret, configuration: configuration\u0029\n }\n }\u0029\n task.resume\u0028\u0029\n }"]},"\n}\n",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\nstruct CheckoutView: View {\n @ObservedObject var model = MyBackendModel\u0028\u0029\n\n var body: some View {\n VStack {\n if model.paymentSheet \u0021= nil {\n Text\u0028\"Ready to pay.\"\u0029\n } else {\n Text\u0028\"Loading…\"\u0029\n }\n }.onAppear { model.preparePaymentSheet\u0028\u0029 }\n }\n}"},"children":["\nstruct CheckoutView: View {\n @ObservedObject var model = MyBackendModel\u0028\u0029\n\n var body: some View {\n VStack {\n if model.paymentSheet \u0021= nil {\n Text\u0028\"Ready to pay.\"\u0029\n } else {\n Text\u0028\"Loading…\"\u0029\n }\n }.onAppear { model.preparePaymentSheet\u0028\u0029 }\n }\n}"]},"\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Add a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FPaymentButton.html"},"children":["PaymentSheet.PaymentButton"]}," to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"View"},"children":[]},". This behaves similarly to a SwiftUI ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Button"},"children":[]},", which allows you to customize it by adding a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"View"},"children":[]},". When you click the button, it displays the PaymentSheet. After you complete the payment, Stripe dismisses the PaymentSheet and calls the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"onCompletion"},"children":[]}," handler with a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FEnums\u002FPaymentSheetResult.html"},"children":["PaymentSheetResult"]}," object."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":41,"end":43},{"start":51,"end":57},{"start":61,"end":70}],"remove":[]}},"children":["import StripePaymentSheet\nimport SwiftUI\n\nclass MyBackendModel: ObservableObject {\n let backendCheckoutUrl = URL\u0028string: \"Your backend endpoint\u002Fpayment-sheet\"\u0029\u0021 \u002F\u002F Your backend endpoint\n @Published var paymentSheet: PaymentSheet?\n @Published var paymentResult: PaymentSheetResult?\n\n func preparePaymentSheet\u0028\u0029 {\n \u002F\u002F MARK: Fetch the ","Payment","Intent and Customer information from the backend\n var request = URLRequest\u0028url: backendCheckoutUrl\u0029\n request.httpMethod = \"POST\"\n let task = URLSession.shared.dataTask\u0028with: request, completionHandler: { [weak self] \u0028data, response, error\u0029 in\n guard let data = data,\n let json = try? JSONSerialization.jsonObject\u0028with: data, options: []\u0029 as? [String : Any],\n let customerId = json[\"customer\"] as? String,\n let customerEphemeralKeySecret = json[\"ephemeralKey\"] as? String,\n let ","payment","IntentClientSecret = json[\"","payment","Intent\"] as? String,\n let publishableKey = json[\"publishableKey\"] as? String,\n let self = self else {\n \u002F\u002F Handle error\n return\n }\n\n STPAPIClient.shared.publishableKey = publishableKey","\n \u002F\u002F MARK: Create a PaymentSheet instance\n var configuration = PaymentSheet.Configuration\u0028\u0029\n configuration.merchantDisplayName = \"Example, Inc.\"\n configuration.customer = .init\u0028id: customerId, ephemeralKeySecret: customerEphemeralKeySecret\u0029\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business can handle payment methods\n \u002F\u002F that complete payment after a delay, like SEPA Debit and Sofort.\n configuration.allowsDelayedPaymentMethods = true\n\n DispatchQueue.main.async {\n self.paymentSheet = PaymentSheet\u0028","payment","IntentClientSecret: ","payment","IntentClientSecret, configuration: configuration\u0029\n }\n }\u0029\n task.resume\u0028\u0029\n }\n",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n func onPaymentCompletion\u0028result: PaymentSheetResult\u0029 {\n self.paymentResult = result\n }"},"children":["\n func onPaymentCompletion\u0028result: PaymentSheetResult\u0029 {\n self.paymentResult = result\n }"]},"\n}\n\nstruct CheckoutView: View {\n @ObservedObject var model = MyBackendModel\u0028\u0029\n\n var body: some View {\n VStack {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n if let paymentSheet = model.paymentSheet {\n PaymentSheet.PaymentButton\u0028\n paymentSheet: paymentSheet,\n onCompletion: model.onPaymentCompletion\n \u0029 {\n Text\u0028\"Buy\"\u0029\n }"},"children":["\n if let paymentSheet = model.paymentSheet {\n PaymentSheet.PaymentButton\u0028\n paymentSheet: paymentSheet,\n onCompletion: model.onPaymentCompletion\n \u0029 {\n Text\u0028\"Buy\"\u0029\n }"]},"\n } else {\n Text\u0028\"Loading…\"\u0029\n }",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n if let result = model.paymentResult {\n switch result {\n case .completed:\n Text\u0028\"Payment complete\"\u0029\n case .failed\u0028let error\u0029:\n Text\u0028\"Payment failed: \\\u0028error.localizedDescription\u0029\"\u0029\n case .canceled:\n Text\u0028\"Payment canceled.\"\u0029\n }\n }"},"children":["\n if let result = model.paymentResult {\n switch result {\n case .completed:\n Text\u0028\"Payment complete\"\u0029\n case .failed\u0028let error\u0029:\n Text\u0028\"Payment failed: \\\u0028error.localizedDescription\u0029\"\u0029\n case .canceled:\n Text\u0028\"Payment canceled.\"\u0029\n }\n }"]},"\n }.onAppear { model.preparePaymentSheet\u0028\u0029 }\n }\n}\n"]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-post-confirm.md","variables":{"platform":"ios"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheetResult"},"children":[]}," is ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":".completed"},"children":[]},", inform the user \u0028for example, by displaying an order confirmation screen\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Setting ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allowsDelayedPaymentMethods"},"children":[]}," to true allows ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment methods like US bank accounts. For these payment methods, the final payment status isn’t known when the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," completes, and instead succeeds or fails later. If you support these types of payment methods, inform the customer their order is confirmed and only fulfill their order \u0028for example, ship their product\u0029 when the payment is successful."]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-set-up-return-url","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Set up a return URL","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fios-return-url.md","variables":{"paymentSheet":true,"noteAboutAdditionalParameters":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The customer might navigate away from your app to authenticate \u0028for example, in Safari or their banking app\u0029. To allow them to automatically return to your app after authenticating, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fxcode\u002Fdefining-a-custom-url-scheme-for-your-app"},"children":["configure a custom URL scheme"]}," and set up your app delegate to forward the URL to the SDK. Stripe doesn’t support ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fxcode\u002Fallowing-apps-and-websites-to-link-to-your-content"},"children":["universal links"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"scene-delegate","title":"SceneDelegate","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"SceneDelegate"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-ios","items":[{"id":"swift","title":"Swift","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"Swift"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","filename":"SceneDelegate.swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F This method handles opening custom URL schemes \u0028for example, \"your-app:\u002F\u002Fstripe-redirect\"\u0029\nfunc scene\u0028_ scene: UIScene, openURLContexts URLContexts: Set\u003CUIOpenURLContext\u003E\u0029 {\n guard let url = URLContexts.first?.url else {\n return\n }\n let stripeHandled = StripeAPI.handleURLCallback\u0028with: url\u0029\n if \u0028\u0021stripeHandled\u0029 {\n \u002F\u002F This was not a Stripe url – handle the URL normally as you would\n }\n}\n\n"]}]}}],"codeTabGroupID":"codetab_15641d9fd456e671d8e96977cac2e11903b911bd"},"children":[]}]}},{"id":"app-delegate","title":"AppDelegate","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"AppDelegate"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-ios","items":[{"id":"swift","title":"Swift","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"Swift"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","filename":"AppDelegate.swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F This method handles opening custom URL schemes \u0028for example, \"your-app:\u002F\u002Fstripe-redirect\"\u0029\nfunc application\u0028_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]\u0029 -\u003E Bool {\n let stripeHandled = StripeAPI.handleURLCallback\u0028with: url\u0029\n if \u0028stripeHandled\u0029 {\n return true\n } else {\n \u002F\u002F This was not a Stripe url – handle the URL normally as you would\n }\n return false\n}\n"]}]}}],"codeTabGroupID":"codetab_b88200f6fb8f740ea5ac3e67cbc190c2910c9c1c"},"children":[]}]}},{"id":"swift-ui","title":"SwiftUI","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"title":"SwiftUI"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-ios","items":[{"id":"swift","title":"Swift","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"Swift"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","filename":"App.swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[{"start":6,"end":11}],"add":[],"remove":[]}},"children":["\n@main\nstruct MyApp: App {\n var body: some Scene {\n WindowGroup {\n Text\u0028\"Hello, world\u0021\"\u0029",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"default","value":"\n .onOpenURL { incomingURL in\n let stripeHandled = StripeAPI.handleURLCallback\u0028with: incomingURL\u0029\n if \u0028\u0021stripeHandled\u0029 {\n \u002F\u002F This was not a Stripe url – handle the URL normally as you would\n }\n }"},"children":["\n .onOpenURL { incomingURL in\n let stripeHandled = StripeAPI.handleURLCallback\u0028with: incomingURL\u0029\n if \u0028\u0021stripeHandled\u0029 {\n \u002F\u002F This was not a Stripe url – handle the URL normally as you would\n }\n }"]},"\n }\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_d91d3f8ffa19bb3abba489846a3fdfd791cf89a0"},"children":[]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Additionally, set the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FConfiguration.html#\u002Fs:6Stripe12PaymentSheetC13ConfigurationV9returnURLSSSgvp"},"children":["returnURL"]}," on your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FConfiguration.html"},"children":["PaymentSheet.Configuration"]}," object to the URL for your app."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["var configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.returnURL = \"your-app:\u002F\u002Fstripe-redirect\"\n"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-post-payment","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Handle post-payment events","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fhandle-post-payment-events.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe sends a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes#event_types-payment_intent.succeeded"},"children":["payment_intent.succeeded"]}," event when the payment completes. Use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fwebhooks"},"children":["Dashboard webhook tool"]}," or follow the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fwebhooks\u002Fquickstart"},"children":["webhook guide"]}," to receive these events and run actions, such as sending an order confirmation email to your customer, logging the sale in a database, or starting a shipping workflow."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events is what enables you to accept ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Fpayments\u002Fpayment-methods-guide"},"children":["different types of payment methods"]}," with a single integration."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In addition to handling the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.succeeded"},"children":[]}," event, we recommend handling these other events when collecting payments with the Payment Element:"]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Event"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Description"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Action"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.succeeded"},"children":["payment_intent.succeeded"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer successfully completes a payment."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Send the customer an order confirmation and ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"fulfillment"},"children":["fulfill"]}," their order."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.processing"},"children":["payment_intent.processing"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer successfully initiates a payment, but the payment has yet to complete. This event is most commonly sent when the customer initiates a bank debit. It’s followed by either a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.succeeded"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.payment_failed"},"children":[]}," event in the future."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Send the customer an order confirmation that indicates their payment is pending. For digital goods, you might want to fulfill the order before waiting for payment to complete."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.payment_failed"},"children":["payment_intent.payment_failed"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer attempts a payment, but the payment fails."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["If a payment transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_failed"},"children":[]},", offer the customer another attempt to pay."]}]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-test-the-integration","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Test the integration","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Ftesting-auto-pm.md","variables":{"mobile":true}},"children":[{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"test-cards","title":"Cards","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-cards","title":"Cards"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Card number"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4242424242424242","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment succeeds and doesn’t require authentication."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000002500003155","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment requires ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"sca"},"children":["authentication"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000000000009995","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card is declined with a decline code like ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"insufficient_funds"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"6205500000000000004","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The UnionPay card has a variable length of 13-19 digits."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]}]}]}]}},{"id":"test-bank-redirects","title":"Bank redirects","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-redirects","title":"Bank redirects"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Bancontact, iDEAL"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and immediate notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and delayed notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK payments fail in a variety of ways—immediate failures \u0028for example, the code is expired or invalid\u0029, delayed errors \u0028the bank declines\u0029 or timeouts \u0028the customer didn’t respond in time\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Use email patterns to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fblik\u002Faccept-a-payment#simulate-failures"},"children":["simulate the different failures."]}]}]}]}]}]}},{"id":"test-bank-debits","title":"Bank debits","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-debits","title":"Bank debits"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with SEPA Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT321904300235473204"},"children":[]},". The confirmed PaymentIntent initially transitions to processing, then transitions to the succeeded status three minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment intent status transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_payment_method"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT861904300235473202"},"children":[]},"."]}]}]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["Testing"]}," for additional information to test your integration."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-link","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable Link","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-link.md","variables":{"platform":"ios"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Enable Link in your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Payment Method settings"]}," to allow your customers to securely save and reuse their payment information using Link’s one-click express checkout button."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Pass your customer’s email to the Mobile Payment Element","id":"pass-your-customer’s-email-to-the-mobile-payment-element"},"children":["Pass your customer’s email to the Mobile Payment Element"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Link authenticates a customer using their email address. Stripe recommends prefilling as much information as possible to streamline the checkout process."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To prefill the customer’s name, email address, and phone number, supply ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"defaultBillingDetails"},"children":[]}," with your customer information after initializing ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.Configuration"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["var configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.defaultBillingDetails.name = \"Jenny Rosen\"\nconfiguration.defaultBillingDetails.email = \"jenny.rosen@example.com\"\nconfiguration.defaultBillingDetails.phone = \"888-888-8888\"\n"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-apple-pay","beta":false,"preview":false,"collapsable":true,"numbered":false,"optional":true,"title":"Enable Apple Pay","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If your checkout screen has a dedicated ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Apple Pay button"]},", follow the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapple-pay#present-payment-sheet"},"children":["Apple Pay guide"]}," and use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"ApplePayContext"},"children":[]}," to collect payment from your Apple Pay button. You can use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," to handle other payment method types."]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-apple-pay.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Register for an Apple Merchant ID","id":"register-for-an-apple-merchant-id"},"children":["Register for an Apple Merchant ID"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"apple-pay\u002Fpartials\u002Fsdk-step-1.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Obtain an Apple Merchant ID by ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Faccount\u002Fresources\u002Fidentifiers\u002Fadd\u002Fmerchant"},"children":["registering for a new identifier"]}," on the Apple Developer website."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Fill out the form with a description and identifier. Your description is for your own records and you can modify it in the future. Stripe recommends using the name of your app as the identifier \u0028for example, ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"merchant.com.{{YOUR_APP_NAME}}"},"children":[]},"\u0029."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Create a new Apple Pay certificate","id":"create-a-new-apple-pay-certificate"},"children":["Create a new Apple Pay certificate"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"apple-pay\u002Fpartials\u002Fsdk-step-2.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create a certificate for your app to encrypt payment data."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Go to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fios_certificates"},"children":["iOS Certificate Settings"]}," in the Dashboard, click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Add new application"]},", and follow the guide."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Download a Certificate Signing Request \u0028CSR\u0029 file to get a secure certificate from Apple that allows you to use Apple Pay."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["One CSR file must be used to issue exactly one certificate. If you switch your Apple Merchant ID, you must go to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fios_certificates"},"children":["iOS Certificate Settings"]}," in the Dashboard to obtain a new CSR and certificate."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Integrate with Xcode","id":"integrate-with-xcode"},"children":["Integrate with Xcode"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"apple-pay\u002Fpartials\u002Fsdk-step-3.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Add the Apple Pay capability to your app. In Xcode, open your project settings, click the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Signing \u0026 Capabilities"]}," tab, and add the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Apple Pay"]}," capability. You might be prompted to log in to your developer account at this point. Select the merchant ID you created earlier, and your app is ready to accept Apple Pay."]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fxcode.a701d4c1922d19985e9c614a6f105bf1.png","ignoreAltTextRequirement":true},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Enable the Apple Pay capability in Xcode"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Add Apple Pay","id":"add-apple-pay"},"children":["Add Apple Pay"]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"add-apple-pay-default","title":"One-time payment","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"add-apple-pay-default","title":"One-time payment"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To add Apple Pay to PaymentSheet, set ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FConfiguration.html#\u002Fs:6Stripe12PaymentSheetC13ConfigurationV8applePayAC05ApplefD0VSgvp"},"children":["applePay"]}," after initializing ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.Configuration"},"children":[]}," with your Apple merchant ID and the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Faccount"},"children":["country code of your business"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"iOS \u0028Swift\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["var configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.applePay = .init\u0028\n merchantId: \"merchant.com.your_app_name\",\n merchantCountryCode: \"US\"\n\u0029\n"]}]}]}},{"id":"add-apple-pay-recurring","title":"Recurring payments","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"add-apple-pay-recurring","title":"Recurring payments"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To add Apple Pay to PaymentSheet, set ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FConfiguration.html#\u002Fs:6Stripe12PaymentSheetC13ConfigurationV8applePayAC05ApplefD0VSgvp"},"children":["applePay"]}," after initializing ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.Configuration"},"children":[]}," with your Apple merchant ID and the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Faccount"},"children":["country code of your business"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In accordance with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdesign\u002Fhuman-interface-guidelines\u002Fapple-pay#Supporting-subscriptions"},"children":["Apple’s guidelines"]}," for recurring payments, you must also set additional attributes on the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PKPaymentRequest"},"children":[]},". Add a handler in ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FApplePayConfiguration\u002FHandlers.html#\u002Fs:18StripePaymentSheet0bC0C21ApplePayConfigurationV8HandlersV21paymentRequestHandlerSo09PKPaymentI0CAJcSgvp"},"children":["ApplePayConfiguration.paymentRequestHandlers"]}," to configure the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fpasskit\u002Fpkpaymentrequest\u002F1619231-paymentsummaryitems"},"children":["PKPaymentRequest.paymentSummaryItems"]}," with the amount you intend to charge \u0028for example, “\u00249.95 a month”\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can also adopt ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fapple-pay\u002Fmerchant-tokens\u002F"},"children":["merchant tokens"]}," by setting the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"recurringPaymentRequest"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"automaticReloadPaymentRequest"},"children":[]}," properties on the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PKPaymentRequest"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To learn more about how to use recurring payments with Apple Pay, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fpasskit\u002Fpkpaymentrequest"},"children":["Apple’s PassKit documentation"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"iOS \u0028Swift\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["let customHandlers = PaymentSheet.ApplePayConfiguration.Handlers\u0028\n paymentRequestHandler: { request in\n \u002F\u002F PKRecurringPaymentSummaryItem is available on iOS 15 or later\n if #available\u0028iOS 15.0, *\u0029 {\n let billing = PKRecurringPaymentSummaryItem\u0028label: \"My Subscription\", amount: NSDecimalNumber\u0028string: \"59.99\"\u0029\u0029\n\n \u002F\u002F Payment starts today\n billing.startDate = Date\u0028\u0029\n\n \u002F\u002F Payment ends in one year\n billing.endDate = Date\u0028\u0029.addingTimeInterval\u002860 * 60 * 24 * 365\u0029\n\n \u002F\u002F Pay once a month.\n billing.intervalUnit = .month\n billing.intervalCount = 1\n\n \u002F\u002F recurringPaymentRequest is only available on iOS 16 or later\n if #available\u0028iOS 16.0, *\u0029 {\n request.recurringPaymentRequest = PKRecurringPaymentRequest\u0028paymentDescription: \"Recurring\",\n regularBilling: billing,\n managementURL: URL\u0028string: \"https:\u002F\u002Fmy-backend.example.com\u002Fcustomer-portal\"\u0029\u0021\u0029\n request.recurringPaymentRequest?.billingAgreement = \"You'll be billed \u002459.99 every month for the next 12 months. To cancel at any time, go to Account and click 'Cancel Membership.'\"\n }\n request.paymentSummaryItems = [billing]\n request.currencyCode = \"USD\"\n } else {\n \u002F\u002F On older iOS versions, set alternative summary items.\n request.paymentSummaryItems = [PKPaymentSummaryItem\u0028label: \"Monthly plan starting July 1, 2022\", amount: NSDecimalNumber\u0028string: \"59.99\"\u0029, type: .final\u0029]\n }\n return request\n }\n\u0029\nvar configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.applePay = .init\u0028merchantId: \"merchant.com.your_app_name\",\n merchantCountryCode: \"US\",\n customHandlers: customHandlers\u0029\n"]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Order tracking","id":"order-tracking"},"children":["Order tracking"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To add ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdesign\u002Fhuman-interface-guidelines\u002Ftechnologies\u002Fwallet\u002Fdesigning-order-tracking"},"children":["order tracking"]}," information in iOS 16 or later, configure an ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FApplePayConfiguration\u002FHandlers.html#\u002Fs:18StripePaymentSheet0bC0C21ApplePayConfigurationV8HandlersV26authorizationResultHandlerySo022PKPaymentAuthorizationI0C_yAJXEtcSgvp"},"children":["authorizationResultHandler"]}," in your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.ApplePayConfiguration.Handlers"},"children":[]},". Stripe calls your implementation after the payment is complete, but before iOS dismisses the Apple Pay sheet."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"authorizationResultHandler"},"children":[]}," implementation, fetch the order details from your server for the completed order. Add the details to the provided ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fpasskit\u002Fpkpaymentauthorizationresult"},"children":["PKPaymentAuthorizationResult"]}," and call the provided completion handler."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To learn more about order tracking, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fwalletorders"},"children":["Apple’s Wallet Orders documentation"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"iOS \u0028Swift\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["let customHandlers = PaymentSheet.ApplePayConfiguration.Handlers\u0028\n authorizationResultHandler: { result, completion in\n \u002F\u002F Fetch the order details from your service\n MyAPIClient.shared.fetchOrderDetails\u0028orderID: orderID\u0029 { myOrderDetails\n result.orderDetails = PKPaymentOrderDetails\u0028\n orderTypeIdentifier: myOrderDetails.orderTypeIdentifier, \u002F\u002F \"com.myapp.order\"\n orderIdentifier: myOrderDetails.orderIdentifier, \u002F\u002F \"ABC123-AAAA-1111\"\n webServiceURL: myOrderDetails.webServiceURL, \u002F\u002F \"https:\u002F\u002Fmy-backend.example.com\u002Fapple-order-tracking-backend\"\n authenticationToken: myOrderDetails.authenticationToken\u0029 \u002F\u002F \"abc123\"\n \u002F\u002F Call the completion block on the main queue with your modified PKPaymentAuthorizationResult\n completion\u0028result\u0029\n }\n }\n\u0029\nvar configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.applePay = .init\u0028merchantId: \"merchant.com.your_app_name\",\n merchantCountryCode: \"US\",\n customHandlers: customHandlers\u0029\n"]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-card-scanning","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable card scanning","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-card-scanning.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To enable card scanning support, set the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"NSCameraUsageDescription"},"children":[]}," \u0028",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Privacy - Camera Usage Description"]},"\u0029 in the Info.plist of your application, and provide a reason for accessing the camera \u0028for example, “To scan cards”\u0029. Devices with iOS 13 or higher support card scanning."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-ach","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable ACH payments","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-ach-ios.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To enable ACH debit payments include ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"StripeFinancialConnections"},"children":[]}," as a dependency for your app."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fios-install-sdk.md","variables":{"moduleName":"StripeFinancialConnections","minimumiOSVersion":"13","requiredFrameworksLink":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Ftree\u002Fmaster\u002FStripeFinancialConnections\u002FREADME.md#manual-linking","includeInstallInstructions":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios"},"children":["Stripe iOS SDK"]}," is open source, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Findex.html"},"children":["fully documented"]},", and compatible with apps supporting iOS ","13"," or above."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"install-spm","title":"Swift Package Manager","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-spm","title":"Swift Package Manager"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To install the SDK, follow these steps:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["In Xcode, select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["File"]}," \u003E ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Add Packages…"]}," and enter ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios-spm"},"children":[]}," as the repository URL."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Select the latest version number from our ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Freleases"},"children":["releases page"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Add the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["StripeFinancialConnections"]}," product to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fswift_packages\u002Fadding_package_dependencies_to_your_app"},"children":["target of your app"]},"."]}]}]}},{"id":"install-cocoapods","title":"CocoaPods","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-cocoapods","title":"CocoaPods"},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["If you haven’t already, install the latest version of ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html"},"children":["CocoaPods"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["If you don’t have an existing ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fguides.cocoapods.org\u002Fsyntax\u002Fpodfile.html"},"children":["Podfile"]},", run the following command to create one:",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["pod init\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Add this line to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Podfile"},"children":[]},":",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"podfile","filename":"Podfile","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["pod '","StripeFinancialConnections","'\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Run the following command:",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["pod install\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Don’t forget to use the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":".xcworkspace"},"children":[]}," file to open your project in Xcode, instead of the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":".xcodeproj"},"children":[]}," file, from here on out."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["In the future, to update to the latest version of the SDK, run:",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["pod update ","StripeFinancialConnections","\n"]}]}]}]}},{"id":"install-carthage","title":"Carthage","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-carthage","title":"Carthage"},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["If you haven’t already, install the latest version of ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage#installing-carthage"},"children":["Carthage"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Add this line to your ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Cartfile"},"children":[]},":",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"cartfile","filename":"Cartfile","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["github \"stripe\u002Fstripe-ios\"\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Follow the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage#if-youre-building-for-ios-tvos-or-watchos"},"children":["Carthage installation instructions"]},". Make sure to embed all of the required frameworks listed ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Ftree\u002Fmaster\u002FStripeFinancialConnections\u002FREADME.md#manual-linking"},"children":["here"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["In the future, to update to the latest version of the SDK, run the following command:",{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["carthage update stripe-ios --platform ios\n"]}]}]}]}},{"id":"install-manual-framework","title":"Manual Framework","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-manual-framework","title":"Manual Framework"},"children":[{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Head to our ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Freleases\u002Flatest"},"children":["GitHub releases page"]}," and download and unzip ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Stripe.xcframework.zip"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Drag ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["StripeFinancialConnections",".xcframework"]}," to the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Embedded Binaries"]}," section of the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["General"]}," settings in your Xcode project. Make sure to select ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Copy items if needed"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Repeat step 2 for all required frameworks listed ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Ftree\u002Fmaster\u002FStripeFinancialConnections\u002FREADME.md#manual-linking"},"children":["here"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["In the future, to update to the latest version of our SDK, repeat steps 1–3."]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For details on the latest SDK release and past versions, see the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Freleases"},"children":["Releases"]}," page on GitHub. To receive notifications when a new release is published, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fhelp.github.com\u002Fen\u002Farticles\u002Fwatching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository"},"children":["watch releases"]}," for the repository."]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-customization","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Customize the sheet","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-customization-ios.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["All customization is configured through the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FConfiguration.html"},"children":["PaymentSheet.Configuration"]}," object."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Appearance","id":"appearance"},"children":["Appearance"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Customize colors, fonts, and so on to match the look and feel of your app by using the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Felements\u002Fappearance-api?platform=ios"},"children":["appearance API"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Payment method layout","id":"payment-method-layout"},"children":["Payment method layout"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Configure the layout of payment methods in the sheet using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripepaymentsheet\u002Fdocumentation\u002Fstripepaymentsheet\u002Fpaymentsheet\u002Fconfiguration-swift.struct\u002Fpaymentmethodlayout"},"children":["paymentMethodLayout"]},". You can display them horizontally, vertically, or let Stripe optimize the layout automatically."]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fios-mpe-payment-method-layouts.9d0513e2fcec5660378ba1824d952054.png","ignoreAltTextRequirement":true,"zoomable":true},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"Swift"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["var configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.paymentMethodLayout = .automatic\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Collect users addresses","id":"collect-users-addresses"},"children":["Collect users addresses"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Collect local and international shipping or billing addresses from your customers using the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Felements\u002Faddress-element?platform=ios"},"children":["Address Element"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Merchant display name","id":"merchant-display-name"},"children":["Merchant display name"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Specify a customer-facing business name by setting ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FConfiguration.html#\u002Fs:18StripePaymentSheet0bC0C13ConfigurationV19merchantDisplayNameSSvp"},"children":["merchantDisplayName"]},". By default, this is your app’s name."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"swift","title":"Swift"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["var configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.merchantDisplayName = \"My app, Inc.\"\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Dark mode","id":"dark-mode"},"children":["Dark mode"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," automatically adapts to the user’s system-wide appearance settings \u0028light and dark mode\u0029. If your app doesn’t support dark mode, you can set ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-paymentsheet\u002FClasses\u002FPaymentSheet\u002FConfiguration.html#\u002Fs:18StripePaymentSheet0bC0C13ConfigurationV5styleAC18UserInterfaceStyleOvp"},"children":["style"]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"alwaysLight"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"alwaysDark"},"children":[]}," mode."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["var configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.style = .alwaysLight\n"]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Default billing details","id":"default-billing-details"},"children":["Default billing details"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fpartials\u002Fduring-payment\u002Fdefault-billing-details-ios.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To set default values for billing details collected in the payment sheet, configure the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"defaultBillingDetails"},"children":[]}," property. The ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," pre-populates its fields with the values that you provide."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["var configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.defaultBillingDetails.address.country = \"US\"\nconfiguration.defaultBillingDetails.email = \"foo@bar.com\"\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Billing details collection","id":"billing-details-collection"},"children":["Billing details collection"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fpartials\u002Fduring-payment\u002Fbilling-details-collection-payment-element-ios.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"billingDetailsCollectionConfiguration"},"children":[]}," to specify how you want to collect billing details in the payment sheet."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can collect your customer’s name, email, phone number, and address."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you only want to billing details required by the payment method, set ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod"},"children":[]}," to true. In that case, the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.Configuration.defaultBillingDetails"},"children":[]}," are set as the payment method’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_methods\u002Fobject?lang=node#payment_method_object-billing_details"},"children":["billing details"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you want to collect additional billing details that aren’t necessarily required by the payment method, set ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod"},"children":[]}," to false. In that case, the billing details collected through the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," are set as the payment method’s billing details."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["var configuration = PaymentSheet.Configuration\u0028\u0029\nconfiguration.defaultBillingDetails.email = \"foo@bar.com\"\nconfiguration.billingDetailsCollectionConfiguration.name = .always\nconfiguration.billingDetailsCollectionConfiguration.email = .never\nconfiguration.billingDetailsCollectionConfiguration.address = .full\nconfiguration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod = true\n"]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Consult with your legal counsel regarding laws that apply to collecting information. Only collect phone numbers if you need them for the transaction."]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-logout","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Handle user logout","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fhandle-user-logout.md","variables":{"platform":"ios"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," stores some information locally to remember whether a user has used Link within an app. To clear the internal state of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]},", call the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.resetCustomer\u0028\u0029"},"children":[]}," method when your user logs out."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import UIKit\nimport StripePaymentSheet\n\nclass MyViewController: UIViewController {\n\n @objc\n func didTapLogoutButton\u0028\u0029 {\n PaymentSheet.resetCustomer\u0028\u0029\n \u002F\u002F Other logout logic required by your app\n }\n\n}\n"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-flowcontroller","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Complete payment in your UI","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fintegrate-paymentsheet-flowcontroller-ios.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can present the Payment Sheet to only collect payment method details and then later call a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"confirm"},"children":[]}," method to complete payment in your app’s UI. This is useful if you have a custom buy button or require additional steps after you collect payment details."]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fios-multi-step.cd631ea4f1cd8cf3f39b6b9e1e92b6c5.png","ignoreAltTextRequirement":true,"zoomable":true},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Complete the payment in your app’s UI"]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Interested in displaying payment methods directly in your checkout screen?"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. ",{"\u0024\u0024mdtype":"Tag","name":"CollectEmail","attributes":{"list":"mobile-embeddable-payment-element-beta@stripe.com","send_direct_email":true,"intro_text":"Interested in displaying payment methods directly in your checkout screen?","body_text":"Provide your email address to join the pilot.","form_cta_text":"Sign up","show_email_confirmation":true,"success_text":"Thank you\u0021 We'll be in touch soon.","until":null,"modal":true,"modal_link_text":"Sign up for early access."},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"pref":"uikit-swiftui","selector":"tabs","items":[{"id":"uikit","title":"UIKit","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"uikit","title":"UIKit"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The following steps walk you through how to complete payment in your app’s UI. See our sample integration out on ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Fblob\u002Fmaster\u002FExample\u002FPaymentSheet%20Example\u002FPaymentSheet%20Example\u002FExampleCustomCheckoutViewController.swift"},"children":["GitHub"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["First, initialize ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripepaymentsheet\u002Fdocumentation\u002Fstripepaymentsheet\u002Fpaymentsheet\u002Fflowcontroller"},"children":["PaymentSheet.FlowController"]}," instead of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," and update your UI with its ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"paymentOption"},"children":[]}," property. This property contains an image and label representing the customer’s initially selected, default payment method."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.FlowController.create\u0028paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration\u0029 { [weak self] result in\n switch result {\n case .failure\u0028let error\u0029:\n print\u0028error\u0029\n case .success\u0028let paymentSheetFlowController\u0029:\n self?.paymentSheetFlowController = paymentSheetFlowController\n \u002F\u002F Update your UI using paymentSheetFlowController.paymentOption\n }\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":2},"children":["Next, call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"presentPaymentOptions"},"children":[]}," to collect payment details. When completed, update your UI again with the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"paymentOption"},"children":[]}," property. "]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["paymentSheetFlowController.presentPaymentOptions\u0028from: self\u0029 {\n \u002F\u002F Update your UI using paymentSheetFlowController.paymentOption\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":3},"children":["Finally, call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"confirm"},"children":[]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["paymentSheetFlowController.confirm\u0028from: self\u0029 { paymentResult in\n \u002F\u002F MARK: Handle the payment result\n switch paymentResult {\n case .completed:\n print\u0028\"Payment complete\u0021\"\u0029\n case .canceled:\n print\u0028\"Canceled\u0021\"\u0029\n case .failed\u0028let error\u0029:\n print\u0028error\u0029\n }\n}\n"]}]}},{"id":"swiftui","title":"SwiftUI","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"swiftui","title":"SwiftUI"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The following steps walk you through how to complete payment in your app’s UI. See our sample integration out on ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios\u002Fblob\u002Fmaster\u002FExample\u002FPaymentSheet%20Example\u002FPaymentSheet%20Example\u002FExampleSwiftUICustomPaymentFlow.swift"},"children":["GitHub"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["First, initialize ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripepaymentsheet\u002Fdocumentation\u002Fstripepaymentsheet\u002Fpaymentsheet\u002Fflowcontroller"},"children":["PaymentSheet.FlowController"]}," instead of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]},". Its ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"paymentOption"},"children":[]}," property contains an image and label representing the customer’s currently selected payment method, which you can use in your UI."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.FlowController.create\u0028paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration\u0029 { [weak self] result in\n switch result {\n case .failure\u0028let error\u0029:\n print\u0028error\u0029\n case .success\u0028let paymentSheetFlowController\u0029:\n self?.paymentSheetFlowController = paymentSheetFlowController\n \u002F\u002F Use the paymentSheetFlowController.paymentOption properties in your UI\n myPaymentMethodLabel = paymentSheetFlowController.paymentOption?.label ?? \"Select a payment method\"\n myPaymentMethodImage = paymentSheetFlowController.paymentOption?.image ?? UIImage\u0028systemName: \"square.and.pencil\"\u0029\u0021\n }\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":2},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripepaymentsheet\u002Fdocumentation\u002Fstripepaymentsheet\u002Fpaymentsheet\u002Fflowcontroller\u002Fpaymentoptionsbutton"},"children":["PaymentSheet.FlowController.PaymentOptionsButton"]}," to wrap the button that presents the sheet to collect payment details. When ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.FlowController"},"children":[]}," calls the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"onSheetDismissed"},"children":[]}," argument, the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"paymentOption"},"children":[]}," for the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.FlowController"},"children":[]}," instance reflects the currently selected payment method. "]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.FlowController.PaymentOptionsButton\u0028\n paymentSheetFlowController: paymentSheetFlowController,\n onSheetDismissed: {\n myPaymentMethodLabel = paymentSheetFlowController.paymentOption?.label ?? \"Select a payment method\"\n myPaymentMethodImage = paymentSheetFlowController.paymentOption?.image ?? UIImage\u0028systemName: \"square.and.pencil\"\u0029\u0021\n },\n content: {\n \u002F* An example button *\u002F\n HStack {\n Text\u0028myPaymentMethodLabel\u0029\n Image\u0028uiImage: myPaymentMethodImage\u0029\n }\n }\n\u0029\n"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":3},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripepaymentsheet\u002Fdocumentation\u002Fstripepaymentsheet\u002Fpaymentsheet\u002Fflowcontroller\u002Fpaymentoptionsbutton"},"children":["PaymentSheet.FlowController.PaymentOptionsButton"]}," to wrap the button that confirms the payment. "]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"swift","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.FlowController.ConfirmButton\u0028\n paymentSheetFlowController: paymentSheetFlowController,\n onCompletion: { result in\n \u002F\u002F MARK: Handle the payment result\n switch result {\n case .completed:\n print\u0028\"Payment complete\u0021\"\u0029\n case .canceled:\n print\u0028\"Canceled\u0021\"\u0029\n case .failed\u0028let error\u0029:\n print\u0028error\u0029\n }\n },\n content: {\n \u002F* An example button *\u002F\n Text\u0028\"Pay\"\u0029\n }\n\u0029\n"]}]}}]},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-post-confirm.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Setting ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allowsDelayedPaymentMethods"},"children":[]}," to true allows ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment methods like US bank accounts. For these payment methods, the final payment status isn’t known when the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," completes, and instead succeeds or fails later. If you support these types of payment methods, inform the customer their order is confirmed and only fulfill their order \u0028for example, ship their product\u0029 when the payment is successful."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"ios-cvc-recollection","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable CVC recollection on confirmation","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-cvc-recollection-ios.md","variables":{"integration":"intent-first"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The following instructions for re-collecting the CVC of a saved card during PaymentIntent confirmation assume that your integration includes the following:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Creation of PaymentIntents before collecting payment details"]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Update parameters of the intent creation","id":"update-parameters-of-the-intent-creation"},"children":["Update parameters of the intent creation"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To re-collect the CVC when confirming payment, include ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"require_cvc_recollection"},"children":[]}," during the creation of the PaymentIntent."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-server-endpoint-code.md","variables":{"automatic_payment_methods":true,"setup_future_usage":false,"connect_charge_type":false,"setup_intent":false,"cvc_recollection":true,"customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"curl","title":"curl","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"curl","title":"curl"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":20,"end":20}],"remove":[]}},"children":["# Create a Customer \u0028use an existing Customer ID if this is a returning customer\u0029\n","curl https:\u002F\u002Fapi.stripe.com","\u002Fv1\u002Fcustomers"," \\\n"," -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},":"," \\\n"," ","-X"," ","\"","POST","\"","\n","\n# Create an Ephemeral Key for the Customer\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fephemeral_keys \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -H \"Stripe-Version: ","2024-11-20.acacia","\" \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\","\n","\n# Create a PaymentIntent\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\\n -d \"amount\"=1099 \\\n -d \"currency\"=\"eur\" \\",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n -d \"payment_method_options[card][require_cvc_recollection]\"=true \\"},"children":["\n -d \"payment_method_options[card][require_cvc_recollection]\"=true \\"]},"\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n -d \"automatic_payment_methods[enabled]\"=true \\","\n"]}]}},{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":18,"end":20}],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\npost '\u002Fpayment-sheet' do\n # Use an existing Customer ID if this is a returning customer\n customer = Stripe::Customer.create","\n ephemeralKey = Stripe::EphemeralKey.create\u0028{\n customer: customer['id'],\n }, {stripe_version: '","2024-11-20.acacia","'}\u0029","\n paymentIntent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer['id'],",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n payment_method_options: {\n card: {require_cvc_recollection: true}\n }"},"children":["\n payment_method_options: {\n card: {require_cvc_recollection: true}\n }"]},"\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029","\n {\n paymentIntent: paymentIntent['client_secret'],","\n ephemeralKey: ephemeralKey['secret'],","\n customer: customer['id'],\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }.to_json","\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":21,"end":25}],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\n@app.route\u0028'\u002Fpayment-sheet', methods=['POST']\u0029\ndef payment_sheet\u0028\u0029:\n # Use an existing Customer ID if this is a returning customer\n customer = stripe.Customer.create\u0028\u0029","\n ephemeralKey = stripe.EphemeralKey.create\u0028\n customer=customer['id'],\n stripe_version='","2024-11-20.acacia","',\n \u0029","\n","\n paymentIntent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='eur',\n customer=customer['id'],",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n payment_method_options={\n 'card': {\n 'require_cvc_recollection': True\n }\n },"},"children":["\n payment_method_options={\n 'card': {\n 'require_cvc_recollection': True\n }\n },"]},"\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods={\n 'enabled': True,\n },","\n \u0029\n return jsonify\u0028paymentIntent=paymentIntent.client_secret,","\n ephemeralKey=ephemeralKey.secret,","\n customer=customer.id,\n publishableKey='",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029","\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"cart-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":17,"end":19}],"remove":[]}},"children":["\u003C?php\nrequire 'vendor\u002Fautoload.php';\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\n\u002F\u002F Use an existing Customer ID if this is a returning customer.\n\u0024customer = \u0024stripe-\u003Ecustomers-\u003Ecreate\u0028\u0029;","\n\u0024ephemeralKey = \u0024stripe-\u003EephemeralKeys-\u003Ecreate\u0028[\n 'customer' =\u003E \u0024customer-\u003Eid,\n], [\n 'stripe_version' =\u003E '","2024-11-20.acacia","',\n]\u0029;","\n","\n\u0024paymentIntent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'eur',\n 'customer' =\u003E \u0024customer-\u003Eid,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n 'payment_method_options' =\u003E [\n 'card' =\u003E ['require_cvc_recollection' =\u003E true]\n ],"},"children":["\n 'payment_method_options' =\u003E [\n 'card' =\u003E ['require_cvc_recollection' =\u003E true]\n ],"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n 'automatic_payment_methods' =\u003E [\n 'enabled' =\u003E 'true',\n ],","\n]\u0029;\n\necho json_encode\u0028\n [\n 'paymentIntent' =\u003E \u0024paymentIntent-\u003Eclient_secret,","\n 'ephemeralKey' =\u003E \u0024ephemeralKey-\u003Esecret,","\n 'customer' =\u003E \u0024customer-\u003Eid,\n 'publishableKey' =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n ]\n\u0029;\nhttp_response_code\u0028200\u0029;","\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"Server.java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":25,"end":33}],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.apiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\npost\u0028\n \"\u002Fpayment-sheet\",\n \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n CustomerCreateParams customerParams = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n Customer customer = Customer.create\u0028customerParams\u0029;","\n EphemeralKeyCreateParams ephemeralKeyParams =\n EphemeralKeyCreateParams.builder\u0028\u0029\n .setStripeVersion\u0028\"","2024-11-20.acacia","\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029\n .build\u0028\u0029;\n\n EphemeralKey ephemeralKey = EphemeralKey.create\u0028ephemeralKeyParams\u0029;","\n PaymentIntentCreateParams paymentIntentParams =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"eur\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n .setPaymentMethodOptions\u0028\n PaymentIntentCreateParams.PaymentMethodOptions.builder\u0028\u0029\n .setCard\u0028\n PaymentIntentCreateParams.PaymentMethodOptions.Card.builder\u0028\u0029\n .setRequireCvcRecollection\u0028true\u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029\n \u0029"},"children":["\n .setPaymentMethodOptions\u0028\n PaymentIntentCreateParams.PaymentMethodOptions.builder\u0028\u0029\n .setCard\u0028\n PaymentIntentCreateParams.PaymentMethodOptions.Card.builder\u0028\u0029\n .setRequireCvcRecollection\u0028true\u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029\n \u0029"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029\n .setEnabled\u0028true\u0029\n .build\u0028\u0029\n \u0029","\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028paymentIntentParams","\u0029;","\n\n Map\u003CString, String\u003E responseData = new HashMap\u0028\u0029;","\n responseData.put\u0028\"paymentIntent\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"ephemeralKey\", ephemeralKey.getSecret\u0028\u0029\u0029;","\n\n responseData.put\u0028\"customer\", customer.getId\u0028\u0029\u0029;\n responseData.put\u0028\"publishableKey\", \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\u0029;\n\n return gson.toJson\u0028responseData\u0029;\n}\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":16,"end":20}],"remove":[]}},"children":["\nconst stripe = require\u0028'stripe'\u0029\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;","\n\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\napp.post\u0028'\u002Fpayment-sheet', async \u0028req, res\u0029 =\u003E {\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n const customer = await stripe.customers.create\u0028\u0029;","\n const ephemeralKey = await stripe.ephemeralKeys.create\u0028\n {customer: customer.id},\n {apiVersion: '","2024-11-20.acacia","'}\n \u0029;","\n const paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer.id,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n payment_method_options: {\n card: {\n require_cvc_recollection: true,\n },\n },"},"children":["\n payment_method_options: {\n card: {\n require_cvc_recollection: true,\n },\n },"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029;\n\n res.json\u0028{\n paymentIntent: paymentIntent.client_secret,","\n ephemeralKey: ephemeralKey.secret,","\n customer: customer.id,\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }\u0029;","\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"server.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":25,"end":29}],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\nfunc handlePaymentSheet\u0028w http.ResponseWriter, r *http.Request\u0029 {\n if r.Method \u0021= \"POST\" {\n http.Error\u0028w, http.StatusText\u0028http.StatusMethodNotAllowed\u0029, http.StatusMethodNotAllowed\u0029\n return\n }\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n cparams := \u0026stripe.CustomerParams{}\n c, _ := customer.New\u0028cparams\u0029\n","\n ekparams := \u0026stripe.EphemeralKeyParams{\n Customer: stripe.String\u0028c.ID\u0029,\n StripeVersion: stripe.String\u0028\"","2024-11-20.acacia","\"\u0029,\n }\n ek, _ := ephemeralKey.New\u0028ekparams\u0029","\n","\n piparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyEUR\u0029\u0029,\n Customer: stripe.String\u0028c.ID\u0029,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n PaymentMethodOptions: stripe.PaymentIntentPaymentMethodOptionsParams{\n Card: stripe.PaymentIntentPaymentMethodOptionsCardParams{\n RequireCvcRecollection: stripe.Bool\u0028true\u0029,\n }\n },"},"children":["\n PaymentMethodOptions: stripe.PaymentIntentPaymentMethodOptionsParams{\n Card: stripe.PaymentIntentPaymentMethodOptionsCardParams{\n RequireCvcRecollection: stripe.Bool\u0028true\u0029,\n }\n },"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods: \u0026stripe.PaymentIntentAutomaticPaymentMethodsParams{\n Enabled: stripe.Bool\u0028true\u0029,\n },","\n }","\n pi, _ := paymentintent.New\u0028piparams\u0029","\n\n writeJSON\u0028w, struct {","\n PaymentIntent string \u0060json:\"paymentIntent\"\u0060","\n EphemeralKey string \u0060json:\"ephemeralKey\"\u0060","\n Customer string \u0060json:\"customer\"\u0060\n PublishableKey string \u0060json:\"publishableKey\"\u0060\n }{","\n PaymentIntent: pi.ClientSecret,","\n EphemeralKey: ek.Secret,","\n Customer: c.ID,\n PublishableKey: \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":25,"end":31}],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\n[HttpPost\u0028\"payment-sheet\"\u0029]\npublic ActionResult\u003CPaymentSheetCreateResponse\u003E CreatePaymentSheet\u0028[FromBody] CreatePaymentSheetRequest req\u0029\n{\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n var customerOptions = new CustomerCreateOptions\u0028\u0029;\n var customerService = new CustomerService\u0028\u0029;\n var customer = customerService.Create\u0028customerOptions\u0029;","\n var ephemeralKeyOptions = new EphemeralKeyCreateOptions\n {\n Customer = customer.Id,\n StripeVersion = \"","2024-11-20.acacia","\",\n };\n var ephemeralKeyService = new EphemeralKeyService\u0028\u0029;\n var ephemeralKey = ephemeralKeyService.Create\u0028ephemeralKeyOptions\u0029;","\n","\n var paymentIntentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"eur\",\n Customer = customer.Id,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n PaymentMethodOptions = new PaymentIntentPaymentMethodOptionsOptions\n {\n Card = new PaymentIntentPaymentMethodOptionsCardOptions\n {\n RequireCvcRecollection = true,\n },\n },"},"children":["\n PaymentMethodOptions = new PaymentIntentPaymentMethodOptionsOptions\n {\n Card = new PaymentIntentPaymentMethodOptionsCardOptions\n {\n RequireCvcRecollection = true,\n },\n },"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions\n {\n Enabled = true,\n },","\n };","\n var paymentIntentService = new PaymentIntentService\u0028\u0029;\n PaymentIntent paymentIntent = paymentIntentService.Create\u0028paymentIntentOptions\u0029;","\n\n return new PaymentSheetCreateResponse\n {","\n PaymentIntent = paymentIntent.ClientSecret,","\n EphemeralKey = ephemeralKey.Secret,","\n\n Customer = customer.Id,\n PublishableKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n };\n}\n"]}]}}],"codeTabGroupID":"codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b"},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"CollectEmail","attributes":{"list":"mobile-embeddable-payment-element-beta@stripe.com","send_direct_email":true,"intro_text":"Interested in displaying payment methods directly in your checkout screen?","body_text":"We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. Provide your email address to join the pilot.","form_cta_text":"Sign up","show_email_confirmation":true,"success_text":"Thank you\u0021 We'll be in touch soon.","until":null},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Page","attributes":{"prefs":{"platform":"android"},"title":"In-app integration for Android"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Faccept-a-payment-payment-sheet-preamble.md","variables":{"platform":"android","link":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fandroid-overview.471eaf89a760f5b6a757fd96b6bb9b60.png","ignoreAltTextRequirement":true,"zoomable":true},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Integrate Stripe’s prebuilt payment UI into the checkout of your Android app with the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002Findex.html"},"children":["PaymentSheet"]}," class."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Interested in displaying payment methods directly in your checkout screen?"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. ",{"\u0024\u0024mdtype":"Tag","name":"CollectEmail","attributes":{"list":"mobile-embeddable-payment-element-beta@stripe.com","send_direct_email":true,"intro_text":"Interested in displaying payment methods directly in your checkout screen?","body_text":"Provide your email address to join the pilot.","form_cta_text":"Sign up","show_email_confirmation":true,"success_text":"Thank you\u0021 We'll be in touch soon.","until":null,"modal":true,"modal_link_text":"Sign up for early access."},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"androidsetup","beta":false,"preview":false,"badges":["Server-side","Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Set up Stripe","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["First, you need a Stripe account. ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fregister"},"children":["Register now"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"setup-server-side","level":3,"anchored":true,"toc":"Server-side "},"children":["Server-side "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This integration requires endpoints on your server that talk to the Stripe API. Use the official libraries for access to the Stripe API from your server:"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Flibraries.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Available as a gem\nsudo gem install stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"Gemfile","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# If you use bundler, you can add this line to your Gemfile\ngem 'stripe'\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install through pip\npip3 install --upgrade stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"PyPi","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or find the Stripe package on http:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fstripe\u002F\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"requirements.txt","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Find the version you want to pin:\n# https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-python\u002Fblob\u002Fmaster\u002FCHANGELOG.md\n# Specify that version in your requirements.txt file\nstripe\u003E=5.0.0\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install the PHP library with Composer\ncomposer require stripe\u002Fstripe-php\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Source","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or download the source directly: https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-php\u002Freleases\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"build.gradle","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F*\n For Gradle, add the following dependency to your build.gradle and replace with\n the version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n*\u002F\nimplementation \"com.stripe:stripe-java:","28.0.0","\"\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"xml","filename":"pom.xml","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C\u0021--\n For Maven, add the following dependency to your POM and replace with the\n version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n--\u003E\n\u003Cdependency\u003E\n \u003CgroupId\u003Ecom.stripe\u003C\u002FgroupId\u003E\n \u003CartifactId\u003Estripe-java\u003C\u002FartifactId\u003E\n \u003Cversion\u003E","28.0.0","\u003C\u002Fversion\u003E\n\u003C\u002Fdependency\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Other environments","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# For other environments, manually install the following JARs:\n# - The Stripe JAR from https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n# - Google Gson from https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fgson\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with npm\nnpm install stripe --save\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Make sure your project is using Go Modules\ngo mod init\n# Install stripe-go\ngo get -u github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F Then import the package\nimport \u0028\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\"\n\u0029\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with dotnet\ndotnet add package Stripe.net\ndotnet restore\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or install with NuGet\nInstall-Package Stripe.net\n"]}]}}],"codeTabGroupID":"codetab_dfc4a6aff5f3711c66bdb90a3f37589faa94b1f4"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"setup-client-side","level":3,"anchored":true,"toc":"Client-side "},"children":["Client-side "]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fandroid-install-sdk.md","variables":{"dont_set_publishable_key":true,"mainDep":false,"additionalDep":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-android"},"children":["Stripe Android SDK"]}," is open source and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002F"},"children":["fully documented"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To install the SDK, add ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"stripe-android"},"children":[]}," to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"dependencies"},"children":[]}," block of your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fbuild\u002Fdependencies"},"children":["app\u002Fbuild.gradle"]}," file:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"none","items":[{"id":"groovy","title":"Groovy","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"groovy","title":"Groovy"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"groovy","filename":"build.gradle","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["apply plugin: 'com.android.application'\n\nandroid { ... }\n\ndependencies {\n \u002F\u002F ...\n","\n \u002F\u002F Stripe Android SDK\n implementation 'com.stripe:stripe-android:","21.2.0","'","\n}\n"]}]}},{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","filename":"build.gradle.kts","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["plugins {\n id\u0028\"com.android.application\"\u0029\n}\n\nandroid { ... }\n\ndependencies {\n \u002F\u002F ...\n","\n \u002F\u002F Stripe Android SDK\n implementation\u0028\"com.stripe:stripe-android:","21.2.0","\"\u0029","\n}\n"]}]}}],"codeTabGroupID":"codetab_87365a1707c45a4438a6bb001d2c3776fcc2474c"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For details on the latest SDK release and past versions, see the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-android\u002Freleases"},"children":["Releases"]}," page on GitHub. To receive notifications when a new release is published, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fgithub\u002Fmanaging-subscriptions-and-notifications-on-github\u002Fconfiguring-notifications#configuring-your-watch-settings-for-an-individual-repository"},"children":["watch releases for the repository"]},"."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-enable-payment-methods","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Enable payment methods","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fpayments\u002Faccept-a-payment\u002Fenable-payment-methods.md","variables":{"intentKind":"PaymentIntent"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["View your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["payment methods settings"]}," and enable the payment methods you want to support. You need at least one payment method enabled to create a ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"payment-intents"},"children":["PaymentIntent"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, Stripe enables cards and other prevalent payment methods that can help you reach more customers, but we recommend turning on additional payment methods that are relevant for your business and customers. See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fpayment-method-support"},"children":["Payment method support"]}," for product and payment method support, and our ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Fpricing\u002Flocal-payment-methods"},"children":["pricing page"]}," for fees."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"add-server-endpoint","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Add an endpoint","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fpayment-sheet-add-server-endpoint-apms.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fpayment-sheet-add-server-endpoint-apms-ephemeral-key.md","variables":{}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you want to present the PaymentSheet before creating a PaymentIntent, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment-deferred?type=payment"},"children":["Collect payment details before creating an Intent"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This integration uses three Stripe API objects:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents"},"children":["PaymentIntent"]},": Stripe uses this to represent your intent to collect payment from a customer, tracking your charge attempts and payment state changes throughout the process."]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["\u0028Optional\u0029 ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers"},"children":["Customer"]},": To set up a payment method for future payments, you must attach it to a ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"customers"},"children":["Customer"]},". Create a Customer object when your customer creates an account with your business. If your customer is making a payment as a guest, you can create a Customer object before payment and associate it with your own internal representation of the customer’s account later."]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["\u0028Optional\u0029 ","Customer Ephemeral Key: Information on the Customer object is sensitive, and can’t be retrieved directly from an app. An Ephemeral Key grants the SDK temporary access to the Customer."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you never save cards to a Customer and don’t allow returning Customers to reuse saved cards, you can omit the Customer and Customer Ephemeral Key objects from your integration."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For security reasons, your app can’t create these objects. Instead, add an endpoint on your server that:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Retrieves the Customer, or creates a new one."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Creates an Ephemeral Key for the Customer."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Creates a PaymentIntent with the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-amount"},"children":["amount"]},", ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-currency"},"children":["currency"]},", and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-customer"},"children":["customer"]},". You can also optionally include the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"automatic_payment_methods"},"children":[]}," parameter. Stripe enables its functionality by default in the latest version of the API."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Returns the Payment Intent’s ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"payment-intent-secret"},"children":["client secret"]},", the Ephemeral Key’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"secret"},"children":[]},", the Customer’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers\u002Fobject#customer_object-id"},"children":["id"]},", and your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys"},"children":["publishable key"]}," to your app."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The payment methods shown to customers during the checkout process are also included on the PaymentIntent. You can let Stripe pull payment methods from your Dashboard settings or you can list them manually. Regardless of the option you choose, know that the currency passed in the PaymentIntent filters the payment methods shown to the customer. For example, if you pass ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"eur"},"children":[]}," on the PaymentIntent and have OXXO enabled in the Dashboard, OXXO won’t be shown to the customer because OXXO doesn’t support ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"eur"},"children":[]}," payments."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Unless your integration requires a code-based option for offering payment methods, Stripe recommends the automated option. This is because Stripe evaluates the currency, payment method restrictions, and other parameters to determine the list of supported payment methods. Payment methods that increase conversion and that are most relevant to the currency and customer’s location are prioritized."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"manage-pm","title":"Manage payment methods from the Dashboard","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"manage-pm","title":"Manage payment methods from the Dashboard"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Test a running implementation of this endpoint on ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fglitch.com\u002Fedit\u002F#\u0021\u002Fremix\u002Fstripe-mobile-payment-sheet-automatic"},"children":["Glitch"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can manage payment methods from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Dashboard"]},". Stripe handles the return of eligible payment methods based on factors such as the transaction’s amount, currency, and payment flow. The PaymentIntent is created using the payment methods you configured in the Dashboard. If you don’t want to use the Dashboard or if you want to specify payment methods manually, you can list them using the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_method_types"},"children":[]}," attribute."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-server-endpoint-code.md","variables":{"automatic_payment_methods":true,"setup_intent":false,"cvc_recollection":false,"customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"curl","title":"curl","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"curl","title":"curl"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Create a Customer \u0028use an existing Customer ID if this is a returning customer\u0029\n","curl https:\u002F\u002Fapi.stripe.com","\u002Fv1\u002Fcustomers"," \\\n"," -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},":"," \\\n"," ","-X"," ","\"","POST","\"","\n","\n# Create an Ephemeral Key for the Customer\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fephemeral_keys \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -H \"Stripe-Version: ","2024-11-20.acacia","\" \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\","\n","\n# Create a PaymentIntent\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\\n -d \"amount\"=1099 \\\n -d \"currency\"=\"eur\" \\","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n -d \"automatic_payment_methods[enabled]\"=true \\","\n"]}]}},{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\npost '\u002Fpayment-sheet' do\n # Use an existing Customer ID if this is a returning customer\n customer = Stripe::Customer.create","\n ephemeralKey = Stripe::EphemeralKey.create\u0028{\n customer: customer['id'],\n }, {stripe_version: '","2024-11-20.acacia","'}\u0029","\n paymentIntent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer['id'],","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029","\n {\n paymentIntent: paymentIntent['client_secret'],","\n ephemeralKey: ephemeralKey['secret'],","\n customer: customer['id'],\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }.to_json","\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\n@app.route\u0028'\u002Fpayment-sheet', methods=['POST']\u0029\ndef payment_sheet\u0028\u0029:\n # Use an existing Customer ID if this is a returning customer\n customer = stripe.Customer.create\u0028\u0029","\n ephemeralKey = stripe.EphemeralKey.create\u0028\n customer=customer['id'],\n stripe_version='","2024-11-20.acacia","',\n \u0029","\n","\n paymentIntent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='eur',\n customer=customer['id'],","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods={\n 'enabled': True,\n },","\n \u0029\n return jsonify\u0028paymentIntent=paymentIntent.client_secret,","\n ephemeralKey=ephemeralKey.secret,","\n customer=customer.id,\n publishableKey='",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029","\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"cart-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\nrequire 'vendor\u002Fautoload.php';\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\n\u002F\u002F Use an existing Customer ID if this is a returning customer.\n\u0024customer = \u0024stripe-\u003Ecustomers-\u003Ecreate\u0028\u0029;","\n\u0024ephemeralKey = \u0024stripe-\u003EephemeralKeys-\u003Ecreate\u0028[\n 'customer' =\u003E \u0024customer-\u003Eid,\n], [\n 'stripe_version' =\u003E '","2024-11-20.acacia","',\n]\u0029;","\n","\n\u0024paymentIntent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'eur',\n 'customer' =\u003E \u0024customer-\u003Eid,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n 'automatic_payment_methods' =\u003E [\n 'enabled' =\u003E 'true',\n ],","\n]\u0029;\n\necho json_encode\u0028\n [\n 'paymentIntent' =\u003E \u0024paymentIntent-\u003Eclient_secret,","\n 'ephemeralKey' =\u003E \u0024ephemeralKey-\u003Esecret,","\n 'customer' =\u003E \u0024customer-\u003Eid,\n 'publishableKey' =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n ]\n\u0029;\nhttp_response_code\u0028200\u0029;","\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"Server.java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.apiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\npost\u0028\n \"\u002Fpayment-sheet\",\n \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n CustomerCreateParams customerParams = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n Customer customer = Customer.create\u0028customerParams\u0029;","\n EphemeralKeyCreateParams ephemeralKeyParams =\n EphemeralKeyCreateParams.builder\u0028\u0029\n .setStripeVersion\u0028\"","2024-11-20.acacia","\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029\n .build\u0028\u0029;\n\n EphemeralKey ephemeralKey = EphemeralKey.create\u0028ephemeralKeyParams\u0029;","\n PaymentIntentCreateParams paymentIntentParams =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"eur\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029\n .setEnabled\u0028true\u0029\n .build\u0028\u0029\n \u0029","\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028paymentIntentParams","\u0029;","\n\n Map\u003CString, String\u003E responseData = new HashMap\u0028\u0029;","\n responseData.put\u0028\"paymentIntent\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"ephemeralKey\", ephemeralKey.getSecret\u0028\u0029\u0029;","\n\n responseData.put\u0028\"customer\", customer.getId\u0028\u0029\u0029;\n responseData.put\u0028\"publishableKey\", \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\u0029;\n\n return gson.toJson\u0028responseData\u0029;\n}\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\nconst stripe = require\u0028'stripe'\u0029\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;","\n\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\napp.post\u0028'\u002Fpayment-sheet', async \u0028req, res\u0029 =\u003E {\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n const customer = await stripe.customers.create\u0028\u0029;","\n const ephemeralKey = await stripe.ephemeralKeys.create\u0028\n {customer: customer.id},\n {apiVersion: '","2024-11-20.acacia","'}\n \u0029;","\n const paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer.id,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029;\n\n res.json\u0028{\n paymentIntent: paymentIntent.client_secret,","\n ephemeralKey: ephemeralKey.secret,","\n customer: customer.id,\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }\u0029;","\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"server.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\nfunc handlePaymentSheet\u0028w http.ResponseWriter, r *http.Request\u0029 {\n if r.Method \u0021= \"POST\" {\n http.Error\u0028w, http.StatusText\u0028http.StatusMethodNotAllowed\u0029, http.StatusMethodNotAllowed\u0029\n return\n }\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n cparams := \u0026stripe.CustomerParams{}\n c, _ := customer.New\u0028cparams\u0029\n","\n ekparams := \u0026stripe.EphemeralKeyParams{\n Customer: stripe.String\u0028c.ID\u0029,\n StripeVersion: stripe.String\u0028\"","2024-11-20.acacia","\"\u0029,\n }\n ek, _ := ephemeralKey.New\u0028ekparams\u0029","\n","\n piparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyEUR\u0029\u0029,\n Customer: stripe.String\u0028c.ID\u0029,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods: \u0026stripe.PaymentIntentAutomaticPaymentMethodsParams{\n Enabled: stripe.Bool\u0028true\u0029,\n },","\n }","\n pi, _ := paymentintent.New\u0028piparams\u0029","\n\n writeJSON\u0028w, struct {","\n PaymentIntent string \u0060json:\"paymentIntent\"\u0060","\n EphemeralKey string \u0060json:\"ephemeralKey\"\u0060","\n Customer string \u0060json:\"customer\"\u0060\n PublishableKey string \u0060json:\"publishableKey\"\u0060\n }{","\n PaymentIntent: pi.ClientSecret,","\n EphemeralKey: ek.Secret,","\n Customer: c.ID,\n PublishableKey: \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\n[HttpPost\u0028\"payment-sheet\"\u0029]\npublic ActionResult\u003CPaymentSheetCreateResponse\u003E CreatePaymentSheet\u0028[FromBody] CreatePaymentSheetRequest req\u0029\n{\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n var customerOptions = new CustomerCreateOptions\u0028\u0029;\n var customerService = new CustomerService\u0028\u0029;\n var customer = customerService.Create\u0028customerOptions\u0029;","\n var ephemeralKeyOptions = new EphemeralKeyCreateOptions\n {\n Customer = customer.Id,\n StripeVersion = \"","2024-11-20.acacia","\",\n };\n var ephemeralKeyService = new EphemeralKeyService\u0028\u0029;\n var ephemeralKey = ephemeralKeyService.Create\u0028ephemeralKeyOptions\u0029;","\n","\n var paymentIntentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"eur\",\n Customer = customer.Id,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions\n {\n Enabled = true,\n },","\n };","\n var paymentIntentService = new PaymentIntentService\u0028\u0029;\n PaymentIntent paymentIntent = paymentIntentService.Create\u0028paymentIntentOptions\u0029;","\n\n return new PaymentSheetCreateResponse\n {","\n PaymentIntent = paymentIntent.ClientSecret,","\n EphemeralKey = ephemeralKey.Secret,","\n\n Customer = customer.Id,\n PublishableKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n };\n}\n"]}]}}],"codeTabGroupID":"codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b"},"children":[]}]}]}},{"id":"pm-manual","title":"Listing payment methods manually","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"pm-manual","title":"Listing payment methods manually"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Test a running implementation of this endpoint on ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fglitch.com\u002Fedit\u002F#\u0021\u002Fremix\u002Fstripe-mobile-payment-sheet-automatic"},"children":["Glitch"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-server-endpoint-code.md","variables":{"setup_intent":false,"automatic_payment_methods":false,"cvc_recollection":false,"customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"curl","title":"curl","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"curl","title":"curl"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Create a Customer \u0028use an existing Customer ID if this is a returning customer\u0029\n","curl https:\u002F\u002Fapi.stripe.com","\u002Fv1\u002Fcustomers"," \\\n"," -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},":"," \\\n"," ","-X"," ","\"","POST","\"","\n","\n# Create an Ephemeral Key for the Customer\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fephemeral_keys \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\","\n","\n# Create a PaymentIntent\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\\n -d \"amount\"=1099 \\\n -d \"currency\"=\"eur\" \\","\n -d \"payment_method_types[]\"=\"bancontact\" \\\n -d \"payment_method_types[]\"=\"card\" \\\n -d \"payment_method_types[]\"=\"ideal\" \\\n -d \"payment_method_types[]\"=\"klarna\" \\\n -d \"payment_method_types[]\"=\"sepa_debit\" \\","\n"]}]}},{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n","\n\npost '\u002Fpayment-sheet' do\n # Use an existing Customer ID if this is a returning customer\n customer = Stripe::Customer.create","\n ephemeralKey = Stripe::EphemeralKey.create\u0028{\n customer: customer['id'],\n }, {stripe_version: '","2024-11-20.acacia","'}\u0029","\n paymentIntent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer['id'],","\n payment_method_types: ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n }\u0029","\n {\n paymentIntent: paymentIntent['client_secret'],","\n ephemeralKey: ephemeralKey['secret'],","\n customer: customer['id'],\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }.to_json","\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n","\n\n@app.route\u0028'\u002Fpayment-sheet', methods=['POST']\u0029\ndef payment_sheet\u0028\u0029:\n # Use an existing Customer ID if this is a returning customer\n customer = stripe.Customer.create\u0028\u0029","\n ephemeralKey = stripe.EphemeralKey.create\u0028\n customer=customer['id'],\n stripe_version='","2024-11-20.acacia","',\n \u0029","\n","\n paymentIntent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='eur',\n customer=customer['id'],","\n payment_method_types=[\"bancontact\", \"card\", \"ideal\", \"klarna\", \"sepa_debit\"],","\n \u0029\n return jsonify\u0028paymentIntent=paymentIntent.client_secret,","\n ephemeralKey=ephemeralKey.secret,","\n customer=customer.id,\n publishableKey='",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029","\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"cart-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\nrequire 'vendor\u002Fautoload.php';\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\n\u002F\u002F Use an existing Customer ID if this is a returning customer.\n\u0024customer = \u0024stripe-\u003Ecustomers-\u003Ecreate\u0028\u0029;","\n\u0024ephemeralKey = \u0024stripe-\u003EephemeralKeys-\u003Ecreate\u0028[\n 'customer' =\u003E \u0024customer-\u003Eid,\n], [\n 'stripe_version' =\u003E '","2024-11-20.acacia","',\n]\u0029;","\n","\n\u0024paymentIntent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'eur',\n 'customer' =\u003E \u0024customer-\u003Eid,","\n 'payment_method_types' =\u003E ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n]\u0029;\n\necho json_encode\u0028\n [\n 'paymentIntent' =\u003E \u0024paymentIntent-\u003Eclient_secret,","\n 'ephemeralKey' =\u003E \u0024ephemeralKey-\u003Esecret,","\n 'customer' =\u003E \u0024customer-\u003Eid,\n 'publishableKey' =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n ]\n\u0029;\nhttp_response_code\u0028200\u0029;","\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F This example sets up an endpoint using the Spark framework.\n\npost\u0028\"\u002Fpayment-sheet\", \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n CustomerCreateParams customerParams = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n Customer customer = Customer.create\u0028customerParams\u0029;","\n EphemeralKeyCreateParams ephemeralKeyParams =\n EphemeralKeyCreateParams.builder\u0028\u0029\n .setStripeVersion\u0028\"","2024-11-20.acacia","\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029\n .build\u0028\u0029;\n\n EphemeralKey ephemeralKey = EphemeralKey.create\u0028ephemeralKeyParams\u0029;","\n","\n List\u003CString\u003E paymentMethodTypes = new ArrayList\u003CString\u003E\u0028\u0029;","\n paymentMethodTypes.add\u0028\"bancontact\"\u0029;\n paymentMethodTypes.add\u0028\"card\"\u0029;\n paymentMethodTypes.add\u0028\"ideal\"\u0029;\n paymentMethodTypes.add\u0028\"klarna\"\u0029;\n paymentMethodTypes.add\u0028\"sepa_debit\"\u0029;","\n\n PaymentIntentCreateParams paymentIntentParams =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"eur\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029","\n .addAllPaymentMethodType\u0028paymentMethodTypes\u0029","\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028paymentIntentParams","\u0029;","\n\n Map\u003CString, String\u003E responseData = new HashMap\u0028\u0029;","\n responseData.put\u0028\"paymentIntent\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"ephemeralKey\", ephemeralKey.getSecret\u0028\u0029\u0029;\n responseData.put\u0028\"customer\", customer.getId\u0028\u0029\u0029;\n responseData.put\u0028\"publishableKey\", \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\u0029;\n\n return gson.toJson\u0028responseData\u0029;\n}\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\napp.post\u0028'\u002Fpayment-sheet', async \u0028req, res\u0029 =\u003E {\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n const customer = await stripe.customers.create\u0028\u0029;","\n const ephemeralKey = await stripe.ephemeralKeys.create\u0028\n {customer: customer.id},\n {apiVersion: '","2024-11-20.acacia","'}\n \u0029;","\n const paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer.id,","\n payment_method_types: ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n }\u0029;\n\n res.json\u0028{\n paymentIntent: paymentIntent.client_secret,","\n ephemeralKey: ephemeralKey.secret,","\n customer: customer.id,\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }\u0029;","\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"server.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\nfunc handlePaymentSheet\u0028w http.ResponseWriter, r *http.Request\u0029 {\n if r.Method \u0021= \"POST\" {\n http.Error\u0028w, http.StatusText\u0028http.StatusMethodNotAllowed\u0029, http.StatusMethodNotAllowed\u0029\n return\n }\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n cparams := \u0026stripe.CustomerParams{}\n c, _ := customer.New\u0028cparams\u0029\n","\n ekparams := \u0026stripe.EphemeralKeyParams{\n Customer: stripe.String\u0028c.ID\u0029,\n StripeVersion: stripe.String\u0028\"","2024-11-20.acacia","\"\u0029,\n }\n ek, _ := ephemeralKey.New\u0028ekparams\u0029","\n","\n piparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyEUR\u0029\u0029,\n Customer: stripe.String\u0028c.ID\u0029,","\n PaymentMethodTypes: []*string{\n stripe.String\u0028\"bancontact\"\u0029,\n stripe.String\u0028\"card\"\u0029,\n stripe.String\u0028\"ideal\"\u0029,\n stripe.String\u0028\"klarna\"\u0029,\n stripe.String\u0028\"sepa_debit\"\u0029,\n },","\n }","\n pi, _ := paymentintent.New\u0028piparams\u0029","\n\n writeJSON\u0028w, struct {","\n PaymentIntent string \u0060json:\"paymentIntent\"\u0060","\n EphemeralKey string \u0060json:\"ephemeralKey\"\u0060","\n Customer string \u0060json:\"customer\"\u0060\n PublishableKey string \u0060json:\"publishableKey\"\u0060\n }{","\n PaymentIntent: pi.ClientSecret,","\n EphemeralKey: ek.Secret,","\n Customer: c.ID,\n PublishableKey: \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\n[HttpPost\u0028\"payment-sheet\"\u0029]\npublic ActionResult\u003CPaymentSheetCreateResponse\u003E CreatePaymentSheet\u0028[FromBody] CreatePaymentSheetRequest req\u0029\n{\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n var customerOptions = new CustomerCreateOptions\u0028\u0029;\n var customerService = new CustomerService\u0028\u0029;\n var customer = customerService.Create\u0028customerOptions\u0029;","\n var ephemeralKeyOptions = new EphemeralKeyCreateOptions\n {\n Customer = customer.Id,\n StripeVersion = \"","2024-11-20.acacia","\",\n };\n var ephemeralKeyService = new EphemeralKeyService\u0028\u0029;\n var ephemeralKey = ephemeralKeyService.Create\u0028ephemeralKeyOptions\u0029;","\n","\n var paymentIntentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"eur\",\n Customer = customer.Id,","\n PaymentMethodTypes = new List\u003Cstring\u003E\n {\n \"bancontact\",\n \"card\",\n \"ideal\",\n \"klarna\",\n \"sepa_debit\",\n },","\n };","\n var paymentIntentService = new PaymentIntentService\u0028\u0029;\n PaymentIntent paymentIntent = paymentIntentService.Create\u0028paymentIntentOptions\u0029;","\n\n return new PaymentSheetCreateResponse\n {","\n PaymentIntent = paymentIntent.ClientSecret,","\n EphemeralKey = ephemeralKey.Secret,","\n\n Customer = customer.Id,\n PublishableKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n };\n}\n"]}]}}],"codeTabGroupID":"codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"caution"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Each payment method needs to support the currency passed in the PaymentIntent and your business needs to be based in one of the countries each payment method supports. See the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fintegration-options"},"children":["Payment method integration options"]}," page for more details about what’s supported."]}]}]}}]},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-collect-payment-details","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Collect payment details","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fintegrate-payment-sheet-android-apms.md","variables":{"payment_or_setup":"payment","Payment_or_Setup":"Payment","stripe_account":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fintegrate-payment-sheet-android-apms-common.md","variables":{"payment_or_setup":"payment","Payment_or_Setup":"Payment","stripe_account":false,"use_customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Before displaying the mobile Payment Element, your checkout page should:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Show the products being purchased and the total amount"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Collect any required shipping information using the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Felements\u002Faddress-element?platform=android"},"children":["Address Element"]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Include a checkout button to present Stripe’s UI"]}]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"compose","title":"Jetpack Compose","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"compose","title":"Jetpack Compose"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002Findex.html#-394860221%2FConstructors%2F2002900378"},"children":["Initialize"]}," a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," instance inside ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"onCreate"},"children":[]}," of your checkout Activity, passing a method to handle the result."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import androidx.compose.runtime.Composable\nimport com.stripe.android.paymentsheet.PaymentSheetResult\nimport com.stripe.android.paymentsheet.rememberPaymentSheet\n\n@Composable\nfun App\u0028\u0029 {\n val paymentSheet = rememberPaymentSheet\u0028::onPaymentSheetResult\u0029\n\n}\n\nprivate fun onPaymentSheetResult\u0028paymentSheetResult: PaymentSheetResult\u0029 {\n \u002F\u002F implemented in the next steps\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Next, fetch the ","Payment","Intent client secret, Ephemeral Key secret, Customer ID, and publishable key from the endpoint you created in the previous step. Set the publishable key using ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentConfiguration"},"children":[]}," and store the others for use when you present the PaymentSheet."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":2,"end":14},{"start":22,"end":39}],"remove":[]}},"children":["import androidx.compose.runtime.Composable",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.LocalContext\n\u002F\u002F Add the following lines to build.gradle to use this example's networking library:\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel:2.3.1'\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1'\nimport com.github.kittinunf.fuel.httpPost\nimport com.github.kittinunf.fuel.json.responseJson\nimport com.stripe.android.PaymentConfiguration\nimport com.stripe.android.paymentsheet.PaymentSheet"},"children":["\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.LocalContext\n\u002F\u002F Add the following lines to build.gradle to use this example's networking library:\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel:2.3.1'\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1'\nimport com.github.kittinunf.fuel.httpPost\nimport com.github.kittinunf.fuel.json.responseJson\nimport com.stripe.android.PaymentConfiguration\nimport com.stripe.android.paymentsheet.PaymentSheet"]},"\nimport com.stripe.android.paymentsheet.PaymentSheetResult\nimport com.stripe.android.paymentsheet.rememberPaymentSheet\nimport com.github.kittinunf.result.Result\n","\n@Composable\nfun App\u0028\u0029 {\n val paymentSheet = rememberPaymentSheet\u0028::onPaymentSheetResult\u0029",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n val context = LocalContext.current\n var customerConfig by remember { mutableStateOf\u003CPaymentSheet.CustomerConfiguration?\u003E\u0028null\u0029 }\n var paymentIntentClientSecret by remember { mutableStateOf\u003CString?\u003E\u0028null\u0029 }\n\n LaunchedEffect\u0028context\u0029 {\n \"Your backend endpoint\u002Fpayment-sheet\".httpPost\u0028\u0029.responseJson { _, _, result -\u003E\n if \u0028result is Result.Success\u0029 {\n val responseJson = result.get\u0028\u0029.obj\u0028\u0029\n paymentIntentClientSecret = responseJson.getString\u0028\"paymentIntent\"\u0029\n customerConfig = PaymentSheet.CustomerConfiguration\u0028\n id = responseJson.getString\u0028\"customer\"\u0029,\n ephemeralKeySecret = responseJson.getString\u0028\"ephemeralKey\"\u0029\n \u0029\n val publishableKey = responseJson.getString\u0028\"publishableKey\"\u0029\n PaymentConfiguration.init\u0028context, publishableKey\u0029\n }\n }\n }"},"children":["\n val context = LocalContext.current\n var customerConfig by remember { mutableStateOf\u003CPaymentSheet.CustomerConfiguration?\u003E\u0028null\u0029 }\n var ","payment","IntentClientSecret by remember { mutableStateOf\u003CString?\u003E\u0028null\u0029 }\n\n LaunchedEffect\u0028context\u0029 {\n \"Your backend endpoint\u002Fpayment-sheet\".httpPost\u0028\u0029.responseJson { _, _, result -\u003E\n if \u0028result is Result.Success\u0029 {\n val responseJson = result.get\u0028\u0029.obj\u0028\u0029\n ","payment","IntentClientSecret = responseJson.getString\u0028\"","payment","Intent\"\u0029","\n customerConfig = PaymentSheet.CustomerConfiguration\u0028\n id = responseJson.getString\u0028\"customer\"\u0029,\n ephemeralKeySecret = responseJson.getString\u0028\"ephemeralKey\"\u0029\n \u0029","\n val publishableKey = responseJson.getString\u0028\"publishableKey\"\u0029","\n PaymentConfiguration.init\u0028context, publishableKey\u0029","\n }\n }\n }"]},"\n}\n\nprivate fun onPaymentSheetResult\u0028paymentSheetResult: PaymentSheetResult\u0029 {\n \u002F\u002F implemented in the next steps\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When the customer taps your checkout button, call ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002Findex.html#1814490530%2FFunctions%2F2002900378"},"children":["presentWithPaymentIntent"]}," to present the payment sheet. After the customer completes the payment, the sheet dismisses and the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet-result-callback\u002Findex.html"},"children":["PaymentSheetResultCallback"]}," is called with a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet-result\u002Findex.html"},"children":["PaymentSheetResult"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":1,"end":2},{"start":43,"end":55},{"start":57,"end":74},{"start":76,"end":87}],"remove":[]}},"children":[{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\nimport androidx.compose.material.Button\nimport androidx.compose.material.Text"},"children":["\nimport androidx.compose.material.Button\nimport androidx.compose.material.Text"]},"\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.LocalContext\n\u002F\u002F Add the following lines to build.gradle to use this example's networking library:\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel:2.3.1'\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1'\nimport com.github.kittinunf.fuel.httpPost\nimport com.github.kittinunf.fuel.json.responseJson\nimport com.stripe.android.PaymentConfiguration\nimport com.stripe.android.paymentsheet.PaymentSheet\nimport com.stripe.android.paymentsheet.PaymentSheetResult\nimport com.stripe.android.paymentsheet.rememberPaymentSheet\nimport com.github.kittinunf.result.Result\n\n@OptIn\u0028ExperimentalCustomerSessionApi::class\u0029\n@Composable\nfun App\u0028\u0029 {\n val paymentSheet = rememberPaymentSheet\u0028::onPaymentSheetResult\u0029\n val context = LocalContext.current\n var customerConfig by remember { mutableStateOf\u003CPaymentSheet.CustomerConfiguration?\u003E\u0028null\u0029 }\n var ","payment","IntentClientSecret by remember { mutableStateOf\u003CString?\u003E\u0028null\u0029 }\n\n LaunchedEffect\u0028context\u0029 {\n \"Your backend endpoint\u002Fpayment-sheet\".httpPost\u0028\u0029.responseJson { _, _, result -\u003E\n if \u0028result is Result.Success\u0029 {\n val responseJson = result.get\u0028\u0029.obj\u0028\u0029\n ","payment","IntentClientSecret = responseJson.getString\u0028\"","payment","Intent\"\u0029","\n customerConfig = PaymentSheet.CustomerConfiguration\u0028\n id = responseJson.getString\u0028\"customer\"\u0029,\n ephemeralKeySecret = responseJson.getString\u0028\"ephemeralKey\"\u0029\n \u0029","\n val publishableKey = responseJson.getString\u0028\"publishableKey\"\u0029","\n PaymentConfiguration.init\u0028context, publishableKey\u0029","\n }\n }\n }",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n\n Button\u0028\n onClick = {\n val currentConfig = customerConfig\n val currentClientSecret = paymentIntentClientSecret\n\n if \u0028currentConfig \u0021= null \u0026\u0026 currentClientSecret \u0021= null\u0029 {\n presentPaymentSheet\u0028paymentSheet, currentConfig, currentClientSecret\u0029\n }\n }\n \u0029 {\n Text\u0028\"Checkout\"\u0029\n }"},"children":["\n\n Button\u0028\n onClick = {\n val currentConfig = customerConfig\n val currentClientSecret = ","payment","IntentClientSecret\n\n if \u0028currentConfig \u0021= null \u0026\u0026 currentClientSecret \u0021= null\u0029 {\n presentPaymentSheet\u0028paymentSheet, currentConfig, currentClientSecret\u0029\n }\n }\n \u0029 {\n Text\u0028\"Checkout\"\u0029\n }"]},"\n}",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n\nprivate fun presentPaymentSheet\u0028\n paymentSheet: PaymentSheet,\n customerConfig: PaymentSheet.CustomerConfiguration,\n paymentIntentClientSecret: String\n\u0029 {\n paymentSheet.presentWithPaymentIntent\u0028\n paymentIntentClientSecret,\n PaymentSheet.Configuration\u0028\n merchantDisplayName = \"My merchant name\",\n customer = customerConfig,\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles\n \u002F\u002F delayed notification payment methods like US bank accounts.\n allowsDelayedPaymentMethods = true\n \u0029\n \u0029\n}\n"},"children":["\n\nprivate fun presentPaymentSheet\u0028\n paymentSheet: PaymentSheet,\n customerConfig: PaymentSheet.CustomerConfiguration,\n ","payment","IntentClientSecret: String\n\u0029 {\n paymentSheet.presentWith","Payment","Intent\u0028\n ","payment","IntentClientSecret,\n PaymentSheet.Configuration\u0028\n merchantDisplayName = \"My merchant name\",\n customer = customerConfig,\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles\n \u002F\u002F delayed notification payment methods like US bank accounts.\n allowsDelayedPaymentMethods = true\n \u0029\n \u0029\n}\n"]},"\nprivate fun onPaymentSheetResult\u0028paymentSheetResult: PaymentSheetResult\u0029 {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n when\u0028paymentSheetResult\u0029 {\n is PaymentSheetResult.Canceled -\u003E {\n print\u0028\"Canceled\"\u0029\n }\n is PaymentSheetResult.Failed -\u003E {\n print\u0028\"Error: \u0024{paymentSheetResult.error}\"\u0029\n }\n is PaymentSheetResult.Completed -\u003E {\n \u002F\u002F Display for example, an order confirmation screen\n print\u0028\"Completed\"\u0029\n }\n }"},"children":["\n when\u0028paymentSheetResult\u0029 {\n is PaymentSheetResult.Canceled -\u003E {\n print\u0028\"Canceled\"\u0029\n }\n is PaymentSheetResult.Failed -\u003E {\n print\u0028\"Error: \u0024{paymentSheetResult.error}\"\u0029\n }\n is PaymentSheetResult.Completed -\u003E {\n \u002F\u002F Display for example, an order confirmation screen\n print\u0028\"Completed\"\u0029\n }\n }"]},"\n}\n"]}]}},{"id":"views","title":"Views \u0028Classic\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"views","title":"Views \u0028Classic\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002Findex.html#-394860221%2FConstructors%2F2002900378"},"children":["Initialize"]}," a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," instance inside ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"onCreate"},"children":[]}," of your checkout Activity, passing a method to handle the result."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import com.stripe.android.paymentsheet.PaymentSheet\n\nclass CheckoutActivity : AppCompatActivity\u0028\u0029 {\n lateinit var paymentSheet: PaymentSheet\n\n override fun onCreate\u0028savedInstanceState: Bundle?\u0029 {\n super.onCreate\u0028savedInstanceState\u0029\n paymentSheet = PaymentSheet\u0028this, ::onPaymentSheetResult\u0029\n }\n\n fun onPaymentSheetResult\u0028paymentSheetResult: PaymentSheetResult\u0029 {\n \u002F\u002F implemented in the next steps\n }\n}\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import com.stripe.android.paymentsheet.*;\n\nclass CheckoutActivity extends AppCompatActivity {\n PaymentSheet paymentSheet;\n\n @Override\n protected void onCreate\u0028@Nullable Bundle savedInstanceState\u0029 {\n super.onCreate\u0028savedInstanceState\u0029;\n paymentSheet = new PaymentSheet\u0028this, this::onPaymentSheetResult\u0029;\n }\n\n void onPaymentSheetResult\u0028final PaymentSheetResult paymentSheetResult\u0029 {\n \u002F\u002F implemented in the next steps\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_49e85e92038e4a4d62cbbbc8853e89d97643a1b4"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Next, fetch the ","Payment","Intent client secret, Ephemeral Key secret, Customer ID, and publishable key from the endpoint you created in the previous step. Set the publishable key using ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentConfiguration"},"children":[]}," and store the others for use when you present the PaymentSheet."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":2,"end":7},{"start":11,"end":12},{"start":17,"end":28}],"remove":[]}},"children":["import com.stripe.android.paymentsheet.PaymentSheet",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n\u002F\u002F Add the following lines to build.gradle to use this example's networking library:\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel:2.3.1'\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1'\nimport com.github.kittinunf.fuel.httpPost\nimport com.github.kittinunf.fuel.json.responseJson\nimport com.github.kittinunf.result.Result"},"children":["\n\u002F\u002F Add the following lines to build.gradle to use this example's networking library:\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel:2.3.1'\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1'\nimport com.github.kittinunf.fuel.httpPost\nimport com.github.kittinunf.fuel.json.responseJson\nimport com.github.kittinunf.result.Result"]},"\n","\nclass CheckoutActivity : AppCompatActivity\u0028\u0029 {\n lateinit var paymentSheet: PaymentSheet",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n lateinit var customerConfig: PaymentSheet.CustomerConfiguration\n lateinit var paymentIntentClientSecret: String"},"children":["\n lateinit var customerConfig: PaymentSheet.CustomerConfiguration\n lateinit var ","payment","IntentClientSecret: String"]},"\n\n override fun onCreate\u0028savedInstanceState: Bundle?\u0029 {\n super.onCreate\u0028savedInstanceState\u0029\n paymentSheet = PaymentSheet\u0028this, ::onPaymentSheetResult\u0029",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n \"Your backend endpoint\u002Fpayment-sheet\".httpPost\u0028\u0029.responseJson { _, _, result -\u003E\n if \u0028result is Result.Success\u0029 {\n val responseJson = result.get\u0028\u0029.obj\u0028\u0029\n paymentIntentClientSecret = responseJson.getString\u0028\"paymentIntent\"\u0029\n customerConfig = PaymentSheet.CustomerConfiguration\u0028\n id = responseJson.getString\u0028\"customer\"\u0029,\n ephemeralKeySecret = responseJson.getString\u0028\"ephemeralKey\"\u0029\n \u0029\n val publishableKey = responseJson.getString\u0028\"publishableKey\"\u0029\n PaymentConfiguration.init\u0028this, publishableKey\u0029\n }\n }"},"children":["\n \"Your backend endpoint\u002Fpayment-sheet\".httpPost\u0028\u0029.responseJson { _, _, result -\u003E\n if \u0028result is Result.Success\u0029 {\n val responseJson = result.get\u0028\u0029.obj\u0028\u0029\n ","payment","IntentClientSecret = responseJson.getString\u0028\"","payment","Intent\"\u0029","\n customerConfig = PaymentSheet.CustomerConfiguration\u0028\n id = responseJson.getString\u0028\"customer\"\u0029,\n ephemeralKeySecret = responseJson.getString\u0028\"ephemeralKey\"\u0029\n \u0029","\n val publishableKey = responseJson.getString\u0028\"publishableKey\"\u0029","\n PaymentConfiguration.init\u0028this, publishableKey\u0029","\n }\n }"]},"\n }\n\n fun onPaymentSheetResult\u0028paymentSheetResult: PaymentSheetResult\u0029 {\n \u002F\u002F implemented in the next steps\n }\n}\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":2,"end":7},{"start":11,"end":12},{"start":19,"end":35}],"remove":[]}},"children":["import com.stripe.android.paymentsheet.*;",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\nimport com.stripe.android.PaymentConfiguration;\n\u002F\u002F Add the following lines to build.gradle to use this example's networking library:\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel:2.3.1'\nimport com.github.kittinunf.fuel.Fuel;\nimport com.github.kittinunf.fuel.core.FuelError;\nimport com.github.kittinunf.fuel.core.Handler;"},"children":["\nimport com.stripe.android.PaymentConfiguration;\n\u002F\u002F Add the following lines to build.gradle to use this example's networking library:\n\u002F\u002F implementation 'com.github.kittinunf.fuel:fuel:2.3.1'\nimport com.github.kittinunf.fuel.Fuel;\nimport com.github.kittinunf.fuel.core.FuelError;\nimport com.github.kittinunf.fuel.core.Handler;"]},"\n\nclass CheckoutActivity extends AppCompatActivity {\n PaymentSheet paymentSheet;",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n String paymentIntentClientSecret;\n PaymentSheet.CustomerConfiguration customerConfig;"},"children":["\n String ","payment","IntentClientSecret;\n PaymentSheet.CustomerConfiguration customerConfig;"]},"\n\n @Override\n protected void onCreate\u0028@Nullable Bundle savedInstanceState\u0029 {\n super.onCreate\u0028savedInstanceState\u0029;\n paymentSheet = new PaymentSheet\u0028this, this::onPaymentSheetResult\u0029;\n",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n Fuel.INSTANCE.post\u0028\"Your backend endpoint\u002Fpayment-sheet\", null\u0029.responseString\u0028new Handler\u003CString\u003E\u0028\u0029 {\n @Override\n public void success\u0028String s\u0029 {\n try {\n final JSONObject result = new JSONObject\u0028s\u0029;\n customerConfig = new PaymentSheet.CustomerConfiguration\u0028\n result.getString\u0028\"customer\"\u0029,\n result.getString\u0028\"ephemeralKey\"\u0029\n \u0029;\n paymentIntentClientSecret = result.getString\u0028\"paymentIntent\"\u0029;\n PaymentConfiguration.init\u0028getApplicationContext\u0028\u0029, result.getString\u0028\"publishableKey\"\u0029\u0029;\n } catch \u0028JSONException e\u0029 { \u002F* handle error *\u002F }\n }\n\n @Override\n public void failure\u0028@NonNull FuelError fuelError\u0029 { \u002F* handle error *\u002F }\n }\u0029;"},"children":["\n Fuel.INSTANCE.post\u0028\"Your backend endpoint\u002Fpayment-sheet\", null\u0029.responseString\u0028new Handler\u003CString\u003E\u0028\u0029 {\n @Override\n public void success\u0028String s\u0029 {\n try {\n final JSONObject result = new JSONObject\u0028s\u0029;\n customerConfig = new PaymentSheet.CustomerConfiguration\u0028\n result.getString\u0028\"customer\"\u0029,\n result.getString\u0028\"ephemeralKey\"\u0029\n \u0029;\n ","payment","IntentClientSecret = result.getString\u0028\"","payment","Intent\"\u0029;","\n PaymentConfiguration.init\u0028getApplicationContext\u0028\u0029, result.getString\u0028\"publishableKey\"\u0029\u0029;","\n } catch \u0028JSONException e\u0029 { \u002F* handle error *\u002F }\n }\n\n @Override\n public void failure\u0028@NonNull FuelError fuelError\u0029 { \u002F* handle error *\u002F }\n }\u0029;"]},"\n }\n\n void onPaymentSheetResult\u0028final PaymentSheetResult paymentSheetResult\u0029 {\n \u002F\u002F implemented in the next steps\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_7f919183fa20e63a7e80a08d98a69550b553c40d"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When the customer taps your checkout button, call ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002Findex.html#1814490530%2FFunctions%2F2002900378"},"children":["presentWithPaymentIntent"]}," to present the payment sheet. After the customer completes the payment, the sheet dismisses and the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet-result-callback\u002Findex.html"},"children":["PaymentSheetResultCallback"]}," is called with a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet-result\u002Findex.html"},"children":["PaymentSheetResult"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":7,"end":18},{"start":21,"end":32}],"remove":[]}},"children":["\u002F\u002F ...\nclass CheckoutActivity : AppCompatActivity\u0028\u0029 {\n lateinit var paymentSheet: PaymentSheet\n lateinit var customerConfig: PaymentSheet.CustomerConfiguration\n lateinit var ","payment","IntentClientSecret: String\n \u002F\u002F ...",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n fun presentPaymentSheet\u0028\u0029 {\n paymentSheet.presentWithPaymentIntent\u0028\n paymentIntentClientSecret,\n PaymentSheet.Configuration\u0028\n merchantDisplayName = \"My merchant name\",\n customer = customerConfig,\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles\n \u002F\u002F delayed notification payment methods like US bank accounts.\n allowsDelayedPaymentMethods = true\n \u0029\n \u0029\n }"},"children":["\n fun presentPaymentSheet\u0028\u0029 {\n paymentSheet.presentWith","Payment","Intent\u0028\n ","payment","IntentClientSecret,\n PaymentSheet.Configuration\u0028\n merchantDisplayName = \"My merchant name\",\n customer = customerConfig,\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles\n \u002F\u002F delayed notification payment methods like US bank accounts.\n allowsDelayedPaymentMethods = true\n \u0029\n \u0029\n }"]},"\n\n fun onPaymentSheetResult\u0028paymentSheetResult: PaymentSheetResult\u0029 {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n when\u0028paymentSheetResult\u0029 {\n is PaymentSheetResult.Canceled -\u003E {\n print\u0028\"Canceled\"\u0029\n }\n is PaymentSheetResult.Failed -\u003E {\n print\u0028\"Error: \u0024{paymentSheetResult.error}\"\u0029\n }\n is PaymentSheetResult.Completed -\u003E {\n \u002F\u002F Display for example, an order confirmation screen\n print\u0028\"Completed\"\u0029\n }\n }"},"children":["\n when\u0028paymentSheetResult\u0029 {\n is PaymentSheetResult.Canceled -\u003E {\n print\u0028\"Canceled\"\u0029\n }\n is PaymentSheetResult.Failed -\u003E {\n print\u0028\"Error: \u0024{paymentSheetResult.error}\"\u0029\n }\n is PaymentSheetResult.Completed -\u003E {\n \u002F\u002F Display for example, an order confirmation screen\n print\u0028\"Completed\"\u0029\n }\n }"]},"\n }\n}\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":3,"end":3},{"start":8,"end":19},{"start":24,"end":32}],"remove":[]}},"children":["\u002F\u002F ...\npublic class CheckoutActivity extends AppCompatActivity {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n private static final String TAG = \"CheckoutActivity\";"},"children":["\n private static final String TAG = \"CheckoutActivity\";"]},"\n private PaymentSheet paymentSheet;\n private String ","payment","ClientSecret;\n PaymentSheet.CustomerConfiguration customerConfig;\n \u002F\u002F ...",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n private void presentPaymentSheet\u0028\u0029 {\n final PaymentSheet.Configuration configuration = new PaymentSheet.Configuration.Builder\u0028\"Example, Inc.\"\u0029\n .customer\u0028customerConfig\u0029\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles payment methods\n \u002F\u002F delayed notification payment methods like US bank accounts.\n .allowsDelayedPaymentMethods\u0028true\u0029\n .build\u0028\u0029\n paymentSheet.presentWithPaymentIntent\u0028\n paymentClientSecret,\n configuration\n \u0029;\n }"},"children":["\n private void presentPaymentSheet\u0028\u0029 {\n final PaymentSheet.Configuration configuration = new PaymentSheet.Configuration.Builder\u0028\"Example, Inc.\"\u0029\n .customer\u0028customerConfig\u0029\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business handles payment methods\n \u002F\u002F delayed notification payment methods like US bank accounts.\n .allowsDelayedPaymentMethods\u0028true\u0029\n .build\u0028\u0029\n paymentSheet.presentWith","Payment","Intent\u0028\n ","payment","ClientSecret,\n configuration\n \u0029;\n }"]},"\n\n private void onPaymentSheetResult\u0028\n final PaymentSheetResult paymentSheetResult\n \u0029 {",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n if \u0028paymentSheetResult instanceof PaymentSheetResult.Canceled\u0029 {\n Log.d\u0028TAG, \"Canceled\"\u0029\n } else if \u0028paymentSheetResult instanceof PaymentSheetResult.Failed\u0029 {\n Log.e\u0028TAG, \"Got error: \", \u0028\u0028PaymentSheetResult.Failed\u0029 paymentSheetResult\u0029.getError\u0028\u0029\u0029;\n } else if \u0028paymentSheetResult instanceof PaymentSheetResult.Completed\u0029 {\n \u002F\u002F Display for example, an order confirmation screen\n Log.d\u0028TAG, \"Completed\"\u0029\n }\n }"},"children":["\n if \u0028paymentSheetResult instanceof PaymentSheetResult.Canceled\u0029 {\n Log.d\u0028TAG, \"Canceled\"\u0029\n } else if \u0028paymentSheetResult instanceof PaymentSheetResult.Failed\u0029 {\n Log.e\u0028TAG, \"Got error: \", \u0028\u0028PaymentSheetResult.Failed\u0029 paymentSheetResult\u0029.getError\u0028\u0029\u0029;\n } else if \u0028paymentSheetResult instanceof PaymentSheetResult.Completed\u0029 {\n \u002F\u002F Display for example, an order confirmation screen\n Log.d\u0028TAG, \"Completed\"\u0029\n }\n }"]},"\n}\n"]}]}}],"codeTabGroupID":"codetab_759d446e1bf71cf57710491a60d1f0e6efd13df5"},"children":[]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-post-confirm.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Setting ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allowsDelayedPaymentMethods"},"children":[]}," to true allows ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment methods like US bank accounts. For these payment methods, the final payment status isn’t known when the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," completes, and instead succeeds or fails later. If you support these types of payment methods, inform the customer their order is confirmed and only fulfill their order \u0028for example, ship their product\u0029 when the payment is successful."]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-post-payment","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Handle post-payment events","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fhandle-post-payment-events.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe sends a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes#event_types-payment_intent.succeeded"},"children":["payment_intent.succeeded"]}," event when the payment completes. Use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fwebhooks"},"children":["Dashboard webhook tool"]}," or follow the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fwebhooks\u002Fquickstart"},"children":["webhook guide"]}," to receive these events and run actions, such as sending an order confirmation email to your customer, logging the sale in a database, or starting a shipping workflow."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events is what enables you to accept ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Fpayments\u002Fpayment-methods-guide"},"children":["different types of payment methods"]}," with a single integration."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In addition to handling the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.succeeded"},"children":[]}," event, we recommend handling these other events when collecting payments with the Payment Element:"]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Event"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Description"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Action"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.succeeded"},"children":["payment_intent.succeeded"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer successfully completes a payment."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Send the customer an order confirmation and ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"fulfillment"},"children":["fulfill"]}," their order."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.processing"},"children":["payment_intent.processing"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer successfully initiates a payment, but the payment has yet to complete. This event is most commonly sent when the customer initiates a bank debit. It’s followed by either a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.succeeded"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.payment_failed"},"children":[]}," event in the future."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Send the customer an order confirmation that indicates their payment is pending. For digital goods, you might want to fulfill the order before waiting for payment to complete."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.payment_failed"},"children":["payment_intent.payment_failed"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer attempts a payment, but the payment fails."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["If a payment transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_failed"},"children":[]},", offer the customer another attempt to pay."]}]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-test-the-integration","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Test the integration","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Ftesting-auto-pm.md","variables":{"mobile":true}},"children":[{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"test-cards","title":"Cards","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-cards","title":"Cards"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Card number"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4242424242424242","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment succeeds and doesn’t require authentication."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000002500003155","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment requires ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"sca"},"children":["authentication"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000000000009995","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card is declined with a decline code like ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"insufficient_funds"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"6205500000000000004","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The UnionPay card has a variable length of 13-19 digits."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]}]}]}]}},{"id":"test-bank-redirects","title":"Bank redirects","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-redirects","title":"Bank redirects"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Bancontact, iDEAL"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and immediate notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and delayed notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK payments fail in a variety of ways—immediate failures \u0028for example, the code is expired or invalid\u0029, delayed errors \u0028the bank declines\u0029 or timeouts \u0028the customer didn’t respond in time\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Use email patterns to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fblik\u002Faccept-a-payment#simulate-failures"},"children":["simulate the different failures."]}]}]}]}]}]}},{"id":"test-bank-debits","title":"Bank debits","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-debits","title":"Bank debits"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with SEPA Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT321904300235473204"},"children":[]},". The confirmed PaymentIntent initially transitions to processing, then transitions to the succeeded status three minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment intent status transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_payment_method"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT861904300235473202"},"children":[]},"."]}]}]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["Testing"]}," for additional information to test your integration."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-link","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable Link","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-link.md","variables":{"platform":"android"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Enable Link in your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Payment Method settings"]}," to allow your customers to securely save and reuse their payment information using Link’s one-click express checkout button."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Pass your customer’s email to the Mobile Payment Element","id":"pass-your-customer’s-email-to-the-mobile-payment-element"},"children":["Pass your customer’s email to the Mobile Payment Element"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Link authenticates a customer using their email address. Stripe recommends prefilling as much information as possible to streamline the checkout process."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To prefill the customer’s name, email address, and phone number, supply ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"defaultBillingDetails"},"children":[]}," with your customer information when initializing ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.Configuration"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["let configuration = PaymentSheet.Configuration\u0028\n merchantDisplayName = \"Example, Inc.\",\n defaultBillingDetails = PaymentSheet.BillingDetails\u0028\n name = \"Jenny Rosen\",\n email = \"jenny.rosen@example.com\",\n phone = \"888-888-8888\"\n \u0029\n\u0029\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.BillingDetails billingDetails =\n new PaymentSheet.BillingDetails.Builder\u0028\u0029\n .name\u0028\"Jenny Rosen\"\u0029\n .email\u0028\"jenny.rosen@example.com\"\u0029\n .phone\u0028\"888-888-8888\"\u0029\n .build\u0028\u0029;\nPaymentSheet.Configuration configuration =\n new PaymentSheet.Configuration.Builder\u0028...\u0029\n .defaultBillingDetails\u0028billingDetails\u0029\n .build\u0028\u0029;\n"]}]}}],"codeTabGroupID":"codetab_12173bde2f038b5a0c00e0ed2f4f5cd78a4430ee"},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-google-pay","beta":false,"preview":false,"collapsable":true,"numbered":false,"optional":true,"title":"Enable Google Pay","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-google-pay.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Set up your integration","id":"set-up-your-integration"},"children":["Set up your integration"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fgoogle-pay\u002Fstep-1.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To use Google Pay, first enable the Google Pay API by adding the following to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"\u003Capplication\u003E"},"children":[]}," tag of your ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["AndroidManifest.xml"]},":"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"id":"setup-manifest","language":"xml","filename":"AndroidManifest.xml","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Capplication\u003E\n ...\n \u003Cmeta-data\n android:name=\"com.google.android.gms.wallet.api.enabled\"\n android:value=\"true\" \u002F\u003E\n\u003C\u002Fapplication\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This guide assumes you’re using the latest version of the Stripe Android SDK."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"none","items":[{"id":"groovy","title":"Groovy","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"groovy","title":"Groovy"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"id":"setup-gradle","language":"groovy","filename":"build.gradle","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["dependencies {\n implementation 'com.stripe:stripe-android:","21.2.0","'\n}\n"]}]}},{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","filename":"build.gradle.kts","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["dependencies {\n implementation\u0028\"com.stripe:stripe-android:","21.2.0","\"\u0029\n}\n"]}]}}],"codeTabGroupID":"codetab_0f2f66ea14fdbf5d24e7cdcadf0889a1bb450e16"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For more details, see Google Pay’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdevelopers.google.com\u002Fpay\u002Fapi\u002Fandroid\u002Fguides\u002Fsetup"},"children":["Set up Google Pay API"]}," for Android."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Add Google Pay","id":"add-google-pay"},"children":["Add Google Pay"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To add Google Pay to your integration, pass a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-google-pay-configuration\u002Findex.html"},"children":["PaymentSheet.GooglePayConfiguration"]}," with your Google Pay environment \u0028production or test\u0029 and the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Faccount"},"children":["country code of your business"]}," when initializing ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-configuration\u002Findex.html"},"children":["PaymentSheet.Configuration"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["val googlePayConfiguration = PaymentSheet.GooglePayConfiguration\u0028\n environment = PaymentSheet.GooglePayConfiguration.Environment.Test,\n countryCode = \"US\",\n currencyCode = \"USD\" \u002F\u002F Required for Setup Intents, optional for Payment Intents\n\u0029\nval configuration = PaymentSheet.Configuration\u0028...\u0029\nconfiguration.googlePay = googlePayConfiguration\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\nfinal PaymentSheet.GooglePayConfiguration googlePayConfiguration =\n new PaymentSheet.GooglePayConfiguration\u0028\n PaymentSheet.GooglePayConfiguration.Environment.Test,\n \"US\"\n \u0029;\n\n final PaymentSheet.Configuration configuration = \u002F\u002F ...\n configuration.setGooglePay\u0028googlePayConfiguration\u0029;\n\u0029;\n"]}]}}],"codeTabGroupID":"codetab_7ffb12ddcce6702baaafbc97a9e790aee97abec7"},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-card-scanning","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable card scanning","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-card-scanning-android.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To enable card scanning support, add ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"stripecardscan"},"children":[]}," to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"dependencies"},"children":[]}," block of your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fbuild\u002Fdependencies"},"children":["app\u002Fbuild.gradle"]}," file:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"none","items":[{"id":"groovy","title":"Groovy","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"groovy","title":"Groovy"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"groovy","filename":"build.gradle","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["apply plugin: 'com.android.application'\n\nandroid { ... }\n\ndependencies {\n \u002F\u002F ...\n\n \u002F\u002F StripeCardScan\n implementation 'com.stripe:stripecardscan:","21.2.0","'\n}\n"]}]}},{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","filename":"build.gradle.kts","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["plugins {\n id\u0028\"com.android.application\"\u0029\n}\n\nandroid { ... }\n\ndependencies {\n \u002F\u002F ...\n\n \u002F\u002F StripeCardScan\n implementation\u0028\"com.stripe:stripecardscan:","21.2.0","\"\u0029\n}\n"]}]}}],"codeTabGroupID":"codetab_ed90e5acf324687a60c4f508a02b1dd6ca38e9a5"},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-ach","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable ACH payments","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-ach-android.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To enable ACH debit payments include Financial Connections as a dependency for your app."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fandroid-install-sdk.md","variables":{"mainDep":{"name":"Financial Connections","groupId":"com.stripe","artifactId":"financial-connections"},"dont_set_publishable_key":true,"additionalDep":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-android"},"children":["Stripe Android SDK"]}," is open source and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002F"},"children":["fully documented"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To install the SDK, add ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"copyable":false},"children":["financial-connections"]}," to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"dependencies"},"children":[]}," block of your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fbuild\u002Fdependencies"},"children":["app\u002Fbuild.gradle"]}," file:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"none","items":[{"id":"groovy","title":"Groovy","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"groovy","title":"Groovy"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"groovy","filename":"build.gradle","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["apply plugin: 'com.android.application'\n\nandroid { ... }\n\ndependencies {\n \u002F\u002F ...\n","\n \u002F\u002F ","Financial Connections"," Android SDK\n implementation '","com.stripe",":","financial-connections",":","21.2.0","'","\n}\n"]}]}},{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","filename":"build.gradle.kts","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["plugins {\n id\u0028\"com.android.application\"\u0029\n}\n\nandroid { ... }\n\ndependencies {\n \u002F\u002F ...\n","\n \u002F\u002F ","Financial Connections"," Android SDK\n implementation\u0028\"","com.stripe",":","financial-connections",":","21.2.0","\"\u0029","\n}\n"]}]}}],"codeTabGroupID":"codetab_87365a1707c45a4438a6bb001d2c3776fcc2474c"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For details on the latest SDK release and past versions, see the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-android\u002Freleases"},"children":["Releases"]}," page on GitHub. To receive notifications when a new release is published, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fgithub\u002Fmanaging-subscriptions-and-notifications-on-github\u002Fconfiguring-notifications#configuring-your-watch-settings-for-an-individual-repository"},"children":["watch releases for the repository"]},"."]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-customization","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Customize the sheet","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-customization-android.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["All customization is configured using the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-configuration\u002Findex.html"},"children":["PaymentSheet.Configuration"]}," object."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Appearance","id":"appearance"},"children":["Appearance"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Customize colors, fonts, and more to match the look and feel of your app by using the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Felements\u002Fappearance-api?platform=android"},"children":["appearance API"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Payment method layout","id":"payment-method-layout"},"children":["Payment method layout"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Configure the layout of payment methods in the sheet using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-configuration\u002F-builder\u002Findex.html#2123253356%2FFunctions%2F2002900378"},"children":["paymentMethodLayout"]},". You can display them horizontally, vertically, or let Stripe optimize the layout automatically."]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fandroid-mpe-payment-method-layouts.3bcfe828ceaad1a94e0572a22d91733f.png","ignoreAltTextRequirement":true,"zoomable":true},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.Configuration.Builder\u0028\"Example, Inc.\"\u0029\n .paymentMethodLayout\u0028PaymentSheet.PaymentMethodLayout.Automatic\u0029\n .build\u0028\u0029\n\u0029\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["new PaymentSheet.Configuration.Builder\u0028\"Example, Inc.\"\u0029\n .paymentMethodLayout\u0028PaymentSheet.PaymentMethodLayout.Automatic\u0029\n .build\u0028\u0029;\n"]}]}}],"codeTabGroupID":"codetab_b63a496355e227413874c6b058f502917ed6e5a2"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Collect users addresses","id":"collect-users-addresses"},"children":["Collect users addresses"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Collect local and international shipping or billing addresses from your customers using the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Felements\u002Faddress-element?platform=android"},"children":["Address Element"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Merchant display name","id":"merchant-display-name"},"children":["Merchant display name"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Specify a customer-facing business name by setting ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-configuration\u002Findex.html#-191101533%2FProperties%2F2002900378"},"children":["merchantDisplayName"]},". By default, this is your app’s name."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.Configuration\u0028\n merchantDisplayName = \"My app, Inc.\"\n\u0029\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["new PaymentSheet.Configuration\u0028\n \"My app, Inc.\"\n\u0029;\n"]}]}}],"codeTabGroupID":"codetab_cdbc0bc221b821dd77ea26df8e74cea62c240b58"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Dark mode","id":"dark-mode"},"children":["Dark mode"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," automatically adapts to the user’s system-wide appearance settings \u0028light and dark mode\u0029. You can change this by setting light or dark mode on your app:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F force dark\nAppCompatDelegate.setDefaultNightMode\u0028AppCompatDelegate.MODE_NIGHT_YES\u0029\n\u002F\u002F force light\nAppCompatDelegate.setDefaultNightMode\u0028AppCompatDelegate.MODE_NIGHT_NO\u0029\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F force dark\nAppCompatDelegate.setDefaultNightMode\u0028AppCompatDelegate.MODE_NIGHT_YES\u0029;\n\u002F\u002F force light\nAppCompatDelegate.setDefaultNightMode\u0028AppCompatDelegate.MODE_NIGHT_NO\u0029;\n"]}]}}],"codeTabGroupID":"codetab_6788c1a85043591ca8d21d86d7319f271f7f57e9"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Default billing details","id":"default-billing-details"},"children":["Default billing details"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fpartials\u002Fduring-payment\u002Fdefault-billing-details-android.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To set default values for billing details collected in the payment sheet, configure the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"defaultBillingDetails"},"children":[]}," property. The ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," pre-populates its fields with the values that you provide."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["val address = PaymentSheet.Address\u0028country = \"US\"\u0029\nval billingDetails = PaymentSheet.BillingDetails\u0028\n address = address,\n email = \"foo@bar.com\"\n\u0029\nval configuration = PaymentSheet.Configuration\u0028\n merchantDisplayName = ...,\n defaultBillingDetails = billingDetails\n\u0029\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.Address address =\n new PaymentSheet.Address.Builder\u0028\u0029\n .country\u0028\"US\"\u0029\n .build\u0028\u0029;\nPaymentSheet.BillingDetails billingDetails =\n new PaymentSheet.BillingDetails.Builder\u0028\u0029\n .address\u0028address\u0029\n .email\u0028\"foo@bar.com\"\u0029\n .build\u0028\u0029;\nPaymentSheet.Configuration configuration =\n new PaymentSheet.Configuration.Builder\u0028...\u0029\n .defaultBillingDetails\u0028billingDetails\u0029\n .build\u0028\u0029;\n"]}]}}],"codeTabGroupID":"codetab_dbe2950229c8dfdc7056af8e0c4b615fd2c0beda"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Billing details collection","id":"billing-details-collection"},"children":["Billing details collection"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fpartials\u002Fduring-payment\u002Fbilling-details-collection-payment-element-android.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"billingDetailsCollectionConfiguration"},"children":[]}," to specify how you want to collect billing details in the payment sheet."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can collect your customer’s name, email, phone number, and address."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you only want to billing details required by the payment method, set ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod"},"children":[]}," to true. In that case, the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.Configuration.defaultBillingDetails"},"children":[]}," are set as the payment method’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_methods\u002Fobject?lang=node#payment_method_object-billing_details"},"children":["billing details"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you want to collect additional billing details that aren’t necessarily required by the payment method, set ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod"},"children":[]}," to false. In that case, the billing details collected through the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," are set as the payment method’s billing details."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["val billingDetails = PaymentSheet.BillingDetails\u0028\n email = \"foo@bar.com\"\n\u0029\nval billingDetailsCollectionConfiguration = BillingDetailsCollectionConfiguration\u0028\n attachDefaultsToPaymentMethod = true,\n name = BillingDetailsCollectionConfiguration.CollectionMode.Always,\n email = BillingDetailsCollectionConfiguration.CollectionMode.Never,\n address = BillingDetailsCollectionConfiguration.AddressCollectionMode.Full,\n\u0029\nval configuration = PaymentSheet.Configuration\u0028\n merchantDisplayName = ...,\n defaultBillingDetails = billingDetails,\n billingDetailsCollectionConfiguration = billingDetailsCollectionConfiguration,\n\u0029\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["PaymentSheet.BillingDetails billingDetails =\n new PaymentSheet.BillingDetails.Builder\u0028\u0029\n .email\u0028\"foo@bar.com\"\u0029\n .build\u0028\u0029;\nBillingDetailsCollectionConfiguration billingDetailsCollectionConfiguration = new BillingDetailsCollectionConfiguration\u0028\n \u002F* name *\u002F BillingDetailsCollectionConfiguration.CollectionMode.Always,\n \u002F* email *\u002F BillingDetailsCollectionConfiguration.CollectionMode.Never,\n \u002F* phone *\u002F BillingDetailsCollectionConfiguration.CollectionMode.Automatic,\n \u002F* address *\u002F BillingDetailsCollectionConfiguration.AddressCollectionMode.Automatic,\n \u002F* attachDefaultsToPaymentMethod *\u002F true\n\u0029\nPaymentSheet.Configuration configuration =\n new PaymentSheet.Configuration.Builder\u0028...\u0029\n .defaultBillingDetails\u0028billingDetails\u0029\n .billingDetailsCollectionConfiguration\u0028billingDetailsCollectionConfiguration\u0029\n .build\u0028\u0029;\n"]}]}}],"codeTabGroupID":"codetab_b1f498ee2bc066e5e960bb810787f9c4ca0779ed"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Consult with your legal counsel regarding laws that apply to collecting information. Only collect phone numbers if you need them for the transaction."]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-logout","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Handle user logout","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fhandle-user-logout.md","variables":{"platform":"android"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," stores some information locally to remember whether a user has used Link within an app. To clear the internal state of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]},", call the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet.resetCustomer\u0028\u0029"},"children":[]}," method when your user logs out."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["class MyActivity: Activity {\n\n fun onLogoutButtonClicked\u0028\u0029 {\n PaymentSheet.resetCustomer\u0028this\u0029\n \u002F\u002F Other logout logic required by your app\n }\n}\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import com.stripe.android.paymentsheet.*;\n\nclass MyActivity extends Activity {\n\n void onLogoutButtonClicked\u0028\u0029 {\n PaymentSheet.resetCustomer\u0028this\u0029\n \u002F\u002F Other logout logic required by your app\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_161ca8ed7e6a045968c6c8c882ab725161efdc21"},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-flowcontroller","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Complete payment in your UI","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fintegrate-paymentsheet-flowcontroller-android.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can present Payment Sheet to only collect payment method details and complete the payment back in your app’s UI. This is useful if you have a custom buy button or require additional steps after payment details are collected."]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fandroid-multi-step.84d8a0a44b1baa596bda491322b6d9fd.png","ignoreAltTextRequirement":true,"zoomable":true},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["A sample integration is ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-android\u002Fblob\u002Fmaster\u002Fpaymentsheet-example\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fstripe\u002Fandroid\u002Fpaymentsheet\u002Fexample\u002Fsamples\u002Fui\u002Fcustom_flow\u002FCustomFlowActivity.kt"},"children":["available on our GitHub"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Interested in displaying payment methods directly in your checkout screen?"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. ",{"\u0024\u0024mdtype":"Tag","name":"CollectEmail","attributes":{"list":"mobile-embeddable-payment-element-beta@stripe.com","send_direct_email":true,"intro_text":"Interested in displaying payment methods directly in your checkout screen?","body_text":"Provide your email address to join the pilot.","form_cta_text":"Sign up","show_email_confirmation":true,"success_text":"Thank you\u0021 We'll be in touch soon.","until":null,"modal":true,"modal_link_text":"Sign up for early access."},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["First, initialize ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-flow-controller\u002Findex.html"},"children":["PaymentSheet.FlowController"]}," instead of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," using one of the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-flow-controller\u002F-companion\u002Findex.html"},"children":["create"]}," methods."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Android \u0028Kotlin\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Android \u0028Kotlin\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["class CheckoutActivity : AppCompatActivity\u0028\u0029 {\n private lateinit var flowController: PaymentSheet.FlowController\n\n override fun onCreate\u0028savedInstanceState: Bundle?\u0029 {\n super.onCreate\u0028savedInstanceState\u0029\n\n flowController = PaymentSheet.FlowController.create\u0028\n this,\n ::onPaymentOption,\n ::onPaymentSheetResult\n \u0029\n }\n}\n"]}]}},{"id":"java","title":"Android \u0028Java\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Android \u0028Java\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["public class CheckoutActivity extends AppCompatActivity {\n private PaymentSheet.FlowController flowController;\n\n @Override\n protected void onCreate\u0028@Nullable Bundle savedInstanceState\u0029 {\n super.onCreate\u0028savedInstanceState\u0029;\n\n final PaymentOptionCallback paymentOptionCallback = paymentOption -\u003E {\n onPaymentOption\u0028paymentOption\u0029;\n };\n\n final PaymentSheetResultCallback paymentSheetResultCallback = paymentSheetResult -\u003E {\n onPaymentSheetResult\u0028paymentSheetResult\u0029;\n };\n\n flowController = PaymentSheet.FlowController.create\u0028\n this,\n paymentOptionCallback,\n paymentSheetResultCallback\n \u0029;\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_b61c64d4118f25f3cd4f182d8e2847610500a27e"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"start":2,"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":2},"children":["Next, call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"configureWithPaymentIntent"},"children":[]}," with the Stripe object keys fetched from your backend and update your UI in the callback using ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-flow-controller\u002Findex.html#-2091462043%2FFunctions%2F2002900378"},"children":["getPaymentOption\u0028\u0029"]},". This contains an image and label representing the customer’s currently selected payment method. "]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Android \u0028Kotlin\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Android \u0028Kotlin\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["flowController.configureWithPaymentIntent\u0028\n paymentIntentClientSecret = paymentIntentClientSecret,\n configuration = PaymentSheet.Configuration\u0028\n merchantDisplayName = \"Example, Inc.\",\n customer = PaymentSheet.CustomerConfiguration\u0028\n id = customerId,\n ephemeralKeySecret = ephemeralKeySecret\n \u0029\n \u0029\n\u0029 { isReady, error -\u003E\n if \u0028isReady\u0029 {\n \u002F\u002F Update your UI using \u0060flowController.getPaymentOption\u0028\u0029\u0060\n } else {\n \u002F\u002F handle FlowController configuration failure\n }\n}\n"]}]}},{"id":"java","title":"Android \u0028Java\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Android \u0028Java\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["flowController.configureWithPaymentIntent\u0028\n paymentIntentClientSecret,\n new PaymentSheet.Configuration\u0028\n \"Example, Inc.\",\n new PaymentSheet.CustomerConfiguration\u0028\n customerId,\n ephemeralKeySecret\n \u0029\n \u0029,\n \u0028success, error\u0029 -\u003E {\n if \u0028success\u0029 {\n \u002F\u002F Update your UI using \u0060flowController.getPaymentOption\u0028\u0029\u0060\n } else {\n \u002F\u002F handle FlowController configuration failure\n }\n }\n\u0029;\n"]}]}}],"codeTabGroupID":"codetab_157729deb1f8728eede671243762a416fd390797"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"start":3,"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":3},"children":["Next, call ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-flow-controller\u002Findex.html#449924733%2FFunctions%2F2002900378"},"children":["presentPaymentOptions"]}," to collect payment details. When the customer finishes, the sheet is dismissed and calls the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-option-callback\u002Findex.html"},"children":["paymentOptionCallback"]}," passed earlier in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"create"},"children":[]},". Implement this method to update your UI with the returned ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"paymentOption"},"children":[]},". "]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Android \u0028Kotlin\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Android \u0028Kotlin\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F ...\n flowController.presentPaymentOptions\u0028\u0029\n\u002F\u002F ...\n private fun onPaymentOption\u0028paymentOption: PaymentOption?\u0029 {\n if \u0028paymentOption \u0021= null\u0029 {\n paymentMethodButton.text = paymentOption.label\n paymentMethodButton.setCompoundDrawablesRelativeWithIntrinsicBounds\u0028\n paymentOption.drawableResourceId,\n 0,\n 0,\n 0\n \u0029\n } else {\n paymentMethodButton.text = \"Select\"\n paymentMethodButton.setCompoundDrawablesRelativeWithIntrinsicBounds\u0028\n null,\n null,\n null,\n null\n \u0029\n }\n }\n"]}]}},{"id":"java","title":"Android \u0028Java\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Android \u0028Java\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F ...\n flowController.presentPaymentOptions\u0028\u0029\u0029;\n\u002F\u002F ...\n private void onPaymentOption\u0028\n @Nullable PaymentOption paymentOption\n \u0029 {\n if \u0028paymentOption \u0021= null\u0029 {\n paymentMethodButton.setText\u0028paymentOption.getLabel\u0028\u0029\u0029;\n paymentMethodButton.setCompoundDrawablesRelativeWithIntrinsicBounds\u0028\n paymentOption.getDrawableResourceId\u0028\u0029,\n 0,\n 0,\n 0\n \u0029;\n } else {\n paymentMethodButton.setText\u0028\"Select\"\u0029;\n paymentMethodButton.setCompoundDrawablesRelativeWithIntrinsicBounds\u0028\n null,\n null,\n null,\n null\n \u0029;\n }\n }\n\n private void onCheckout\u0028\u0029 {\n \u002F\u002F see below\n }\n}\n"]}]}}],"codeTabGroupID":"codetab_188baba7ee85e09017f916764d35ff26bf7d07c4"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"start":4,"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":4},"children":["Finally, call ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet\u002F-flow-controller\u002Findex.html#-479056656%2FFunctions%2F2002900378"},"children":["confirm"]}," to complete the payment. When the customer finishes, the sheet is dismissed and calls the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-android\u002Fpaymentsheet\u002Fcom.stripe.android.paymentsheet\u002F-payment-sheet-result-callback\u002Findex.html#237248767%2FFunctions%2F2002900378"},"children":["paymentResultCallback"]}," passed earlier in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"create"},"children":[]},". "]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang-android","items":[{"id":"kotlin","title":"Android \u0028Kotlin\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Android \u0028Kotlin\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":[" \u002F\u002F ...\n flowController.confirmPayment\u0028\u0029\n \u002F\u002F ...\n\n private fun onPaymentSheetResult\u0028\n paymentSheetResult: PaymentSheetResult\n \u0029 {\n when \u0028paymentSheetResult\u0029 {\n is PaymentSheetResult.Canceled -\u003E {\n \u002F\u002F Payment canceled\n }\n is PaymentSheetResult.Failed -\u003E {\n \u002F\u002F Payment Failed. See logcat for details or inspect paymentSheetResult.error\n }\n is PaymentSheetResult.Completed -\u003E {\n \u002F\u002F Payment Complete\n }\n }\n }\n"]}]}},{"id":"java","title":"Android \u0028Java\u0029","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Android \u0028Java\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":[" \u002F\u002F ...\n flowController.confirmPayment\u0028\u0029;\n \u002F\u002F ...\n\n private void onPaymentSheetResult\u0028\n final PaymentSheetResult paymentSheetResult\n \u0029 {\n if \u0028paymentSheetResult instanceof PaymentSheetResult.Canceled\u0029 {\n \u002F\u002F Payment Canceled\n } else if \u0028paymentSheetResult instanceof PaymentSheetResult.Failed\u0029 {\n \u002F\u002F Payment Failed. See logcat for details or inspect paymentSheetResult.getError\u0028\u0029\n } else if \u0028paymentSheetResult instanceof PaymentSheetResult.Completed\u0029 {\n \u002F\u002F Payment Complete\n }\n }\n"]}]}}],"codeTabGroupID":"codetab_a6939d75ed09466d30d8c6d562d8174b0737c519"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-post-confirm.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Setting ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allowsDelayedPaymentMethods"},"children":[]}," to true allows ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment methods like US bank accounts. For these payment methods, the final payment status isn’t known when the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," completes, and instead succeeds or fails later. If you support these types of payment methods, inform the customer their order is confirmed and only fulfill their order \u0028for example, ship their product\u0029 when the payment is successful."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"android-cvc-recollection","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable CVC recollection on confirmation","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-cvc-recollection-android.md","variables":{"integration":"intent-first"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The following instructions for re-collecting the CVC of a saved card during PaymentIntent confirmation assume that your integration includes the following:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Creation of PaymentIntents before collecting payment details"]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Update parameters of the intent creation","id":"update-parameters-of-the-intent-creation"},"children":["Update parameters of the intent creation"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To re-collect the CVC when confirming payment, include ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"require_cvc_recollection"},"children":[]}," during the creation of the PaymentIntent."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-server-endpoint-code.md","variables":{"automatic_payment_methods":true,"setup_future_usage":false,"connect_charge_type":false,"setup_intent":false,"cvc_recollection":true,"customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"curl","title":"curl","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"curl","title":"curl"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":20,"end":20}],"remove":[]}},"children":["# Create a Customer \u0028use an existing Customer ID if this is a returning customer\u0029\n","curl https:\u002F\u002Fapi.stripe.com","\u002Fv1\u002Fcustomers"," \\\n"," -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},":"," \\\n"," ","-X"," ","\"","POST","\"","\n","\n# Create an Ephemeral Key for the Customer\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fephemeral_keys \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -H \"Stripe-Version: ","2024-11-20.acacia","\" \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\","\n","\n# Create a PaymentIntent\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\\n -d \"amount\"=1099 \\\n -d \"currency\"=\"eur\" \\",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n -d \"payment_method_options[card][require_cvc_recollection]\"=true \\"},"children":["\n -d \"payment_method_options[card][require_cvc_recollection]\"=true \\"]},"\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n -d \"automatic_payment_methods[enabled]\"=true \\","\n"]}]}},{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":18,"end":20}],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\npost '\u002Fpayment-sheet' do\n # Use an existing Customer ID if this is a returning customer\n customer = Stripe::Customer.create","\n ephemeralKey = Stripe::EphemeralKey.create\u0028{\n customer: customer['id'],\n }, {stripe_version: '","2024-11-20.acacia","'}\u0029","\n paymentIntent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer['id'],",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n payment_method_options: {\n card: {require_cvc_recollection: true}\n }"},"children":["\n payment_method_options: {\n card: {require_cvc_recollection: true}\n }"]},"\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029","\n {\n paymentIntent: paymentIntent['client_secret'],","\n ephemeralKey: ephemeralKey['secret'],","\n customer: customer['id'],\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }.to_json","\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":21,"end":25}],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\n@app.route\u0028'\u002Fpayment-sheet', methods=['POST']\u0029\ndef payment_sheet\u0028\u0029:\n # Use an existing Customer ID if this is a returning customer\n customer = stripe.Customer.create\u0028\u0029","\n ephemeralKey = stripe.EphemeralKey.create\u0028\n customer=customer['id'],\n stripe_version='","2024-11-20.acacia","',\n \u0029","\n","\n paymentIntent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='eur',\n customer=customer['id'],",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n payment_method_options={\n 'card': {\n 'require_cvc_recollection': True\n }\n },"},"children":["\n payment_method_options={\n 'card': {\n 'require_cvc_recollection': True\n }\n },"]},"\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods={\n 'enabled': True,\n },","\n \u0029\n return jsonify\u0028paymentIntent=paymentIntent.client_secret,","\n ephemeralKey=ephemeralKey.secret,","\n customer=customer.id,\n publishableKey='",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029","\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"cart-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":17,"end":19}],"remove":[]}},"children":["\u003C?php\nrequire 'vendor\u002Fautoload.php';\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\n\u002F\u002F Use an existing Customer ID if this is a returning customer.\n\u0024customer = \u0024stripe-\u003Ecustomers-\u003Ecreate\u0028\u0029;","\n\u0024ephemeralKey = \u0024stripe-\u003EephemeralKeys-\u003Ecreate\u0028[\n 'customer' =\u003E \u0024customer-\u003Eid,\n], [\n 'stripe_version' =\u003E '","2024-11-20.acacia","',\n]\u0029;","\n","\n\u0024paymentIntent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'eur',\n 'customer' =\u003E \u0024customer-\u003Eid,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n 'payment_method_options' =\u003E [\n 'card' =\u003E ['require_cvc_recollection' =\u003E true]\n ],"},"children":["\n 'payment_method_options' =\u003E [\n 'card' =\u003E ['require_cvc_recollection' =\u003E true]\n ],"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n 'automatic_payment_methods' =\u003E [\n 'enabled' =\u003E 'true',\n ],","\n]\u0029;\n\necho json_encode\u0028\n [\n 'paymentIntent' =\u003E \u0024paymentIntent-\u003Eclient_secret,","\n 'ephemeralKey' =\u003E \u0024ephemeralKey-\u003Esecret,","\n 'customer' =\u003E \u0024customer-\u003Eid,\n 'publishableKey' =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n ]\n\u0029;\nhttp_response_code\u0028200\u0029;","\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"Server.java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":25,"end":33}],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.apiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\npost\u0028\n \"\u002Fpayment-sheet\",\n \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n CustomerCreateParams customerParams = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n Customer customer = Customer.create\u0028customerParams\u0029;","\n EphemeralKeyCreateParams ephemeralKeyParams =\n EphemeralKeyCreateParams.builder\u0028\u0029\n .setStripeVersion\u0028\"","2024-11-20.acacia","\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029\n .build\u0028\u0029;\n\n EphemeralKey ephemeralKey = EphemeralKey.create\u0028ephemeralKeyParams\u0029;","\n PaymentIntentCreateParams paymentIntentParams =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"eur\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n .setPaymentMethodOptions\u0028\n PaymentIntentCreateParams.PaymentMethodOptions.builder\u0028\u0029\n .setCard\u0028\n PaymentIntentCreateParams.PaymentMethodOptions.Card.builder\u0028\u0029\n .setRequireCvcRecollection\u0028true\u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029\n \u0029"},"children":["\n .setPaymentMethodOptions\u0028\n PaymentIntentCreateParams.PaymentMethodOptions.builder\u0028\u0029\n .setCard\u0028\n PaymentIntentCreateParams.PaymentMethodOptions.Card.builder\u0028\u0029\n .setRequireCvcRecollection\u0028true\u0029\n .build\u0028\u0029\n \u0029\n .build\u0028\u0029\n \u0029"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029\n .setEnabled\u0028true\u0029\n .build\u0028\u0029\n \u0029","\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028paymentIntentParams","\u0029;","\n\n Map\u003CString, String\u003E responseData = new HashMap\u0028\u0029;","\n responseData.put\u0028\"paymentIntent\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"ephemeralKey\", ephemeralKey.getSecret\u0028\u0029\u0029;","\n\n responseData.put\u0028\"customer\", customer.getId\u0028\u0029\u0029;\n responseData.put\u0028\"publishableKey\", \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\u0029;\n\n return gson.toJson\u0028responseData\u0029;\n}\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":16,"end":20}],"remove":[]}},"children":["\nconst stripe = require\u0028'stripe'\u0029\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;","\n\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\napp.post\u0028'\u002Fpayment-sheet', async \u0028req, res\u0029 =\u003E {\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n const customer = await stripe.customers.create\u0028\u0029;","\n const ephemeralKey = await stripe.ephemeralKeys.create\u0028\n {customer: customer.id},\n {apiVersion: '","2024-11-20.acacia","'}\n \u0029;","\n const paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer.id,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n payment_method_options: {\n card: {\n require_cvc_recollection: true,\n },\n },"},"children":["\n payment_method_options: {\n card: {\n require_cvc_recollection: true,\n },\n },"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029;\n\n res.json\u0028{\n paymentIntent: paymentIntent.client_secret,","\n ephemeralKey: ephemeralKey.secret,","\n customer: customer.id,\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }\u0029;","\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"server.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":25,"end":29}],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\nfunc handlePaymentSheet\u0028w http.ResponseWriter, r *http.Request\u0029 {\n if r.Method \u0021= \"POST\" {\n http.Error\u0028w, http.StatusText\u0028http.StatusMethodNotAllowed\u0029, http.StatusMethodNotAllowed\u0029\n return\n }\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n cparams := \u0026stripe.CustomerParams{}\n c, _ := customer.New\u0028cparams\u0029\n","\n ekparams := \u0026stripe.EphemeralKeyParams{\n Customer: stripe.String\u0028c.ID\u0029,\n StripeVersion: stripe.String\u0028\"","2024-11-20.acacia","\"\u0029,\n }\n ek, _ := ephemeralKey.New\u0028ekparams\u0029","\n","\n piparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyEUR\u0029\u0029,\n Customer: stripe.String\u0028c.ID\u0029,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n PaymentMethodOptions: stripe.PaymentIntentPaymentMethodOptionsParams{\n Card: stripe.PaymentIntentPaymentMethodOptionsCardParams{\n RequireCvcRecollection: stripe.Bool\u0028true\u0029,\n }\n },"},"children":["\n PaymentMethodOptions: stripe.PaymentIntentPaymentMethodOptionsParams{\n Card: stripe.PaymentIntentPaymentMethodOptionsCardParams{\n RequireCvcRecollection: stripe.Bool\u0028true\u0029,\n }\n },"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods: \u0026stripe.PaymentIntentAutomaticPaymentMethodsParams{\n Enabled: stripe.Bool\u0028true\u0029,\n },","\n }","\n pi, _ := paymentintent.New\u0028piparams\u0029","\n\n writeJSON\u0028w, struct {","\n PaymentIntent string \u0060json:\"paymentIntent\"\u0060","\n EphemeralKey string \u0060json:\"ephemeralKey\"\u0060","\n Customer string \u0060json:\"customer\"\u0060\n PublishableKey string \u0060json:\"publishableKey\"\u0060\n }{","\n PaymentIntent: pi.ClientSecret,","\n EphemeralKey: ek.Secret,","\n Customer: c.ID,\n PublishableKey: \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[{"start":25,"end":31}],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\n[HttpPost\u0028\"payment-sheet\"\u0029]\npublic ActionResult\u003CPaymentSheetCreateResponse\u003E CreatePaymentSheet\u0028[FromBody] CreatePaymentSheetRequest req\u0029\n{\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n var customerOptions = new CustomerCreateOptions\u0028\u0029;\n var customerService = new CustomerService\u0028\u0029;\n var customer = customerService.Create\u0028customerOptions\u0029;","\n var ephemeralKeyOptions = new EphemeralKeyCreateOptions\n {\n Customer = customer.Id,\n StripeVersion = \"","2024-11-20.acacia","\",\n };\n var ephemeralKeyService = new EphemeralKeyService\u0028\u0029;\n var ephemeralKey = ephemeralKeyService.Create\u0028ephemeralKeyOptions\u0029;","\n","\n var paymentIntentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"eur\",\n Customer = customer.Id,",{"\u0024\u0024mdtype":"Tag","name":"highlight","attributes":{"type":"add","value":"\n PaymentMethodOptions = new PaymentIntentPaymentMethodOptionsOptions\n {\n Card = new PaymentIntentPaymentMethodOptionsCardOptions\n {\n RequireCvcRecollection = true,\n },\n },"},"children":["\n PaymentMethodOptions = new PaymentIntentPaymentMethodOptionsOptions\n {\n Card = new PaymentIntentPaymentMethodOptionsCardOptions\n {\n RequireCvcRecollection = true,\n },\n },"]},"\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions\n {\n Enabled = true,\n },","\n };","\n var paymentIntentService = new PaymentIntentService\u0028\u0029;\n PaymentIntent paymentIntent = paymentIntentService.Create\u0028paymentIntentOptions\u0029;","\n\n return new PaymentSheetCreateResponse\n {","\n PaymentIntent = paymentIntent.ClientSecret,","\n EphemeralKey = ephemeralKey.Secret,","\n\n Customer = customer.Id,\n PublishableKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n };\n}\n"]}]}}],"codeTabGroupID":"codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b"},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"CollectEmail","attributes":{"list":"mobile-embeddable-payment-element-beta@stripe.com","send_direct_email":true,"intro_text":"Interested in displaying payment methods directly in your checkout screen?","body_text":"We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. Provide your email address to join the pilot.","form_cta_text":"Sign up","show_email_confirmation":true,"success_text":"Thank you\u0021 We'll be in touch soon.","until":null},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Page","attributes":{"prefs":{"platform":"react-native"},"title":"In-app integration for React Native"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Faccept-a-payment-payment-sheet-preamble.md","variables":{"platform":"react-native","link":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fios-overview.9e0d68d009dc005f73a6f5df69e00458.png","ignoreAltTextRequirement":true,"zoomable":true},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This integration combines all of the steps required to pay—collecting payment details and confirming the payment—into a single sheet that displays on top of your app."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Interested in displaying payment methods directly in your checkout screen?"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. ",{"\u0024\u0024mdtype":"Tag","name":"CollectEmail","attributes":{"list":"mobile-embeddable-payment-element-beta@stripe.com","send_direct_email":true,"intro_text":"Interested in displaying payment methods directly in your checkout screen?","body_text":"Provide your email address to join the pilot.","form_cta_text":"Sign up","show_email_confirmation":true,"success_text":"Thank you\u0021 We'll be in touch soon.","until":null,"modal":true,"modal_link_text":"Sign up for early access."},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-setup","beta":false,"preview":false,"badges":["Server-side","Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Set up Stripe","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["First, you need a Stripe account. ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fregister"},"children":["Register now"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"setup-server-side","level":3,"anchored":true,"toc":"Server-side "},"children":["Server-side "]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This integration requires endpoints on your server that talk to the Stripe API. Use the official libraries for access to the Stripe API from your server:"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Flibraries.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Available as a gem\nsudo gem install stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","filename":"Gemfile","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# If you use bundler, you can add this line to your Gemfile\ngem 'stripe'\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install through pip\npip3 install --upgrade stripe\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"PyPi","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or find the Stripe package on http:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fstripe\u002F\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","filename":"requirements.txt","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Find the version you want to pin:\n# https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-python\u002Fblob\u002Fmaster\u002FCHANGELOG.md\n# Specify that version in your requirements.txt file\nstripe\u003E=5.0.0\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install the PHP library with Composer\ncomposer require stripe\u002Fstripe-php\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Source","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or download the source directly: https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-php\u002Freleases\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"build.gradle","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F*\n For Gradle, add the following dependency to your build.gradle and replace with\n the version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n*\u002F\nimplementation \"com.stripe:stripe-java:","28.0.0","\"\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"xml","filename":"pom.xml","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C\u0021--\n For Maven, add the following dependency to your POM and replace with the\n version number you want to use from:\n - https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Fcom.stripe\u002Fstripe-java or\n - https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n--\u003E\n\u003Cdependency\u003E\n \u003CgroupId\u003Ecom.stripe\u003C\u002FgroupId\u003E\n \u003CartifactId\u003Estripe-java\u003C\u002FartifactId\u003E\n \u003Cversion\u003E","28.0.0","\u003C\u002Fversion\u003E\n\u003C\u002Fdependency\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","filename":"Other environments","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# For other environments, manually install the following JARs:\n# - The Stripe JAR from https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-java\u002Freleases\u002Flatest\n# - Google Gson from https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fgson\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with npm\nnpm install stripe --save\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Make sure your project is using Go Modules\ngo mod init\n# Install stripe-go\ngo get -u github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"app.go","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F Then import the package\nimport \u0028\n \"github.com\u002Fstripe\u002Fstripe-go\u002Fv","81","\"\n\u0029\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Install with dotnet\ndotnet add package Stripe.net\ndotnet restore\n"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":false,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Or install with NuGet\nInstall-Package Stripe.net\n"]}]}}],"codeTabGroupID":"codetab_dfc4a6aff5f3711c66bdb90a3f37589faa94b1f4"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"id":"setup-client-side","level":3,"anchored":true,"toc":"Client-side "},"children":["Client-side "]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Freact-native-install-sdk.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-react-native"},"children":["React Native SDK"]}," is open source and fully documented. Internally, it uses the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-ios"},"children":["native iOS"]}," and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-android"},"children":["Android"]}," SDKs. To install Stripe’s React Native SDK, run one of the following commands in your project’s directory \u0028depending on which package manager you use\u0029:"]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"install-react-native-yarn","title":"yarn","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-react-native-yarn","title":"yarn"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["yarn add @stripe\u002Fstripe-react-native\n"]}]}},{"id":"install-react-native-npm","title":"npm","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"install-react-native-npm","title":"npm"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["npm install @stripe\u002Fstripe-react-native\n"]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Next, install some other necessary dependencies:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["For iOS, navigate to the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["ios"]}," directory and run ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"pod install"},"children":[]}," to ensure that you also install the required native dependencies."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["For Android, there are no more dependencies to install."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Stripe initialization","id":"stripe-initialization"},"children":["Stripe initialization"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To initialize Stripe in your React Native app, either wrap your payment screen with the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"StripeProvider"},"children":[]}," component, or use the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initStripe"},"children":[]}," initialization method. Only the API ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fkeys#obtain-api-keys"},"children":["publishable key"]}," in ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"publishableKey"},"children":[]}," is required. The following example shows how to initialize Stripe using the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"StripeProvider"},"children":[]}," component."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import { StripeProvider } from '@stripe\u002Fstripe-react-native';\n\nfunction App\u0028\u0029 {\n const [publishableKey, setPublishableKey] = useState\u0028''\u0029;\n\n const fetchPublishableKey = async \u0028\u0029 =\u003E {\n const key = await fetchKey\u0028\u0029; \u002F\u002F fetch key from your server here\n setPublishableKey\u0028key\u0029;\n };\n\n useEffect\u0028\u0028\u0029 =\u003E {\n fetchPublishableKey\u0028\u0029;\n }, []\u0029;\n\n return \u0028\n \u003CStripeProvider\n publishableKey={publishableKey}\n merchantIdentifier=\"merchant.identifier\" \u002F\u002F required for Apple Pay\n urlScheme=\"your-url-scheme\" \u002F\u002F required for 3D Secure and bank redirects\n \u003E\n \u002F\u002F Your app code here\n \u003C\u002FStripeProvider\u003E\n \u0029;\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use your API keys for ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fkeys#obtain-api-keys"},"children":["test mode"]}," while you test and develop, and your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fkeys#test-live-modes"},"children":["live mode"]}," keys when you publish your app."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-enable-payment-methods","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Enable payment methods","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fpayments\u002Faccept-a-payment\u002Fenable-payment-methods.md","variables":{"intentKind":"PaymentIntent"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["View your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["payment methods settings"]}," and enable the payment methods you want to support. You need at least one payment method enabled to create a ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"payment-intents"},"children":["PaymentIntent"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, Stripe enables cards and other prevalent payment methods that can help you reach more customers, but we recommend turning on additional payment methods that are relevant for your business and customers. See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fpayment-method-support"},"children":["Payment method support"]}," for product and payment method support, and our ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Fpricing\u002Flocal-payment-methods"},"children":["pricing page"]}," for fees."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-add-server-endpoint","beta":false,"preview":false,"badges":["Server-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Add an endpoint","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fpayment-sheet-add-server-endpoint-apms.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fpayment-sheet-add-server-endpoint-apms-ephemeral-key.md","variables":{}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you want to present the PaymentSheet before creating a PaymentIntent, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment-deferred?type=payment"},"children":["Collect payment details before creating an Intent"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This integration uses three Stripe API objects:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents"},"children":["PaymentIntent"]},": Stripe uses this to represent your intent to collect payment from a customer, tracking your charge attempts and payment state changes throughout the process."]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["\u0028Optional\u0029 ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers"},"children":["Customer"]},": To set up a payment method for future payments, you must attach it to a ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"customers"},"children":["Customer"]},". Create a Customer object when your customer creates an account with your business. If your customer is making a payment as a guest, you can create a Customer object before payment and associate it with your own internal representation of the customer’s account later."]}]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["\u0028Optional\u0029 ","Customer Ephemeral Key: Information on the Customer object is sensitive, and can’t be retrieved directly from an app. An Ephemeral Key grants the SDK temporary access to the Customer."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you never save cards to a Customer and don’t allow returning Customers to reuse saved cards, you can omit the Customer and Customer Ephemeral Key objects from your integration."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For security reasons, your app can’t create these objects. Instead, add an endpoint on your server that:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Retrieves the Customer, or creates a new one."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Creates an Ephemeral Key for the Customer."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Creates a PaymentIntent with the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-amount"},"children":["amount"]},", ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-currency"},"children":["currency"]},", and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fpayment_intents\u002Fcreate#create_payment_intent-customer"},"children":["customer"]},". You can also optionally include the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"automatic_payment_methods"},"children":[]}," parameter. Stripe enables its functionality by default in the latest version of the API."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Returns the Payment Intent’s ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"payment-intent-secret"},"children":["client secret"]},", the Ephemeral Key’s ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"secret"},"children":[]},", the Customer’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fcustomers\u002Fobject#customer_object-id"},"children":["id"]},", and your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys"},"children":["publishable key"]}," to your app."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The payment methods shown to customers during the checkout process are also included on the PaymentIntent. You can let Stripe pull payment methods from your Dashboard settings or you can list them manually. Regardless of the option you choose, know that the currency passed in the PaymentIntent filters the payment methods shown to the customer. For example, if you pass ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"eur"},"children":[]}," on the PaymentIntent and have OXXO enabled in the Dashboard, OXXO won’t be shown to the customer because OXXO doesn’t support ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"eur"},"children":[]}," payments."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Unless your integration requires a code-based option for offering payment methods, Stripe recommends the automated option. This is because Stripe evaluates the currency, payment method restrictions, and other parameters to determine the list of supported payment methods. Payment methods that increase conversion and that are most relevant to the currency and customer’s location are prioritized."]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"manage-pm","title":"Manage payment methods from the Dashboard","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"manage-pm","title":"Manage payment methods from the Dashboard"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Test a running implementation of this endpoint on ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fglitch.com\u002Fedit\u002F#\u0021\u002Fremix\u002Fstripe-mobile-payment-sheet-automatic"},"children":["Glitch"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can manage payment methods from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Dashboard"]},". Stripe handles the return of eligible payment methods based on factors such as the transaction’s amount, currency, and payment flow. The PaymentIntent is created using the payment methods you configured in the Dashboard. If you don’t want to use the Dashboard or if you want to specify payment methods manually, you can list them using the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_method_types"},"children":[]}," attribute."]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-server-endpoint-code.md","variables":{"automatic_payment_methods":true,"setup_intent":false,"cvc_recollection":false,"customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"curl","title":"curl","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"curl","title":"curl"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Create a Customer \u0028use an existing Customer ID if this is a returning customer\u0029\n","curl https:\u002F\u002Fapi.stripe.com","\u002Fv1\u002Fcustomers"," \\\n"," -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},":"," \\\n"," ","-X"," ","\"","POST","\"","\n","\n# Create an Ephemeral Key for the Customer\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fephemeral_keys \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -H \"Stripe-Version: ","2024-11-20.acacia","\" \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\","\n","\n# Create a PaymentIntent\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\\n -d \"amount\"=1099 \\\n -d \"currency\"=\"eur\" \\","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n -d \"automatic_payment_methods[enabled]\"=true \\","\n"]}]}},{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\npost '\u002Fpayment-sheet' do\n # Use an existing Customer ID if this is a returning customer\n customer = Stripe::Customer.create","\n ephemeralKey = Stripe::EphemeralKey.create\u0028{\n customer: customer['id'],\n }, {stripe_version: '","2024-11-20.acacia","'}\u0029","\n paymentIntent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer['id'],","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029","\n {\n paymentIntent: paymentIntent['client_secret'],","\n ephemeralKey: ephemeralKey['secret'],","\n customer: customer['id'],\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }.to_json","\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n","\n","","#"," Set your secret key."," Remember to switch to your live secret key in production.\n","","#"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","stripe.api_key = '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'","\n\n@app.route\u0028'\u002Fpayment-sheet', methods=['POST']\u0029\ndef payment_sheet\u0028\u0029:\n # Use an existing Customer ID if this is a returning customer\n customer = stripe.Customer.create\u0028\u0029","\n ephemeralKey = stripe.EphemeralKey.create\u0028\n customer=customer['id'],\n stripe_version='","2024-11-20.acacia","',\n \u0029","\n","\n paymentIntent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='eur',\n customer=customer['id'],","\n # In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n # is optional because Stripe enables its functionality by default.\n automatic_payment_methods={\n 'enabled': True,\n },","\n \u0029\n return jsonify\u0028paymentIntent=paymentIntent.client_secret,","\n ephemeralKey=ephemeralKey.secret,","\n customer=customer.id,\n publishableKey='",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029","\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"cart-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\nrequire 'vendor\u002Fautoload.php';\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\n\u002F\u002F Use an existing Customer ID if this is a returning customer.\n\u0024customer = \u0024stripe-\u003Ecustomers-\u003Ecreate\u0028\u0029;","\n\u0024ephemeralKey = \u0024stripe-\u003EephemeralKeys-\u003Ecreate\u0028[\n 'customer' =\u003E \u0024customer-\u003Eid,\n], [\n 'stripe_version' =\u003E '","2024-11-20.acacia","',\n]\u0029;","\n","\n\u0024paymentIntent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'eur',\n 'customer' =\u003E \u0024customer-\u003Eid,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n 'automatic_payment_methods' =\u003E [\n 'enabled' =\u003E 'true',\n ],","\n]\u0029;\n\necho json_encode\u0028\n [\n 'paymentIntent' =\u003E \u0024paymentIntent-\u003Eclient_secret,","\n 'ephemeralKey' =\u003E \u0024ephemeralKey-\u003Esecret,","\n 'customer' =\u003E \u0024customer-\u003Eid,\n 'publishableKey' =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n ]\n\u0029;\nhttp_response_code\u0028200\u0029;","\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","filename":"Server.java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","Stripe.apiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\npost\u0028\n \"\u002Fpayment-sheet\",\n \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n CustomerCreateParams customerParams = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n Customer customer = Customer.create\u0028customerParams\u0029;","\n EphemeralKeyCreateParams ephemeralKeyParams =\n EphemeralKeyCreateParams.builder\u0028\u0029\n .setStripeVersion\u0028\"","2024-11-20.acacia","\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029\n .build\u0028\u0029;\n\n EphemeralKey ephemeralKey = EphemeralKey.create\u0028ephemeralKeyParams\u0029;","\n PaymentIntentCreateParams paymentIntentParams =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"eur\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n .setAutomaticPaymentMethods\u0028\n PaymentIntentCreateParams.AutomaticPaymentMethods.builder\u0028\u0029\n .setEnabled\u0028true\u0029\n .build\u0028\u0029\n \u0029","\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028paymentIntentParams","\u0029;","\n\n Map\u003CString, String\u003E responseData = new HashMap\u0028\u0029;","\n responseData.put\u0028\"paymentIntent\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"ephemeralKey\", ephemeralKey.getSecret\u0028\u0029\u0029;","\n\n responseData.put\u0028\"customer\", customer.getId\u0028\u0029\u0029;\n responseData.put\u0028\"publishableKey\", \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\u0029;\n\n return gson.toJson\u0028responseData\u0029;\n}\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\nconst stripe = require\u0028'stripe'\u0029\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;","\n\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\napp.post\u0028'\u002Fpayment-sheet', async \u0028req, res\u0029 =\u003E {\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n const customer = await stripe.customers.create\u0028\u0029;","\n const ephemeralKey = await stripe.ephemeralKeys.create\u0028\n {customer: customer.id},\n {apiVersion: '","2024-11-20.acacia","'}\n \u0029;","\n const paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer.id,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n automatic_payment_methods: {\n enabled: true,\n },","\n }\u0029;\n\n res.json\u0028{\n paymentIntent: paymentIntent.client_secret,","\n ephemeralKey: ephemeralKey.secret,","\n customer: customer.id,\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }\u0029;","\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"server.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\nfunc handlePaymentSheet\u0028w http.ResponseWriter, r *http.Request\u0029 {\n if r.Method \u0021= \"POST\" {\n http.Error\u0028w, http.StatusText\u0028http.StatusMethodNotAllowed\u0029, http.StatusMethodNotAllowed\u0029\n return\n }\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n cparams := \u0026stripe.CustomerParams{}\n c, _ := customer.New\u0028cparams\u0029\n","\n ekparams := \u0026stripe.EphemeralKeyParams{\n Customer: stripe.String\u0028c.ID\u0029,\n StripeVersion: stripe.String\u0028\"","2024-11-20.acacia","\"\u0029,\n }\n ek, _ := ephemeralKey.New\u0028ekparams\u0029","\n","\n piparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyEUR\u0029\u0029,\n Customer: stripe.String\u0028c.ID\u0029,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods: \u0026stripe.PaymentIntentAutomaticPaymentMethodsParams{\n Enabled: stripe.Bool\u0028true\u0029,\n },","\n }","\n pi, _ := paymentintent.New\u0028piparams\u0029","\n\n writeJSON\u0028w, struct {","\n PaymentIntent string \u0060json:\"paymentIntent\"\u0060","\n EphemeralKey string \u0060json:\"ephemeralKey\"\u0060","\n Customer string \u0060json:\"customer\"\u0060\n PublishableKey string \u0060json:\"publishableKey\"\u0060\n }{","\n PaymentIntent: pi.ClientSecret,","\n EphemeralKey: ek.Secret,","\n Customer: c.ID,\n PublishableKey: \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\n[HttpPost\u0028\"payment-sheet\"\u0029]\npublic ActionResult\u003CPaymentSheetCreateResponse\u003E CreatePaymentSheet\u0028[FromBody] CreatePaymentSheetRequest req\u0029\n{\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n var customerOptions = new CustomerCreateOptions\u0028\u0029;\n var customerService = new CustomerService\u0028\u0029;\n var customer = customerService.Create\u0028customerOptions\u0029;","\n var ephemeralKeyOptions = new EphemeralKeyCreateOptions\n {\n Customer = customer.Id,\n StripeVersion = \"","2024-11-20.acacia","\",\n };\n var ephemeralKeyService = new EphemeralKeyService\u0028\u0029;\n var ephemeralKey = ephemeralKeyService.Create\u0028ephemeralKeyOptions\u0029;","\n","\n var paymentIntentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"eur\",\n Customer = customer.Id,","\n \u002F\u002F In the latest version of the API, specifying the \u0060automatic_payment_methods\u0060 parameter\n \u002F\u002F is optional because Stripe enables its functionality by default.\n AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions\n {\n Enabled = true,\n },","\n };","\n var paymentIntentService = new PaymentIntentService\u0028\u0029;\n PaymentIntent paymentIntent = paymentIntentService.Create\u0028paymentIntentOptions\u0029;","\n\n return new PaymentSheetCreateResponse\n {","\n PaymentIntent = paymentIntent.ClientSecret,","\n EphemeralKey = ephemeralKey.Secret,","\n\n Customer = customer.Id,\n PublishableKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n };\n}\n"]}]}}],"codeTabGroupID":"codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b"},"children":[]}]}]}},{"id":"pm-manual","title":"Listing payment methods manually","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"pm-manual","title":"Listing payment methods manually"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Test a running implementation of this endpoint on ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fglitch.com\u002Fedit\u002F#\u0021\u002Fremix\u002Fstripe-mobile-payment-sheet-automatic"},"children":["Glitch"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-server-endpoint-code.md","variables":{"setup_intent":false,"automatic_payment_methods":false,"cvc_recollection":false,"customer_session":false}},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"lang","items":[{"id":"curl","title":"curl","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"curl","title":"curl"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"bash","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# Create a Customer \u0028use an existing Customer ID if this is a returning customer\u0029\n","curl https:\u002F\u002Fapi.stripe.com","\u002Fv1\u002Fcustomers"," \\\n"," -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},":"," \\\n"," ","-X"," ","\"","POST","\"","\n","\n# Create an Ephemeral Key for the Customer\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fephemeral_keys \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\","\n","\n# Create a PaymentIntent\ncurl https:\u002F\u002Fapi.stripe.com\u002Fv1\u002Fpayment_intents \\\n -u ",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},": \\","\n -X \"POST\" \\\n -d \"customer\"=\"{{CUSTOMER_ID}}\" \\\n -d \"amount\"=1099 \\\n -d \"currency\"=\"eur\" \\","\n -d \"payment_method_types[]\"=\"bancontact\" \\\n -d \"payment_method_types[]\"=\"card\" \\\n -d \"payment_method_types[]\"=\"ideal\" \\\n -d \"payment_method_types[]\"=\"klarna\" \\\n -d \"payment_method_types[]\"=\"sepa_debit\" \\","\n"]}]}},{"id":"ruby","title":"Ruby","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"ruby","title":"Ruby"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"ruby","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Sinatra framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F8aA9Enb8NVc.\n","\n\npost '\u002Fpayment-sheet' do\n # Use an existing Customer ID if this is a returning customer\n customer = Stripe::Customer.create","\n ephemeralKey = Stripe::EphemeralKey.create\u0028{\n customer: customer['id'],\n }, {stripe_version: '","2024-11-20.acacia","'}\u0029","\n paymentIntent = Stripe::PaymentIntent.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer['id'],","\n payment_method_types: ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n }\u0029","\n {\n paymentIntent: paymentIntent['client_secret'],","\n ephemeralKey: ephemeralKey['secret'],","\n customer: customer['id'],\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }.to_json","\nend\n"]}]}},{"id":"python","title":"Python","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"python","title":"Python"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"python","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["# This example sets up an endpoint using the Flask framework.\n# Watch this video to get started: https:\u002F\u002Fyoutu.be\u002F7Ul1vfmsDck.\n","\n\n@app.route\u0028'\u002Fpayment-sheet', methods=['POST']\u0029\ndef payment_sheet\u0028\u0029:\n # Use an existing Customer ID if this is a returning customer\n customer = stripe.Customer.create\u0028\u0029","\n ephemeralKey = stripe.EphemeralKey.create\u0028\n customer=customer['id'],\n stripe_version='","2024-11-20.acacia","',\n \u0029","\n","\n paymentIntent = stripe.PaymentIntent.create\u0028\n amount=1099,\n currency='eur',\n customer=customer['id'],","\n payment_method_types=[\"bancontact\", \"card\", \"ideal\", \"klarna\", \"sepa_debit\"],","\n \u0029\n return jsonify\u0028paymentIntent=paymentIntent.client_secret,","\n ephemeralKey=ephemeralKey.secret,","\n customer=customer.id,\n publishableKey='",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\u0029","\n"]}]}},{"id":"php","title":"PHP","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"php","title":"PHP"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"php","filename":"cart-session.php","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003C?php\nrequire 'vendor\u002Fautoload.php';\n\u0024stripe = new \\Stripe\\StripeClient\u0028'",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"'\u0029;\n\n\u002F\u002F Use an existing Customer ID if this is a returning customer.\n\u0024customer = \u0024stripe-\u003Ecustomers-\u003Ecreate\u0028\u0029;","\n\u0024ephemeralKey = \u0024stripe-\u003EephemeralKeys-\u003Ecreate\u0028[\n 'customer' =\u003E \u0024customer-\u003Eid,\n], [\n 'stripe_version' =\u003E '","2024-11-20.acacia","',\n]\u0029;","\n","\n\u0024paymentIntent = \u0024stripe-\u003EpaymentIntents-\u003Ecreate\u0028[\n 'amount' =\u003E 1099,\n 'currency' =\u003E 'eur',\n 'customer' =\u003E \u0024customer-\u003Eid,","\n 'payment_method_types' =\u003E ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n]\u0029;\n\necho json_encode\u0028\n [\n 'paymentIntent' =\u003E \u0024paymentIntent-\u003Eclient_secret,","\n 'ephemeralKey' =\u003E \u0024ephemeralKey-\u003Esecret,","\n 'customer' =\u003E \u0024customer-\u003Eid,\n 'publishableKey' =\u003E '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n ]\n\u0029;\nhttp_response_code\u0028200\u0029;","\n"]}]}},{"id":"java","title":"Java","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"java","title":"Java"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"java","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F This example sets up an endpoint using the Spark framework.\n\npost\u0028\"\u002Fpayment-sheet\", \u0028request, response\u0029 -\u003E {\n response.type\u0028\"application\u002Fjson\"\u0029;\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n CustomerCreateParams customerParams = CustomerCreateParams.builder\u0028\u0029.build\u0028\u0029;\n Customer customer = Customer.create\u0028customerParams\u0029;","\n EphemeralKeyCreateParams ephemeralKeyParams =\n EphemeralKeyCreateParams.builder\u0028\u0029\n .setStripeVersion\u0028\"","2024-11-20.acacia","\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029\n .build\u0028\u0029;\n\n EphemeralKey ephemeralKey = EphemeralKey.create\u0028ephemeralKeyParams\u0029;","\n","\n List\u003CString\u003E paymentMethodTypes = new ArrayList\u003CString\u003E\u0028\u0029;","\n paymentMethodTypes.add\u0028\"bancontact\"\u0029;\n paymentMethodTypes.add\u0028\"card\"\u0029;\n paymentMethodTypes.add\u0028\"ideal\"\u0029;\n paymentMethodTypes.add\u0028\"klarna\"\u0029;\n paymentMethodTypes.add\u0028\"sepa_debit\"\u0029;","\n\n PaymentIntentCreateParams paymentIntentParams =\n PaymentIntentCreateParams.builder\u0028\u0029\n .setAmount\u00281099L\u0029\n .setCurrency\u0028\"eur\"\u0029\n .setCustomer\u0028customer.getId\u0028\u0029\u0029","\n .addAllPaymentMethodType\u0028paymentMethodTypes\u0029","\n .build\u0028\u0029;\n\n PaymentIntent paymentIntent = PaymentIntent.create\u0028paymentIntentParams","\u0029;","\n\n Map\u003CString, String\u003E responseData = new HashMap\u0028\u0029;","\n responseData.put\u0028\"paymentIntent\", paymentIntent.getClientSecret\u0028\u0029\u0029;","\n responseData.put\u0028\"ephemeralKey\", ephemeralKey.getSecret\u0028\u0029\u0029;\n responseData.put\u0028\"customer\", customer.getId\u0028\u0029\u0029;\n responseData.put\u0028\"publishableKey\", \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\u0029;\n\n return gson.toJson\u0028responseData\u0029;\n}\u0029;\n"]}]}},{"id":"node","title":"Node","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"node","title":"Node"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","filename":"server.js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n\u002F\u002F This example sets up an endpoint using the Express framework.\n\u002F\u002F Watch this video to get started: https:\u002F\u002Fyoutu.be\u002FrPR2aJ6XnAc.\n\napp.post\u0028'\u002Fpayment-sheet', async \u0028req, res\u0029 =\u003E {\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n const customer = await stripe.customers.create\u0028\u0029;","\n const ephemeralKey = await stripe.ephemeralKeys.create\u0028\n {customer: customer.id},\n {apiVersion: '","2024-11-20.acacia","'}\n \u0029;","\n const paymentIntent = await stripe.paymentIntents.create\u0028{\n amount: 1099,\n currency: 'eur',\n customer: customer.id,","\n payment_method_types: ['bancontact', 'card', 'ideal', 'klarna', 'sepa_debit'],","\n }\u0029;\n\n res.json\u0028{\n paymentIntent: paymentIntent.client_secret,","\n ephemeralKey: ephemeralKey.secret,","\n customer: customer.id,\n publishableKey: '",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"'\n }\u0029;","\n}\u0029;\n"]}]}},{"id":"go","title":"Go","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"go","title":"Go"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"go","filename":"server.go","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","stripe.Key = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\"","\n\nfunc handlePaymentSheet\u0028w http.ResponseWriter, r *http.Request\u0029 {\n if r.Method \u0021= \"POST\" {\n http.Error\u0028w, http.StatusText\u0028http.StatusMethodNotAllowed\u0029, http.StatusMethodNotAllowed\u0029\n return\n }\n\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n cparams := \u0026stripe.CustomerParams{}\n c, _ := customer.New\u0028cparams\u0029\n","\n ekparams := \u0026stripe.EphemeralKeyParams{\n Customer: stripe.String\u0028c.ID\u0029,\n StripeVersion: stripe.String\u0028\"","2024-11-20.acacia","\"\u0029,\n }\n ek, _ := ephemeralKey.New\u0028ekparams\u0029","\n","\n piparams := \u0026stripe.PaymentIntentParams{\n Amount: stripe.Int64\u00281099\u0029,\n Currency: stripe.String\u0028string\u0028stripe.CurrencyEUR\u0029\u0029,\n Customer: stripe.String\u0028c.ID\u0029,","\n PaymentMethodTypes: []*string{\n stripe.String\u0028\"bancontact\"\u0029,\n stripe.String\u0028\"card\"\u0029,\n stripe.String\u0028\"ideal\"\u0029,\n stripe.String\u0028\"klarna\"\u0029,\n stripe.String\u0028\"sepa_debit\"\u0029,\n },","\n }","\n pi, _ := paymentintent.New\u0028piparams\u0029","\n\n writeJSON\u0028w, struct {","\n PaymentIntent string \u0060json:\"paymentIntent\"\u0060","\n EphemeralKey string \u0060json:\"ephemeralKey\"\u0060","\n Customer string \u0060json:\"customer\"\u0060\n PublishableKey string \u0060json:\"publishableKey\"\u0060\n }{","\n PaymentIntent: pi.ClientSecret,","\n EphemeralKey: ek.Secret,","\n Customer: c.ID,\n PublishableKey: \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n }\u0029\n}\n"]}]}},{"id":"dotnet","title":".NET","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"dotnet","title":".NET"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"dotnet","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\n","","\u002F\u002F"," Set your secret key."," Remember to switch to your live secret key in production.\n","","\u002F\u002F"," See your keys here: https:\u002F\u002Fdashboard.stripe.com\u002Fapikeys\n","","StripeConfiguration.ApiKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"secret","value":"sk_test_Ou1w6LVt3zmVipDVJsvMeQsc"},"children":[]},"\";","\n\n[HttpPost\u0028\"payment-sheet\"\u0029]\npublic ActionResult\u003CPaymentSheetCreateResponse\u003E CreatePaymentSheet\u0028[FromBody] CreatePaymentSheetRequest req\u0029\n{\n \u002F\u002F Use an existing Customer ID if this is a returning customer.\n var customerOptions = new CustomerCreateOptions\u0028\u0029;\n var customerService = new CustomerService\u0028\u0029;\n var customer = customerService.Create\u0028customerOptions\u0029;","\n var ephemeralKeyOptions = new EphemeralKeyCreateOptions\n {\n Customer = customer.Id,\n StripeVersion = \"","2024-11-20.acacia","\",\n };\n var ephemeralKeyService = new EphemeralKeyService\u0028\u0029;\n var ephemeralKey = ephemeralKeyService.Create\u0028ephemeralKeyOptions\u0029;","\n","\n var paymentIntentOptions = new PaymentIntentCreateOptions\n {\n Amount = 1099,\n Currency = \"eur\",\n Customer = customer.Id,","\n PaymentMethodTypes = new List\u003Cstring\u003E\n {\n \"bancontact\",\n \"card\",\n \"ideal\",\n \"klarna\",\n \"sepa_debit\",\n },","\n };","\n var paymentIntentService = new PaymentIntentService\u0028\u0029;\n PaymentIntent paymentIntent = paymentIntentService.Create\u0028paymentIntentOptions\u0029;","\n\n return new PaymentSheetCreateResponse\n {","\n PaymentIntent = paymentIntent.ClientSecret,","\n EphemeralKey = ephemeralKey.Secret,","\n\n Customer = customer.Id,\n PublishableKey = \"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\",\n };\n}\n"]}]}}],"codeTabGroupID":"codetab_a8abc4923210cfac1a3cae3e9602ffcf1089fe7b"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"caution"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Each payment method needs to support the currency passed in the PaymentIntent and your business needs to be based in one of the countries each payment method supports. See the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods\u002Fintegration-options"},"children":["Payment method integration options"]}," page for more details about what’s supported."]}]}]}}]},"children":[]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-collect-payment-details","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Collect payment details","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fintegrate-payment-sheet-react-native-apms.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Before displaying the mobile Payment Element, your checkout page should:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":false,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Show the products being purchased and the total amount"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Collect any required shipping information"]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Include a checkout button to present Stripe’s UI"]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In the checkout of your app, make a network request to the backend endpoint you created in the previous step and call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initPaymentSheet"},"children":[]}," from the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"useStripe"},"children":[]}," hook."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\nexport default function CheckoutScreen\u0028\u0029 {\n const { initPaymentSheet, presentPaymentSheet } = useStripe\u0028\u0029;\n const [loading, setLoading] = useState\u0028false\u0029;\n\n const fetchPaymentSheetParams = async \u0028\u0029 =\u003E {\n const response = await fetch\u0028\u0060\u0024{API_URL}\u002Fpayment-sheet\u0060, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application\u002Fjson',\n },\n }\u0029;\n const { paymentIntent, ephemeralKey, customer } = await response.json\u0028\u0029;\n\n return {\n paymentIntent,\n ephemeralKey,\n customer,\n };\n };\n\n const initializePaymentSheet = async \u0028\u0029 =\u003E {\n const {\n paymentIntent,\n ephemeralKey,\n customer,\n } = await fetchPaymentSheetParams\u0028\u0029;\n\n const { error } = await initPaymentSheet\u0028{\n merchantDisplayName: \"Example, Inc.\",\n customerId: customer,\n customerEphemeralKeySecret: ephemeralKey,\n paymentIntentClientSecret: paymentIntent,\n \u002F\u002F Set \u0060allowsDelayedPaymentMethods\u0060 to true if your business can handle payment\n \u002F\u002Fmethods that complete payment after a delay, like SEPA Debit and Sofort.\n allowsDelayedPaymentMethods: true,\n defaultBillingDetails: {\n name: 'Jane Doe',\n }\n }\u0029;\n if \u0028\u0021error\u0029 {\n setLoading\u0028true\u0029;\n }\n };\n\n const openPaymentSheet = async \u0028\u0029 =\u003E {\n \u002F\u002F see below\n };\n\n useEffect\u0028\u0028\u0029 =\u003E {\n initializePaymentSheet\u0028\u0029;\n }, []\u0029;\n\n return \u0028\n \u003CScreen\u003E\n \u003CButton\n variant=\"primary\"\n disabled={\u0021loading}\n title=\"Checkout\"\n onPress={openPaymentSheet}\n \u002F\u003E\n \u003C\u002FScreen\u003E\n \u0029;\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When your customer taps the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Checkout"]}," button, call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"presentPaymentSheet\u0028\u0029"},"children":[]}," to open the sheet. After the customer completes the payment, the sheet is dismissed and the promise resolves with an optional ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"StripeError\u003CPaymentSheetError\u003E"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["export default function CheckoutScreen\u0028\u0029 {\n \u002F\u002F continued from above\n\n const openPaymentSheet = async \u0028\u0029 =\u003E {\n const { error } = await presentPaymentSheet\u0028\u0029;\n\n if \u0028error\u0029 {\n Alert.alert\u0028\u0060Error code: \u0024{error.code}\u0060, error.message\u0029;\n } else {\n Alert.alert\u0028'Success', 'Your order is confirmed\u0021'\u0029;\n }\n };\n\n return \u0028\n \u003CScreen\u003E\n \u003CButton\n variant=\"primary\"\n disabled={\u0021loading}\n title=\"Checkout\"\n onPress={openPaymentSheet}\n \u002F\u003E\n \u003C\u002FScreen\u003E\n \u0029;\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-post-confirm.md","variables":{"platform":"react-native"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If there is no error, inform the user they’re done \u0028for example, by displaying an order confirmation screen\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Setting ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allowsDelayedPaymentMethods"},"children":[]}," to true allows ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment methods like US bank accounts. For these payment methods, the final payment status isn’t known when the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," completes, and instead succeeds or fails later. If you support these types of payment methods, inform the customer their order is confirmed and only fulfill their order \u0028for example, ship their product\u0029 when the payment is successful."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-set-up-return-url","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":true,"optional":false,"title":"Set up a return URL \u0028iOS only\u0029","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Freact-native-return-url.md","variables":{"paymentSheet":true}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When a customer exits your app, for example to authenticate in Safari or their banking app, provide a way for them to automatically return to your app afterward. Many payment method types ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["require"]}," a return URL, so if you fail to provide it, we can’t present those payment methods to your user, even if you’ve enabled them."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To provide a return URL:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fxcode\u002Fdefining-a-custom-url-scheme-for-your-app#Register-your-URL-scheme"},"children":["Register"]}," a custom URL. Universal links aren’t supported."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Freactnative.dev\u002Fdocs\u002Flinking"},"children":["Configure"]}," your custom URL."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Set up your root component to forward the URL to the Stripe SDK as shown below."]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you’re using Expo, ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdocs.expo.io\u002Fguides\u002Flinking\u002F#in-a-standalone-app"},"children":["set your scheme"]}," in the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"app.json"},"children":[]}," file."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"jsx","filename":"App.tsx","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import React, { useEffect, useCallback } from 'react';\nimport { Linking } from 'react-native';\nimport { useStripe } from '@stripe\u002Fstripe-react-native';\n\nexport default function MyApp\u0028\u0029 {\n const { handleURLCallback } = useStripe\u0028\u0029;\n\n const handleDeepLink = useCallback\u0028\n async \u0028url: string | null\u0029 =\u003E {\n if \u0028url\u0029 {\n const stripeHandled = await handleURLCallback\u0028url\u0029;\n if \u0028stripeHandled\u0029 {\n \u002F\u002F This was a Stripe URL - you can return or add extra handling here as you see fit\n } else {\n \u002F\u002F This was NOT a Stripe URL – handle as you normally would\n }\n }\n },\n [handleURLCallback]\n \u0029;\n\n useEffect\u0028\u0028\u0029 =\u003E {\n const getUrlAsync = async \u0028\u0029 =\u003E {\n const initialUrl = await Linking.getInitialURL\u0028\u0029;\n handleDeepLink\u0028initialUrl\u0029;\n };\n\n getUrlAsync\u0028\u0029;\n\n const deepLinkListener = Linking.addEventListener\u0028\n 'url',\n \u0028event: { url: string }\u0029 =\u003E {\n handleDeepLink\u0028event.url\u0029;\n }\n \u0029;\n\n return \u0028\u0029 =\u003E deepLinkListener.remove\u0028\u0029;\n }, [handleDeepLink]\u0029;\n\n return \u0028\n \u003CView\u003E\n \u003CAwesomeAppComponent \u002F\u003E\n \u003C\u002FView\u003E\n \u0029;\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Additionally, set the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"returnURL"},"children":[]}," when you call the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initPaymentSheet"},"children":[]}," method:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"js","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["await initPaymentSheet\u0028{\n ...\n returnURL: 'your-app:\u002F\u002Fstripe-redirect',\n ...\n}\u0029;\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For more information on native URL schemes, refer to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.android.com\u002Ftraining\u002Fapp-links\u002Fdeep-linking"},"children":["Android"]}," and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fxcode\u002Fallowing_apps_and_websites_to_link_to_your_content\u002Fdefining_a_custom_url_scheme_for_your_app"},"children":["iOS"]}," docs."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-fulfillment","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Handle post-payment events","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Felements\u002Fpayment-element\u002Fhandle-post-payment-events.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Stripe sends a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes#event_types-payment_intent.succeeded"},"children":["payment_intent.succeeded"]}," event when the payment completes. Use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fwebhooks"},"children":["Dashboard webhook tool"]}," or follow the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fwebhooks\u002Fquickstart"},"children":["webhook guide"]}," to receive these events and run actions, such as sending an order confirmation email to your customer, logging the sale in a database, or starting a shipping workflow."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events is what enables you to accept ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Fpayments\u002Fpayment-methods-guide"},"children":["different types of payment methods"]}," with a single integration."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In addition to handling the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.succeeded"},"children":[]}," event, we recommend handling these other events when collecting payments with the Payment Element:"]},{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Event"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Description"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Action"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.succeeded"},"children":["payment_intent.succeeded"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer successfully completes a payment."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Send the customer an order confirmation and ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"fulfillment"},"children":["fulfill"]}," their order."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.processing"},"children":["payment_intent.processing"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer successfully initiates a payment, but the payment has yet to complete. This event is most commonly sent when the customer initiates a bank debit. It’s followed by either a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.succeeded"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_intent.payment_failed"},"children":[]}," event in the future."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Send the customer an order confirmation that indicates their payment is pending. For digital goods, you might want to fulfill the order before waiting for payment to complete."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fevents\u002Ftypes?lang=php#event_types-payment_intent.payment_failed"},"children":["payment_intent.payment_failed"]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Sent when a customer attempts a payment, but the payment fails."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["If a payment transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"payment_failed"},"children":[]},", offer the customer another attempt to pay."]}]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-test","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":false,"title":"Test the integration","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Ftesting-auto-pm.md","variables":{"mobile":true}},"children":[{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"test-cards","title":"Cards","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-cards","title":"Cards"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Card number"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4242424242424242","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment succeeds and doesn’t require authentication."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000002500003155","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card payment requires ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"sca"},"children":["authentication"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"4000000000009995","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The card is declined with a decline code like ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"insufficient_funds"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"CardNumber","attributes":{"number":"6205500000000000004","copyable":true},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["The UnionPay card has a variable length of 13-19 digits."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the credit card form using the credit card number with any expiration, CVC, and postal code."]}]}]}]}]}},{"id":"test-bank-redirects","title":"Bank redirects","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-redirects","title":"Bank redirects"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Bancontact, iDEAL"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and immediate notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose any redirect-based payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with a redirect-based and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Complete test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Pay by Bank"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer fails to authenticate on the redirect page for a redirect-based and delayed notification payment method."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Choose the payment method, fill out the required details, and confirm the payment. Then click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Fail test payment"]}," on the redirect page."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["BLIK payments fail in a variety of ways—immediate failures \u0028for example, the code is expired or invalid\u0029, delayed errors \u0028the bank declines\u0029 or timeouts \u0028the customer didn’t respond in time\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Use email patterns to ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fblik\u002Faccept-a-payment#simulate-failures"},"children":["simulate the different failures."]}]}]}]}]}]}},{"id":"test-bank-debits","title":"Bank debits","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"test-bank-debits","title":"Bank debits"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Table","attributes":{"type":"striped","fixed":false,"sortable":false,"filterable":false,"wrap":true,"displayRowHeaders":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"thead","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Payment method"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["Scenario"]},{"\u0024\u0024mdtype":"Tag","name":"TableHeaderCell","attributes":{},"children":["How to test"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"tbody","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer successfully pays with SEPA Direct Debit."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT321904300235473204"},"children":[]},". The confirmed PaymentIntent initially transitions to processing, then transitions to the succeeded status three minutes later."]}]},{"\u0024\u0024mdtype":"Tag","name":"TableRow","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["SEPA Direct Debit"]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Your customer’s payment intent status transitions from ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"processing"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_payment_method"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"TableCell","attributes":{},"children":["Fill out the form using the account number ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"AT861904300235473202"},"children":[]},"."]}]}]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["See ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Ftesting"},"children":["Testing"]}," for additional information to test your integration."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-link","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Enable Link","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-link.md","variables":{"platform":"react-native"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Enable Link in your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Payment Method settings"]}," to allow your customers to securely save and reuse their payment information using Link’s one-click express checkout button."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Pass your customer’s email to the Mobile Payment Element","id":"pass-your-customer’s-email-to-the-mobile-payment-element"},"children":["Pass your customer’s email to the Mobile Payment Element"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Link authenticates a customer using their email address. Stripe recommends prefilling as much information as possible to streamline the checkout process."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To prefill the customer’s name, email address, and phone number, supply ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"defaultBillingDetails"},"children":[]}," with your customer information to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initPaymentSheet"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["await initPaymentSheet\u0028{\n ...\n defaultBillingDetails: {\n name: 'Jenny Rosen',\n email: 'jenny.rosen@example.com',\n phone: '888-888-8888',\n },\n}\u0029;\n"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-apple-pay","beta":false,"preview":false,"collapsable":true,"numbered":false,"optional":true,"title":"Enable Apple Pay","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-react-native-apple-pay.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Register for an Apple Merchant ID","id":"register-for-an-apple-merchant-id"},"children":["Register for an Apple Merchant ID"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"apple-pay\u002Fpartials\u002Fsdk-step-1.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Obtain an Apple Merchant ID by ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Faccount\u002Fresources\u002Fidentifiers\u002Fadd\u002Fmerchant"},"children":["registering for a new identifier"]}," on the Apple Developer website."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Fill out the form with a description and identifier. Your description is for your own records and you can modify it in the future. Stripe recommends using the name of your app as the identifier \u0028for example, ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"merchant.com.{{YOUR_APP_NAME}}"},"children":[]},"\u0029."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Create a new Apple Pay certificate","id":"create-a-new-apple-pay-certificate"},"children":["Create a new Apple Pay certificate"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"apple-pay\u002Fpartials\u002Fsdk-step-2.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create a certificate for your app to encrypt payment data."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Go to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fios_certificates"},"children":["iOS Certificate Settings"]}," in the Dashboard, click ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Add new application"]},", and follow the guide."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Download a Certificate Signing Request \u0028CSR\u0029 file to get a secure certificate from Apple that allows you to use Apple Pay."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["One CSR file must be used to issue exactly one certificate. If you switch your Apple Merchant ID, you must go to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fios_certificates"},"children":["iOS Certificate Settings"]}," in the Dashboard to obtain a new CSR and certificate."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Integrate with Xcode","id":"integrate-with-xcode"},"children":["Integrate with Xcode"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"apple-pay\u002Fpartials\u002Fsdk-step-3.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Add the Apple Pay capability to your app. In Xcode, open your project settings, click the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Signing \u0026 Capabilities"]}," tab, and add the ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Apple Pay"]}," capability. You might be prompted to log in to your developer account at this point. Select the merchant ID you created earlier, and your app is ready to accept Apple Pay."]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fxcode.a701d4c1922d19985e9c614a6f105bf1.png","ignoreAltTextRequirement":true},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Enable the Apple Pay capability in Xcode"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Add Apple Pay","id":"add-apple-pay"},"children":["Add Apple Pay"]},{"\u0024\u0024mdtype":"Tag","name":"TabGroup","attributes":{"selector":"tabs","items":[{"id":"add-apple-pay-default","title":"One-time payment","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"add-apple-pay-default","title":"One-time payment"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Pass your merchant ID when you create ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"StripeProvider"},"children":[]},":"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["import { StripeProvider } from '@stripe\u002Fstripe-react-native';\n\nfunction App\u0028\u0029 {\n return \u0028\n \u003CStripeProvider\n publishableKey=\"",{"\u0024\u0024mdtype":"Tag","name":"KeyToken","attributes":{"type":"publishable","value":"pk_test_GvF3BSyx8RSXMK5yAFhqEd3H"},"children":[]},"\"\n merchantIdentifier=\"MERCHANT_ID\"\n \u003E\n \u002F\u002F Your app code here\n \u003C\u002FStripeProvider\u003E\n \u0029;\n}\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When you call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initPaymentSheet"},"children":[]},", pass in your ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-react-native\u002Fapi-reference\u002Fmodules\u002FPaymentSheet.html#ApplePayParams"},"children":["ApplePayParams"]},":"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["await initPaymentSheet\u0028{\n \u002F\u002F ...\n applePay: {\n merchantCountryCode: 'US',\n },\n}\u0029;\n"]}]}},{"id":"add-apple-pay-recurring","title":"Recurring payments","content":{"\u0024\u0024mdtype":"Tag","name":"Tab","attributes":{"id":"add-apple-pay-recurring","title":"Recurring payments"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When you call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initPaymentSheet"},"children":[]},", pass in an ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-react-native\u002Fapi-reference\u002Fmodules\u002FPaymentSheet.html#ApplePayParams"},"children":["ApplePayParams"]}," with ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"merchantCountryCode"},"children":[]}," set to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Faccount"},"children":["country code of your business"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In accordance with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdesign\u002Fhuman-interface-guidelines\u002Fapple-pay#Supporting-subscriptions"},"children":["Apple’s guidelines"]}," for recurring payments, you must also set a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"cardItems"},"children":[]}," that includes a ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-react-native\u002Fapi-reference\u002Fmodules\u002FApplePay.html#RecurringCartSummaryItem"},"children":["RecurringCartSummaryItem"]}," with the amount you intend to charge \u0028for example, “\u002459.95 a month”\u0029."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can also adopt ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fapple-pay\u002Fmerchant-tokens\u002F"},"children":["merchant tokens"]}," by setting the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"request"},"children":[]}," with its ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"type"},"children":[]}," set to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentRequestType.Recurring"},"children":[]}]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To learn more about how to use recurring payments with Apple Pay, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fpasskit\u002Fpkpaymentrequest"},"children":["Apple’s PassKit documentation"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"apple-pay-react-native","title":"iOS \u0028React Native\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["const initializePaymentSheet = async \u0028\u0029 =\u003E {\n const recurringSummaryItem = {\n label: 'My Subscription',\n amount: '59.99',\n paymentType: 'Recurring',\n intervalCount: 1,\n intervalUnit: 'month',\n \u002F\u002F Payment starts today\n startDate: new Date\u0028\u0029.getTime\u0028\u0029 \u002F 1000,\n\n \u002F\u002F Payment ends in one year\n endDate: new Date\u0028\u0029.getTime\u0028\u0029 \u002F 1000 \u002B 60 * 60 * 24 * 365,\n };\n\n const {error} = await initPaymentSheet\u0028{\n \u002F\u002F ...\n applePay: {\n merchantCountryCode: 'US',\n cartItems: [recurringSummaryItem],\n request: {\n type: PaymentRequestType.Recurring,\n description: 'Recurring',\n managementUrl: 'https:\u002F\u002Fmy-backend.example.com\u002Fcustomer-portal',\n billing: recurringSummaryItem,\n billingAgreement:\n \"You'll be billed \u002459.99 every month for the next 12 months. To cancel at any time, go to Account and click 'Cancel Membership.'\",\n },\n },\n }\u0029;\n};\n"]}]}]}}]},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Order tracking","id":"order-tracking"},"children":["Order tracking"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To add ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdesign\u002Fhuman-interface-guidelines\u002Ftechnologies\u002Fwallet\u002Fdesigning-order-tracking"},"children":["order tracking"]}," information in iOS 16 or later, configure a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"setOrderTracking"},"children":[]}," callback function. Stripe calls your implementation after the payment is complete, but before iOS dismisses the Apple Pay sheet."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["In your implementation of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"setOrderTracking"},"children":[]}," callback function, fetch the order details from your server for the completed order, and pass the details to the provided ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"completion"},"children":[]}," function."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To learn more about order tracking, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fwalletorders"},"children":["Apple’s Wallet Orders documentation"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"order-tracking-react-native","title":"iOS \u0028React Native\u0029"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["await initPaymentSheet\u0028{\n \u002F\u002F ...\n applePay: {\n \u002F\u002F ...\n setOrderTracking: async complete =\u003E {\n const apiEndpoint =\n Platform.OS === 'ios'\n ? 'http:\u002F\u002Flocalhost:4242'\n : 'http:\u002F\u002F10.0.2.2:4567';\n const response = await fetch\u0028\n \u0060\u0024{apiEndpoint}\u002Fretrieve-order?orderId=\u0024{orderId}\u0060,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application\u002Fjson',\n },\n },\n \u0029;\n if \u0028response.status === 200\u0029 {\n const orderDetails = await response.json\u0028\u0029;\n \u002F\u002F orderDetails should include orderIdentifier, orderTypeIdentifier,\n \u002F\u002F authenticationToken and webServiceUrl\n complete\u0028orderDetails\u0029;\n }\n },\n },\n}\u0029;\n"]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-google-pay","beta":false,"preview":false,"collapsable":true,"numbered":false,"optional":true,"title":"Enable Google Pay","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-react-native-google-pay.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Set up your integration","id":"set-up-your-integration"},"children":["Set up your integration"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fgoogle-pay\u002Fstep-1.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To use Google Pay, first enable the Google Pay API by adding the following to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"\u003Capplication\u003E"},"children":[]}," tag of your ",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["AndroidManifest.xml"]},":"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"id":"setup-manifest","language":"xml","filename":"AndroidManifest.xml","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u003Capplication\u003E\n ...\n \u003Cmeta-data\n android:name=\"com.google.android.gms.wallet.api.enabled\"\n android:value=\"true\" \u002F\u003E\n\u003C\u002Fapplication\u003E\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["This guide assumes you’re using the latest version of the Stripe Android SDK."]},{"\u0024\u0024mdtype":"Tag","name":"CodeTabGroup","attributes":{"pref":"none","items":[{"id":"groovy","title":"Groovy","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"groovy","title":"Groovy"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"id":"setup-gradle","language":"groovy","filename":"build.gradle","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["dependencies {\n implementation 'com.stripe:stripe-android:","21.2.0","'\n}\n"]}]}},{"id":"kotlin","title":"Kotlin","content":{"\u0024\u0024mdtype":"Tag","name":"CodeTab","attributes":{"id":"kotlin","title":"Kotlin"},"children":[{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"kotlin","filename":"build.gradle.kts","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["dependencies {\n implementation\u0028\"com.stripe:stripe-android:","21.2.0","\"\u0029\n}\n"]}]}}],"codeTabGroupID":"codetab_0f2f66ea14fdbf5d24e7cdcadf0889a1bb450e16"},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["For more details, see Google Pay’s ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdevelopers.google.com\u002Fpay\u002Fapi\u002Fandroid\u002Fguides\u002Fsetup"},"children":["Set up Google Pay API"]}," for Android."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Add Google Pay","id":"add-google-pay"},"children":["Add Google Pay"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When you initialize ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]},", pass a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"merchantCountryCode"},"children":[]}," \u0028check your account details ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Faccount"},"children":["here"]},"\u0029"," and set ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"googlePay"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"true"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can also pass the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"testEnv"},"children":[]}," property to use the test environment. Google Pay can only be tested on a physical Android device. Follow the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Freactnative.dev\u002Fdocs\u002Frunning-on-device"},"children":["React Native docs"]}," to test your application on a physical device."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["const { error, paymentOption } = await initPaymentSheet\u0028{\n \u002F\u002F ...\n googlePay: {\n merchantCountryCode: 'US',\n ","testEnv: true, \u002F\u002F use test environment\n },\n}\u0029;\n"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-card-scanning","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":false,"optional":true,"title":"Enable card scanning \u0028iOS only\u0029","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-card-scanning.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To enable card scanning support, set the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"NSCameraUsageDescription"},"children":[]}," \u0028",{"\u0024\u0024mdtype":"Tag","name":"strong","attributes":{},"children":["Privacy - Camera Usage Description"]},"\u0029 in the Info.plist of your application, and provide a reason for accessing the camera \u0028for example, “To scan cards”\u0029. Devices with iOS 13 or higher support card scanning."]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-customization","beta":false,"preview":false,"badges":["Client-side"],"collapsable":true,"numbered":false,"optional":true,"title":"Customize the sheet","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-customization-react-native.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["All customization is configured using ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initPaymentSheet"},"children":[]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Appearance","id":"appearance"},"children":["Appearance"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Customize colors, fonts, and so on to match the look and feel of your app by using the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Felements\u002Fappearance-api?platform=react-native"},"children":["appearance API"]},"."]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Merchant display name","id":"merchant-display-name"},"children":["Merchant display name"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Specify a customer-facing business name by setting ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"merchantDisplayName"},"children":[]},". By default, this is your app’s name."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["await initPaymentSheet\u0028{\n \u002F\u002F ...\n merchantDisplayName: 'Example Inc.',\n}\u0029;\n"]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Dark mode","id":"dark-mode"},"children":["Dark mode"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By default, ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," automatically adapts to the user’s system-wide appearance settings \u0028light and dark mode\u0029. You can change this by setting the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"style"},"children":[]}," property to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"alwaysLight"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"alwaysDark"},"children":[]}," mode on iOS."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["await initPaymentSheet\u0028{\n \u002F\u002F ...\n style: 'alwaysDark',\n}\u0029;\n"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["On Android, set light or dark mode on your app:"]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["\u002F\u002F force dark\nAppCompatDelegate.setDefaultNightMode\u0028AppCompatDelegate.MODE_NIGHT_YES\u0029\n\u002F\u002F force light\nAppCompatDelegate.setDefaultNightMode\u0028AppCompatDelegate.MODE_NIGHT_NO\u0029\n"]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Default billing details","id":"default-billing-details"},"children":["Default billing details"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fpartials\u002Fduring-payment\u002Fdefault-billing-details-react-native.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To set default values for billing details collected in the payment sheet, configure the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"defaultBillingDetails"},"children":[]}," property. The ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," pre-populates its fields with the values that you provide."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["await initPaymentSheet\u0028{\n \u002F\u002F ...\n defaultBillingDetails: {\n email: 'foo@bar.com',\n address: {\n country: 'US',\n },\n },\n}\u0029;\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":3,"anchored":true,"toc":"Collect billing details","id":"collect-billing-details"},"children":["Collect billing details"]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"payments\u002Fpartials\u002Fduring-payment\u002Fbilling-details-collection-payment-element-react-native.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"billingDetailsCollectionConfiguration"},"children":[]}," to specify how you want to collect billing details in the payment sheet."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can collect your customer’s name, email, phone number, and address."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you don’t intend to collect the values that the payment method requires, you must do the following:"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Attach the values that aren’t collected by ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," to the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"defaultBillingDetails"},"children":[]}," property."]},{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["Set ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod"},"children":[]}," to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"true"},"children":[]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["await initPaymentSheet\u0028{\n \u002F\u002F ...\n defaultBillingDetails: {\n email: 'foo@bar.com',\n }\n billingDetailsCollectionConfiguration: {\n name: PaymentSheet.CollectionMode.ALWAYS,\n email: PaymentSheet.CollectionMode.NEVER,\n address: PaymentSheet.AddressCollectionMode.FULL,\n attachDefaultsToPaymentMethod: true\n },\n}\u0029;\n"]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Consult with your legal counsel regarding laws that apply to collecting information. Only collect phone numbers if you need them for the transaction."]}]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-logout","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Handle user logout","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fhandle-user-logout.md","variables":{"platform":"react-native"}},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":[{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," stores some information locally to remember whether a user has used Link within an app. To clear the internal state of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]},", call the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"resetPaymentSheetCustomer\u0028\u0029"},"children":[]}," method when your user logs out."]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["export default function CheckoutScreen\u0028\u0029 {\n \u002F\u002F continued from above\n const { initPaymentSheet, presentPaymentSheet, resetPaymentSheetCustomer } = useStripe\u0028\u0029;\n\n const logout = async \u0028\u0029 =\u003E {\n await resetPaymentSheetCustomer\u0028\u0029;\n };\n\n return \u0028\n \u003CScreen\u003E\n \u003CButton\n title=\"Checkout\"\n onPress={openPaymentSheet}\n \u002F\u003E\n \u003CButton\n title=\"Checkout\"\n onPress={logout}\n \u002F\u003E\n \u003C\u002FScreen\u003E\n \u0029;\n}\n"]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Section","attributes":{"id":"react-native-flowcontroller","beta":false,"preview":false,"collapsable":true,"numbered":true,"optional":true,"title":"Complete payment in your UI","toc":false},"children":[{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fintegrate-paymentsheet-flowcontroller-react-native.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can present Payment Sheet to only collect payment method details and then later call a ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"confirm"},"children":[]}," method to complete payment in your app’s UI. This is useful if you have a custom buy button or require additional steps after payment details are collected."]},{"\u0024\u0024mdtype":"Tag","name":"Image","attributes":{"src":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Freact-native-multi-step.84d8a0a44b1baa596bda491322b6d9fd.png","ignoreAltTextRequirement":true,"zoomable":true},"children":[]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["A sample integration is ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fgithub.com\u002Fstripe\u002Fstripe-react-native\u002Fblob\u002Fmaster\u002Fexample\u002Fsrc\u002Fscreens\u002FPaymentsUICustomScreen.tsx"},"children":["available on our GitHub"]},"."]}]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note","title":"Interested in displaying payment methods directly in your checkout screen?"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["We’re exploring an integration that lets you embed a prebuilt view directly in your checkout to display payment methods. ",{"\u0024\u0024mdtype":"Tag","name":"CollectEmail","attributes":{"list":"mobile-embeddable-payment-element-beta@stripe.com","send_direct_email":true,"intro_text":"Interested in displaying payment methods directly in your checkout screen?","body_text":"Provide your email address to join the pilot.","form_cta_text":"Sign up","show_email_confirmation":true,"success_text":"Thank you\u0021 We'll be in touch soon.","until":null,"modal":true,"modal_link_text":"Sign up for early access."},"children":[]}]}]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{},"children":["First, call ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initPaymentSheet"},"children":[]}," and pass ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"customFlow: true"},"children":[]},". ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"initPaymentSheet"},"children":[]}," resolves with an initial payment option containing an image and label representing the customer’s payment method. Update your UI with these details."]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["const {\n initPaymentSheet,\n presentPaymentSheet,\n confirmPaymentSheetPayment,\n} = useStripe\u0028\u0029\n\nconst { error, paymentOption } = await initPaymentSheet\u0028{\n customerId: customer,\n customerEphemeralKeySecret: ephemeralKey,\n paymentIntentClientSecret: paymentIntent,\n customFlow: true,\n merchantDisplayName: 'Example Inc.',\n}\u0029;\n\u002F\u002F Update your UI with paymentOption\n"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"start":2,"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":2},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"presentPaymentSheet"},"children":[]}," to collect payment details. When the customer finishes, the sheet dismisses itself and resolves the promise. Update your UI with the selected payment method details. "]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["const { error, paymentOption } = await presentPaymentSheet\u0028\u0029;\n"]},{"\u0024\u0024mdtype":"Tag","name":"List","attributes":{"start":3,"ordered":true,"columns":1},"children":[{"\u0024\u0024mdtype":"Tag","name":"ListItem","attributes":{"number":3},"children":["Use ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"confirmPaymentSheetPayment"},"children":[]}," to confirm the payment. This resolves with the result of the payment. "]}]},{"\u0024\u0024mdtype":"Tag","name":"CodeBlock","attributes":{"language":"javascript","numbered":true,"downloadOnly":false,"showIntellisenseTooltips":true,"highlights":{"default":[],"add":[],"remove":[]}},"children":["const { error } = await confirmPaymentSheetPayment\u0028\u0029;\n\nif \u0028error\u0029 {\n Alert.alert\u0028\u0060Error code: \u0024{error.code}\u0060, error.message\u0029;\n} else {\n Alert.alert\u0028\n 'Success',\n 'Your order is confirmed\u0021'\n \u0029;\n}\n"]}]},{"\u0024\u0024mdtype":"Tag","name":"Partial","attributes":{"file":"partials\u002Fmobile\u002Fpayment-sheet-post-confirm.md"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Setting ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"allowsDelayedPaymentMethods"},"children":[]}," to true allows ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Fpayment-methods#payment-notification"},"children":["delayed notification"]}," payment methods like US bank accounts. For these payment methods, the final payment status isn’t known when the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PaymentSheet"},"children":[]}," completes, and instead succeeds or fails later. If you support these types of payment methods, inform the customer their order is confirmed and only fulfill their order \u0028for example, ship their product\u0029 when the payment is successful."]}]}]}]},{"\u0024\u0024mdtype":"Tag","name":"Page","attributes":{"prefs":{"platform":"plugins"},"title":"Plugins"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Collect Stripe payments in whichever publishing or e-commerce platform you use, with a Stripe plugin created by our partners. The Stripe developer community uses Stripe’s APIs to create plugins and extensions."]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["If you use a third-party platform to build and maintain a website, you can add Stripe payments with a plugin."]},{"\u0024\u0024mdtype":"Tag","name":"Callout","attributes":{"type":"note"},"children":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["All plugins on this page are ready for ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"sca"},"children":["Strong Customer Authentication"]}," \u0028SCA\u0029."]}]},{"\u0024\u0024mdtype":"Tag","name":"Heading","attributes":{"level":2,"anchored":true,"toc":"Get started","id":"get-started"},"children":["Get started"]},{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Check out our full list of ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.partners"},"children":["partners"]}," for a solution to your use case."]}]}]},"shell_features":{"csat":true,"footer":true,"toc":true,"header":true},"breadcrumbs":[{"href":"\u002Fpayments\u002Faccept-a-payment","text":"Accept a payment"}],"images":{"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fspm-save.fe0b24afd0f0a06e0cf4eecb0ce2403a.png":{"width":930,"height":836},"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fspm-saved.5dba5a8a190a9a0e9f1a99271bed3f4b.png":{"width":930,"height":836,"lazy":true},"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fios-overview.9e0d68d009dc005f73a6f5df69e00458.png":{"width":2880,"height":1800},"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fandroid-overview.471eaf89a760f5b6a757fd96b6bb9b60.png":{"width":2880,"height":1800},"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fios-mpe-payment-method-layouts.9d0513e2fcec5660378ba1824d952054.png":{"width":2880,"height":1800},"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fios-multi-step.cd631ea4f1cd8cf3f39b6b9e1e92b6c5.png":{"width":2880,"height":1800},"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fandroid-mpe-payment-method-layouts.3bcfe828ceaad1a94e0572a22d91733f.png":{"width":2880,"height":1800},"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Fandroid-multi-step.84d8a0a44b1baa596bda491322b6d9fd.png":{"width":2880,"height":1800},"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002Freact-native-multi-step.84d8a0a44b1baa596bda491322b6d9fd.png":{"width":2880,"height":1800}},"format":"markdoc","intl":{"country":"SG","locale":"en-GB","translated":true,"availableLocales":[{"code":"id-ID","name":"Bahasa Indonesia","generated":false},{"code":"de-DE","name":"Deutsch","generated":false},{"code":"en-GB","name":"English \u0028United Kingdom\u0029","generated":false},{"code":"en-US","name":"English \u0028United States\u0029","generated":false},{"code":"es-419","name":"Español \u0028América Latina\u0029","generated":false},{"code":"es-ES","name":"Español \u0028España\u0029","generated":false},{"code":"fr-CA","name":"Français \u0028Canada\u0029","generated":false},{"code":"fr-FR","name":"Français \u0028France\u0029","generated":false},{"code":"it-IT","name":"Italiano","generated":false},{"code":"pt-BR","name":"Português \u0028Brasil\u0029","generated":false},{"code":"ja-JP","name":"日本語","generated":false},{"code":"zh-CN","name":"简体中文","generated":false}],"translationPercent":0.7155235326860041,"translationBanner":false},"metadata":{"subtitle":"Securely accept payments online.","title":"Accept a payment","search":{"sitemap":["platform=ios\u0026ui=custom","platform=ios\u0026ui=payment-sheet","platform=android\u0026ui=payment-sheet","platform=android\u0026ui=custom","platform=react-native\u0026ui=payment-sheet","platform=react-native\u0026ui=custom","platform=plugins"]}},"openGraphImageUrl":"https:\u002F\u002Fd37ugbyn3rpeym.cloudfront.net\u002Fdocs\u002Fog-image\u002Fpayments.accept-a-payment.ogimage.png","pages":[{"title":"Stripe-hosted page","prefs":{"platform":"web","ui":"stripe-hosted"},"sections":[{"id":"redirect-customers","title":"Redirect your customer to Stripe Checkout","isSubsection":false},{"id":"payment-methods","title":"Payment methods","isSubsection":true},{"id":"confirm-your-endpoint","title":"Confirm your endpoint","isSubsection":true},{"id":"redirect-stripe-checkout-testing","title":"Testing ","isSubsection":true},{"id":"success-page","title":"Show a success page","isSubsection":false},{"id":"testing","title":"Testing","isSubsection":true},{"id":"additional-testing-resources","title":"Test your integration","isSubsection":false},{"id":"test-cards","title":"Test cards","isSubsection":true},{"id":"see-also","title":"See also","titleDescriptor":{"id":"docsApp.components.seealso.defaultHeading","defaultMessage":"See also"}}]},{"title":"Embedded form","prefs":{"platform":"web","ui":"embedded-form"},"sections":[{"id":"create-checkout-session","title":"Create a Checkout Session","isSubsection":false},{"id":"mount-checkout","title":"Mount Checkout","isSubsection":false},{"id":"customize-appearance","title":"Customize appearance","isSubsection":true},{"id":"return-page","title":"Show a return page","isSubsection":false},{"id":"testing","title":"Test your integration","isSubsection":false},{"id":"see-also","title":"See also","titleDescriptor":{"id":"docsApp.components.seealso.defaultHeading","defaultMessage":"See also"}}]},{"title":"Advanced integration","prefs":{"platform":"web","ui":"elements"},"sections":[{"id":"set-up-stripe","title":"Set up Stripe","isSubsection":false},{"id":"web-create-intent","title":"Create a PaymentIntent","isSubsection":false},{"id":"create-the-paymentintent","title":"Create the PaymentIntent","isSubsection":true},{"id":"retrieve-the-client-secret","title":"Retrieve the client secret","isSubsection":true},{"id":"web-collect-payment-details","title":"Collect payment details","isSubsection":false},{"id":"customize-appearance","title":"Customize appearance","isSubsection":true},{"id":"collect-addresses","title":"Collect addresses","isSubsection":true},{"id":"request-apple-pay-merchant-token","title":"Request Apple Pay merchant token","isSubsection":true},{"id":"save-payment-methods","title":"Save and retrieve customer payment methods","isSubsection":false},{"id":"enable-checkout-link","title":"Link in your checkout page","isSubsection":false},{"id":"web-submit-payment","title":"Submit the payment to Stripe","isSubsection":false},{"id":"web-post-payment","title":"Handle post-payment events","isSubsection":false},{"id":"web-test-the-integration","title":"Test your integration","isSubsection":false},{"id":"disclose-cookies","title":"Disclose Stripe to your customers","isSubsection":false},{"id":"see-also","title":"See also","titleDescriptor":{"id":"docsApp.components.seealso.defaultHeading","defaultMessage":"See also"}}]},{"title":"In-app integration for iOS","prefs":{"platform":"ios"},"sections":[{"id":"ios-setup","title":"Set up Stripe","isSubsection":false},{"id":"setup-server-side","title":"Server-side ","isSubsection":true},{"id":"setup-client-side","title":"Client-side ","isSubsection":true},{"id":"ios-enable-payment-methods","title":"Enable payment methods","isSubsection":false},{"id":"add-server-endpoint","title":"Add an endpoint","isSubsection":false},{"id":"ios-collect-payment-details","title":"Collect payment details","isSubsection":false},{"id":"ios-set-up-return-url","title":"Set up a return URL","isSubsection":false},{"id":"ios-post-payment","title":"Handle post-payment events","isSubsection":false},{"id":"ios-test-the-integration","title":"Test the integration","isSubsection":false}]},{"title":"In-app integration for Android","prefs":{"platform":"android"},"sections":[{"id":"androidsetup","title":"Set up Stripe","isSubsection":false},{"id":"setup-server-side","title":"Server-side ","isSubsection":true},{"id":"setup-client-side","title":"Client-side ","isSubsection":true},{"id":"android-enable-payment-methods","title":"Enable payment methods","isSubsection":false},{"id":"add-server-endpoint","title":"Add an endpoint","isSubsection":false},{"id":"android-collect-payment-details","title":"Collect payment details","isSubsection":false},{"id":"android-post-payment","title":"Handle post-payment events","isSubsection":false},{"id":"android-test-the-integration","title":"Test the integration","isSubsection":false}]},{"title":"In-app integration for React Native","prefs":{"platform":"react-native"},"sections":[{"id":"react-native-setup","title":"Set up Stripe","isSubsection":false},{"id":"setup-server-side","title":"Server-side ","isSubsection":true},{"id":"setup-client-side","title":"Client-side ","isSubsection":true},{"id":"stripe-initialization","title":"Stripe initialization","isSubsection":true},{"id":"react-native-enable-payment-methods","title":"Enable payment methods","isSubsection":false},{"id":"react-native-add-server-endpoint","title":"Add an endpoint","isSubsection":false},{"id":"react-native-collect-payment-details","title":"Collect payment details","isSubsection":false},{"id":"react-native-set-up-return-url","title":"Set up a return URL \u0028iOS only\u0029","isSubsection":false},{"id":"react-native-fulfillment","title":"Handle post-payment events","isSubsection":false},{"id":"react-native-test","title":"Test the integration","isSubsection":false}]},{"title":"Plugins","prefs":{"platform":"plugins"},"sections":[{"id":"get-started","title":"Get started","isSubsection":false}]}],"pagePrefs":["platform","ui"],"path":"\u002Fpayments\u002Faccept-a-payment","relatedDocs":[{"text":"Elements Appearance API","link":"\u002Felements\u002Fappearance-api"},{"text":"More payment scenarios","link":"\u002Fpayments\u002Fmore-payment-scenarios"},{"text":"How cards work","link":"\u002Fpayments\u002Fcards\u002Foverview"}],"integrationBuilder":"\u002Fpayments\u002Fquickstart","stripeProducts":["payments","elements","checkout"],"previews":{"\u002Fpayments\u002Fcheckout":{"type":"page","title":"Stripe Checkout","subtitle":"Build a low-code payment form and embed it on your site or host it on Stripe."},"\u002Fpayments\u002Fonline-payments#compare-features-and-availability":{"type":"section","title":"Online payments","sectionText":"Compare features and availability","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["All integrations support one-time and recurring payments, fraud protection, and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.com\u002Fglobal"},"children":["global payments"]},"."]}]},"\u002Ftesting":{"type":"page","title":"Testing","subtitle":"Simulate payments to test your integration."},"\u002Fcheckout\u002Ffulfillment":{"type":"page","title":"Fulfill Checkout and Payment Link payments","subtitle":"Learn how to fulfill payments received with Checkout and Payment Links."},"\u002Fpayments\u002Fcheckout\u002Fdiscounts":{"type":"page","title":"Add discounts for one-time payments","subtitle":"Reduce the amount charged to a customer by discounting their subtotal with coupons and promotion codes."},"\u002Fpayments\u002Fcheckout\u002Ftaxes":{"type":"page","title":"Collect taxes in Checkout","subtitle":"Learn how to collect taxes for one-time payments in Stripe Checkout."},"\u002Ftax\u002Fcheckout\u002Ftax-ids":{"type":"page","title":"Collect customer tax IDs with Checkout","subtitle":"Learn how to collect VAT and other customer tax IDs with Checkout."},"\u002Fpayments\u002Fcheckout\u002Fcustomization":{"type":"page","title":"Customize Checkout","subtitle":"Customize the appearance and behavior of Checkout."},"\u002Fpayments\u002Fcheckout\u002Fcustom-success-page":{"type":"page","title":"Customize redirect behavior","subtitle":"Display a confirmation page with your customer's order information."},"\u002Fpayments\u002Felements":{"type":"page","title":"Stripe Web Elements","subtitle":"Create your own checkout flows with prebuilt UI components."},"\u002Fcheckout\u002Fcustom-checkout":{"type":"page","title":"Build a checkout page","subtitle":"Learn how to use Elements and Custom Checkout to build a checkout page."},"\u002Fpayments\u002Fpayment-methods\u002Fintegration-options#choose-how-to-add-payment-methods":{"type":"section","title":"Payment method integration options","sectionText":"Add payment methods","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Your customers see the available payment methods during the checkout process. You can either manage payment methods from the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdashboard.stripe.com\u002Fsettings\u002Fpayment_methods"},"children":["Dashboard"]}," or list payment methods manually in code. See the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Faccept-a-payment"},"children":["Accept a payment"]}," guide for detailed steps."]}]},"\u002Fpayments\u002Faccept-a-payment#web-create-intent":{"type":"section","title":"Accept a payment","sectionText":"Create a PaymentIntent"},"\u002Fpayments\u002Faffirm":{"type":"page","title":"Affirm payments","subtitle":"Offer your US and Canadian customers flexible financing while getting paid upfront with Affirm"},"\u002Fpayments\u002Fafterpay-clearpay":{"type":"page","title":"Afterpay and Clearpay payments","subtitle":"Offer your customers flexible financing while getting paid upfront with Afterpay \u0028also known as Clearpay in the UK\u0029."},"\u002Fapple-pay":{"type":"page","title":"Apple Pay","subtitle":"Allow customers to securely make payments using Apple Pay on their iPhone, iPad, or Apple Watch."},"\u002Fgoogle-pay":{"type":"page","title":"Google Pay","subtitle":"Learn how to accept payments using Google Pay."},"\u002Fpayments\u002Fach-direct-debit":{"type":"page","title":"ACH Direct Debit","subtitle":"Learn how businesses can accept payments with ACH Direct Debit."},"\u002Fpayments\u002Fblik":{"type":"page","title":"BLIK payments","subtitle":"Learn about BLIK, a common payment method in Poland."},"\u002Fpayments\u002Fcash-app-pay":{"type":"page","title":"Cash App Pay payments","subtitle":"Learn how to accept Cash App Pay, a digital wallet popular with US customers."},"\u002Fpayments\u002Fpayment-methods\u002Fpmd-registration":{"type":"page","title":"Register domains for payment methods","subtitle":"Register and verify domains to use payment methods \u0028including Link, Apple Pay, and Google Pay\u0029 in Elements or Checkout's embeddable payment form."},"\u002Fpayments\u002Fsave-and-reuse":{"type":"page","title":"Set up future payments","subtitle":"Learn how to save payment details and charge your customers later."},"\u002Fpayments\u002Fsave-during-payment":{"type":"page","title":"Save payment details during payment","subtitle":"Learn how to save payment details during a payment."},"\u002Ftax\u002Fcustom":{"type":"page","title":"Tax API for Sales Tax, GST, and VAT","subtitle":"Use Stripe Tax APIs to implement tax calculations in your custom integration."},"\u002Fapple-pay#present-payment-sheet":{"type":"section","title":"Apple Pay","sectionText":"Present the payment sheet","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Create an ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fstripe.dev\u002Fstripe-ios\u002Fstripe-applepay\u002FClasses\u002FSTPApplePayContext.html"},"children":["STPApplePayContext"]}," instance with the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"PKPaymentRequest"},"children":[]}," and use it to present the Apple Pay sheet:"]}]},"\u002Ftax\u002Fcheckout":{"type":"page","title":"Automatically collect tax on Checkout sessions","subtitle":"Learn how to automatically calculate taxes in Checkout."},"\u002Fpayments\u002Fpayment-methods#payment-notification":{"type":"section","title":"Payment Methods API","sectionText":"Immediate or delayed notification of payment success","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Some payment methods immediately return payment status when a transaction is attempted \u0028for example, card payments\u0029 but other methods have a delay such as ACH debits. For those that immediately return payment status, the PaymentIntent status either changes to ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"succeeded"},"children":[]}," or ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"requires_payment_method"},"children":[]},". A status of ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"succeeded"},"children":[]}," guarantees that you will receive the funds from your customers."]}]},"\u002Fpayments\u002Fblik\u002Faccept-a-payment#simulate-failures":{"type":"section","title":"BLIK payments","sectionText":"Simulate failures in test mode"},"\u002Fpayments\u002Fcheckout\u002Fpay-what-you-want":{"type":"page","title":"Let customers decide what to pay","subtitle":"Accept tips and donations, or sell pay-what-you-want products and services."},"\u002Fproducts-prices\u002Fhow-products-and-prices-work":{"type":"page","title":"How products and prices work","subtitle":"Learn how products and prices in Stripe model your business."},"\u002Fproducts-prices\u002Fgetting-started":{"type":"page","title":"Get started with products and prices","subtitle":"Start modeling your business on Stripe with products and prices."},"\u002Fpayments\u002Fcheckout\u002Fmanual-currency-prices":{"type":"page","title":"Manual currency prices","subtitle":"Present local currencies to customers with manual currency prices."},"\u002Fpayments\u002Fcheckout\u002Fcustomization\u002Fpolicies":{"type":"page","title":"Customize text and policies","subtitle":"Customize the text that your customers see, and the policies Checkout displays."},"\u002Fpayments\u002Fcheckout\u002Fcustomization\u002Fbehavior#link":{"type":"section","title":"Customize checkout behavior","sectionText":"Autofill payment details with Link","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["You can automatically use Link \u0028Stripe’s one-click checkout\u0029 in your prebuilt Checkout page. To learn more, see ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fpayments\u002Flink\u002Fcheckout-link"},"children":["Link with Checkout"]},"."]}]},"\u002Fpayments\u002Fplace-a-hold-on-a-payment-method#auth-capture-limitations":{"type":"section","title":"Place a hold on a payment method","sectionText":"Payment method limitations","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Before implementing, understand the following limitations for authorizing and capturing separately."]}]},"\u002Fcustomer-management":{"type":"page","title":"Customer self-service with a customer portal","subtitle":"Allow your customers to manage their own accounts and subscriptions."},"\u002Fpayments\u002Faccept-a-payment#mount-checkout":{"type":"page","title":"Accept a payment","subtitle":"Securely accept payments online."},"\u002Fsdks\u002Fstripejs-react":{"type":"page","title":"React Stripe.js reference","subtitle":"Learn about React components for Stripe.js and Stripe Elements."},"\u002Fpayments\u002Fpayment-element":{"type":"page","title":"Stripe Payment Element","subtitle":"Accept payment methods from around the globe with a secure, embeddable UI component."},"\u002Fsecurity\u002Fguide#tls":{"type":"section","title":"Integration security guide","sectionText":"Use TLS and HTTPS","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["TLS refers to the process of securely transmitting data between the client—the app or browser that your customer is using—and your server. The Secure Sockets Layer \u0028SSL\u0029 protocol originally performed this, but is outdated and no longer secure. TLS replaced SSL, but the term ",{"\u0024\u0024mdtype":"Tag","name":"em","attributes":{},"children":["SSL"]}," continues to be used colloquially when referring to TLS and its function to protect transmitted data."]}]},"\u002Fsdks\u002Fstripejs-react#elements-provider":{"type":"section","title":"React Stripe.js reference","sectionText":"Elements provider","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Elements"},"children":[]}," provider allows you to use ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"#element-components"},"children":["Element components"]}," and access the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Finitializing"},"children":["Stripe object"]}," in any nested component."," ","Render an ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Elements"},"children":[]}," provider at the root of your React app so that it is available everywhere you need it."]}]},"\u002Felements\u002Faddress-element":{"type":"page","title":"Address Element","subtitle":"Use the Address Element to collect complete billing and shipping addresses."},"\u002Fpayments\u002Faccept-a-payment#save-payment-methods-beta-migration":{"type":"section","title":"Accept a payment","sectionText":"Saved payment method beta migration"},"\u002Fpayments\u002Fsave-customer-payment-methods":{"type":"page","title":"Save and retrieve customer payment methods","subtitle":"Learn more about saved payment methods in the Payment Element."},"\u002Fpayments\u002Fcards\u002Foverview#automatic-card-updates":{"type":"page","title":"How cards work","subtitle":"Learn how an online credit or debit card payment works."},"\u002Ferror-handling":{"type":"page","title":"Error handling","subtitle":"Catch and respond to declines, invalid data, network problems, and more."},"\u002Fpayments\u002Flink":{"type":"page","title":"Faster checkout with Link","subtitle":"Let your customers check out faster with Link."},"\u002Fsdks\u002Fstripejs-react#usestripe-hook":{"type":"section","title":"React Stripe.js reference","sectionText":"useStripe hook","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["The ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"useStripe"},"children":[]}," ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Freact.dev\u002Freference\u002Freact"},"children":["hook"]}," returns a reference to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Finitializing"},"children":["Stripe"]}," instance passed to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"#elements-provider"},"children":["Elements"]}," provider. If you need to access the Stripe object from a class component, use ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"#elements-consumer"},"children":["ElementsConsumer"]}," instead."]}]},"\u002Fsdks\u002Fstripejs-react#useelements-hook":{"type":"section","title":"React Stripe.js reference","sectionText":"useElements hook","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To safely pass the payment information collected by the Payment Element to the Stripe API, access the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Elements"},"children":[]}," instance so that you can use it with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Fpayment_intents\u002Fconfirm_payment"},"children":["stripe.confirmPayment"]},". If you use the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Freact.dev\u002Freference\u002Freact"},"children":["React Hooks API"]},", then ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"useElements"},"children":[]}," is the recommended way to access a mounted Element. If you need to access an Element from a class component, use ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"#elements-consumer"},"children":["ElementsConsumer"]}," instead."]}]},"\u002Fsdks\u002Fstripejs-react#elements-consumer":{"type":"section","title":"React Stripe.js reference","sectionText":"ElementsConsumer","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To safely pass the payment information collected by the Payment Element to the Stripe API, access the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"Elements"},"children":[]}," instance so that you can use it with ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fjs\u002Fpayment_intents\u002Fconfirm_payment"},"children":["stripe.confirmPayment"]},". If you need to access the Stripe object or an Element from a class component, then ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"ElementsConsumer"},"children":[]}," provides an alternative to the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"#useElements-hook"},"children":["useElements"]}," and ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"#useStripe-hook"},"children":["useStripe"]}," hooks."]}]},"\u002Fpayments\u002Fpaymentintents\u002Flifecycle":{"type":"page","title":"How PaymentIntents work","subtitle":"Learn how PaymentIntents work within the payment flow."},"\u002Fwebhooks\u002Fquickstart":{"type":"quickstart","title":"Set up and deploy a webhook","subtitle":"Learn how to set up and deploy a webhook to listen to events from Stripe."},"\u002Fstripe-js\u002Felements\u002Fpayment-request-button#testing":{"type":"section","title":"Payment Request Button","sectionText":"Test your integration","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To test your integration you must use HTTPS and a supported browser."," ","If you use the ",{"\u0024\u0024mdtype":"Tag","name":"InlineCode","attributes":{"content":"paymentRequestButton"},"children":[]}," Element within an iframe, the iframe must have the"," ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTML\u002FElement\u002Fiframe#attr-allowpaymentrequest"},"children":["allow"]}," attribute set to equal “payment *”."]}]},"\u002Fpayments\u002Fpayment-methods\u002Fpayment-method-support":{"type":"page","title":"Payment method support","subtitle":"Learn how your integration choices affect payment method support."},"\u002Fpayments\u002Fpayment-methods\u002Fintegration-options":{"type":"page","title":"Payment method integration options","subtitle":"Learn about the different ways to integrate payment methods."},"\u002Fkeys#obtain-api-keys":{"type":"section","title":"API keys","sectionText":"Secret and publishable keys","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Anyone can use your live mode secret API key to make any API call on behalf of your account, such as creating a charge or performing a refund. Keep your keys safe by following the ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fkeys-best-practices"},"children":["secret API keys best practices"]},"."]}]},"\u002Fkeys#test-live-modes":{"type":"section","title":"API keys","sectionText":"Test mode versus live mode","excerpt":[{"\u0024\u0024mdtype":"Tag","name":"Paragraph","attributes":{},"children":["All Stripe API requests occur in either ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"test-mode"},"children":["test mode"]}," or ",{"\u0024\u0024mdtype":"Tag","name":"Glossary","attributes":{"term":"live-mode"},"children":["live mode"]},". Use test mode to access test data, and live mode to access actual account data. Each mode has its own set of API keys. Objects in one mode aren’t accessible to the other. For instance, a test-mode ",{"\u0024\u0024mdtype":"Tag","name":"Link","attributes":{"href":"\u002Fapi\u002Fproducts\u002Fobject"},"children":["product object"]}," can’t be part of a live-mode payment."]}]}},"version":"1"},"baseUrl":"https:\u002F\u002Fdocs.stripe.com","baseUrlAssets":"https:\u002F\u002Fb.stripecdn.com\u002Fdocs-statics-srv\u002Fassets\u002F","countries":{"AD":{"name":"Andorra","name_with_article":null},"AE":{"name":"United Arab Emirates","name_with_article":"the United Arab Emirates"},"AF":{"name":"Afghanistan","name_with_article":null},"AG":{"name":"Antigua \u0026 Barbuda","name_with_article":null},"AI":{"name":"Anguilla","name_with_article":null},"AL":{"name":"Albania","name_with_article":null},"AM":{"name":"Armenia","name_with_article":null},"AO":{"name":"Angola","name_with_article":null},"AQ":{"name":"Antarctica","name_with_article":null},"AR":{"name":"Argentina","name_with_article":null},"AS":{"name":"American Samoa","name_with_article":null},"AT":{"name":"Austria","name_with_article":null},"AU":{"name":"Australia","name_with_article":null},"AW":{"name":"Aruba","name_with_article":null},"AX":{"name":"Åland Islands","name_with_article":null},"AZ":{"name":"Azerbaijan","name_with_article":null},"BA":{"name":"Bosnia \u0026 Herzegovina","name_with_article":null},"BB":{"name":"Barbados","name_with_article":null},"BD":{"name":"Bangladesh","name_with_article":null},"BE":{"name":"Belgium","name_with_article":null},"BF":{"name":"Burkina Faso","name_with_article":null},"BG":{"name":"Bulgaria","name_with_article":null},"BH":{"name":"Bahrain","name_with_article":null},"BI":{"name":"Burundi","name_with_article":null},"BJ":{"name":"Benin","name_with_article":null},"BL":{"name":"St. Barthélemy","name_with_article":null},"BM":{"name":"Bermuda","name_with_article":null},"BN":{"name":"Brunei","name_with_article":null},"BO":{"name":"Bolivia","name_with_article":null},"BQ":{"name":"Caribbean Netherlands","name_with_article":null},"BR":{"name":"Brazil","name_with_article":null},"BS":{"name":"Bahamas","name_with_article":null},"BT":{"name":"Bhutan","name_with_article":null},"BV":{"name":"Bouvet Island","name_with_article":null},"BW":{"name":"Botswana","name_with_article":null},"BY":{"name":"Belarus","name_with_article":null},"BZ":{"name":"Belize","name_with_article":null},"CA":{"name":"Canada","name_with_article":null},"CC":{"name":"Cocos \u0028Keeling\u0029 Islands","name_with_article":null},"CD":{"name":"Congo - Kinshasa","name_with_article":null},"CF":{"name":"Central African Republic","name_with_article":null},"CG":{"name":"Congo - Brazzaville","name_with_article":null},"CH":{"name":"Switzerland","name_with_article":null},"CI":{"name":"Côte d’Ivoire","name_with_article":null},"CK":{"name":"Cook Islands","name_with_article":null},"CL":{"name":"Chile","name_with_article":null},"CM":{"name":"Cameroon","name_with_article":null},"CN":{"name":"China","name_with_article":null},"CO":{"name":"Colombia","name_with_article":null},"CR":{"name":"Costa Rica","name_with_article":null},"CU":{"name":"Cuba","name_with_article":null},"CV":{"name":"Cape Verde","name_with_article":null},"CW":{"name":"Curaçao","name_with_article":null},"CX":{"name":"Christmas Island","name_with_article":null},"CY":{"name":"Cyprus","name_with_article":null},"CZ":{"name":"Czech Republic","name_with_article":"the Czech Republic"},"DE":{"name":"Germany","name_with_article":null},"DJ":{"name":"Djibouti","name_with_article":null},"DK":{"name":"Denmark","name_with_article":null},"DM":{"name":"Dominica","name_with_article":null},"DO":{"name":"Dominican Republic","name_with_article":null},"DZ":{"name":"Algeria","name_with_article":null},"EC":{"name":"Ecuador","name_with_article":null},"EE":{"name":"Estonia","name_with_article":null},"EG":{"name":"Egypt","name_with_article":null},"EH":{"name":"Western Sahara","name_with_article":null},"ER":{"name":"Eritrea","name_with_article":null},"ES":{"name":"Spain","name_with_article":null},"ET":{"name":"Ethiopia","name_with_article":null},"FI":{"name":"Finland","name_with_article":null},"FJ":{"name":"Fiji","name_with_article":null},"FK":{"name":"Falkland Islands","name_with_article":null},"FM":{"name":"Micronesia","name_with_article":null},"FO":{"name":"Faroe Islands","name_with_article":null},"FR":{"name":"France","name_with_article":null},"GA":{"name":"Gabon","name_with_article":null},"GB":{"name":"United Kingdom","name_with_article":"the United Kingdom"},"GD":{"name":"Grenada","name_with_article":null},"GE":{"name":"Georgia","name_with_article":null},"GF":{"name":"French Guiana","name_with_article":null},"GG":{"name":"Guernsey","name_with_article":null},"GH":{"name":"Ghana","name_with_article":null},"GI":{"name":"Gibraltar","name_with_article":null},"GL":{"name":"Greenland","name_with_article":null},"GM":{"name":"Gambia","name_with_article":null},"GN":{"name":"Guinea","name_with_article":null},"GP":{"name":"Guadeloupe","name_with_article":null},"GQ":{"name":"Equatorial Guinea","name_with_article":null},"GR":{"name":"Greece","name_with_article":null},"GS":{"name":"South Georgia \u0026 South Sandwich Islands","name_with_article":null},"GT":{"name":"Guatemala","name_with_article":null},"GU":{"name":"Guam","name_with_article":null},"GW":{"name":"Guinea-Bissau","name_with_article":null},"GY":{"name":"Guyana","name_with_article":null},"HK":{"name":"Hong Kong","name_with_article":null},"HM":{"name":"Heard \u0026 McDonald Islands","name_with_article":null},"HN":{"name":"Honduras","name_with_article":null},"HR":{"name":"Croatia","name_with_article":null},"HT":{"name":"Haiti","name_with_article":null},"HU":{"name":"Hungary","name_with_article":null},"ID":{"name":"Indonesia","name_with_article":null},"IE":{"name":"Ireland","name_with_article":null},"IL":{"name":"Israel","name_with_article":null},"IM":{"name":"Isle of Man","name_with_article":null},"IN":{"name":"India","name_with_article":null},"IO":{"name":"British Indian Ocean Territory","name_with_article":null},"IQ":{"name":"Iraq","name_with_article":null},"IR":{"name":"Iran","name_with_article":null},"IS":{"name":"Iceland","name_with_article":null},"IT":{"name":"Italy","name_with_article":null},"JE":{"name":"Jersey","name_with_article":null},"JM":{"name":"Jamaica","name_with_article":null},"JO":{"name":"Jordan","name_with_article":null},"JP":{"name":"Japan","name_with_article":null},"KE":{"name":"Kenya","name_with_article":null},"KG":{"name":"Kyrgyzstan","name_with_article":null},"KH":{"name":"Cambodia","name_with_article":null},"KI":{"name":"Kiribati","name_with_article":null},"KM":{"name":"Comoros","name_with_article":null},"KN":{"name":"St. Kitts \u0026 Nevis","name_with_article":null},"KP":{"name":"North Korea","name_with_article":null},"KR":{"name":"South Korea","name_with_article":null},"KW":{"name":"Kuwait","name_with_article":null},"KY":{"name":"Cayman Islands","name_with_article":null},"KZ":{"name":"Kazakhstan","name_with_article":null},"LA":{"name":"Laos","name_with_article":null},"LB":{"name":"Lebanon","name_with_article":null},"LC":{"name":"St. Lucia","name_with_article":null},"LI":{"name":"Liechtenstein","name_with_article":null},"LK":{"name":"Sri Lanka","name_with_article":null},"LR":{"name":"Liberia","name_with_article":null},"LS":{"name":"Lesotho","name_with_article":null},"LT":{"name":"Lithuania","name_with_article":null},"LU":{"name":"Luxembourg","name_with_article":null},"LV":{"name":"Latvia","name_with_article":null},"LY":{"name":"Libya","name_with_article":null},"MA":{"name":"Morocco","name_with_article":null},"MC":{"name":"Monaco","name_with_article":null},"MD":{"name":"Moldova","name_with_article":null},"ME":{"name":"Montenegro","name_with_article":null},"MF":{"name":"St. Martin","name_with_article":null},"MG":{"name":"Madagascar","name_with_article":null},"MH":{"name":"Marshall Islands","name_with_article":null},"MK":{"name":"North Macedonia","name_with_article":null},"ML":{"name":"Mali","name_with_article":null},"MM":{"name":"Myanmar \u0028Burma\u0029","name_with_article":null},"MN":{"name":"Mongolia","name_with_article":null},"MO":{"name":"Macao SAR China","name_with_article":null},"MP":{"name":"Northern Mariana Islands","name_with_article":null},"MQ":{"name":"Martinique","name_with_article":null},"MR":{"name":"Mauritania","name_with_article":null},"MS":{"name":"Montserrat","name_with_article":null},"MT":{"name":"Malta","name_with_article":null},"MU":{"name":"Mauritius","name_with_article":null},"MV":{"name":"Maldives","name_with_article":null},"MW":{"name":"Malawi","name_with_article":null},"MX":{"name":"Mexico","name_with_article":null},"MY":{"name":"Malaysia","name_with_article":null},"MZ":{"name":"Mozambique","name_with_article":null},"NA":{"name":"Namibia","name_with_article":null},"NC":{"name":"New Caledonia","name_with_article":null},"NE":{"name":"Niger","name_with_article":null},"NF":{"name":"Norfolk Island","name_with_article":null},"NG":{"name":"Nigeria","name_with_article":null},"NI":{"name":"Nicaragua","name_with_article":null},"NL":{"name":"Netherlands","name_with_article":"the Netherlands"},"NO":{"name":"Norway","name_with_article":null},"NP":{"name":"Nepal","name_with_article":null},"NR":{"name":"Nauru","name_with_article":null},"NU":{"name":"Niue","name_with_article":null},"NZ":{"name":"New Zealand","name_with_article":null},"OM":{"name":"Oman","name_with_article":null},"PA":{"name":"Panama","name_with_article":null},"PE":{"name":"Peru","name_with_article":null},"PF":{"name":"French Polynesia","name_with_article":null},"PG":{"name":"Papua New Guinea","name_with_article":null},"PH":{"name":"Philippines","name_with_article":"the Philippines"},"PK":{"name":"Pakistan","name_with_article":null},"PL":{"name":"Poland","name_with_article":null},"PM":{"name":"St. Pierre \u0026 Miquelon","name_with_article":null},"PN":{"name":"Pitcairn Islands","name_with_article":null},"PR":{"name":"Puerto Rico","name_with_article":null},"PS":{"name":"Palestinian Territories","name_with_article":null},"PT":{"name":"Portugal","name_with_article":null},"PW":{"name":"Palau","name_with_article":null},"PY":{"name":"Paraguay","name_with_article":null},"QA":{"name":"Qatar","name_with_article":null},"RE":{"name":"Réunion","name_with_article":null},"RO":{"name":"Romania","name_with_article":null},"RS":{"name":"Serbia","name_with_article":null},"RU":{"name":"Russia","name_with_article":null},"RW":{"name":"Rwanda","name_with_article":null},"SA":{"name":"Saudi Arabia","name_with_article":null},"SB":{"name":"Solomon Islands","name_with_article":null},"SC":{"name":"Seychelles","name_with_article":null},"SD":{"name":"Sudan","name_with_article":null},"SE":{"name":"Sweden","name_with_article":null},"SG":{"name":"Singapore","name_with_article":null},"SH":{"name":"St. Helena","name_with_article":null},"SI":{"name":"Slovenia","name_with_article":null},"SJ":{"name":"Svalbard \u0026 Jan Mayen","name_with_article":null},"SK":{"name":"Slovakia","name_with_article":null},"SL":{"name":"Sierra Leone","name_with_article":null},"SM":{"name":"San Marino","name_with_article":null},"SN":{"name":"Senegal","name_with_article":null},"SO":{"name":"Somalia","name_with_article":null},"SR":{"name":"Suriname","name_with_article":null},"SS":{"name":"South Sudan","name_with_article":null},"ST":{"name":"São Tomé \u0026 Príncipe","name_with_article":null},"SV":{"name":"El Salvador","name_with_article":null},"SX":{"name":"Sint Maarten","name_with_article":null},"SY":{"name":"Syria","name_with_article":null},"SZ":{"name":"Eswatini","name_with_article":null},"TC":{"name":"Turks \u0026 Caicos Islands","name_with_article":null},"TD":{"name":"Chad","name_with_article":null},"TF":{"name":"French Southern Territories","name_with_article":null},"TG":{"name":"Togo","name_with_article":null},"TH":{"name":"Thailand","name_with_article":null},"TJ":{"name":"Tajikistan","name_with_article":null},"TK":{"name":"Tokelau","name_with_article":null},"TL":{"name":"Timor-Leste","name_with_article":null},"TM":{"name":"Turkmenistan","name_with_article":null},"TN":{"name":"Tunisia","name_with_article":null},"TO":{"name":"Tonga","name_with_article":null},"TR":{"name":"Turkey","name_with_article":null},"TT":{"name":"Trinidad \u0026 Tobago","name_with_article":null},"TV":{"name":"Tuvalu","name_with_article":null},"TW":{"name":"Taiwan","name_with_article":null},"TZ":{"name":"Tanzania","name_with_article":null},"UA":{"name":"Ukraine","name_with_article":null},"UG":{"name":"Uganda","name_with_article":null},"UM":{"name":"U.S. Outlying Islands","name_with_article":null},"US":{"name":"United States","name_with_article":"the United States"},"UY":{"name":"Uruguay","name_with_article":null},"UZ":{"name":"Uzbekistan","name_with_article":null},"VA":{"name":"Vatican City","name_with_article":null},"VC":{"name":"St. Vincent \u0026 Grenadines","name_with_article":null},"VE":{"name":"Venezuela","name_with_article":null},"VG":{"name":"British Virgin Islands","name_with_article":null},"VI":{"name":"U.S. Virgin Islands","name_with_article":null},"VN":{"name":"Vietnam","name_with_article":null},"VU":{"name":"Vanuatu","name_with_article":null},"WF":{"name":"Wallis \u0026 Futuna","name_with_article":null},"WS":{"name":"Samoa","name_with_article":null},"YE":{"name":"Yemen","name_with_article":null},"YT":{"name":"Mayotte","name_with_article":null},"ZA":{"name":"South Africa","name_with_article":null},"ZM":{"name":"Zambia","name_with_article":null},"ZW":{"name":"Zimbabwe","name_with_article":null}},"csrfToken":"vlLN8eQvYDhVegcsWsb1QJRHi0Nu2n__3QTEQuggO840t-VMoIKDibzscz6nhROF28OlQUrIpD-uNGJlA5g_7Dw-AV5tnSE5nB_e4ayWXslAykcCYAMWhg7eW9krRQxTucAXLVoO6w==","messages":{"docsApp.ApiResponse.fetching":"Fetching from the Stripe API..","docsApp.ApiResponse.responseBody":"Response Body","docsApp.Buttons.generateExamples":"Generate Examples","docsApp.Buttons.makeRequest":"Make API Request","docsApp.CollapsibleJson.copiedLabel":"Copied","docsApp.CollapsibleJson.copyLabel":"Copy","docsApp.CollapsibleJson.numberOfItems":"{count, plural,\n one {{count} item}\n other {{count} items}\n }","docsApp.HideTerminal":"Close the Stripe Shell","docsApp.MakeRequestButton.makeRequest":"Make a request","docsApp.Params.noParams":"No parameters.","docsApp.Params.optional":"Optional parameter","docsApp.Params.params":"Request Parameters","docsApp.Params.pathArgs":"Path Argument","docsApp.Params.required":"Required parameter","docsApp.Params.value":"Value","docsApp.RunRequestButton.runRequest":"Run request","docsApp.TestModeBankAccounts.accountTypeAccount":"Account","docsApp.TestModeBankAccounts.accountTypeIban":"IBAN","docsApp.TestModeBankAccounts.behaviorTypeFailure":"Payout fails with a \u003CInlineCode\u003E{code}\u003C\u002FInlineCode\u003E code.","docsApp.TestModeBankAccounts.behaviorTypeSuccess":"Payout succeeds.","docsApp.TestModeBankAccounts.routingTypeRouting":"Routing","docsApp.TestModeBankAccounts.routingTypeSwift":"SWIFT \u002F BIC Code","docsApp.actionSelector.action":"Action","docsApp.actionSelector.noResults":"No results found","docsApp.actionSelector.resource":"Resource","docsApp.actionSelector.search":"Select a resource","docsApp.actionSelector.selectAction":"Select an action","docsApp.addPane":"New pane","docsApp.apiExplorer.action":"Action","docsApp.apiExplorer.intro":"Welcome to the API Explorer\u0021","docsApp.apiExplorer.request":"Request","docsApp.apiExplorer.resource":"Resource","docsApp.apiExplorer.response":"Response","docsApp.apiExplorer.subtitle":"\n The API Explorer allows you to explore Stripe APIs without writing any code.\n Use the dropdown menu to select an API resource and action, and customize the\n parameters \u0028if needed\u0029. Click the Run request button to run the request in the\n Stripe Shell. API Explorer is only available in test mode.\n ","docsApp.apiResponse.default":"\u002F\u002F No response received yet.","docsApp.apiWorksheet.getStarted":"Get started","docsApp.close":"Close","docsApp.clui.beta":"Beta","docsApp.clui.cancelLabel":"Cancel","docsApp.clui.feedbackClose":"Close","docsApp.clui.feedbackPromptLabel":"Feedback on this experience:","docsApp.clui.feedbackTitle":"Feedback on your developer experience","docsApp.clui.feedbackToolTip":"Feedback","docsApp.clui.generateRequestTooltip":"Generate request in a new pane","docsApp.clui.optionalResponseLabel":"Optional response...","docsApp.clui.submitLabel":"Submit","docsApp.clui.testmode":"Test mode","docsApp.clui.thumbsDownMessage":"What don't you like about this experience?","docsApp.clui.thumbsUpMessage":"What do you like about this experience?","docsApp.clui.welcome":"\nWelcome to the Stripe Shell\u0021\n\nStripe Shell is a browser-based shell with the Stripe CLI pre-installed. Login to Stripe\ndocs and press Control \u002B Backtick on your keyboard to start managing your Stripe resources\nin test mode.\n\n- View supported commands: {Command1Link}\n- Find webhook events: {Command3Link}\n- Listen for webhook events: {Command2Link}\n- Call Stripe APIs: stripe [api resource] [operation] \u0028e.g. {Command4Link}\u0029\n","docsApp.cluiTrigger.failed":"Trigger failed: {error}","docsApp.cluiTrigger.hideDetails":"Hide details…","docsApp.cluiTrigger.request":"Request","docsApp.cluiTrigger.response":"Response","docsApp.cluiTrigger.setUpFixture":"Set up fixture for: {name}","docsApp.cluiTrigger.settingUpFixture":"Setting up fixture for: {name}","docsApp.cluiTrigger.showDetails":"Show details…","docsApp.cluiTrigger.succeeded":"Trigger succeeded\u0021","docsApp.codegenExample.default":"\u002F\u002F Make a request to see code examples.","docsApp.component.TerminalReaderComparison.contact":"Contact your Stripe account manager for more details.","docsApp.component.TerminalReaderComparison.showNow":"Shop now","docsApp.components.EventPermisssionTable.eventHeader":"Event","docsApp.components.EventPermisssionTable.permissionHeader":"Permission","docsApp.components.Identifier.account":"Find your Merchant ID by visiting your \u003Ca\u003Eaccount settings\u003C\u002Fa\u003E.","docsApp.components.Identifier.connectedAccount":"Identifier of a Connected Account created using the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E.","docsApp.components.Identifier.coupon":"Create a Coupon with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.customer":"Create a Customer with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.dispute":"Create a Dispute with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.file":"Create a File with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.Identifier.financialAccount":"Create a FinancialAccount with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.Identifier.financialConnectionsAccount":"Create a Financial Connections Account with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.Identifier.inventory":"Create an Inventory with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.Identifier.invoice":"Create an invoice with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.location":"Create a Location with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.order":"Create an Order with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.Identifier.partner":"Find your Partner ID in the Partners section of the \u003Ca\u003EDashboard\u003C\u002Fa\u003E.","docsApp.components.Identifier.paymentIntent":"Create a PaymentIntent with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E. You can also create a test payment using the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E.","docsApp.components.Identifier.paymentMethod":"Create a PaymentMethod with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or hardcode a \u003Ca2\u003Etest ID\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.paymentRefund":"Create a Refund with the \u003Ca\u003EAPI\u003C\u002Fa\u003E or hardcode a test ID before making this request.","docsApp.components.Identifier.price":"Create a Price and Product with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.product":"Create a Price and Product with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.promotionCode":"This is the customer-facing promotion code.","docsApp.components.Identifier.promotionCodeId":"Create a Coupon and PromotionCode with the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.session":"Create a Checkout Session with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.Identifier.taxCode":"This is the generally taxable tax code for electronically supplied services. You can use \u003Ca\u003Eother tax codes\u003C\u002Fa\u003E instead.","docsApp.components.Identifier.verificationSession":"Create a VerificationSession with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.IndiaExportsTable.headerCells.code":"Code","docsApp.components.IndiaExportsTable.headerCells.description":"Description","docsApp.components.IndonesianBankCodesTable.headerCells.bankCode":"Bank Code","docsApp.components.IndonesianBankCodesTable.headerCells.bankName":"Bank Name","docsApp.components.IntegrationCard.effort":"Effort","docsApp.components.IssuingCategoriesTable.headerCells.code":"Category","docsApp.components.IssuingCategoriesTable.headerCells.description":"MCC","docsApp.components.RatingScale.message":"{message}","docsApp.components.ReportingCategoryList.btTypesHeader":"Balance transaction type\u0028s\u0029: ","docsApp.components.ReportingCategoryList.reportSectionHeader":"Section\u0028s\u0029 in the monthly report: ","docsApp.components.RoleIdTable.attirbuteRoleHeader":"Attribute statement role id","docsApp.components.RoleIdTable.dashboardRoleHeader":"Dashboard role","docsApp.components.acceptPaymentSelector.android":"Android","docsApp.components.acceptPaymentSelector.checkout":"Prebuilt Checkout page","docsApp.components.acceptPaymentSelector.elements":"Custom payment flow","docsApp.components.acceptPaymentSelector.ios":"iOS","docsApp.components.acceptPaymentSelector.plugins":"Web platform or CMS","docsApp.components.acceptPaymentSelector.reactNative":"React Native","docsApp.components.acceptPaymentSelector.web":"Web","docsApp.components.availability.available":"Available in: ","docsApp.components.aymentRequestButtonElementDemo.callout":"\u003Cb\u003EEither your browser does not support the Payment Request API, or you do not have a saved payment method\u003C\u002Fb\u003E. To try out the Payment Request Button live demo, switch to one of the \u003Ca\u003Esupported browsers\u003C\u002Fa\u003E below, and make sure you have a saved payment method.","docsApp.components.beforeAfterTable.after":"After","docsApp.components.beforeAfterTable.before":"Before","docsApp.components.cardPaymentDemoOxxo.email":"Email","docsApp.components.cardPaymentDemoOxxo.emailError":"A value is needed in the email field to pay.","docsApp.components.cardPaymentDemoOxxo.genericError":"An error occurred. We're looking into it\u0021","docsApp.components.cardPaymentDemoOxxo.name":"Name","docsApp.components.cardPaymentDemoOxxo.nameError":"A value is needed in the name field to pay.","docsApp.components.cardPaymentDemoOxxo.pay":"Pay with OXXO","docsApp.components.cardPaymentDemoOxxo.prefill":"Prefill billing details","docsApp.components.codeBlock.hideLines":"Hide lines","docsApp.components.codeBlock.seeAllLines":"See all {count} lines","docsApp.components.codeBlock.viewFullSample":"View full sample","docsApp.components.contrib.adminRoleDetails.changeAccountOwner":"Change the account owner \u0028only the owner can transfer ownership\u0029","docsApp.components.contrib.groupDescriptions.connect":"These roles are only available if you use \u003Ca\u003EConnect\u003C\u002Fa\u003E","docsApp.components.contrib.groupDescriptions.corporateCard":"These roles are only available if you use \u003Ca\u003ECorporate Card\u003C\u002Fa\u003E","docsApp.components.contrib.groupDescriptions.issuing":"These roles are only available if you use \u003Ca\u003EIssuing\u003C\u002Fa\u003E.","docsApp.components.contrib.groupDescriptions.tax":"These roles are only available if you use \u003Ca\u003E1099s\u003C\u002Fa\u003E","docsApp.components.contrib.groupNames.admin":"Admin roles","docsApp.components.contrib.groupNames.connect":"Connect roles","docsApp.components.contrib.groupNames.corporateCard":"Corporate card roles","docsApp.components.contrib.groupNames.developer":"Developer roles","docsApp.components.contrib.groupNames.issuing":"Issuing roles","docsApp.components.contrib.groupNames.opal":"Opal roles","docsApp.components.contrib.groupNames.payment":"Payment roles","docsApp.components.contrib.groupNames.support":"Support roles","docsApp.components.contrib.groupNames.tax":"Tax form roles","docsApp.components.contrib.groupNames.viewOnly":"View only roles","docsApp.components.contrib.groupNotes.admin":"An Account Owner is a special type of Administrator that can perform all actions, including closing the account.\n There can only be one Owner for an account. To change the Account Owner, please refer to \u003Ca\u003Ethis guide\u003C\u002Fa\u003E.","docsApp.components.contrib.productList.atlas":"Atlas","docsApp.components.contrib.productList.bankingAAS":"Banking-as-a-service","docsApp.components.contrib.productList.billing":"Billing","docsApp.components.contrib.productList.businessFinancing":"Business financing","docsApp.components.contrib.productList.businessOperations":"Business operations","docsApp.components.contrib.productList.capital":"Capital","docsApp.components.contrib.productList.cardCreation":"Card creation","docsApp.components.contrib.productList.checkout":"Checkout","docsApp.components.contrib.productList.climate":"Climate","docsApp.components.contrib.productList.connect":"Connect","docsApp.components.contrib.productList.corporateCard":"Corporate Card","docsApp.components.contrib.productList.customReports":"Custom reports","docsApp.components.contrib.productList.directPayments":"Direct payments","docsApp.components.contrib.productList.elements":"Elements","docsApp.components.contrib.productList.financialConnections":"Financial Connections","docsApp.components.contrib.productList.financialConnectionsDescription":"Linked financial account data","docsApp.components.contrib.productList.financialServices":"Financial services","docsApp.components.contrib.productList.fraudAndRisk":"Fraud and risk management","docsApp.components.contrib.productList.identity":"Identity","docsApp.components.contrib.productList.identityVerification":"Identity verification","docsApp.components.contrib.productList.inPersonAndOmnichannel":"In-person and omnichannel payments","docsApp.components.contrib.productList.invoicing":"Invoicing","docsApp.components.contrib.productList.issuing":"Issuing","docsApp.components.contrib.productList.moneySAE":"Money storage and expenses","docsApp.components.contrib.productList.multipartyPayments":"Multiparty payments","docsApp.components.contrib.productList.noCodePayments":"No-code payments","docsApp.components.contrib.productList.oneOffInvoices":"One-off invoices","docsApp.components.contrib.productList.onlinePayments":"Online payments","docsApp.components.contrib.productList.opal":"Opal","docsApp.components.contrib.productList.paymentLinks":"Payment Links","docsApp.components.contrib.productList.payments":"Payments","docsApp.components.contrib.productList.paymentsForPlatforms":"Payments for platforms and marketplaces","docsApp.components.contrib.productList.prebuiltCheckout":"Prebuilt, Stripe hosted checkout page","docsApp.components.contrib.productList.prebuiltComponents":"Prebuilt components","docsApp.components.contrib.productList.radar":"Radar","docsApp.components.contrib.productList.removeCarbon":"Remove carbon as you grow your business","docsApp.components.contrib.productList.revenue":"Revenue Recognition","docsApp.components.contrib.productList.revenueDescription":"Accounting automation","docsApp.components.contrib.productList.secureFrontendComponents":"Secure frontend UI components","docsApp.components.contrib.productList.sigma":"Sigma","docsApp.components.contrib.productList.spendManagement":"Spend management","docsApp.components.contrib.productList.startupIncorporation":"Startup incorporation","docsApp.components.contrib.productList.subscriptionsAndRecurring":"Subscriptions and recurring payments","docsApp.components.contrib.productList.tax":"Tax","docsApp.components.contrib.productList.taxCalculation":"Automatic tax calculation","docsApp.components.contrib.productList.terminal":"Terminal","docsApp.components.contrib.productList.treasury":"Treasury","docsApp.components.contrib.roleDescription.betaBadge":"Beta","docsApp.components.contrib.roleDescription.clickToCopy":"Click to copy","docsApp.components.contrib.roleDescription.copied":"Copied","docsApp.components.contrib.roleDescription.roleId":"Role ID:","docsApp.components.contrib.roleDescription.someThingsThisRoleCanDo":"Some of what this role can do:","docsApp.components.contrib.roleDescription.someThingsThisRoleCannotDo":"Some of what this role can't do:","docsApp.components.contrib.roleDescription.ssoRoleID":"\u003CSSOLink\u003ESSO\u003C\u002FSSOLink\u003E Role ID:","docsApp.components.contrib.roleDescription.ssoRoleId":"SSO Role ID:","docsApp.components.contrib.roleDescriptions.adminRole.descriptionOfWhatRoleCanDo":"This role is for anyone who needs similar access as the account owner—they can see and manage almost everything.","docsApp.components.contrib.roleDescriptions.adminRole.descriptionOfWhatRoleCannotDo":"They can't change the default currency, delete the default bank account, or change the account owner.","docsApp.components.contrib.roleDescriptions.adminRole.roleName":"Administrator","docsApp.components.contrib.roleDescriptions.adminRole.shortDescription":"Can act as the administrator, transfer money, and edit settings","docsApp.components.contrib.roleDescriptions.analystRole.descriptionOfWhatRoleCanDo":"This role is for people who need to pay out money, refund payments, and export data.","docsApp.components.contrib.roleDescriptions.analystRole.descriptionOfWhatRoleCannotDo":"They can't edit payout schedules or account settings.","docsApp.components.contrib.roleDescriptions.analystRole.roleName":"Analyst","docsApp.components.contrib.roleDescriptions.analystRole.shortDescription":"Can pay out money, refund payments, and export data","docsApp.components.contrib.roleDescriptions.cardholderRole.descriptionOfWhatRoleCanDo":"This role is for employees who have a Stripe corporate card. They can only view their own card information.","docsApp.components.contrib.roleDescriptions.cardholderRole.descriptionOfWhatRoleCannotDo":"They can't view company-wide corporate card data or reports, payments, or any account settings.","docsApp.components.contrib.roleDescriptions.cardholderRole.roleName":"Cardholder","docsApp.components.contrib.roleDescriptions.cardholderRole.shortDescription":"Can view card transactions and replace card","docsApp.components.contrib.roleDescriptions.connectDisputeAnalyst.descriptionOfWhatRoleCanDo":"This role is for people who need to view, submit evidence for, and accept disputes for connected accounts.","docsApp.components.contrib.roleDescriptions.connectDisputeAnalyst.descriptionOfWhatRoleCannotDo":"They can't do anything on the platform account except view connected accounts.","docsApp.components.contrib.roleDescriptions.connectDisputeAnalyst.roleName":"Connect Dispute Analyst","docsApp.components.contrib.roleDescriptions.connectDisputeAnalyst.shortDescription":"Can view, submit, and accept disputes on connected accounts","docsApp.components.contrib.roleDescriptions.connectOnboardingAnalyst.descriptionOfWhatRoleCanDo":"This role is for people who need to create connected accounts and edit their identity information.","docsApp.components.contrib.roleDescriptions.connectOnboardingAnalyst.descriptionOfWhatRoleCannotDo":"They can't do anything on the platform account except view and edit connected accounts.","docsApp.components.contrib.roleDescriptions.connectOnboardingAnalyst.roleName":"Connect Onboarding Analyst","docsApp.components.contrib.roleDescriptions.connectOnboardingAnalyst.shortDescription":"Can create and upload documents for connected accounts","docsApp.components.contrib.roleDescriptions.developerRole.descriptionOfWhatRoleCanDo":"This role is for developers who need to set up a Stripe integration. This role has access to the secret key, which grants access to almost all API resources.","docsApp.components.contrib.roleDescriptions.developerRole.descriptionOfWhatRoleCannotDo":"They can't add or edit bank accounts, invite team members, or change the account owner.","docsApp.components.contrib.roleDescriptions.developerRole.roleName":"Developer","docsApp.components.contrib.roleDescriptions.developerRole.shortDescription":"Can view secret key, create api keys, and edit settings","docsApp.components.contrib.roleDescriptions.disputeAnalystRole.descriptionOfWhatRoleCanDo":"This role is for people who need need to view, submit evidence for, and accept disputes.","docsApp.components.contrib.roleDescriptions.disputeAnalystRole.descriptionOfWhatRoleCannotDo":"They can't do anything that's not related to disputes.","docsApp.components.contrib.roleDescriptions.disputeAnalystRole.roleName":"Dispute Analyst","docsApp.components.contrib.roleDescriptions.disputeAnalystRole.shortDescription":"Can view and resolve disputes","docsApp.components.contrib.roleDescriptions.iamAdminRole.descriptionOfWhatRoleCanDo":"The Identity and Access Management \u0028IAM\u0029 Admin role is for people who need to invite team members and assign roles. They can also remove any user, including Administrators.","docsApp.components.contrib.roleDescriptions.iamAdminRole.descriptionOfWhatRoleCannotDo":"They can't do anything beyond access management. They also can't assign a user to the Administrator role.","docsApp.components.contrib.roleDescriptions.iamAdminRole.roleName":"IAM Administrator","docsApp.components.contrib.roleDescriptions.iamAdminRole.shortDescription":"Can invite team members and assign roles","docsApp.components.contrib.roleDescriptions.issuingSupportAgentRole.descriptionOfWhatRoleCanDo":"This role is for Issuing users who need to create disputes and edit authorization and transaction metadata.","docsApp.components.contrib.roleDescriptions.issuingSupportAgentRole.descriptionOfWhatRoleCannotDo":"This role can't create cards or cardholders.","docsApp.components.contrib.roleDescriptions.issuingSupportAgentRole.roleName":"Issuing Support Agent","docsApp.components.contrib.roleDescriptions.opalViewOnlyRole.descriptionOfWhatRoleCanDo":"This role gives employees access to sensitive financial information. Accountants or bookkeepers might find this role useful.","docsApp.components.contrib.roleDescriptions.opalViewOnlyRole.descriptionOfWhatRoleCannotDo":"They can't send or add money, order cards for team members, or manage payouts.","docsApp.components.contrib.roleDescriptions.opalViewOnlyRole.roleName":"Opal View Only","docsApp.components.contrib.roleDescriptions.refundAnalystRole.descriptionOfWhatRoleCanDo":"This role is for people who need to refund payments and issue credit notes on invoices.","docsApp.components.contrib.roleDescriptions.refundAnalystRole.descriptionOfWhatRoleCannotDo":"They can’t create payments, view balance, or view connected accounts.","docsApp.components.contrib.roleDescriptions.refundAnalystRole.roleName":"Refund Analyst","docsApp.components.contrib.roleDescriptions.refundAnalystRole.shortDescription":"Can refund payments and subscriptions","docsApp.components.contrib.roleDescriptions.supportOnly.roleName":"Support Only","docsApp.components.contrib.roleDescriptions.supportSpecialist.descriptionOfWhatRoleCanDo":"This role is for people who need to refund payments, resolve disputes, and may need to update products. It has administration permissions for connected accounts, where it can edit the payout schedule, update the legal entity, and more. This role can add, edit, and delete products.","docsApp.components.contrib.roleDescriptions.supportSpecialist.descriptionOfWhatRoleCannotDo":"They can't create connected accounts, transfer funds, payout money, or edit any account settings.","docsApp.components.contrib.roleDescriptions.supportSpecialist.roleName":"Support Specialist","docsApp.components.contrib.roleDescriptions.supportSpecialist.shortDescription":"Can refund payments, resolve disputes, and edit connected accounts","docsApp.components.contrib.roleDescriptions.taxAnalyst.descriptionOfWhatRoleCanDo":"This role is for people who need to configure tax form settings, file tax forms for connected accounts, and export data.","docsApp.components.contrib.roleDescriptions.taxAnalyst.descriptionOfWhatRoleCannotDo":"They can't create connected accounts, transfer funds, payout money, or edit account and non-Tax product settings.","docsApp.components.contrib.roleDescriptions.taxAnalyst.roleName":"Tax Analyst","docsApp.components.contrib.roleDescriptions.taxAnalyst.shortDescription":"Can configure tax settings, file tax forms, and export data","docsApp.components.contrib.roleDescriptions.topupsOnlyRole.descriptionOfWhatRoleCanDo":"This role gives access to the Topups feature, including creating, viewing, and updating topups. Accountants or Financial employees may find this useful.","docsApp.components.contrib.roleDescriptions.topupsOnlyRole.descriptionOfWhatRoleCannotDo":"They can't access any other Stripe features.","docsApp.components.contrib.roleDescriptions.topupsOnlyRole.roleName":"Top-ups Only \u0028Deprecated. Use Top-up Specialist instead\u0029","docsApp.components.contrib.roleDescriptions.transferAnalyst.descriptionOfWhatRoleCanDo":"This role is for people who need to transfer funds to connected accounts and view the platform’s balance and historical payouts.","docsApp.components.contrib.roleDescriptions.transferAnalyst.descriptionOfWhatRoleCannotDo":"They can't pay out money to external bank accounts, add or edit bank accounts, or create new connected accounts.","docsApp.components.contrib.roleDescriptions.transferAnalyst.note":"Your account must require \u003Ca\u003Etwo-step authentication\u003C\u002Fa\u003E in order to allow non-Administrators with this role to transfer funds.","docsApp.components.contrib.roleDescriptions.transferAnalyst.roleName":"Transfer Analyst","docsApp.components.contrib.roleDescriptions.transferAnalyst.shortDescription":"Can transfer money, view balance, and view payouts","docsApp.components.contrib.roleDescriptions.viewOnly.descriptionOfWhatRoleCanDo":"This role is for people who need to view payments, balance, and connected accounts, but can’t edit any of them. This role can also export data and download reports.","docsApp.components.contrib.roleDescriptions.viewOnly.descriptionOfWhatRoleCannotDo":"They can't create connected accounts, transfer funds, payout money, or edit any account and product settings.","docsApp.components.contrib.roleDescriptions.viewOnly.roleName":"View Only","docsApp.components.contrib.roleDescriptions.viewOnly.shortDescription":"Can only view and export data and reports.","docsApp.components.contrib.thingsRolesCanDo.addAndEditBankAccountDetails":"Add and edit bank account details","docsApp.components.contrib.thingsRolesCanDo.addEditRemoveTeamMembers":"Invite, edit, remove team members","docsApp.components.contrib.thingsRolesCanDo.addFunds":"Add funds to a balance","docsApp.components.contrib.thingsRolesCanDo.addPaymentFingerprintToRadarAllowLists":"Add payment fingerprint to radar allow lists","docsApp.components.contrib.thingsRolesCanDo.addPersonToConnectedAccount":"Add person to a connected account","docsApp.components.contrib.thingsRolesCanDo.anythingBesidesSupport":"Anything outside the scope of managing support requests","docsApp.components.contrib.thingsRolesCanDo.anythingBesidesTopups":"Anything outside the scope of the Top-ups feature","docsApp.components.contrib.thingsRolesCanDo.bulkExport":"Bulk exports of payments, customers, products, and connected accounts","docsApp.components.contrib.thingsRolesCanDo.changeAccountOwner":"Change the account owner","docsApp.components.contrib.thingsRolesCanDo.changeDefaultPayoutCurrency":"Change default payout currency","docsApp.components.contrib.thingsRolesCanDo.configureAnyProductSettings":"Configure any product settings \u0028for example, payment methods, radar settings, or connect settings\u0029","docsApp.components.contrib.thingsRolesCanDo.configureTaxAndTaxFormSettings":"Configure tax and tax form settings","docsApp.components.contrib.thingsRolesCanDo.configureTaxFormsForConnectedAccounts":"View, modify, and file tax forms for connected accounts","docsApp.components.contrib.thingsRolesCanDo.connectAccountToConnectPlatforms":"Connect account to \u003Ca\u003Econnect\u003C\u002Fa\u003E platforms","docsApp.components.contrib.thingsRolesCanDo.contactSupport":"Contact support from the dashboard","docsApp.components.contrib.thingsRolesCanDo.createAndManageGroups":"Create and manage user groups","docsApp.components.contrib.thingsRolesCanDo.createConnectedAccounts":"Create connected accounts","docsApp.components.contrib.thingsRolesCanDo.createEditDeleteAPIKeys":"Create, view, edit, delete API keys","docsApp.components.contrib.thingsRolesCanDo.createEditDeleteCustomers":"Create, edit, delete customers","docsApp.components.contrib.thingsRolesCanDo.createEditDeleteIssuingCardholders":"Create, edit, or delete Issuing cardholders","docsApp.components.contrib.thingsRolesCanDo.createEditDeleteIssuingCards":"Create, edit, or delete Issuing cards","docsApp.components.contrib.thingsRolesCanDo.createEditDeleteProducts":"Create, edit, delete products","docsApp.components.contrib.thingsRolesCanDo.createEditRejectConnectedAccounts":"Create, edit, reject connected accounts","docsApp.components.contrib.thingsRolesCanDo.createOutboundPayments":"Initiate ACH or wire payments to an external recipient","docsApp.components.contrib.thingsRolesCanDo.createPayments":"Create payments","docsApp.components.contrib.thingsRolesCanDo.createRefundPayments":"Create or refund payments","docsApp.components.contrib.thingsRolesCanDo.createTopups":"Create new Top-ups","docsApp.components.contrib.thingsRolesCanDo.createViewEditConnectedAccounts":"Create, view, edit connected accounts","docsApp.components.contrib.thingsRolesCanDo.createViewEditDeleteCustomers":"Create, view, edit, delete customers","docsApp.components.contrib.thingsRolesCanDo.createViewEditDeleteCustomersBoth":"Create, view, edit, delete customers \u0028on the platform or connected accounts\u0029","docsApp.components.contrib.thingsRolesCanDo.createViewEditDeleteCustomersPlatform":"Create, view, edit, delete customers \u0028on the platform\u0029","docsApp.components.contrib.thingsRolesCanDo.createViewEditDeleteProducts":"Create, view, edit, delete products","docsApp.components.contrib.thingsRolesCanDo.createViewEditDeleteProductsBoth":"Create, view, edit, delete products \u0028on the platform or connected accounts\u0029","docsApp.components.contrib.thingsRolesCanDo.createViewEditDeleteProductsPlatform":"Create, view, edit, delete products \u0028on the platform\u0029","docsApp.components.contrib.thingsRolesCanDo.createViewEditIssuingDisputes":"Create, view, or edit Issuing disputes","docsApp.components.contrib.thingsRolesCanDo.createViewEditRejectConnectedAccounts":"Create, view, edit, reject connected accounts","docsApp.components.contrib.thingsRolesCanDo.createViewRefundPayments":"Create, view, refund payments","docsApp.components.contrib.thingsRolesCanDo.createViewRefundPaymentsBoth":"Create, view, refund payments \u0028on the platform or connected accounts\u0029","docsApp.components.contrib.thingsRolesCanDo.createViewRefundPaymentsPlatform":"Create, view, refund payments \u0028made on the platform\u0029","docsApp.components.contrib.thingsRolesCanDo.deleteTheDefaultBankAccount":"Delete the default bank account","docsApp.components.contrib.thingsRolesCanDo.editAccountDetails":"Edit account details \u0028address and contact\u0029","docsApp.components.contrib.thingsRolesCanDo.editAllProductSettings":"Configure all product settings \u0028for example, payment methods, radar settings, or connect settings\u0029","docsApp.components.contrib.thingsRolesCanDo.editAnyProductSettingsBesidesTax":"Edit any non-tax product settings \u0028for example, payment methods, radar settings, or connect settings\u0029","docsApp.components.contrib.thingsRolesCanDo.editConnectedAccountPayoutSchedule":"Edit connected account payout schedules","docsApp.components.contrib.thingsRolesCanDo.editConnectedAcctCapabilities":"Edit connected account capabilities","docsApp.components.contrib.thingsRolesCanDo.editPayoutSchedule":"Edit payout schedule","docsApp.components.contrib.thingsRolesCanDo.editTerminalAndClimateSettings":"Edit terminal and climate settings","docsApp.components.contrib.thingsRolesCanDo.exportStatements":"Download account statements","docsApp.components.contrib.thingsRolesCanDo.freezeTheirCard":"Freeze their card","docsApp.components.contrib.thingsRolesCanDo.fullAccessToTheTaxFormsView":"Full access to the \u003Ca\u003Etax forms\u003C\u002Fa\u003E view","docsApp.components.contrib.thingsRolesCanDo.issueCreditNotes":"Issue credit notes on invoices","docsApp.components.contrib.thingsRolesCanDo.manageFinancialReports":"Create, view, download financial reports","docsApp.components.contrib.thingsRolesCanDo.manageSupportRequests":"Manage support requests","docsApp.components.contrib.thingsRolesCanDo.payoutBalanceToExternalBankAccount":"Payout balance to external bank account","docsApp.components.contrib.thingsRolesCanDo.rejectConnectedAccounts":"Reject connected accounts","docsApp.components.contrib.thingsRolesCanDo.replaceTheirCard":"Replace their card","docsApp.components.contrib.thingsRolesCanDo.resolveDisputes":"Resolve disputes","docsApp.components.contrib.thingsRolesCanDo.transferBalanceAndReverseTransfers":"Transfer balance to connected account or reverse transfers","docsApp.components.contrib.thingsRolesCanDo.updateTopups":"Update existing Top-ups","docsApp.components.contrib.thingsRolesCanDo.viewAndEditAlmostAllProductSettingsExceptTerminalAndClimate":"View and edit almost all product settings \u0028for example, payment methods, radar settings, or connect settings\u0029 except terminal and climate","docsApp.components.contrib.thingsRolesCanDo.viewAndResolveDisputes":"View and resolve disputes","docsApp.components.contrib.thingsRolesCanDo.viewAndResolveDisputesBoth":"View and resolve disputes \u0028on the platform or connected accounts\u0029","docsApp.components.contrib.thingsRolesCanDo.viewAndResolveDisputesConnect":"View and resolve disputes on connected accounts","docsApp.components.contrib.thingsRolesCanDo.viewAndResolveDisputesPlatform":"View and resolve disputes \u0028made on the platform\u0029","docsApp.components.contrib.thingsRolesCanDo.viewBalance":"View balance","docsApp.components.contrib.thingsRolesCanDo.viewConnectedAccounts":"View connected accounts","docsApp.components.contrib.thingsRolesCanDo.viewCustomers":"View customers","docsApp.components.contrib.thingsRolesCanDo.viewCustomersOnConnectedAccount":"View customers on connected accounts","docsApp.components.contrib.thingsRolesCanDo.viewDisputes":"View disputes","docsApp.components.contrib.thingsRolesCanDo.viewEditIssuingAuthorizations":"View and edit Issuing authorizations","docsApp.components.contrib.thingsRolesCanDo.viewEditIssuingTransactions":"View and edit Issuing transactions","docsApp.components.contrib.thingsRolesCanDo.viewEventsAndLogs":"View events and logs","docsApp.components.contrib.thingsRolesCanDo.viewInvoicesAndSubcriptions":"View invoices and subscriptions","docsApp.components.contrib.thingsRolesCanDo.viewIssuingCardholders":"View Issuing cardholders","docsApp.components.contrib.thingsRolesCanDo.viewIssuingCards":"View Issuing cards","docsApp.components.contrib.thingsRolesCanDo.viewOrRejectConnectedAccounts":"View or reject connected accounts","docsApp.components.contrib.thingsRolesCanDo.viewPayments":"View payments","docsApp.components.contrib.thingsRolesCanDo.viewPaymentsOnConnectedAccount":"View payments made on connected accounts","docsApp.components.contrib.thingsRolesCanDo.viewPayouts":"View payouts","docsApp.components.contrib.thingsRolesCanDo.viewProducts":"View products","docsApp.components.contrib.thingsRolesCanDo.viewProductsOnConnectedAccount":"View products on connected accounts","docsApp.components.contrib.thingsRolesCanDo.viewRadar":"View radar rules and settings","docsApp.components.contrib.thingsRolesCanDo.viewRefundPayments":"View and refund payments","docsApp.components.contrib.thingsRolesCanDo.viewSecurityHistory":"View security history","docsApp.components.contrib.thingsRolesCanDo.viewSupportHistory":"View support message history","docsApp.components.contrib.thingsRolesCanDo.viewTheirTransactions":"View their transactions","docsApp.components.contrib.thingsRolesCanDo.viewTopups":"Load and view Top-ups","docsApp.components.contrib.thingsRolesCanDo.viewTransactions":"View and export account transactions","docsApp.components.contrib.thingsRolesCanDo.viewTransfers":"View transfers","docsApp.components.demoContainer.building":"What you're building","docsApp.components.demoContainer.cancel":"Cancel","docsApp.components.demoContainer.cliContains":"Contains examples in {joinedLangs}. The same will be configured with your Stripe test API key if you have set up the CLI with your Stripe account.","docsApp.components.demoContainer.cliInstall":"Install the \u003CInlineLink\u003EStripe CLI\u003C\u002FInlineLink\u003E, then run the following in your terminal:","docsApp.components.demoContainer.cliSelect":"Select the \u003CBodyAlt\u003E{integration}\u003C\u002FBodyAlt\u003E integration type when prompted by the CLI.","docsApp.components.demoContainer.cloneCLI":"Clone with CLI","docsApp.components.demoContainer.cloneGithub":"Clone from GitHub","docsApp.components.demoContainer.githubContains":"Contains examples in {joinedLangs}","docsApp.components.demoContainer.githubSamples":"We have a set of samples on \u003CInlineLink\u003EGitHub\u003C\u002FInlineLink\u003E to help you get started.","docsApp.components.demoContainer.githubSelect":"Open the \u003CBodyAlt\u003E{integration}\u003C\u002FBodyAlt\u003E directory after cloning to see this integration.","docsApp.components.devCommunity.devCommunity":"Developer community","docsApp.components.devCommunity.devToolCsatBody":"Tell us about your experience with Stripe developer tools\u0021","docsApp.components.devCommunity.devToolCsatTitle":"Developer tools feedback","docsApp.components.devCommunity.devToolsBody":"Sign up for the developer newsletter to get highlights and updates.","docsApp.components.devCommunity.devToolsTitle":"Developer tools","docsApp.components.devCommunity.discordBody":"Chat live with other developers on the official Stripe Discord.","docsApp.components.devCommunity.discordTitle":"Developer chat on Discord","docsApp.components.devCommunity.ircBody":"Chat live with other developers in #stripe on freenode.","docsApp.components.devCommunity.ircTitle":"IRC support","docsApp.components.devCommunity.twitterBody":"Follow us on X \u0028formerly Twitter\u0029 to get updates and join our community.","docsApp.components.devCommunity.twitterTitle":"X updates","docsApp.components.devCommunity.watchYoutube":"Watch developer tutorials on our YouTube channel.","docsApp.components.devCommunity.youtube":"YouTube tutorials","docsApp.components.devToolsCsat.contactEmail":"Email","docsApp.components.devToolsCsat.contactFullName":"Full Name","docsApp.components.devToolsCsat.contactPrompt":"May we contact you for questions? If so, please provide your name and email","docsApp.components.devToolsCsat.devToolsRating":"Rate your experience with this developer tool","docsApp.components.devToolsCsat.devToolsSelection":"Select the developer tool you would like to provide feedback on","docsApp.components.devToolsCsat.dissatisfied":"Extremely dissatisfied","docsApp.components.devToolsCsat.extensionVersion":"Stripe extension version","docsApp.components.devToolsCsat.feedbacks":"Tell us why you chose this rating","docsApp.components.devToolsCsat.machineId":"Machine ID","docsApp.components.devToolsCsat.noFeedbackError":"Tell us why you chose this rating.","docsApp.components.devToolsCsat.noRatingError":"Please select a rating.","docsApp.components.devToolsCsat.os":"Operating System","docsApp.components.devToolsCsat.satisfied":"Extremely satisfied","docsApp.components.devToolsCsat.submit":"Submit","docsApp.components.devToolsCsat.thankYouMessage":"Thank you for helping us to improve Stripe developer tools\u0021","docsApp.components.devToolsCsat.vscodeVersion":"Visual Studio Code version","docsApp.components.expandableDetailsButton.viewDetails":"View details","docsApp.components.financeReportSchemas.apiReportType":"API report type: \u003CInlineCode\u003E{token}\u003C\u002FInlineCode\u003E","docsApp.components.financeReportSchemas.columnName":"Column name","docsApp.components.financeReportSchemas.default":"Default","docsApp.components.financeReportSchemas.description":"Description","docsApp.components.financeReportSchemas.optionalRunParams":"Optional run parameters","docsApp.components.financeReportSchemas.reportType":"Report type","docsApp.components.financeReportSchemas.requiredRunParams":"Required run parameters","docsApp.components.heading.copied":"Copied\u0021","docsApp.components.indiaDLAccountView.accountbadge":"Signed out","docsApp.components.indiaDLInfoText":"In India, you can't sign in to the docs for \u003Ca\u003Eregulatory reasons\u003C\u002Fa\u003E. Pre-filled API keys and other features are disabled.","docsApp.components.section.optional":"Optional","docsApp.components.taxCategoryDetails.notFound":"No matching tax categories found","docsApp.components.taxCodeDetails.column.country":"Country","docsApp.components.taxCodeDetails.column.description":"Description","docsApp.components.taxCodeDetails.column.enum":"Enum","docsApp.components.taxCodeDetails.column.example":"Example","docsApp.components.taxCodeDetails.column.taxCategoryDescription":"Use this tax category for","docsApp.components.taxCodeDetails.column.taxCodeDescription":"Use this tax code for","docsApp.components.taxCodeDetails.column.taxCodeId":"Tax code","docsApp.components.taxCodeDetails.column.taxCodeName":"Category name","docsApp.components.taxCodeDetails.notFound":"No matching tax codes found","docsApp.components.terminalReceiptRequirements.field":"Field","docsApp.components.terminalReceiptRequirements.name":"Name","docsApp.components.terminalReceiptRequirements.requirement":"Requirement","docsApp.connect.automaticPayments.form.accountRowLabel":"Connected account type:","docsApp.connect.automaticPayments.form.chargeRowLabel":"Charge type:","docsApp.connect.automaticPayments.form.checkboxDescription":"Check this box for destination charges and separate charges and transfers made on behalf of connected accounts. The API requests for these charges include an on_behalf_of parameter.","docsApp.connect.automaticPayments.form.checkboxLabel":"Charges made on behalf of a connected account","docsApp.connect.automaticPayments.form.heading":"Confirm your integration","docsApp.connect.automaticPayments.form.integrationRowLabel":"Payments integration:","docsApp.connect.automaticPayments.form.radioDescription.api":"Custom checkout integrations that leverage the Stripe API.","docsApp.connect.automaticPayments.form.radioDescription.checkout":"Checkout is a Stripe-hosted payment form.","docsApp.connect.automaticPayments.form.radioDescription.paymentElement":"Payment Element \u0028for web and mobile\u0029 is a UI component that you embed into your website or app.","docsApp.connect.automaticPayments.form.radioLabel.api":"API only","docsApp.connect.automaticPayments.form.radioLabel.checkout":"Stripe Checkout","docsApp.connect.automaticPayments.form.radioLabel.paymentElement":"Payment Element","docsApp.connect.automaticPayments.form.selectOptionCustomAccount":"Custom account","docsApp.connect.automaticPayments.form.selectOptionDestination":"Destination charges","docsApp.connect.automaticPayments.form.selectOptionDirectCharge":"Direct charges","docsApp.connect.automaticPayments.form.selectOptionExpressAccount":"Express account","docsApp.connect.automaticPayments.form.selectOptionNotOnBehalfOf":"Without on_behalf_of parameter","docsApp.connect.automaticPayments.form.selectOptionOnBehalfOf":"With on_behalf_of parameter","docsApp.connect.automaticPayments.form.selectOptionSCT":"Separate charges and transfers","docsApp.connect.automaticPayments.form.selectOptionStandardAccount":"Standard account","docsApp.connect.automaticPayments.tooltip.customAccount":"You, the platform, are responsible for all interactions with your users and for collecting all the information needed to verify the account.","docsApp.connect.automaticPayments.tooltip.destination":"Create charges on your platform account and then transfer the funds to your connected accounts.","docsApp.connect.automaticPayments.tooltip.direct":"Single user charge directly to your connected account.","docsApp.connect.automaticPayments.tooltip.expressAccount":"Stripe handles the onboarding and identity verification processes. The platform has the ability to specify charge types and set the connected account’s payout settings programmatically. The platform is responsible for handling disputes and refunds.","docsApp.connect.automaticPayments.tooltip.notOnBehalfOf":"A destination charge or separate charge and transfer without the on_behalf_of parameter defined in its schema.","docsApp.connect.automaticPayments.tooltip.onBehalfOf":"A destination charge or separate charge and transfer with the on_behalf_of paremeter defined in its schema.","docsApp.connect.automaticPayments.tooltip.separateChargeAndTransfer":"Make charges on your platform account on behalf of connected accounts.","docsApp.connect.automaticPayments.tooltip.standardAccount":"The account holder \u0028your platform’s user\u0029 has a relationship with Stripe, is able to log in to the Dashboard, and can process charges on their own.","docsApp.connect.automaticPayments.tooltipHeading.customAccount":"Custom: ","docsApp.connect.automaticPayments.tooltipHeading.destination":"Destination charges: ","docsApp.connect.automaticPayments.tooltipHeading.direct":"Direct: ","docsApp.connect.automaticPayments.tooltipHeading.expressAccount":"Express: ","docsApp.connect.automaticPayments.tooltipHeading.notOnBehalfOf":"Without on_behalf_of parameter: ","docsApp.connect.automaticPayments.tooltipHeading.onBehalfOf":"With on_behalf_of parameter: ","docsApp.connect.automaticPayments.tooltipHeading.separateChargeAndTransfer":"Separate charges and transfers: ","docsApp.connect.automaticPayments.tooltipHeading.standardAccount":"Standard: ","docsApp.demo.paymentElement.appearance.unexpectedError":"An error occurred. We're looking into it\u0021","docsApp.demo.paymentElement.body.customerLocation":"The Payment Element supports 135\u002B currencies. Only a sample is shown here. Stripe automatically reorders payment methods to increase potential conversion.","docsApp.demo.paymentElement.body.theme":"Create a theme to match your brand with the {appearanceApiLink}.","docsApp.demo.paymentElement.label.customerLocation":"Customer location","docsApp.demo.paymentElement.label.size":"Size","docsApp.demo.paymentElement.label.theme":"Theme","docsApp.demo.paymentElement.title.customerLocation":"Every country pays differently","docsApp.demo.paymentElement.title.theme":"Customize it","docsApp.demo.paymentElement.unexpectedError":"An error occurred. We're looking into it\u0021","docsApp.demo.paymentElement.walletAvailability":"This demo only displays Google Pay or Apple Pay if you have an active card with either wallet.","docsApp.diagram.failed":"Failed to load diagram that was supposed to show: {description}","docsApp.expand":"Expand","docsApp.glossary.definition.3DSecure":"3D Secure \u00283DS\u0029 provides an additional layer of authentication for credit card transactions that protects businesses from liability for fraudulent card payments.\n","docsApp.glossary.definition.3DSecure2":"3D Secure 2 \u00283DS2\u0029 removes friction from the authentication process and improves the purchase experience compared to 3D Secure 1. It's the main card authentication method used to meet Strong Customer Authentication \u0028SCA\u0029 requirements in Europe and is a key mechanism for businesses to request exemptions to SCA.\n","docsApp.glossary.definition.ach":"Automated Clearing House \u0028ACH\u0029 is a US financial network used for electronic payments and money transfers that doesn’t rely on paper checks, credit card networks, wire transfers, or cash.\n","docsApp.glossary.definition.advancedFraudSignalsRadarSessionDisabled":"Advanced fraud signals refer to device characteristics and activity indicators that are automatically captured by Stripe.js and our SDKs.\n","docsApp.glossary.definition.advancedFraudSignalsRadarSessionEnabled":"Advanced fraud signals refer to device characteristics and activity indicators that are automatically captured by Stripe.js and our SDKs. You can also capture advanced fraud signals with Radar Sessions.\n","docsApp.glossary.definition.appManifest":"In a Stripe App, the app manifest is a stripe-app.json file in your app's root directory. It defines your app's ID, views, permissions, and other essential properties.\n","docsApp.glossary.definition.asynchronousPaymentMethods":"Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed.\n","docsApp.glossary.definition.authorizedPerson":"An individual with significant management responsibility for a business entity, such as an executive officer or senior manager. The authorized person provides business information to Stripe and claims authorization to act on behalf of the business.\n","docsApp.glossary.definition.beneficialOwner":"Individuals with a threshold percentage or more equity in a business entity. The threshold percentage can range from 25% to 51%, as determined by the relevant banking partner.\n","docsApp.glossary.definition.bnpl":"Buy now, pay later \u0028BNPL\u0029 allows customers to purchase a product immediately and pay for it over time—often interest free.\n","docsApp.glossary.definition.capture":"Another way to say that you receive payment for a charge is to say that you \"capture\" the charge. Capturing the charge is often asynchronous and takes place after authorization. The capture is what transfers the money from the customer to you.\n","docsApp.glossary.definition.captureAutomatic":"Automatically capture funds when a charge is authorized.\n","docsApp.glossary.definition.captureManual":"Manually capture funds separately from an authorization.\n","docsApp.glossary.definition.cardAuthentication":"A bank might require the customer to authenticate a card payment before processing. Implementation varies by bank but commonly consists of a customer entering in a security code sent to their phone.\n","docsApp.glossary.definition.cardNetworkCosts":"Interchange and scheme fees.\n","docsApp.glossary.definition.cardNetworks":"A network that processes the transactions of a particular card brand. It might be an intermediary in front of an issuing bank as with Visa or Mastercard, or a standalone entity as with American Express.\n","docsApp.glossary.definition.cardToken":"A card token replaces the cardholder's primary account number \u0028PAN\u0029 with a series of randomly-generated numbers. It's purpose is to protect sensitive customer data.\n","docsApp.glossary.definition.chargeback":"The action taken by a cardholder's bank to debit a business's account in response to a dispute from the cardholder. The debited funds are held until the dispute is resolved.\n","docsApp.glossary.definition.checkoutSession":"A Checkout Session represents your customer's session as they pay for one-time purchases or subscriptions through Checkout. After a successful payment, the Checkout Session contains a reference to the Customer, and either the successful PaymentIntent or an active Subscription.\n","docsApp.glossary.definition.clientSecret":"A client secret is used with your publishable key to authenticate a request for a single object. Each client secret is unique to the object it's associated with.\n","docsApp.glossary.definition.commercialVolume":"Commercial volume includes transactions made to business, corporate, and purchasing cards.\n","docsApp.glossary.definition.connect":"Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients.\n","docsApp.glossary.definition.conversionOnSession":"A payment is described as on-session if it occurs with the direct involvement of the customer. Off-session transactions rely on previously-collected payment information.\n","docsApp.glossary.definition.customerPortal":"The customer portal is a secure, Stripe-hosted page that lets your customers manage their subscriptions and billing details.\n","docsApp.glossary.definition.customers":"Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments.\n","docsApp.glossary.definition.defineProductsInline":"Instead of creating Products and Prices upfront, you can define them inline as part of the Order by passing the \"line_items.product_data\" and \"line_items.price_data\" parameters.\n","docsApp.glossary.definition.delayedNotificationPaymentMethod":"A payment method that can't immediately return payment status when a customer attempts a transaction \u0028for example, ACH debits\u0029. Businesses commonly hold an order in a _pending_ state until payment is succesful with these payment methods.\n","docsApp.glossary.definition.deprecated":"Technology that's no longer recommended and that might stop working after a specific date.\n","docsApp.glossary.definition.digitalWallet":"A digital wallet is a contactless payment method that stores payment options, such as credit and debit cards, allowing customers to use a smart device to make a purchase.\n","docsApp.glossary.definition.directToAuthorization":"Where Stripe requests an SCA exemption as part of the authorization message.\n","docsApp.glossary.definition.dunningEmail":"A dunning email helps prevent lost revenue by asking a customer to update their payment method. You can define the schedule to send these payment reminder emails in your Subscriptions and email settings.\n","docsApp.glossary.definition.eea":"The European Economic Area is a regional single market with free movement of labour, goods and capital. It encompasses the European Union member states and three additional states that are part of the European Free Trade Association.\n","docsApp.glossary.definition.effectiveRate":"Effective rate = network costs \u002F total processing volume.\n","docsApp.glossary.definition.elements":"A set of UI components for building a web checkout flow. They adapt to your customer's locale, validate input, and use tokenisation, keeping sensitive customer data from touching your server.\n","docsApp.glossary.definition.emv":"EMV refers to the standards governing acceptance of chip-enabled cards and some contactless payment methods. Today most payment cards issued around the world support EMV.\n","docsApp.glossary.definition.exclusiveTax":"Exclusive tax is tax that changes the final purchase price—the listed price the buyer sees doesn't include it, and it's added to the total. An example of exclusive tax is US sales tax.\n","docsApp.glossary.definition.fdic":"Federal Deposit Insurance Corporation \u0028FDIC\u0029 is an independent agency created by Congress to insure deposits, regulate financial institutions, make large and complex financial institutions resolvable, and manage receiverships.\n","docsApp.glossary.definition.fixedVariablePortion":"For example, if the interchange plan is 2.04% \u002B \u00240.10, 2.04% is the variable portion, and \u00240.10 is the fixed portion.\n","docsApp.glossary.definition.fsaHsa":"Flexible Spending Account or Health Savings Account debit cards use pre-tax funds to cover certain types of purchases, such as medical expenses. Their use is restricted only to businesses that directly provide eligible products and services.\n","docsApp.glossary.definition.fulfillment":"Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected.\n","docsApp.glossary.definition.gdpr":"GDPR is a regulation in EU law on data protection and privacy in the European \u0028EU\u0029 and the European Economic Area \u0028EEA\u0029.\n","docsApp.glossary.definition.gst":"A goods and services tax \u0028GST\u0029, known in some countries as a value added tax \u0028VAT\u0029, is a type of tax levied on the price of a product or service at each stage of production, distribution, or sale to the end consumer. GST and VAT are also generally known as \"consumption\" taxes. The buyer pays the tax and the seller forwards it to the government.\n","docsApp.glossary.definition.iDeal":"iDeal is a payment method in the Netherlands that uses direct, online transfers from the user's bank account.\n","docsApp.glossary.definition.iban":"The International Bank Account Number \u0028IBAN\u0029 identifies bank accounts across national borders to facilitate cross border transactions with a reduced risk of transcription errors. An IBAN uniquely identifies the account of a customer at a financial institution.\n","docsApp.glossary.definition.inclusiveTax":"Inclusive tax is tax that doesn't change the final purchase price—the price the buyer sees already includes it. Examples of inclusive tax include VAT and GST outside of the US.\n","docsApp.glossary.definition.incrementalOnboarding":"Incremental onboarding is a type of onboarding where you gradually collect required verification information from your users. You collect a minimum amount of information at sign-up, and you collect more information as the connected account earns more revenue.\n","docsApp.glossary.definition.intentConfirmation":"Confirming a PaymentIntent indicates that the customer intends to pay with the current or provided payment method. Upon confirmation, the PaymentIntent attempts to initiate a payment.\n","docsApp.glossary.definition.intentConfirmationGeneric":"Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects.\n","docsApp.glossary.definition.intentSecret":"The client secret is a unique key returned from Stripe as part of a PaymentIntent or SetupIntent. This key lets the client access important fields from the PaymentIntent or SetupIntent \u0028for example, status\u0029 while hiding sensitive ones \u0028for example, metadata\u0029.\n","docsApp.glossary.definition.interchange":"Interchange or interchange fee is a term used by the card networks to describe a fee paid between banks for the acceptance of card-based transactions. Usually it's a fee on transactions that a business's bank \u0028the \"acquiring bank\"\u0029 pays a customer's bank \u0028the \"issuing bank\"\u0029.\n","docsApp.glossary.definition.invoices":"Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice.\n","docsApp.glossary.definition.kyc":"Know your customer \u0028KYC\u0029 regulations require that professionals and businesses make an effort to verify the identity, suitability, and risks involved with maintaining a business relationship. The procedures fall under the broader scope of anti-money laundering \u0028AML\u0029 policy.\n","docsApp.glossary.definition.legacy":"Technology that's no longer recommended.\n","docsApp.glossary.definition.liabilityShift":"With some 3D Secure transactions, the liability for fraudulent chargebacks \u0028stolen or counterfeit cards\u0029 shifts from you to the card issuer.\n","docsApp.glossary.definition.liveMode":"Use this mode when you’re ready to launch your app. Card networks or payment providers process payments.\n","docsApp.glossary.definition.mandate":"A written notice of authorisation to debit a bank account, agreed to by the customer before the first debit.\n","docsApp.glossary.definition.merchantInitiatedTransaction":"A payment made off-session with a properly authenticated saved card, can qualify as merchant-initiated transaction and be exempt from SCA.\n","docsApp.glossary.definition.meteredBilling":"Metered billing is a subcription billing model where you charge your customers based on their consumption of your service during the billing cycle, instead of explicitly setting quantities.\n","docsApp.glossary.definition.nacha":"Nacha is the governing body that oversees the ACH network.\n","docsApp.glossary.definition.offSession":"A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information.\n","docsApp.glossary.definition.offlinePin":"Offline PIN is a card verification method for EMV chip cards. These cards store the PIN securely on the chip itself, so PIN verification can occur without a network connection.\n","docsApp.glossary.definition.onSession":"A payment is described as on-session if it occurs while the customer is actively in your checkout flow and able to authenticate the payment method.\n","docsApp.glossary.definition.onlinePin":"Online PIN is a card verification method for EMV chip cards. These cards require the terminal to contact the issuer over a network connection to verify the PIN.\n","docsApp.glossary.definition.openLoopWallet":"An account with a monetary value that can be funded through payments or transfers and used to make purchases within or outside of a platform.\n","docsApp.glossary.definition.orderSubmit":"Submitting an order indicates that the customer intends to pay. Upon submission, the order can no longer be updated and is ready for payment.\n","docsApp.glossary.definition.paymentIntents":"The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods.\n","docsApp.glossary.definition.paymentMethods":"PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs.\n","docsApp.glossary.definition.paymentRails":"A financial network that provides the technological infrastructure to electronically move money from a payer to a payee.\n","docsApp.glossary.definition.payout":"A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit.\n","docsApp.glossary.definition.pciCompliance":"Any party involved in processing, transmitting, or storing credit card data must comply with the rules specified in the the Payment Card Industry \u0028PCI\u0029 Data Security Standards. PCI compliance is a shared responsibility and applies to both Stripe and your business.\n","docsApp.glossary.definition.pii":"Personally identifiable information \u0028PII\u0029 is information that, when used alone or with other relevant data, can identify an individual. Examples include passport numbers, driver's license, mailing address, or credit card information.\n","docsApp.glossary.definition.pix":"PIX is an instant payment platform created and managed by the Central Bank of Brazil.\n","docsApp.glossary.definition.presentmentCurrency":"The presentment currency is the currency the customer uses to make a payment.\n","docsApp.glossary.definition.prices":"Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions.\n","docsApp.glossary.definition.pricingModel":"The pricing model consists of the products or services you sell, how much they cost, what currency you accept for payments, and the interval to charge \u0028for subscriptions\u0029. To build the pricing model, you use Products—what you sell—and Prices—how much and how often to charge for your products.\n","docsApp.glossary.definition.privateApp":"A private app is only available to users who have access to your Stripe account. Stripe users can’t discover private apps on the Stripe App Marketplace.\n","docsApp.glossary.definition.productCategories":"Product Categories describe a hierarchy of categories of products you offer to your customers. For example, you might have a category for \u0060Clothes\u0060, and under that a category for \u0060Mens' Shirts\u0060.\n","docsApp.glossary.definition.productClasses":"Product Classes describe the classes of products you offer to your customers. For example you might offer t-shirts that vary by size and color. Each specific combination of t-shirt size and color would be a Product. The grouping of all t-shirt size and color combinations would be a Product Class.\n","docsApp.glossary.definition.products":"Products represent what your business sells—whether that's a good or a service.\n","docsApp.glossary.definition.productsSubs":"Products represent items your customer can subscribe to with a Subscription. An associated Price object describes the pricing and other terms of the subscription.\n","docsApp.glossary.definition.publicApp":"A public app is discoverable on the Stripe App Marketplace.\n","docsApp.glossary.definition.radar":"Stripe Radar helps detect and block fraud for any type of business using machine learning that trains on data across millions of global companies. It’s built into Stripe and requires no additional setup to get started.\n","docsApp.glossary.definition.radarClientSignals":"Client signals refer to information such as IP address, User-Agent, and checkout URL that are used to help enhance fraud prevention.\n","docsApp.glossary.definition.radarCustomerSignals":"Customer signals refer to information such as user email, name, and billing address that are passed through the customer object in the API.\n","docsApp.glossary.definition.radarForFraudTeams":"Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard.\n","docsApp.glossary.definition.requiresAction":"This status appears as \"requires_source_action\" in API versions before 2019-02-11.\n","docsApp.glossary.definition.requiresPaymentMethod":"This status appears as \"requires_source\" in API versions before 2019-02-11.\n","docsApp.glossary.definition.reverseCharge":"A reverse charge is a transaction where the responsibility for calculating and remitting tax shifts from the seller to the buyer.\n","docsApp.glossary.definition.sca":"Strong Customer Authentication \u0028SCA\u0029 is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase.\n","docsApp.glossary.definition.scaExemptions":"Some transactions that are deemed low risk, based on the volume of fraud rates associated with the payment provider or bank, may be exempt from Europe's Strong Customer Authentication requirements.\n","docsApp.glossary.definition.settle":"When funds are available in your Stripe balance.\n","docsApp.glossary.definition.settlementCurrency":"The settlement currency is the currency your bank account uses.\n","docsApp.glossary.definition.settlementTiming":"The amount of time it takes for a settlement to occur.\n","docsApp.glossary.definition.setupIntentSecret":"The client secret is a unique key returned from Stripe as part of a SetupIntent. This key lets the client access important fields from the SetupIntent \u0028for example, status\u0029.\n","docsApp.glossary.definition.setupIntents":"The Setup Intents API lets you build dynamic flows for collecting payment method details for future payments. It tracks the lifecycle of a payment setup flow and can trigger additional authentication steps if required by law or by the payment method.\n","docsApp.glossary.definition.sku":"SKUs \u0028Stock Keeping Units\u0029 represent a specific Product variation, taking into account any combination of attributes and cost \u0028for instance, size, color, currency, cost\u0029.\n","docsApp.glossary.definition.storedValueAccount":"An account that can store funds. The funds are typically transferred in from an external bank account.\n","docsApp.glossary.definition.stripeApp":"An app that you can build on top of Stripe to customise the functionality of the Stripe Dashboard UI, leverage Stripe user data, store data on Stripe, and more.\n","docsApp.glossary.definition.stripeAppMarketplace":"A marketplace to browse, search, and install Stripe apps.\n","docsApp.glossary.definition.stripeJs":"Use Stripe.js’ APIs to tokenize customer information, collect sensitive card data, and accept payments with browser payment APIs.\n","docsApp.glossary.definition.subscriptions":"A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis.\n","docsApp.glossary.definition.teamMember":"A team member is a user with controlled access to some features of your Stripe account, like an administrator, developer, or support specialist.\n","docsApp.glossary.definition.testMode":"Test mode is a way to test your app or changes to your integration without affecting production. All Stripe features are available in test mode but you can't create live charges unless you're in live mode.\n","docsApp.glossary.definition.threeDSecure":"3D Secure provides an additional layer of authentication for credit card transactions that protects merchants from liability for fraudulent card payments.\n","docsApp.glossary.definition.tls":"TLS refers to the process of securely transmitting data between the client—the app or browser that your customer is using—and your server. This was originally performed using the SSL \u0028Secure Sockets Layer\u0029 protocol.\n","docsApp.glossary.definition.topUp":"The act of adding funds to a Stripe account, typically through a transfer from a bank external to Stripe.\n","docsApp.glossary.definition.treasury":"A collection of API endpoints and cloud- and web-based features that enable platforms to offer embedded financial solutions to their users.\n","docsApp.glossary.definition.uiExtension":"A set of APIs that allow you to inject user interface elements into the Stripe Dashboard using TypeScript and React.","docsApp.glossary.definition.universalLinks":"Use Universal links on iOS and macOS to link directly to in-app content. They're standard HTTPS links, so the same URL works for your website and your app.\n","docsApp.glossary.definition.upfrontOnboarding":"Upfront onboarding is a type of onboarding where you collect all required verification information from your users at sign-up.\n","docsApp.glossary.definition.vat":"A value-added tax \u0028VAT\u0029, known in some countries as a goods and services tax \u0028GST\u0029, is a type of tax levied on the price of a product or service at each stage of production, distribution, or sale to the end consumer. VAT and GST are also generally known as \"consumption\" taxes. The buyer pays the tax and the seller forwards it to the government.\n","docsApp.glossary.definition.view":"A view is a React component that creates UI extensions in the Stripe Dashboard.\n","docsApp.glossary.definition.viewport":"A viewport specifies the page in the Dashboard where your view can appear.\n","docsApp.glossary.definition.webhook":"A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests.\n","docsApp.glossary.definition.wireTransfer":"Also called a bank transfer or credit transfer, wire transfers are a method of electronic funds transfers that move money from a payer to a payee.\n","docsApp.glossary.term.3DSecure":"3D Secure \u00283DS\u0029","docsApp.glossary.term.3DSecure2":"3D Secure 2 \u00283DS2\u0029","docsApp.glossary.term.ach":"ACH","docsApp.glossary.term.advancedFraudSignalsRadarSessionDisabled":"advanced fraud signals","docsApp.glossary.term.advancedFraudSignalsRadarSessionEnabled":"advanced fraud signals","docsApp.glossary.term.appManifest":"app manifest","docsApp.glossary.term.asynchronousPaymentMethods":"asynchronous payment methods","docsApp.glossary.term.authorizedPerson":"authorized person","docsApp.glossary.term.beneficialOwner":"beneficial owner","docsApp.glossary.term.bnpl":"buy now, pay later \u0028BNPL\u0029","docsApp.glossary.term.capture":"capture \u0028a charge\u0029","docsApp.glossary.term.captureAutomatic":"automatic capture","docsApp.glossary.term.captureManual":"manual capture","docsApp.glossary.term.cardAuthentication":"card authentication","docsApp.glossary.term.cardNetworkCosts":"card network costs","docsApp.glossary.term.cardNetworks":"card networks","docsApp.glossary.term.cardToken":"card token","docsApp.glossary.term.chargeback":"chargeback","docsApp.glossary.term.checkoutSession":"checkout session","docsApp.glossary.term.clientSecret":"client secret","docsApp.glossary.term.commercialVolume":"commercial volume","docsApp.glossary.term.connect":"Connect","docsApp.glossary.term.conversionOnSession":"conversion on-session","docsApp.glossary.term.customerPortal":"customer portal","docsApp.glossary.term.customers":"Customers","docsApp.glossary.term.defineProductsInline":"define products inline","docsApp.glossary.term.delayedNotificationPaymentMethod":"delayed notification payment method","docsApp.glossary.term.deprecated":"deprecated","docsApp.glossary.term.digitalWallet":"digital wallet","docsApp.glossary.term.directToAuthorization":"direct to authorization","docsApp.glossary.term.dunningEmail":"dunning email","docsApp.glossary.term.eea":"European Economic Area","docsApp.glossary.term.effectiveRate":"effective rate","docsApp.glossary.term.elements":"Stripe Elements","docsApp.glossary.term.emv":"EMV","docsApp.glossary.term.exclusiveTax":"exclusive tax","docsApp.glossary.term.fdic":"FDIC","docsApp.glossary.term.fixedVariablePortion":"fixed and variable portion","docsApp.glossary.term.fsaHsa":"FSA\u002FHSA","docsApp.glossary.term.fulfillment":"fulfillment","docsApp.glossary.term.gdpr":"General Data Protection Regulation","docsApp.glossary.term.gst":"GST","docsApp.glossary.term.iDeal":"iDeal","docsApp.glossary.term.iban":"IBAN","docsApp.glossary.term.inclusiveTax":"inclusive tax","docsApp.glossary.term.incrementalOnboarding":"incremental onboarding","docsApp.glossary.term.intentConfirmation":"confirm","docsApp.glossary.term.intentConfirmationGeneric":"confirm","docsApp.glossary.term.intentSecret":"client secret","docsApp.glossary.term.interchange":"interchange fee","docsApp.glossary.term.invoices":"invoices","docsApp.glossary.term.kyc":"know your customer","docsApp.glossary.term.legacy":"legacy","docsApp.glossary.term.liabilityShift":"liability shift","docsApp.glossary.term.liveMode":"live mode","docsApp.glossary.term.mandate":"mandate","docsApp.glossary.term.merchantInitiatedTransaction":"merchant-initiated transaction","docsApp.glossary.term.meteredBilling":"metered billing","docsApp.glossary.term.nacha":"nacha","docsApp.glossary.term.offSession":"off-session payment","docsApp.glossary.term.offlinePin":"Offline PIN","docsApp.glossary.term.onSession":"on-session payment","docsApp.glossary.term.onlinePin":"Online PIN","docsApp.glossary.term.openLoopWallet":"open loop wallet","docsApp.glossary.term.orderSubmit":"submit","docsApp.glossary.term.paymentIntents":"Payment Intents API","docsApp.glossary.term.paymentMethods":"PaymentMethods","docsApp.glossary.term.paymentRails":"payment rails","docsApp.glossary.term.payout":"payout","docsApp.glossary.term.pciCompliance":"PCI compliance","docsApp.glossary.term.pii":"Personally identifiable information","docsApp.glossary.term.pix":"PIX","docsApp.glossary.term.presentmentCurrency":"presentment currency","docsApp.glossary.term.prices":"Prices","docsApp.glossary.term.pricingModel":"pricing model","docsApp.glossary.term.privateApp":"private app","docsApp.glossary.term.productCategories":"Product Categories","docsApp.glossary.term.productClasses":"Product Classes","docsApp.glossary.term.products":"Products","docsApp.glossary.term.productsSubs":"subscription products","docsApp.glossary.term.publicApp":"public app","docsApp.glossary.term.radar":"Radar","docsApp.glossary.term.radarClientSignals":"Radar client signals","docsApp.glossary.term.radarCustomerSignals":"Radar customer signals","docsApp.glossary.term.radarForFraudTeams":"Radar for Fraud Teams","docsApp.glossary.term.requiresAction":"requires_action","docsApp.glossary.term.requiresPaymentMethod":"requires_payment_method","docsApp.glossary.term.reverseCharge":"reverse_charge_mechanism","docsApp.glossary.term.sca":"Strong Customer Authentication","docsApp.glossary.term.scaExemptions":"SCA exemptions","docsApp.glossary.term.settle":"settle","docsApp.glossary.term.settlementCurrency":"settlement currency","docsApp.glossary.term.settlementTiming":"settlement timing","docsApp.glossary.term.setupIntentSecret":"SetupIntent client secret","docsApp.glossary.term.setupIntents":"Setup Intents API","docsApp.glossary.term.sku":"SKU","docsApp.glossary.term.storedValueAccount":"stored-value account","docsApp.glossary.term.stripeApp":"Stripe app","docsApp.glossary.term.stripeAppMarketplace":"Stripe App Marketplace","docsApp.glossary.term.stripeJs":"Stripe.JS","docsApp.glossary.term.subscriptions":"subscriptions","docsApp.glossary.term.teamMember":"team member","docsApp.glossary.term.testMode":"test mode","docsApp.glossary.term.threeDSecure":"3D Secure","docsApp.glossary.term.tls":"TLS","docsApp.glossary.term.topUp":"top up","docsApp.glossary.term.treasury":"Treasury","docsApp.glossary.term.uiExtension":"ui extension","docsApp.glossary.term.universalLinks":"universal-links","docsApp.glossary.term.upfrontOnboarding":"upfront onboarding","docsApp.glossary.term.vat":"VAT","docsApp.glossary.term.view":"view","docsApp.glossary.term.viewport":"viewport","docsApp.glossary.term.webhook":"webhook","docsApp.glossary.term.wireTransfer":"wire transfer","docsApp.ib.aap.index.buildTheCheckoutPage":"Build a checkout page on the client","docsApp.ib.aap.index.completeThePayment":"Complete the payment on the client","docsApp.ib.aap.index.setupStripe":"Set up the server","docsApp.ib.aap.index.testThePayment":"Test the integration","docsApp.ib.aap.server.dotnet.charge.body":"Run your ASP.NET MVC server and go to \u003Ca\u003Elocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E.","docsApp.ib.aap.server.dotnet.setup.body":"Install the package with dotnet or NuGet. Alternatively, if you’re starting from scratch, download the files which contains a configured .csproj file.","docsApp.ib.aap.server.dotnet.setup.heading":"Install the Stripe.net library","docsApp.ib.aap.server.go.imports.body":"Import the Stripe customer and paymentmethod models. Use these models to store information about your customer.","docsApp.ib.aap.server.go.run-server.body":"Run your Go server and go to \u003Ca\u003Elocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E.","docsApp.ib.aap.server.java.imports.body":"Import the Stripe PaymentMethod and Customer models. Use these models to store information about your Customer.","docsApp.ib.aap.server.java.run-server.body":"Run your server and go to \u003Ca\u003Elocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E.","docsApp.ib.aap.server.node.run-server":"Run your Node server and go to \u003Ca\u003Elocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E.","docsApp.ib.aap.server.php.run-server.body":"Run your server and go to \u003Ca\u003Elocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E.","docsApp.ib.aap.server.python.run-server.body":"Run your Python server and go to \u003Ca\u003Elocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E.","docsApp.ib.aap.server.ruby.run-server.body":"Run your Ruby server and go to \u003Ca\u003Elocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E.","docsApp.ib.aap.snippets.dotnet.dotnet.body":"Install the library:","docsApp.ib.aap.snippets.dotnet.github.body":"Or download the Stripe.net library source code directly ","docsApp.ib.aap.snippets.dotnet.github.link":"from GitHub.","docsApp.ib.aap.snippets.dotnet.nuget.body":"Install the library:","docsApp.ib.aap.snippets.dotnet.setup.body":"Install the package with dotnet or NuGet. Alternatively, if you’re starting from scratch and need a .csproj file, download the files using the link in the code editor.","docsApp.ib.aap.snippets.dotnet.setup.heading":"Install the Stripe.net library","docsApp.ib.aap.snippets.go.github.body":"Or download the stripe-go module source code directly ","docsApp.ib.aap.snippets.go.github.link":"from GitHub.","docsApp.ib.aap.snippets.go.go.body":"Make sure to initialize with Go Modules:","docsApp.ib.aap.snippets.go.setup.body":"Add the dependency to your build and import the library. Alternatively, if you’re starting from scratch and need a go.mod file, download the project files using the link in the code editor.","docsApp.ib.aap.snippets.go.setup.heading":"Set up your server","docsApp.ib.aap.snippets.java.github.body":"Download the JAR directly ","docsApp.ib.aap.snippets.java.github.link":"from GitHub.","docsApp.ib.aap.snippets.java.gradle.body":"Add the dependency to your build.gradle file and replace {VERSION} with the version number you want to use.","docsApp.ib.aap.snippets.java.maven.body":"Add the following dependency to your POM and replace {VERSION} with the version number you want to use.","docsApp.ib.aap.snippets.java.setup.body":"Add the dependency to your build and import the library. Alternatively, if you’re starting from scratch and need a sample pom.xml file \u0028for Maven\u0029, download the project files using the link in the code editor.","docsApp.ib.aap.snippets.java.setup.heading":"Set up your server","docsApp.ib.aap.snippets.next.github.install.body":"Install the packages and import them in your code. Alternatively, if you’re starting from scratch and need a \u003Ccode\u003Epackage.json\u003C\u002Fcode\u003E file, download the project files using the link in the code editor.","docsApp.ib.aap.snippets.next.github.install.heading":"Install the Stripe libraries","docsApp.ib.aap.snippets.next.npm.body":"Install the libraries:","docsApp.ib.aap.snippets.node.github.body":"Or download the stripe-node library source code directly ","docsApp.ib.aap.snippets.node.github.install":"Run your Node server and go to \u003Ca\u003Elocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E.","docsApp.ib.aap.snippets.node.github.install.body":"Install the package and import it in your code. Alternatively, if you’re starting from scratch and need a \u003Ccode\u003Epackage.json\u003C\u002Fcode\u003E file, download the project files using the link in the code editor.","docsApp.ib.aap.snippets.node.github.install.heading":"Install the Stripe Node library","docsApp.ib.aap.snippets.node.github.label":"GitHub","docsApp.ib.aap.snippets.node.github.link":"from GitHub.","docsApp.ib.aap.snippets.node.npm.body":"Install the library:","docsApp.ib.aap.snippets.php.composer.body":"Install the library:","docsApp.ib.aap.snippets.php.github.body":"Or download the stripe-php library source code directly ","docsApp.ib.aap.snippets.php.github.link":"from GitHub.","docsApp.ib.aap.snippets.php.setup.body":"Install the library with composer and initialize with your secret API key. Alternatively, if you’re starting from scratch and need a composer.json file, download the files using the link in the code editor.","docsApp.ib.aap.snippets.php.setup.heading":"Install the Stripe PHP library","docsApp.ib.aap.snippets.python.github.body":"Download the stripe-python library source code directly ","docsApp.ib.aap.snippets.python.github.link":"from GitHub.","docsApp.ib.aap.snippets.python.pip.body":"Install the package via pip:","docsApp.ib.aap.snippets.python.setup.body":"Install the Stripe package and import it in your code. Alternatively, if you’re starting from scratch and need a requirements.txt file, download the project files using the link in the code editor.","docsApp.ib.aap.snippets.python.setup.heading":"Install the Stripe Python package","docsApp.ib.aap.snippets.ruby.bundler.body":"Add this line to your Gemfile:","docsApp.ib.aap.snippets.ruby.github.body":"Or download the stripe-ruby gem source code directly ","docsApp.ib.aap.snippets.ruby.github.link":"from GitHub.","docsApp.ib.aap.snippets.ruby.setup.body":"Install the Stripe ruby gem and require it in your code. If you are starting from scratch and need a Gemfile, download the project files using the link in the code editor.","docsApp.ib.aap.snippets.ruby.setup.heading":"Install the Stripe Ruby library","docsApp.ib.aap.snippets.ruby.terminal.body":"Install the gem:","docsApp.ib.billing.html.business.body":"The pricing model comprises the products or services you sell, how much they cost, what currency to use for payments, and the interval to charge for the subscription. To build the pricing model, you use \u003Ca\u003EProducts\u003C\u002Fa\u003E—what you sell—and \u003Cb\u003EPrices\u003C\u002Fb\u003E—how much and how often to charge for your products. You need to create at least one product before you can charge for it. \u0028To create the pricing model within this builder, you must be signed in to your Stripe account. To create the pricing model without signing in, see \u003Cc\u003Ecreate the pricing model\u003C\u002Fc\u003E.\u0029","docsApp.ib.billing.html.business.heading":"Create pricing model","docsApp.ib.billing.react.business.body":"The pricing model comprises the products or services you sell, how much they cost, what currency to use for payments, and the interval to charge for the subscription. To build the pricing model, you use \u003Ca\u003EProducts\u003C\u002Fa\u003E—what you sell—and \u003Cb\u003EPrices\u003C\u002Fb\u003E—how much and how often to charge for your products. You need to create at least one product before you can charge for it. \u0028To create the pricing model within this builder, you must be signed in to your Stripe account. To create the pricing model without signing in, see \u003Cc\u003Ecreate the pricing model\u003C\u002Fc\u003E.\u0029","docsApp.ib.billing.react.business.heading":"Create pricing model","docsApp.ib.billing.sections.build-page":"Build your subscription page","docsApp.ib.billing.sections.create-business-model":"Create business model","docsApp.ib.billing.sections.create-pricing-model":"Create pricing model","docsApp.ib.billing.sections.setup-stripe":"Add endpoints for Checkout and customer portal","docsApp.ib.billing.sections.testing":"Test your page","docsApp.ib.checkout.next.js.add-button.body":"Add a button to your order preview page. When your customer clicks this button, they are redirected to the Stripe-hosted payment form.","docsApp.ib.checkout.next.js.add-button.heading":"Add a checkout button","docsApp.ib.checkout.next.js.address.body":"Use \u003Ccode\u003Ebilling_address_collection\u003C\u002Fcode\u003E and \u003Ccode\u003Eshipping_address_collection\u003C\u002Fcode\u003E to collect your customer's address. \u003Ccode\u003Eshipping_address_collection\u003C\u002Fcode\u003E requires a list of \u003Ccode\u003Eallowed_countries\u003C\u002Fcode\u003E. Checkout displays the list of allowed countries in a dropdown on the page.","docsApp.ib.checkout.next.js.address.heading":"Collect billing and shipping details","docsApp.ib.checkout.next.js.back.body":"Show a message to your customer when they are redirected back to your page. Wait to fulfill orders \u0028e.g., shipping or sending email receipts\u0029 until the payment succeeds. Since some payments may take minutes or even days to process, set up a webhook to listen for a \u003Ccode\u003Epayment_intent.succeeded\u003C\u002Fcode\u003E event to reliably know when the payment is successful. Learn more about \u003Ca\u003Efulfilling orders with Checkout\u003C\u002Fa\u003E.","docsApp.ib.checkout.next.js.back.heading":"Handle redirect back from Checkout","docsApp.ib.checkout.next.js.create.body":"Add an endpoint that creates a \u003Ca\u003ECheckout Session\u003C\u002Fa\u003E by adding a file to the \u003Ccode\u003Epages\u002Fapi\u002F\u003C\u002Fcode\u003E folder. A Checkout Session controls what your customer sees in the Stripe-hosted payment page, such as line items, the order amount and currency, and acceptable payment methods.","docsApp.ib.checkout.next.js.create.heading":"Create a Checkout Session","docsApp.ib.checkout.next.js.customize.body":"You can customize the appearance of the hosted Checkout page by adding your logo and color theme in the Dashboard's \u003Ca\u003Ebranding settings\u003C\u002Fa\u003E, or by using the API to activate additional features like address collection or prefilling customer details.","docsApp.ib.checkout.next.js.customize.heading":"Customize the checkout page","docsApp.ib.checkout.next.js.fetch-checkout-session.body":"Make a request to the endpoint on your server to redirect the customer to a new Checkout Session when they click on the \u003Cstrong\u003ECheckout\u003C\u002Fstrong\u003E button.","docsApp.ib.checkout.next.js.fetch-checkout-session.heading":"Fetch a Checkout Session","docsApp.ib.checkout.next.js.line-items.body":"Always keep sensitive information about your product inventory, like price and availability, on your server to prevent customer manipulation from the client. Define product information on the fly with \u003Ccode\u003Eprice_data\u003C\u002Fcode\u003E or use \u003Ca\u003Epre-defined prices\u003C\u002Fa\u003E and pass their IDs","docsApp.ib.checkout.next.js.line-items.heading":"Define the line items","docsApp.ib.checkout.next.js.load-stripe.body":"Stripe Checkout relies on Stripe.js, Stripe’s foundational JavaScript library for collecting sensitive payment information with advanced fraud detection. Call \u003Ccode\u003EloadStripe\u003C\u002Fcode\u003E with your publishable API key. It returns a Promise that resolves with the Stripe object as soon as Stripe.js loads.","docsApp.ib.checkout.next.js.load-stripe.heading":"Load Stripe.js","docsApp.ib.checkout.next.js.mode.body":"Checkout has three modes: \u003Ccode\u003Epayment\u003C\u002Fcode\u003E, \u003Ccode\u003Esubscription\u003C\u002Fcode\u003E, or \u003Ccode\u003Esetup\u003C\u002Fcode\u003E. Use \u003Ccode\u003Epayment\u003C\u002Fcode\u003E mode for one-time purchases. Learn more about \u003CsubscriptionA\u003Esubscription\u003C\u002FsubscriptionA\u003E and \u003CsetupA\u003Esetup\u003C\u002FsetupA\u003E modes in the docs.","docsApp.ib.checkout.next.js.mode.heading":"Choose the mode","docsApp.ib.checkout.next.js.payment-methods.body":"Checkout supports \u003Ca\u003Eseveral payment methods\u003C\u002Fa\u003E beyond cards. If you pass multiple payment methods, Checkout dynamically reorders them to prioritize the most relevant payment methods based on the customer’s location and other characteristics. To dynamically show Apple Pay and Google Pay when applicable, include \u003Ccode\u003Ecard\u003C\u002Fcode\u003E in the \u003Ccode\u003Epayment_method_types\u003C\u002Fcode\u003E list.","docsApp.ib.checkout.next.js.payment-methods.heading":"Specify payment methods","docsApp.ib.checkout.next.js.prefill-email.body":"Use \u003Ccode\u003Ecustomer_email\u003C\u002Fcode\u003E to prefill the customer's email address in the email input field. You can also pass a \u003Ca\u003ECustomer\u003C\u002Fa\u003E ID to \u003Ccode\u003Ecustomer\u003C\u002Fcode\u003E field to prefill the email address field with the email stored on the Customer.","docsApp.ib.checkout.next.js.prefill-email.heading":"Prefill customer data","docsApp.ib.checkout.next.js.preview-page.body":"Add a file under \u003Ccode\u003Epages\u002F\u003C\u002Fcode\u003E to create a page showing a preview of the customer's order. Allow the customer to review or modify their order—once a customer is sent to the Checkout page, the order is final and cannot be modified without creating a new Checkout Session.","docsApp.ib.checkout.next.js.preview-page.heading":"Add an order preview page","docsApp.ib.checkout.next.js.run-server.body":"Start your app with \u003Ccode\u003Enpm run dev\u003C\u002Fcode\u003E and navigate to \u003Ca\u003Ehttp:\u002F\u002Flocalhost:3000\u003C\u002Fa\u003E.","docsApp.ib.checkout.next.js.run-server.heading":"Run the application","docsApp.ib.checkout.next.js.set-env-vars.body":"Add your publishable and secret keys to a \u003Ccode\u003E.env\u003C\u002Fcode\u003E file. Next.js automatically loads them into your application as \u003Ca1\u003Eenvironment variables\u003C\u002Fa1\u003E. If you want to listen to webhooks, also include a webhook secret, which can be created in the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E or with the \u003Ca3\u003EStripe CLI\u003C\u002Fa3\u003E.","docsApp.ib.checkout.next.js.set-env-vars.heading":"Set your environment variables","docsApp.ib.checkout.next.js.submit-button.body":"Configure the copy displayed on the Checkout submit button by setting the \u003Ccode\u003Esubmit_type\u003C\u002Fcode\u003E. There are four different submit types.","docsApp.ib.checkout.next.js.submit-button.heading":"Pick a submit button","docsApp.ib.checkout.next.js.testing-customized.body":"Click the checkout button in the preview on the right to see a sample Stripe Checkout page with these additional fields. \u003Ca\u003ERead our docs\u003C\u002Fa\u003E for all the ways you can customize Checkout—we continuously add new features.","docsApp.ib.checkout.next.js.testing-customized.heading":"Preview the customized page","docsApp.ib.checkout.next.js.testing.body":"Click the checkout button to be redirected to the Checkout page. Use any of these test cards to simulate a payment.","docsApp.ib.checkout.next.js.testing.cards.auth":"Payment requires authentication","docsApp.ib.checkout.next.js.testing.cards.declined":"Payment is declined","docsApp.ib.checkout.next.js.testing.cards.succeeds":"Payment succeeds","docsApp.ib.checkout.next.js.testing.heading":"Try it out","docsApp.ib.checkout.next.js.urls.body":"Specify the URLs Stripe should redirect to when your customer completes or cancels the Checkout Session. You can handle both the success and canceled states with the same URL.","docsApp.ib.checkout.next.js.urls.heading":"Supply the redirect URLs","docsApp.ib.checkout.react.add-button.body":"Add a button to your order preview page. When your customer clicks this button, they are redirected to the Stripe-hosted payment form.","docsApp.ib.checkout.react.add-button.heading":"Add a checkout button","docsApp.ib.checkout.react.address.body":"Use \u003Ccode\u003Ebilling_address_collection\u003C\u002Fcode\u003E and \u003Ccode\u003Eshipping_address_collection\u003C\u002Fcode\u003E to collect your customer's address. \u003Ccode\u003Eshipping_address_collection\u003C\u002Fcode\u003E requires a list of \u003Ccode\u003Eallowed_countries\u003C\u002Fcode\u003E. Checkout displays the list of allowed countries in a dropdown on the page.","docsApp.ib.checkout.react.address.heading":"Collect billing and shipping details","docsApp.ib.checkout.react.back.body":"Show a message to your customer when they are redirected back to your page. Wait to fulfill orders \u0028e.g. shipping or sending email receipts\u0029 until the payment succeeds. Since some payments may take minutes or even days to process, set up a webhook to listen for a \u003Ccode\u003Epayment_intent.succeeded\u003C\u002Fcode\u003E event to reliably know when the payment is successful. Learn more about \u003Ca\u003Efulfilling orders with Checkout\u003C\u002Fa\u003E.","docsApp.ib.checkout.react.back.heading":"Handle redirect back from Checkout","docsApp.ib.checkout.react.create.body":"Add an endpoint on your server that creates a \u003Ca\u003ECheckout Session\u003C\u002Fa\u003E. A Checkout Session controls what your customer sees in the Stripe-hosted payment page such as line items, the order amount and currency, and acceptable payment methods.","docsApp.ib.checkout.react.create.heading":"Create a Checkout Session","docsApp.ib.checkout.react.customize.body":"You can customize the appearance of the hosted Checkout page by adding your logo and color theme in the Dashboard's \u003Ca\u003Ebranding settings\u003C\u002Fa\u003E, or by using the API to activate additional features like address collection or prefilling customer details.","docsApp.ib.checkout.react.customize.heading":"Customize the checkout page","docsApp.ib.checkout.react.fetch-checkout-session.body":"Make a request to the endpoint on your server to create a new Checkout Session when your customer clicks on the \u003Cstrong\u003ECheckout\u003C\u002Fstrong\u003E button.","docsApp.ib.checkout.react.fetch-checkout-session.heading":"Fetch a Checkout Session","docsApp.ib.checkout.react.line-items.body":"Always keep sensitive information about your product inventory, like price and availability, on your server to prevent customer manipulation from the client. Define product information on the fly with \u003Ccode\u003Eprice_data\u003C\u002Fcode\u003E or use \u003Ca\u003Epre-defined prices\u003C\u002Fa\u003E and pass their IDs","docsApp.ib.checkout.react.line-items.heading":"Define the line items","docsApp.ib.checkout.react.load-stripe.body":"Stripe Checkout relies on Stripe.js, Stripe’s foundational JavaScript library for collecting sensitive payment information and advanced fraud detection. Call loadStripe with your publishable API key. It returns a Promise that resolves with the Stripe object as soon as Stripe.js loads.","docsApp.ib.checkout.react.load-stripe.heading":"Load Stripe.js","docsApp.ib.checkout.react.mode.body":"Checkout has three modes: \u003Ccode\u003Epayment\u003C\u002Fcode\u003E, \u003Ccode\u003Esubscription\u003C\u002Fcode\u003E, or \u003Ccode\u003Esetup\u003C\u002Fcode\u003E. Use \u003Ccode\u003Epayment\u003C\u002Fcode\u003E mode for one-time purchases. Learn more about \u003CsubscriptionA\u003Esubscription\u003C\u002FsubscriptionA\u003E and \u003CsetupA\u003Esetup\u003C\u002FsetupA\u003E modes in the docs.","docsApp.ib.checkout.react.mode.heading":"Choose the mode","docsApp.ib.checkout.react.payment-methods.body":"Checkout supports \u003Ca\u003Eseveral payment methods\u003C\u002Fa\u003E beyond cards. If you pass multiple payment methods, Checkout dynamically reorders them to prioritize the most relevant payment methods based on the customer’s location and other characteristics. To dynamically show Apple Pay and Google Pay when applicable, include \u003Ccode\u003Ecard\u003C\u002Fcode\u003E in the \u003Ccode\u003Epayment_method_types\u003C\u002Fcode\u003E list.","docsApp.ib.checkout.react.payment-methods.heading":"Specify payment methods","docsApp.ib.checkout.react.prefill-email.body":"Use \u003Ccode\u003Ecustomer_email\u003C\u002Fcode\u003E to prefill the customer's email address in the email input field. You can also pass a \u003Ca\u003ECustomer\u003C\u002Fa\u003E ID to \u003Ccode\u003Ecustomer\u003C\u002Fcode\u003E field to prefill the email address field with the email stored on the Customer.","docsApp.ib.checkout.react.prefill-email.heading":"Prefill customer data","docsApp.ib.checkout.react.preview-page.body":"Add a page to show a preview of the customer's order. Allow the customer to review or modify their order—once a customer is sent to the Checkout page, the order is final and cannot be modified without creating a new Checkout Session.","docsApp.ib.checkout.react.preview-page.heading":"Add an order preview page","docsApp.ib.checkout.react.redirect.body":"After creating the session, redirect your customer to the Checkout page's URL returned in the response.","docsApp.ib.checkout.react.redirect.heading":"Redirect to Checkout","docsApp.ib.checkout.react.run-server.body":"Start your server and navigate to \u003Ca\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcheckout\u003C\u002Fa\u003E","docsApp.ib.checkout.react.run-server.heading":"Run the application","docsApp.ib.checkout.react.submit-button.body":"Configure the copy displayed on the Checkout submit button by setting the \u003Ccode\u003Esubmit_type\u003C\u002Fcode\u003E. There are four different submit types.","docsApp.ib.checkout.react.submit-button.heading":"Pick a submit button","docsApp.ib.checkout.react.testing-customized.body":"Click the checkout button in the preview on the right to see a sample Stripe Checkout page with these additional fields. \u003Ca\u003ERead our docs\u003C\u002Fa\u003E for all the ways you can customize Checkout—we continuously add new features.","docsApp.ib.checkout.react.testing-customized.heading":"Preview the customized page","docsApp.ib.checkout.react.testing.body":"Click the checkout button to be redirected to the Checkout page. Use any of these test cards to simulate a payment.","docsApp.ib.checkout.react.testing.cards.auth":"Payment requires authentication","docsApp.ib.checkout.react.testing.cards.declined":"Payment is declined","docsApp.ib.checkout.react.testing.cards.succeeds":"Payment succeeds","docsApp.ib.checkout.react.testing.heading":"Try it out","docsApp.ib.checkout.react.urls.body":"Specify the URLs Stripe should redirect to when your customer completes or cancels the Checkout Session. You can handle both the success and canceled states with the same URL.","docsApp.ib.checkout.react.urls.heading":"Supply success and cancel URLs","docsApp.ib.checkout.sections.build-page":"Build your checkout","docsApp.ib.checkout.sections.setup-stripe":"Set up the server","docsApp.ib.checkout.sections.testing":"Test your page","docsApp.ib.demo.preview":"Preview","docsApp.ib.termiload-striperbodycation-wp3.heading":"To get access to the WisePad 3 reader in your country, please reach out to \u003Ca\u003Esupport\u002Bterminal@stripe.com\u003C\u002Fa\u003E or your account manager. In the meantime, you can use the simulated reader.","docsApp.ib.termiload-striperbodycation.heading":"The iOS SDK is \u003Ca\u003Eopen source\u003C\u002Fa\u003E, fully documented, and compatible with apps supporting iOS 9 or above. Import the Stripe SDK into your checkout screen’s UIViewController.","docsApp.ib.terminaconfigure-appabodytion.heading":"To prepare your app to work with the Stripe Terminal SDK, make a few changes to your Info.plist file in Xcode.","docsApp.ib.terminal.android.steps.capture-intent-endpoint.body":"Create an endpoint on your backend that accepts a PaymentIntent ID and sends a request to the Stripe API to capture it.","docsApp.ib.terminal.android.steps.capture-intent-endpoint.heading":"Create an endpoint to capture the PaymentIntent","docsApp.ib.terminal.android.steps.capture-intent.body":"Notify your backend to capture the PaymentIntent. In your request send the Payment Intent ID.","docsApp.ib.terminal.android.steps.capture-intent.heading":"Capture the PaymentIntent","docsApp.ib.terminal.android.steps.check-fine-location.body":"Add a check to make sure that the ACCESS_FINE_LOCATION permission is enabled in your app.","docsApp.ib.terminal.android.steps.check-fine-location.heading":"Verify ACCESS_FINE_LOCATION permission","docsApp.ib.terminal.android.steps.check-location-permission.body":"Override the \u003Ccode\u003EonRequestPermissionsResult\u003C\u002Fcode\u003E method in your app and check the permission result to verify that the app user grants location permission.","docsApp.ib.terminal.android.steps.check-location-permission.heading":"Verify user location permission","docsApp.ib.terminal.android.steps.collect-payment-method.body":"Call \u003Ccode\u003EcollectPaymentMethod\u003C\u002Fcode\u003E with the PaymentIntent’s client secret to collect a payment method. When connected to the simulated reader calling this method immediately updates the PaymentIntent object with a \u003Ca\u003Esimulated test card\u003C\u002Fa\u003E. When connected to a physical reader the connected reader waits for a card to be presented.","docsApp.ib.terminal.android.steps.collect-payment-method.heading":"Collect payment method details","docsApp.ib.terminal.android.steps.connect-bluetooth-reader.body":"When \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E returns a result, call \u003Ccode\u003EconnectBluetoothReader\u003C\u002Fcode\u003E to connect to the simulated reader.","docsApp.ib.terminal.android.steps.connect-bluetooth-reader.heading":"Connect to the simulated reader","docsApp.ib.terminal.android.steps.connect-reader.body":"When \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E returns a result, call \u003Ccode\u003EconnectInternetReader\u003C\u002Fcode\u003E to connect to the simulated reader.","docsApp.ib.terminal.android.steps.connect-reader.heading":"Connect to the simulated reader","docsApp.ib.terminal.android.steps.connection-token-endpoint.body":"To connect to a reader, your backend needs to give the SDK permission to use the reader with your Stripe account by providing it with the secret from a \u003CconnectionTokenA\u003EConnectionToken\u003C\u002FconnectionTokenA\u003E. Your backend should only create connection tokens for clients that it trusts. If you’re using Stripe Connect, you should also \u003CscopeA\u003Escope the connection token\u003C\u002FscopeA\u003E to the relevant connected accounts.","docsApp.ib.terminal.android.steps.connection-token-endpoint.heading":"Create a ConnectionToken endpoint","docsApp.ib.terminal.android.steps.create-intent-mobile.body":"Create a \u003Ca\u003EPaymentIntent\u003C\u002Fa\u003E object using the SDK. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring the customer is only charged once.","docsApp.ib.terminal.android.steps.create-intent-mobile.heading":"Create a PaymentIntent","docsApp.ib.terminal.android.steps.create-intent.body":"Add an endpoint on your server that creates a PaymentIntent. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring they’re only charged once. Return the PaymentIntent's client secret in the response. If you’re using Stripe Connect, you can also specify \u003Ca\u003Econnected account information\u003C\u002Fa\u003E based on your platform’s charge logic.","docsApp.ib.terminal.android.steps.create-intent.heading":"Create a PaymentIntent","docsApp.ib.terminal.android.steps.create-mandatory-location.body":"\u003Ca\u003ECreate locations\u003C\u002Fa\u003E to organize your readers. Locations group readers and allows them to automatically download the reader configuration needed for their region of use.","docsApp.ib.terminal.android.steps.create-mandatory-location.heading":"Organize your readers","docsApp.ib.terminal.android.steps.discover-reader.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E to search for readers, with the simulated option set to true.","docsApp.ib.terminal.android.steps.discover-reader.chipper.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E to search for readers, with the simulated option set to true.","docsApp.ib.terminal.android.steps.discover-reader.chipper.heading":"Discover readers","docsApp.ib.terminal.android.steps.discover-reader.heading":"Discover readers","docsApp.ib.terminal.android.steps.discover-reader.m2.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E to search for readers, with the simulated option set to true.","docsApp.ib.terminal.android.steps.discover-reader.m2.heading":"Discover readers","docsApp.ib.terminal.android.steps.discover-reader.wpe.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E to search for readers, with the simulated option set to true. You can discover intended readers more easily by \u003Ca\u003Efiltering by location\u003C\u002Fa\u003E.","docsApp.ib.terminal.android.steps.discover-reader.wpe.heading":"Discover readers","docsApp.ib.terminal.android.steps.fetch-connection-token.body":"Implement the ConnectionTokenProvider interface in your app, which defines a single function that requests a connection token from your backend.","docsApp.ib.terminal.android.steps.fetch-connection-token.heading":"Fetch ConnectionToken","docsApp.ib.terminal.android.steps.fetch-intent.body":"Make a request to your server for a PaymentIntent to initiate the payment process.","docsApp.ib.terminal.android.steps.fetch-intent.heading":"Fetch the PaymentIntent","docsApp.ib.terminal.android.steps.lifecycle.body":"To prevent memory leaks and ensure proper cleanup of long-running Terminal SDK processes, your application must have the Application subclass where \u003Ccode\u003ETerminalLifeCycleObserver\u003C\u002Fcode\u003E is configured. This subclass should register activity lifecycle callbacks and implement the \u003Ccode\u003EonTrimMemory\u003C\u002Fcode\u003E method to notify the SDK to prune its memory usage.","docsApp.ib.terminal.android.steps.lifecycle.heading":"Configure TerminalLifeCycleObserver","docsApp.ib.terminal.android.steps.load-stripe-wp3.body":"To get access to the WisePad 3 reader in your country, please reach out to \u003Ca\u003Esupport\u002Bterminal@stripe.com\u003C\u002Fa\u003E or your account manager. In the meantime, you can use the simulated reader.","docsApp.ib.terminal.android.steps.load-stripe.body":"To install the SDK, add stripeterminal to the dependencies block of your build.gradle file.","docsApp.ib.terminal.android.steps.load-stripe.buildInstructions.github.body":"The Stripe Android SDK is open-sourced.","docsApp.ib.terminal.android.steps.load-stripe.buildInstructions.github.link":"View on GitHub","docsApp.ib.terminal.android.steps.load-stripe.buildInstructions.gradle.body":"Add the dependencies to your build.gradle file:","docsApp.ib.terminal.android.steps.load-stripe.heading":"Install the SDK","docsApp.ib.terminal.android.steps.mobile-test-cards.body":"Use amounts ending in the following special values to test your integration.","docsApp.ib.terminal.android.steps.mobile-test-cards.cards.one":"Payment succeeds","docsApp.ib.terminal.android.steps.mobile-test-cards.cards.two":"Payment is declined","docsApp.ib.terminal.android.steps.mobile-test-cards.heading":"Make a test payment","docsApp.ib.terminal.android.steps.process-payment.body":"After successfully collecting payment method data, call \u003Ccode\u003EprocessPayment\u003C\u002Fcode\u003E with the updated PaymentIntent to process the payment. A successful call results in a PaymentIntent with a status of \u003Ccode\u003Erequires_capture\u003C\u002Fcode\u003E.","docsApp.ib.terminal.android.steps.process-payment.heading":"Process the payment","docsApp.ib.terminal.android.steps.run-server.heading":"Run the application","docsApp.ib.terminal.android.steps.sdk.body":"To get started, provide the current application context, the ConnectionTokenProvider, and a TerminalListener object.","docsApp.ib.terminal.android.steps.sdk.heading":"Initialize the SDK","docsApp.ib.terminal.create-locationebodyon.heading":"We strongly recommend that you \u003Ca\u003Ecreate locations\u003C\u002Fa\u003E to organize your readers. Locations allow you to logically group readers based on where they will be used.","docsApp.ib.terminal.ios.stefetch-connection-tokenibodying":"Implement the ConnectionTokenProvider protocol in your app, which defines a single function that requests a connection token from your backend.","docsApp.ib.terminal.ios.steps.capture-intent-endpoint.body":"Create an endpoint on your backend that accepts a PaymentIntent ID and sends a request to the Stripe API to capture it.","docsApp.ib.terminal.ios.steps.capture-intent-endpoint.heading":"Create an endpoint to capture the PaymentIntent","docsApp.ib.terminal.ios.steps.capture-intent.body":"Notify your backend to capture the PaymentIntent. In your request send the PaymentIntent ID.","docsApp.ib.terminal.ios.steps.capture-intent.heading":"Capture the PaymentIntent","docsApp.ib.terminal.ios.steps.collect-payment-method.heading":"Collect payment method details","docsApp.ib.terminal.ios.steps.configure-app.buildInstructions.backgroundModes":"Ensure that your app runs in the background and remains connected to the reader.","docsApp.ib.terminal.ios.steps.configure-app.buildInstructions.bluetoothAlways":"Allow your app to display a Bluetooth permission dialog.","docsApp.ib.terminal.ios.steps.configure-app.buildInstructions.bluetoothPeripheral":"Pass app validation checks when submitting to the App Store.","docsApp.ib.terminal.ios.steps.configure-app.buildInstructions.location":"Enable location services with the following key-value pair.","docsApp.ib.terminal.ios.steps.configure-app.heading":"Configure your app","docsApp.ib.terminal.ios.steps.connect-bluetooth-reader.body":"When the \u003Ccode\u003EdidUpdateDiscoveredReaders\u003C\u002Fcode\u003E delegate method is called, call connectBluetoothReader to connect to the simulated reader.","docsApp.ib.terminal.ios.steps.connect-bluetooth-reader.heading":"Connect to the simulated reader","docsApp.ib.terminal.ios.steps.connect-reader.body":"When the \u003Ccode\u003EdidUpdateDiscoveredReaders\u003C\u002Fcode\u003E delegate method is called, call connectInternetReader to connect to the simulated reader.","docsApp.ib.terminal.ios.steps.connect-reader.heading":"Connect to the simulated reader","docsApp.ib.terminal.ios.steps.connection-token-endpoint.chipper.body":"To connect to a reader, your backend needs to give the SDK permission to use the reader with your Stripe account by providing it with the secret from a \u003CconnectionTokenA\u003EConnectionToken\u003C\u002FconnectionTokenA\u003E. Your backend should only create connection tokens for clients that it trusts. If you’re using Stripe Connect, you should also \u003CscopeA\u003Escope the connection token\u003C\u002FscopeA\u003E to the relevant connected accounts.","docsApp.ib.terminal.ios.steps.connection-token-endpoint.chipper.heading":"Create a ConnectionToken endpoint","docsApp.ib.terminal.ios.steps.connection-token-endpoint.m2.body":"To connect to a reader, your backend needs to give the SDK permission to use the reader with your Stripe account by providing it with the secret from a \u003CconnectionTokenA\u003EConnectionToken\u003C\u002FconnectionTokenA\u003E. Your backend should only create connection tokens for clients that it trusts. If you’re using Stripe Connect, you should also \u003CscopeA\u003Escope the connection token\u003C\u002FscopeA\u003E to the relevant connected accounts.","docsApp.ib.terminal.ios.steps.connection-token-endpoint.m2.heading":"Create a ConnectionToken endpoint","docsApp.ib.terminal.ios.steps.connection-token-endpoint.p400.body":"To connect to a reader, your backend needs to give the SDK permission to use the reader with your Stripe account by providing it with the secret from a \u003CconnectionTokenA\u003EConnectionToken\u003C\u002FconnectionTokenA\u003E. Your backend should only create connection tokens for clients that it trusts. You can \u003CpassA\u003Epass a location ID\u003C\u002FpassA\u003E when creating the connection token to control access to readers. If you’re using Stripe Connect, you should also \u003CscopeA\u003Escope the connection token\u003C\u002FscopeA\u003E to the relevant connected accounts.","docsApp.ib.terminal.ios.steps.connection-token-endpoint.p400.heading":"Create a ConnectionToken endpoint","docsApp.ib.terminal.ios.steps.connection-token-endpoint.wpe.body":"To connect to a reader, your backend needs to give the SDK permission to use the reader with your Stripe account by providing it with the secret from a \u003CconnectionTokenA\u003EConnectionToken\u003C\u002FconnectionTokenA\u003E. Your backend should only create connection tokens for clients that it trusts. You can \u003CpassA\u003Epass a location ID\u003C\u002FpassA\u003E when creating the connection token to control access to readers. If you’re using Stripe Connect, you should also \u003CscopeA\u003Escope the connection token\u003C\u002FscopeA\u003E to the relevant connected accounts.","docsApp.ib.terminal.ios.steps.connection-token-endpoint.wpe.heading":"Create a ConnectionToken endpoint","docsApp.ib.terminal.ios.steps.crcollect-payment-methodody":"Call \u003Ccode\u003EcollectPaymentMethod\u003C\u002Fcode\u003E with the PaymentIntent’s client secret to collect a payment method. When connected to the simulated reader calling this method immediately updates the PaymentIntent object with a \u003Ca\u003Esimulated test card\u003C\u002Fa\u003E. When connected to a physical reader the connected reader waits for a card to be presented.","docsApp.ib.terminal.ios.steps.create-intent-mobile.body":"Create a \u003Ca\u003EPaymentIntent\u003C\u002Fa\u003E object using the SDK. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring the customer is only charged once.","docsApp.ib.terminal.ios.steps.create-intent-mobile.heading":"Create a PaymentIntent","docsApp.ib.terminal.ios.steps.create-intent.body":"Add an endpoint on your server that creates a PaymentIntent. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring they’re only charged once. Return the PaymentIntent's client secret in the response. If you’re using Stripe Connect, you can also specify \u003Ca\u003Econnected account information\u003C\u002Fa\u003E based on your platform’s charge logic.","docsApp.ib.terminal.ios.steps.create-intent.heading":"Create a PaymentIntent","docsApp.ib.terminal.ios.steps.create-location.heading":"Optional: Organize your readers","docsApp.ib.terminal.ios.steps.create-mandatory-location.body":"\u003Ca\u003ECreate locations\u003C\u002Fa\u003E to organize your readers. Locations group readers and allows them to automatically download the reader configuration needed for their region of use.","docsApp.ib.terminal.ios.steps.create-mandatory-location.heading":"Organize your readers","docsApp.ib.terminal.ios.steps.discover-reader.chipper.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call discoverReaders to search for readers, with the simulated option set to true.","docsApp.ib.terminal.ios.steps.discover-reader.chipper.heading":"Discover readers","docsApp.ib.terminal.ios.steps.discover-reader.m2.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call discoverReaders to search for readers, with the simulated option set to true.","docsApp.ib.terminal.ios.steps.discover-reader.m2.heading":"Discover readers","docsApp.ib.terminal.ios.steps.discover-reader.p400.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E to search for readers, with the simulated option set to true. You can discover intended readers more easily by \u003Ca\u003Efiltering by location\u003C\u002Fa\u003E.","docsApp.ib.terminal.ios.steps.discover-reader.p400.heading":"Discover readers","docsApp.ib.terminal.ios.steps.discover-reader.wpe.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E to search for readers, with the simulated option set to true. You can discover intended readers more easily by \u003Ca\u003Efiltering by location\u003C\u002Fa\u003E.","docsApp.ib.terminal.ios.steps.discover-reader.wpe.heading":"Discover readers","docsApp.ib.terminal.ios.steps.fetch-connection-token.heading":"Fetch ConnectionToken","docsApp.ib.terminal.ios.steps.fetch-intent.body":"Make a request to your server for a PaymentIntent to initiate the payment process.","docsApp.ib.terminal.ios.steps.fetch-intent.heading":"Fetch the PaymentIntent","docsApp.ib.terminal.ios.steps.load-stripe.body":"The iOS SDK is \u003Ca\u003Eopen source\u003C\u002Fa\u003E, fully documented, and compatible with apps supporting iOS 10 or above. Import the Stripe SDK into your checkout screen’s UIViewController.","docsApp.ib.terminal.ios.steps.load-stripe.buildInstructions.carthage":"Add this line to your Cartfile.","docsApp.ib.terminal.ios.steps.load-stripe.buildInstructions.cocoaPods":"Add this line to your Podfile, and use the .xcworkspace file to open your project in Xcode, instead of the .xcodeproj file, from here on out.","docsApp.ib.terminal.ios.steps.load-stripe.buildInstructions.spm":"1. In Xcode, select File \u003E Swift Packages \u003E Add Package Dependency from the menu bar.{br}2. Enter the Stripe Terminal iOS SDK’s Github URL:","docsApp.ib.terminal.ios.steps.load-stripe.buildInstructions.xcf":"1. Download StripeTerminal.xcframework.zip from the \u003Ca\u003Elatest release on GitHub\u003C\u002Fa\u003E.{br}2. Unzip it and drag the .xcframework in to your project making sure to select \"Copy items if needed\".{br}3. Ensure the xcframework is included in the \"Frameworks, Libraries, and Embedded Content\" section of your application target in Xcode and set to \"Embed \u0026 Sign\".","docsApp.ib.terminal.ios.steps.load-stripe.heading":"Install the SDK","docsApp.ib.terminal.ios.steps.mobile-test-cards.body":"Use \u003Ca\u003Eamounts\u003C\u002Fa\u003E ending in the following special values to test your integration.","docsApp.ib.terminal.ios.steps.mobile-test-cards.cards.one":"Payment succeeds","docsApp.ib.terminal.ios.steps.mobile-test-cards.cards.two":"Payment is declined","docsApp.ib.terminal.ios.steps.mobile-test-cards.heading":"Make a test payment","docsApp.ib.terminal.ios.steps.process-payment.heading":"Process the payment","docsApp.ib.terminal.ios.steps.run-server.heading":"Run the application","docsApp.ib.terminal.ios.steps.sdk.heading":"Initialize the SDK","docsApp.ib.terminal.process-paymentebodyon.heading":"After successfully collecting payment method data, call \u003Ccode\u003EprocessPayment\u003C\u002Fcode\u003E with the updated PaymentIntent to process the payment. A successful call results in a PaymentIntent with a status of \u003Ccode\u003Erequires_capture\u003C\u002Fcode\u003E.","docsApp.ib.terminal.sections.collect-payment":"Collecting Payments","docsApp.ib.terminal.sections.reader":"Connect to the simulated reader","docsApp.ib.terminal.sections.setup-sdk":"Set up the SDK","docsApp.ib.terminal.sections.setup-server":"Set up the server","docsApp.ib.terminal.sections.test-the-integration":"Test the integration","docsApp.ib.terminal.server.dotnet.run-server.body":"Run your ASP.NET MVC server and go to \u003Ca\u003Elocalhost:4242\u003C\u002Fa\u003E.","docsApp.ib.terminal.server.dotnet.setup.body":"Install the package with dotnet or NuGet. Alternatively, if you’re starting from scratch, download the files which contains a configured .csproj file.","docsApp.ib.terminal.server.dotnet.setup.heading":"Install the Stripe.net library","docsApp.ib.terminal.server.go.run-server.body":"Run your Go server and go to \u003Ca\u003Elocalhost:4242\u003C\u002Fa\u003E.","docsApp.ib.terminal.server.java.run-server.body":"Run your server and go to \u003Ca\u003Elocalhost:4242\u003C\u002Fa\u003E.","docsApp.ib.terminal.server.node.run-server.body":"Run your Node server and go to \u003Ca\u003Elocalhost:4242\u003C\u002Fa\u003E.","docsApp.ib.terminal.server.php.run-server.body":"Run your server and go to \u003Ca\u003Elocalhost:4242\u003C\u002Fa\u003E.","docsApp.ib.terminal.server.python.run-server.body":"Run your Python server and go to \u003Ca\u003Elocalhost:4242\u003C\u002Fa\u003E.","docsApp.ib.terminal.server.ruby.run-server.body":"Run your Ruby server and go to \u003Ca\u003Elocalhost:4242\u003C\u002Fa\u003E.","docsApp.ib.terminal.web.steps.capture-intent-endpoint.body":"Create an endpoint on your backend that accepts a PaymentIntent ID and sends a request to the Stripe API to capture it.","docsApp.ib.terminal.web.steps.capture-intent-endpoint.heading":"Create an endpoint to capture the PaymentIntent","docsApp.ib.terminal.web.steps.capture-intent.body":"Notify your backend to capture the PaymentIntent. In your request send the PaymentIntent ID.","docsApp.ib.terminal.web.steps.capture-intent.heading":"Capture the PaymentIntent","docsApp.ib.terminal.web.steps.collect-payment-method.body":"Call \u003Ccode\u003EcollectPaymentMethod\u003C\u002Fcode\u003E with the PaymentIntent’s client secret to collect a payment method. When connected to the simulated reader calling this method immediately updates the PaymentIntent object with a \u003Ca\u003Esimulated test card\u003C\u002Fa\u003E. When connected to a physical reader the connected reader waits for a card to be presented.","docsApp.ib.terminal.web.steps.collect-payment-method.heading":"Collect payment method details","docsApp.ib.terminal.web.steps.connect-reader.body":"When \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E returns a result, call \u003Ccode\u003EconnectReader\u003C\u002Fcode\u003E to connect to the simulated reader.","docsApp.ib.terminal.web.steps.connect-reader.heading":"Connect to the simulated reader","docsApp.ib.terminal.web.steps.connection-token-endpoint.body":"To connect to a reader, your backend needs to give the SDK permission to use the reader with your Stripe account by providing it with the secret from a \u003CconnectionTokenA\u003EConnectionToken\u003C\u002FconnectionTokenA\u003E. Your backend should only create connection tokens for clients that it trusts. ​​If you’re using Stripe Connect, you should also \u003CscopeA\u003Escope the connection token\u003C\u002FscopeA\u003E to the relevant connected accounts. ​​If using locations, you should \u003CpassA\u003Epass a location ID\u003C\u002FpassA\u003E when creating the connection token to control access to readers.","docsApp.ib.terminal.web.steps.connection-token-endpoint.heading":"Create a ConnectionToken endpoint","docsApp.ib.terminal.web.steps.create-intent.body":"Add an endpoint on your server that creates a PaymentIntent. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring they’re only charged once. Return the PaymentIntent's client secret in the response. If you’re using Stripe Connect, you can also specify \u003Ca\u003Econnected account information\u003C\u002Fa\u003E based on your platform’s charge logic.","docsApp.ib.terminal.web.steps.create-intent.heading":"Create a PaymentIntent","docsApp.ib.terminal.web.steps.create-location.body":"We strongly recommend that you \u003Ca\u003Ecreate locations\u003C\u002Fa\u003E to organize your readers. Locations allow you to logically group readers based on where they will be used.","docsApp.ib.terminal.web.steps.create-location.heading":"Optional: Organize your readers","docsApp.ib.terminal.web.steps.create-mandatory-location.body":"\u003Ca\u003ECreate locations\u003C\u002Fa\u003E to organize your readers. Locations group readers and allows them to automatically download the reader configuration needed for their region of use.","docsApp.ib.terminal.web.steps.create-mandatory-location.heading":"Organize your readers","docsApp.ib.terminal.web.steps.discover-reader.body":"The Stripe Terminal SDK comes with a built-in simulated card reader, so you can develop and test your app without connecting to physical hardware. To use the simulated reader, call \u003Ccode\u003EdiscoverReaders\u003C\u002Fcode\u003E to search for readers, with the simulated option set to true. ​​If using locations, you can discover intended readers more easily by \u003Ca\u003Efiltering by location\u003C\u002Fa\u003E.","docsApp.ib.terminal.web.steps.discover-reader.heading":"Discover readers","docsApp.ib.terminal.web.steps.fetch-connection-token.body":"To give the SDK access to this endpoint, create a function in your web application that requests a ConnectionToken from your backend and returns the secret from the ConnectionToken object.","docsApp.ib.terminal.web.steps.fetch-connection-token.heading":"Fetch ConnectionToken","docsApp.ib.terminal.web.steps.fetch-intent.body":"Make a request to your server for a PaymentIntent to initiate the payment process.","docsApp.ib.terminal.web.steps.fetch-intent.heading":"Fetch the PaymentIntent","docsApp.ib.terminal.web.steps.load-stripe.body":"This script must always load directly from https:\u002F\u002Fjs.stripe.com for compatibility with the latest reader software. Don’t include the script in a bundle or host a copy yourself as this could break your integration without warning. We also provide an npm package that makes it easier to load and use the Terminal JS SDK as a module. For more information, check out \u003Ca\u003Ethe project on GitHub\u003C\u002Fa\u003E.","docsApp.ib.terminal.web.steps.load-stripe.heading":"Install the SDK","docsApp.ib.terminal.web.steps.process-payment.body":"After successfully collecting payment method data, call \u003Ccode\u003EprocessPayment\u003C\u002Fcode\u003E with the updated PaymentIntent to process the payment. A successful call results in a PaymentIntent with a status of \u003Ccode\u003Erequires_capture\u003C\u002Fcode\u003E.","docsApp.ib.terminal.web.steps.process-payment.heading":"Process the payment","docsApp.ib.terminal.web.steps.run-server.heading":"Run the application","docsApp.ib.terminal.web.steps.sdk.body":"To initialize a \u003Ccode\u003EStripeTerminal\u003C\u002Fcode\u003E instance in your JavaScript application, provide the \u003Ccode\u003EonFetchConnectionToken\u003C\u002Fcode\u003E function. You must also provide the \u003Ccode\u003EonUnexpectedReaderDisconnect\u003C\u002Fcode\u003E function to handle unexpected disconnects from the reader.","docsApp.ib.terminal.web.steps.sdk.heading":"Initialize the SDK","docsApp.ib.terminal.web.steps.test-cards.body":"The simulated reader supports a small amount of configuration, enabling you to test different flows within your point of sale application such as different card brands or error scenarios like a declined charge. To enable this behavior, insert this line of code before you call \u003Ccode\u003EcollectPaymentMethod.\u003C\u002Fcode\u003E","docsApp.ib.terminal.web.steps.test-cards.heading":"Use a test card number to try your integration","docsApp.ib.terminal.web.steps.test-cards.one.label":"Payment succeeds","docsApp.ib.terminal.web.steps.test-cards.three.label":"Payment is declined","docsApp.ib.terminal.web.steps.test-cards.two.label":"Payment requires authentication","docsApp.ib.terminalconnect-readertbodyion.heading":"When the \u003Ccode\u003EdidUpdateDiscoveredReaders\u003C\u002Fcode\u003E delegate method is called, call connectReader to connect to the simulated reader.","docsApp.ib.webhooks.create.body":"A \u003Ca\u003Ewebhook\u003C\u002Fa\u003E is an endpoint on your server that receives requests from Stripe, notifying you about events that happen on your account such as a customer disputing a charge or a successful recurring payment. Add a new endpoint to your server and make sure it's publicly accessible so we can send unauthenticated POST requests.","docsApp.ib.webhooks.create.heading":"Create a new endpoint","docsApp.ib.webhooks.dotnet.run.body":"Build and run your server to test the endpoint at \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:4242\u002Fwebhook\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.dotnet.run.heading":"Run the server","docsApp.ib.webhooks.download.body":"Use the Stripe CLI to test your webhook locally. \u003Ca\u003EDownload the CLI\u003C\u002Fa\u003E and log in with your Stripe account. Alternatively, use a service like ngrok to make your local endpoint publicly accessible.","docsApp.ib.webhooks.download.heading":"Download the CLI","docsApp.ib.webhooks.go.run.body":"Build and run your server to test the endpoint at \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:4242\u002Fwebhook\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.go.run.heading":"Run the server","docsApp.ib.webhooks.handle-event.body":"As soon as you have the event object, check the \u003Ca\u003Etype\u003C\u002Fa\u003E to know what kind of event happened. You can use one webhook to handle several different event types at once, or set up individual endpoints for specific events.","docsApp.ib.webhooks.handle-event.heading":"Handle the event","docsApp.ib.webhooks.init-stripe.body":"Set up the Stripe library if your application needs to make requests to Stripe while handling the webhook event.","docsApp.ib.webhooks.init-stripe.heading":"Initialize Stripe","docsApp.ib.webhooks.java.run.body":"Build and run your server to test the endpoint at http:\u002F\u002Flocalhost:4242\u002Fwebhook.","docsApp.ib.webhooks.node.run.body":"Build and run your server to test the endpoint at \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:4242\u002Fwebhook\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.parse-event.body":"Stripe sends the event data in the request body. Each event is structured as an \u003Ca\u003EEvent object\u003C\u002Fa\u003E with a \u003Ccode\u003Etype\u003C\u002Fcode\u003E, \u003Ccode\u003Eid\u003C\u002Fcode\u003E, and related Stripe resource nested under \u003Ccode\u003Edata\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.parse-event.heading":"Read the event data","docsApp.ib.webhooks.php.run.body":"Build and run your server to test the endpoint at \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:4242\u002Fwebhook.php\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.php.run.heading":"Run the server","docsApp.ib.webhooks.php.update-secret.body":"Set up \u003Ca\u003Eevent forwarding\u003C\u002Fa\u003E with the CLI to send all Stripe events in testmode to your local webhook endpoint.","docsApp.ib.webhooks.python.run.body":"Build and run your server to test the endpoint at \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:4242\u002Fwebhook\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.return.body":"Send a successful 200 response to Stripe as quickly as possible because Stripe retries the event if a response isn't sent within a reasonable time. Write any long-running processes as code that can run asynchronously outside the webhook endpoint.","docsApp.ib.webhooks.return.heading":"Return a 200 response","docsApp.ib.webhooks.ruby.run.body":"Build and run your server to test the endpoint at \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:4242\u002Fwebhook\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.ruby.run.heading":"Run the server","docsApp.ib.webhooks.run.body":"Start testing your endpoint by running your server.","docsApp.ib.webhooks.run.heading":"Run the server","docsApp.ib.webhooks.sections.handle-requests":"Handle requests from Stripe","docsApp.ib.webhooks.sections.setup-webhook":"Set up an endpoint","docsApp.ib.webhooks.sections.test":"Test the webhook","docsApp.ib.webhooks.signature-check.body":"Use the Stripe library to verify and construct the event from Stripe. You need the endpoint secret, request headers, and the raw request body to properly verify the event. Alternatively, you can \u003Ca\u003Emanually verify\u003C\u002Fa\u003E the signature without having to use the Stripe library.","docsApp.ib.webhooks.signature-check.heading":"Verify the event","docsApp.ib.webhooks.signature-errors.body":"Checking for errors helps catch improperly configured webhooks or malformed requests from non-Stripe services. Common errors include using the wrong endpoint secret, passing a parsed representation \u0028e.g., JSON\u0029 of the request body, or reading the wrong request header.","docsApp.ib.webhooks.signature-errors.heading":"Handle errors","docsApp.ib.webhooks.signature-header.body":"Each request from Stripe contains a \u003Ccode\u003EStripe-Signature\u003C\u002Fcode\u003E header. Store a reference to this header value for later use.","docsApp.ib.webhooks.signature-header.heading":"Read the request signature","docsApp.ib.webhooks.signature-secret.body":"Each webhook endpoint has a unique a signing secret. Find the secret in the Dashboard or, if you are testing locally with the Stripe CLI, from the CLI output with the command \u003Ccode\u003Estripe listen\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.signature-secret.heading":"Add the endpoint secret","docsApp.ib.webhooks.signature-verify.body":"Use the Stripe library to verify that the request came from Stripe. Pass the raw request body, \u003Ccode\u003EStripe-Signature\u003C\u002Fcode\u003E header, and endpoint secret to \u003Ccode\u003Estripe.webhooks.constructEvent\u0028\u0029\u003C\u002Fcode\u003E.","docsApp.ib.webhooks.signature-verify.heading":"Verify the request","docsApp.ib.webhooks.signature.body":"Webhook endpoints must be publicly accessible so Stripe can send unauthenticated requests, but you can verify that Stripe sent the event by using the Stripe library and request header.","docsApp.ib.webhooks.signature.heading":"Secure your webhook","docsApp.ib.webhooks.simulate.body":"Use the CLI to simulate specific events that test your webhook application logic by sending a POST request to your webhook endpoint with a mocked Stripe event object.","docsApp.ib.webhooks.simulate.heading":"Simulate events","docsApp.ib.webhooks.test-verify.body":"Test your secured endpoint by using the Stripe CLI, which sends the proper signature header in each test event. Otherwise use the webhooks view in the \u003Ca\u003EDashboard\u003C\u002Fa\u003E to send one-off events.","docsApp.ib.webhooks.test-verify.heading":"Test the endpoint","docsApp.ib.webhooks.update-secret.body":"Set up \u003Ca\u003Eevent forwarding\u003C\u002Fa\u003E with the CLI to send all Stripe events in test mode to your local webhook endpoint.","docsApp.ib.webhooks.update-secret.heading":"Forward events to your webhook","docsApp.integrationBuilder.buildInstructions.buildInstructionsAriaActive":"Build instructions for installing Stripe with {activeLabel}","docsApp.integrationBuilder.buildInstructions.buildInstructionsAriaBasic":"Build instructions","docsApp.integrationBuilder.code.couldNotDownload":"Could not download","docsApp.integrationBuilder.code.download":"Download","docsApp.integrationBuilder.code.downloadFullApp":"Download full app","docsApp.integrationBuilder.code.downloadProject":"Download project","docsApp.integrationBuilder.code.downloaded":"Downloaded","docsApp.integrationBuilder.code.downloading":"Downloading","docsApp.integrationBuilder.content.billing.copy.body":"Build a full, working subscription integration using \u003Cc\u003EStripe Billing\u003C\u002Fc\u003E and \u003Ca\u003EStripe Checkout\u003C\u002Fa\u003E and your test mode data. Stripe Billing APIs let you create and manage subscriptions, invoices, and recurring payments. Checkout provides the prebuilt, secure, Stripe-hosted UI for collecting payment details. \u003Cd\u003E\u003C\u002Fd\u003E\u003Cd\u003E\u003C\u002Fd\u003EIn the downloaded sample app, the client- and server-side code redirects customers from your site to a prebuilt payment page hosted on Stripe. The builder injects data, like your pricing model, into the sample code as you follow the steps.","docsApp.integrationBuilder.content.billing.copy.bottom.body":"You have a basic Checkout with subscriptions integration working. Learn how to customize the subscription options.","docsApp.integrationBuilder.content.billing.copy.bottom.heading":"Congratulations\u0021","docsApp.integrationBuilder.content.billing.copy.bottom.nextSteps.four.body":"Upsell customers to longer billing intervals and collect more revenue.","docsApp.integrationBuilder.content.billing.copy.bottom.nextSteps.four.heading":"Upsells","docsApp.integrationBuilder.content.billing.copy.bottom.nextSteps.one.body":"Learn how subscriptions work within Stripe.","docsApp.integrationBuilder.content.billing.copy.bottom.nextSteps.one.heading":"Subscription overview","docsApp.integrationBuilder.content.billing.copy.bottom.nextSteps.three.body":"Learn about prorations.","docsApp.integrationBuilder.content.billing.copy.bottom.nextSteps.three.heading":"Prorations","docsApp.integrationBuilder.content.billing.copy.bottom.nextSteps.two.body":"In addition to basic subscription functionality, there are a number of other features you can use to customize your integration. You can offer free trials and discounts, configure future changes to subscriptions, and more.","docsApp.integrationBuilder.content.billing.copy.bottom.nextSteps.two.heading":"Additional features","docsApp.integrationBuilder.content.billing.copy.bottom.subheading":"After subscribing","docsApp.integrationBuilder.content.billing.copy.heading":"Prebuilt subscription page with Stripe Checkout","docsApp.integrationBuilder.content.billing.copy.title":"Subscription Checkout","docsApp.integrationBuilder.content.checkout.copy.body":"Explore a full, working code sample of an integration with \u003Ca\u003EStripe Checkout\u003C\u002Fa\u003E. The client- and server-side code redirects to a prebuilt payment page hosted on Stripe.","docsApp.integrationBuilder.content.checkout.copy.bottom.body":"You have a basic Checkout integration working. Learn how to customize the appearance of your checkout page.","docsApp.integrationBuilder.content.checkout.copy.bottom.heading":"Congratulations\u0021","docsApp.integrationBuilder.content.checkout.copy.bottom.nextSteps.one.body":"Set up a webhook to fulfill orders after a payment succeeds. Webhooks are the most reliable way to handle business-critical events.","docsApp.integrationBuilder.content.checkout.copy.bottom.nextSteps.one.heading":"Fulfillment","docsApp.integrationBuilder.content.checkout.copy.bottom.nextSteps.three.body":"Handle requests for refunds by using the Stripe API or Dashboard.","docsApp.integrationBuilder.content.checkout.copy.bottom.nextSteps.three.heading":"Refunds","docsApp.integrationBuilder.content.checkout.copy.bottom.nextSteps.two.body":"Learn how to move funds out of your Stripe account into your bank account.","docsApp.integrationBuilder.content.checkout.copy.bottom.nextSteps.two.heading":"Payouts","docsApp.integrationBuilder.content.checkout.copy.bottom.subheading":"After the payment","docsApp.integrationBuilder.content.checkout.copy.heading":"Prebuilt Checkout page","docsApp.integrationBuilder.content.checkout.copy.title":"Prebuilt Checkout page","docsApp.integrationBuilder.content.payments.copy.body":"Learn how to embed a custom Stripe payment form in your website or application. The client- and server-side code builds a checkout form to complete a card payment.","docsApp.integrationBuilder.content.payments.copy.bottom.body":"You are ready to accept card payments with Stripe. Continue with the steps below to add more features.","docsApp.integrationBuilder.content.payments.copy.bottom.heading":"Congratulations\u0021","docsApp.integrationBuilder.content.payments.copy.bottom.nextSteps.one.body":"Learn how to move funds out of your Stripe account into your bank account.","docsApp.integrationBuilder.content.payments.copy.bottom.nextSteps.one.heading":"Payouts","docsApp.integrationBuilder.content.payments.copy.bottom.nextSteps.three.body":"Set up a webhook to fulfill orders after a payment succeeds. Webhooks are the most reliable way to handle business-critical events.","docsApp.integrationBuilder.content.payments.copy.bottom.nextSteps.three.heading":"Fulfillment","docsApp.integrationBuilder.content.payments.copy.bottom.nextSteps.two.body":"Handle requests for refunds by using the Stripe API or Dashboard.","docsApp.integrationBuilder.content.payments.copy.bottom.nextSteps.two.heading":"Refunds","docsApp.integrationBuilder.content.payments.copy.bottom.subheading":"After the payment","docsApp.integrationBuilder.content.payments.copy.heading":"Custom payment flow","docsApp.integrationBuilder.content.payments.copy.title":"Custom payment flow","docsApp.integrationBuilder.content.terminal.copy.body":"Set up Stripe Terminal and use the simulated reader to emulate accepting in-person payments.","docsApp.integrationBuilder.content.terminal.copy.bottom.body":"Your Terminal integration is now set up to collect in-person payments. Next, test your current integration with a physical reader or integrate Stripe Terminal with your connect platform.","docsApp.integrationBuilder.content.terminal.copy.bottom.heading":"Congratulations\u0021","docsApp.integrationBuilder.content.terminal.copy.bottom.nextSteps.one.body":"Learn what it means to connect your app to a reader.","docsApp.integrationBuilder.content.terminal.copy.bottom.nextSteps.one.heading":"Connecting to a Reader","docsApp.integrationBuilder.content.terminal.copy.bottom.nextSteps.three.body":"Integrate Stripe Terminal with your Connect platform.","docsApp.integrationBuilder.content.terminal.copy.bottom.nextSteps.three.heading":"Connect","docsApp.integrationBuilder.content.terminal.copy.bottom.nextSteps.two.body":"Group and manage a fleet of readers by physical location.","docsApp.integrationBuilder.content.terminal.copy.bottom.nextSteps.two.heading":"Fleet Management","docsApp.integrationBuilder.content.terminal.copy.bottom.subheading":"Next steps","docsApp.integrationBuilder.content.terminal.copy.heading":"Accept in-person payments","docsApp.integrationBuilder.content.terminal.copy.title":"Accept in-person payments","docsApp.integrationBuilder.content.terminal.title":"Accept in-person payments","docsApp.integrationBuilder.content.webhooks.copy.body":"Learn how to set up and deploy a webhook to listen to events from Stripe. Use webhooks for post-payment commerce events such as sending custom email receipts, fulfilling orders, or updating your database.","docsApp.integrationBuilder.content.webhooks.copy.bottom.body":"You have a basic webhook endpoint ready to accept events from Stripe. Now add the application logic that your business needs to handle the events you care the most about. You can also extend your endpoint with the steps below to verify the authenticity of the requests.","docsApp.integrationBuilder.content.webhooks.copy.bottom.heading":"Congratulations\u0021","docsApp.integrationBuilder.content.webhooks.copy.bottom.nextSteps.one.body":"Learn how to deploy your webhook endpoint to production and handle events at scale by only sending the specific events you need.","docsApp.integrationBuilder.content.webhooks.copy.bottom.nextSteps.one.heading":"Going live","docsApp.integrationBuilder.content.webhooks.copy.bottom.nextSteps.three.body":"The Stripe CLI has several commands that can help test your Stripe application beyond webhooks.","docsApp.integrationBuilder.content.webhooks.copy.bottom.nextSteps.three.heading":"Stripe CLI","docsApp.integrationBuilder.content.webhooks.copy.bottom.nextSteps.two.body":"Understand best practices for maintaining your endpoint, such as managing retries or duplicate events.","docsApp.integrationBuilder.content.webhooks.copy.bottom.nextSteps.two.heading":"Best practices","docsApp.integrationBuilder.content.webhooks.copy.bottom.subheading":"Next steps","docsApp.integrationBuilder.content.webhooks.copy.heading":"Set up and deploy a webhook","docsApp.integrationBuilder.content.webhooks.copy.title":"Set up and deploy a webhook","docsApp.integrationBuilder.content.webhooks.title":"Build a webhook","docsApp.integrationBuilder.demo.appearancePicker.backgroundColor":"Background color","docsApp.integrationBuilder.demo.appearancePicker.primaryColor":"Primary color","docsApp.integrationBuilder.demo.appearancePicker.textColor":"Text color","docsApp.integrationBuilder.demo.appearancePicker.theme":"Theme","docsApp.integrationBuilder.demo.cardForms.auth":"Authentication required","docsApp.integrationBuilder.demo.cardForms.declined":"Payment is declined","docsApp.integrationBuilder.demo.cardForms.disabledDev":"Disabled in local dev","docsApp.integrationBuilder.demo.cardForms.makeTest":"Make a test payment","docsApp.integrationBuilder.demo.cardForms.payNow":"Pay now","docsApp.integrationBuilder.demo.cardForms.succeeds":"Payment succeeds","docsApp.integrationBuilder.demo.cardForms.testCards":"These test card numbers work with any CVC, postal code and future expiry date.","docsApp.integrationBuilder.demo.cardForms.testFailed":"Test payment failed","docsApp.integrationBuilder.demo.cardForms.testSuccessful":"Test payment successful","docsApp.integrationBuilder.demo.cardForms.tryAgain":"Try again","docsApp.integrationBuilder.demo.cardForms.unable":"Unable to pay","docsApp.integrationBuilder.demo.cardForms.viewDetails":"View payment details in the \u003Cbutton\u003EStripe Dashboard\u003C\u002Fbutton\u003E","docsApp.integrationBuilder.demo.checkout.canceledBody":"Create a new Checkout Session if your customer changes their order details before paying.","docsApp.integrationBuilder.demo.checkout.canceledHeader":"Checkout Session canceled","docsApp.integrationBuilder.demo.checkout.checkout":"Checkout","docsApp.integrationBuilder.demo.checkout.completedBody":"Listen for the \u0060payment_intent.succeeded\u0060 webhook event to know when to fulfill the order.","docsApp.integrationBuilder.demo.checkout.completedHeader":"Checkout Session completed","docsApp.integrationBuilder.demo.checkout.errorBody":"There was an error when loading this demo. Reload the page and try again.","docsApp.integrationBuilder.demo.checkout.errorHeader":"Error","docsApp.integrationBuilder.demo.checkout.tryAgain":"Try Again","docsApp.integrationBuilder.demo.paymentElement.emailLabel":"Email","docsApp.integrationBuilder.demo.paymentElement.payNow":"Pay now","docsApp.integrationBuilder.demo.paymentElement.paymentFailed":"Your payment was not successful, please try again.","docsApp.integrationBuilder.demo.paymentElement.paymentProcessing":"Your payment is processing.","docsApp.integrationBuilder.demo.paymentElement.paymentSucceeded":"Payment succeeded\u0021","docsApp.integrationBuilder.demo.paymentElement.tryAgain":"Try again","docsApp.integrationBuilder.demo.paymentElement.unexpectedError":"An error occurred. We're looking into it\u0021","docsApp.integrationBuilder.demo.paymentMethodPicker.acssDebit":"Canadian PADs","docsApp.integrationBuilder.demo.paymentMethodPicker.afterpayClearpay":"Afterpay \u002F Clearpay","docsApp.integrationBuilder.demo.paymentMethodPicker.alipay":"Alipay","docsApp.integrationBuilder.demo.paymentMethodPicker.bacsDebit":"Bacs Direct Debit","docsApp.integrationBuilder.demo.paymentMethodPicker.bancontact":"Bancontact","docsApp.integrationBuilder.demo.paymentMethodPicker.boleto":"Boleto","docsApp.integrationBuilder.demo.paymentMethodPicker.card":"Cards","docsApp.integrationBuilder.demo.paymentMethodPicker.disabledTooltip":"This payment method does not support {currency}. Try using a price in one of the following currencies: {supportedCurrencies}.","docsApp.integrationBuilder.demo.paymentMethodPicker.eps":"EPS","docsApp.integrationBuilder.demo.paymentMethodPicker.fpx":"FPX","docsApp.integrationBuilder.demo.paymentMethodPicker.giropay":"giropay","docsApp.integrationBuilder.demo.paymentMethodPicker.grabpay":"GrabPay","docsApp.integrationBuilder.demo.paymentMethodPicker.ideal":"iDEAL","docsApp.integrationBuilder.demo.paymentMethodPicker.mostPopular":"Most popular","docsApp.integrationBuilder.demo.paymentMethodPicker.oxxo":"OXXO","docsApp.integrationBuilder.demo.paymentMethodPicker.p24":"P24","docsApp.integrationBuilder.demo.paymentMethodPicker.sepaDebit":"SEPA Direct Debit","docsApp.integrationBuilder.demo.paymentMethodPicker.showAll":"Show all","docsApp.integrationBuilder.demo.paymentMethodPicker.showLess":"Show less","docsApp.integrationBuilder.demo.paymentMethodPicker.sofort":"Sofort","docsApp.integrationBuilder.demo.paymentMethodPicker.wechatPay":"WeChat Pay","docsApp.integrationBuilder.elementsEditor.background":"Background","docsApp.integrationBuilder.elementsEditor.editSections":"Edit sections of the payment form","docsApp.integrationBuilder.elementsEditor.font":"Font","docsApp.integrationBuilder.elementsEditor.fontFamily":"Font family","docsApp.integrationBuilder.elementsEditor.invalidColor":"Invalid color","docsApp.integrationBuilder.elementsEditor.textColor":"Text color","docsApp.integrationBuilder.feedback.feedback":"Feedback","docsApp.integrationBuilder.feedback.followUp":"Stripe can follow up with me via email","docsApp.integrationBuilder.feedback.submit":"Submit","docsApp.integrationBuilder.feedback.thanks":"Thank you for your feedback\u0021","docsApp.integrationBuilder.feedback.whatDidYouThink":"What did you think of this new guide format?","docsApp.integrationBuilder.narrowScreenWarning.body":"You might prefer the \u003Clink\u003Etext version of this guide\u003C\u002Flink\u003E.","docsApp.integrationBuilder.narrowScreenWarning.title":"This page is optimized for wider screens.","docsApp.integrationBuilder.response.sample":"Sample response from Stripe","docsApp.integrationBuilder.settings.backend":"Backend:","docsApp.integrationBuilder.settings.country":"Country:","docsApp.integrationBuilder.settings.frontend":"Frontend:","docsApp.integrationBuilder.settings.platform":"Architecture:","docsApp.integrationBuilder.settings.reader":"Reader:","docsApp.integrationBuilder.step.client":"Client","docsApp.integrationBuilder.step.server":"Server","docsApp.integrationBuilder.terminal.copied":"Copied","docsApp.integrationBuilder.terminal.copy":"Copy","docsApp.integrationBuilder.terminal.unable":"Unable to copy","docsApp.integrationGuidePageSelector.exclusivePricing":"Exclusive pricing","docsApp.integrationGuidePageSelector.inclusivePricing":"Inclusive pricing","docsApp.legacy.components.checkerMessages.authenticatedThePayment":"Authenticated the payment","docsApp.legacy.components.checkerMessages.collectedPmDetailsAndMandate":"Collected payment method details and mandate acknowledgement","docsApp.legacy.components.checkerMessages.confirmsPaymentIntent":"Submitted the payment to Stripe","docsApp.legacy.components.checkerMessages.createsCardWithElements":"Successfully collected card details with Stripe Elements","docsApp.legacy.components.checkerMessages.createsPaymentIntent":"Created a PaymentIntent with \u003CBodyMono\u003Eamount\u003C\u002FBodyMono\u003E and \u003CBodyMono\u003Ecurrency\u003C\u002FBodyMono\u003E","docsApp.legacy.components.checkerMessages.createsPaymentIntentSavedToCustomer":"Created a PaymentIntent with \u003CBodyMono\u003Epayment_method_types\u003C\u002FBodyMono\u003E, \u003CBodyMono\u003Ecustomer\u003C\u002FBodyMono\u003E, and \u003CBodyMono\u003Esetup_future_usage\u003C\u002FBodyMono\u003E","docsApp.legacy.components.checkerMessages.createsPaymentMethodAndMandateWithElements":"Successfully collected IBAN and mandate acknowledgement with Stripe Elements","docsApp.legacy.components.checkerMessages.disputeCreatedWebhook":"Optional: Successfully received \u003CBodyMono\u003Echarge.dispute.created\u003C\u002FBodyMono\u003E webhook. \u003CInlineLink\u003ELearn more about disputes.\u003C\u002FInlineLink\u003E","docsApp.legacy.components.checkerMessages.failsWithInsufficientFunds":"Failed with decline code \u003CBodyMono\u003Einsufficient_funds\u003C\u002FBodyMono\u003E. Make sure to show this error on your payment form","docsApp.legacy.components.checkerMessages.handlesPaymentIntentFailure":"Successfully received the \u003CBodyMono\u003Epayment_intent.payment_failed\u003C\u002FBodyMono\u003E webhook","docsApp.legacy.components.checkerMessages.handlesPaymentIntentSuccess":"Successfully received the \u003CBodyMono\u003Epayment_intent.succeeded\u003C\u002FBodyMono\u003E webhook","docsApp.legacy.components.checkerMessages.savedPmDetailsToCustomer":"Saved the payment method details to a Customer","docsApp.loggedIn":"You are logged in. The commands executed here will affect test data.","docsApp.maximize":"Maximize","docsApp.minimize":"Minimize","docsApp.notLoggedIn":"You are not logged in. You are modifing a sample account.","docsApp.popoutWindow":"Open as separate window","docsApp.sdk.bodyreate-location.heading":"To get started, provide your ConnectionTokenProvider. You can only call \u003Ccode\u003EsetTokenProvider\u003C\u002Fcode\u003E once in your app, and must call it before accessing \u003Ccode\u003ETerminal.shared\u003C\u002Fcode\u003E.","docsApp.shell.countrySelector.aria":"Change the country setting","docsApp.shell.localeSelector.aria":"Change the language setting","docsApp.showTerminal":"Try it online","docsApp.stripeShell.hide":"Hide","docsApp.stripeShell.loggedOutMessage":"You must \u003CLogInLink\u003Elog in\u003C\u002FLogInLink\u003E to use the Stripe Shell.","docsApp.stripeShell.mobileDeviceNotice":"The Stripe Shell is best experienced on desktop.","docsApp.stripeShell.triggerHelp":"\nTrigger specific webhook events to be sent. Webhooks events created through\nthe trigger command will also create all necessary side-effect events that are\nneeded to create the triggered event as well as the corresponding API objects.\n\nSupported events:{supportedEvents}\n\nUsage:\n stripe trigger [event]\n\nExample:\n stripe trigger payment_intent.created\n\nFlags: \u0028not yet supported\u0029\n --add stringArray Add parameters to the trigger\n --edit Edit the trigger directly in your default IDE\n --override stringArray Override parameters in the trigger\n --raw string Raw fixture in string format to replace all default fixtures\n --remove stringArray Remove parameters from the trigger\n --skip stringArray Skip specific steps in the trigger\n","docsApp.stripeShellFeedback.close":"Close","docsApp.stripeShellFeedback.title":"Feedback on your developer experience","docsApp.stripeShellShortcut.addPane":"Add new pane","docsApp.stripeShellShortcut.clearPrompt":"Clear the prompt","docsApp.stripeShellShortcut.clearTerminalOutput":"Clear terminal output","docsApp.stripeShellShortcut.close":"Close","docsApp.stripeShellShortcut.copy":"Copy","docsApp.stripeShellShortcut.cursorToBeginning":"Move cursor to the beginning of the prompt","docsApp.stripeShellShortcut.cursorToEnd":"Move cursor to the end of the prompt","docsApp.stripeShellShortcut.deletePreviousWord":"Delete previous word","docsApp.stripeShellShortcut.focusNextPane":"Focus next pane","docsApp.stripeShellShortcut.focusPreviousPane":"Focus previous pane","docsApp.stripeShellShortcut.highlightSuggestion":"Highlight next \u002F previous suggestion","docsApp.stripeShellShortcut.moveCursorByCharacter":"Move the cursor left \u002F right by one character","docsApp.stripeShellShortcut.nextPreviousHistory":"Next \u002F Previous history","docsApp.stripeShellShortcut.paste":"Paste","docsApp.stripeShellShortcut.removeCharacterUnderCursor":"Remove the character under the cursor","docsApp.stripeShellShortcut.removeCharactersToEndOfPrompt":"Remove the characters from the cursor to the end of the prompt","docsApp.stripeShellShortcut.tipLabel":"Shortcuts","docsApp.stripeShellShortcut.title":"Keyboard shortcuts","docsApp.stripeShellShortcut.toggleShell":"Expand \u002F Minimize the Stripe Shell","docsApp.subscriptionLifecycleDiagram.instructions":"\nIn the diagram, click \u003CEmphasize\u003EPayment succeeds\u003C\u002FEmphasize\u003E or\n\u003CEmphasize\u003EPayment fails\u003C\u002FEmphasize\u003E to see the API calls and webhook\nevents associated with the lifecycle of a subscription. You can reset\nthe diagram at any time by either closing this shell or clicking the\n\u003CEmphasize\u003EReset diagram\u003C\u002FEmphasize\u003E button.\n","docsApp.subscriptionLifecycleDiagram.resetVisualization":"Reset diagram","docsApp.subscriptionLifecycleDiagram.startVisualization":"Visualize with Stripe Shell","docsApp.success.continue":"Continue","docsApp.tax_code_details.txcd_00000000.description":"Any nontaxable good or service which can be used to ensure no tax is applied, even for jurisdictions that impose a tax.","docsApp.tax_code_details.txcd_00000000.name":"Nontaxable","docsApp.tax_code_details.txcd_10000000.description":"A digital service provided mainly through the internet with minimal human involvement, relying on information technology. Consider more specific categories like software, digital goods, cloud services, or website services for your product \u0028especially if you sell in the US\u0029. If you stay with this category, taxes will be similar to those for a generic digital item like downloaded music.","docsApp.tax_code_details.txcd_10000000.name":"General - Electronically Supplied Services","docsApp.tax_code_details.txcd_10010001.description":"Cloud service offering infrastructure resources \u0028specifically server storage, RAM, and CPU usage\u0029 over the internet. This offering is intended for personal use, rather than for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10010001.name":"Infrastructure as a service \u0028IaaS\u0029 - personal use","docsApp.tax_code_details.txcd_10101000.description":"Cloud service offering infrastructure resources \u0028specifically server storage, RAM, and CPU usage\u0029 over the internet. This offering is intended for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10101000.name":"Infrastructure as a service \u0028IaaS\u0029 - business use","docsApp.tax_code_details.txcd_10102000.description":"Cloud service providing a platform for users to develop, run, and manage applications. This offering is intended for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10102000.name":"Platform as a service \u0028PaaS\u0029 - business use","docsApp.tax_code_details.txcd_10102001.description":"Cloud service providing a platform for users to develop, run, and manage applications. This offering is intended for personal use, rather than for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10102001.name":"Platform as a Service \u0028PaaS\u0029 - personal use","docsApp.tax_code_details.txcd_10103000.description":"Cloud services software delivered over the internet. The software isn't customized for a specific buyer and they don't download anything. The software is intended for personal use, rather than for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10103000.name":"Software as a service \u0028SaaS\u0029 - personal use","docsApp.tax_code_details.txcd_10103001.description":"Cloud services software delivered over the internet. The software isn't customized for a specific buyer and they don't download anything. The software is intended for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10103001.name":"Software as a service \u0028SaaS\u0029 - business use","docsApp.tax_code_details.txcd_10103100.description":"Cloud services software delivered over the internet. The software isn't customized for a specific buyer and this model assumes an electronic transfer to the buyer, such as an app download. The software is intended for personal use, rather than for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10103100.name":"Software as a service \u0028SaaS\u0029 - electronic download - personal use","docsApp.tax_code_details.txcd_10103101.description":"Cloud services software delivered over the internet. The software isn't customized for a specific buyer and this model assumes an electronic transfer to the buyer, such as an app download. The software is intended for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10103101.name":"Software as a service \u0028SaaS\u0029 - electronic download - business use","docsApp.tax_code_details.txcd_10104001.description":"Cloud service providing business process outsourcing services over the internet.","docsApp.tax_code_details.txcd_10104001.name":"Cloud-based business process as a service","docsApp.tax_code_details.txcd_10201000.description":"Video or electronic games in the common sense that are transferred electronically. These goods are downloaded to a device with permanent access granted. This does not include games that are considered betting, gambling, lottery, etc.","docsApp.tax_code_details.txcd_10201000.name":"Video Games - downloaded - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10201001.description":"Video or electronic games in the common sense that are transferred electronically. These goods are downloaded to a device with access that expires after a stated period of time. This does not include games that are considered betting, gambling, lottery, etc.","docsApp.tax_code_details.txcd_10201001.name":"Video Games - downloaded - non subscription - with limited rights","docsApp.tax_code_details.txcd_10201002.description":"Video or electronic games in the common sense that are transferred electronically. These goods are downloaded to a device with access that is conditioned upon continued subscription payment. This does not include games that are considered betting, gambling, lottery, etc.","docsApp.tax_code_details.txcd_10201002.name":"Video Games - downloaded - subscription - with conditional rights","docsApp.tax_code_details.txcd_10201003.description":"Video or electronic games in the common sense that are transferred electronically. These goods are streamed to a device with access that expires after a stated period of time. This does not include games that are considered betting, gambling, lottery, etc.","docsApp.tax_code_details.txcd_10201003.name":"Video Games - streamed - non subscription - with limited rights","docsApp.tax_code_details.txcd_10201004.description":"Video or electronic games in the common sense that are transferred electronically. These goods are streamed to a device with access that is conditioned upon continued subscription payment. This does not include games that are considered betting, gambling, lottery, etc.","docsApp.tax_code_details.txcd_10201004.name":"Video Games - streamed - subscription - with conditional rights","docsApp.tax_code_details.txcd_10202000.description":"Prewritten \u0028\"canned\"\u0029 software that the buyer downloads. The software is intended for personal use, rather than for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10202000.name":"Downloadable Software - personal use","docsApp.tax_code_details.txcd_10202001.description":"Prewritten \u0028\"canned\"\u0029 software that the buyer downloads used for non-recreational purposes, such as antivirus, database, educational, financial, word processing, etc. The software is intended for personal use, rather than for consumption in a commercial enterprise. Note: The distinction between business use and personal use for this tax code is relevant only if you are transacting business in the US.","docsApp.tax_code_details.txcd_10202001.name":"Downloadable Software - non-recreational - personal use","docsApp.tax_code_details.txcd_10202003.description":"Prewritten \u0028\"canned\"\u0029 software that the buyer downloads. The software is intended for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10202003.name":"Downloadable Software - business use","docsApp.tax_code_details.txcd_10203000.description":"Custom software that the buyer downloads. The software is intended for personal use, rather than for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10203000.name":"Downloadable Software - custom - personal use","docsApp.tax_code_details.txcd_10203001.description":"Custom software that the buyer downloads. The software is intended for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10203001.name":"Downloadable Software - custom - business use","docsApp.tax_code_details.txcd_10301000.description":"The recording of a book read aloud and sold with unlimited usage \u0028e.g., a downloaded audio copy of The High Growth Handbook\u0029.","docsApp.tax_code_details.txcd_10301000.name":"Audiobook","docsApp.tax_code_details.txcd_10302000.description":"Works that are generally recognized in the ordinary and usual sense as books and are transferred electronically. These goods are downloaded to a device with permanent access granted. These goods include novels, autobiographies, encyclopedias, dictionaries, repair manuals, phone directories, business directories, zip code directories, cookbooks, etc.","docsApp.tax_code_details.txcd_10302000.name":"Digital Books - downloaded - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10302001.description":"Works that are generally recognized in the ordinary and usual sense as books and are transferred electronically. These goods are downloaded to a device with access that expires after a stated period of time. These goods include novels, autobiographies, encyclopedias, dictionaries, repair manuals, phone directories, business directories, zip code directories, cookbooks, etc.","docsApp.tax_code_details.txcd_10302001.name":"Digital Books - downloaded - non subscription - with limited rights","docsApp.tax_code_details.txcd_10302002.description":"Works that are generally recognized in the ordinary and usual sense as books and are transferred electronically. These goods are downloaded to a device with access that is conditioned upon continued subscription payment. These goods include novels, autobiographies, encyclopedias, dictionaries, repair manuals, phone directories, business directories, zip code directories, cookbooks, etc.","docsApp.tax_code_details.txcd_10302002.name":"Digital Books - downloaded - subscription - with conditional rights","docsApp.tax_code_details.txcd_10302003.description":"Works that are generally recognized in the ordinary and usual sense as books and are transferred electronically. These goods are viewable \u0028but not downloadable\u0029 on a device with access that is conditioned upon continued subscription payment. These goods include novels, autobiographies, encyclopedias, dictionaries, repair manuals, phone directories, business directories, zip code directories, cookbooks, etc.","docsApp.tax_code_details.txcd_10302003.name":"Digital Books - viewable only - subscription - with conditional rights","docsApp.tax_code_details.txcd_10303000.description":"A digital version of a traditional periodical published at regular intervals with the entire publication or individual articles downloaded to a device with access that is conditioned upon continued subscription payment.","docsApp.tax_code_details.txcd_10303000.name":"Digital Magazines\u002FPeriodicals - downloadable - subscription - with conditional rights","docsApp.tax_code_details.txcd_10303001.description":"A digital version of a traditional magazine published at regular intervals. The publication is accessed via a subscription which also entitles the purchaser to physical copies of the media.","docsApp.tax_code_details.txcd_10303001.name":"Digital Magazines\u002FPeriodicals - subscription tangible and digital","docsApp.tax_code_details.txcd_10303002.description":"A digital version of a traditional periodical published at regular intervals with the entire publication or individual articles viewable \u0028but not downloadable\u0029 on a device with access that is conditioned upon continued subscription payment.","docsApp.tax_code_details.txcd_10303002.name":"Digital Magazines\u002FPeriodicals - viewable only - subscription - with conditional rights","docsApp.tax_code_details.txcd_10303100.description":"A digital version of a traditional periodical published at regular intervals with the entire publication or individual articles downloaded to a device with permanent access granted. The publication is accessed without a subscription.","docsApp.tax_code_details.txcd_10303100.name":"Digital Magazines\u002FPeriodicals - downloadable - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10303101.description":"A digital version of a traditional periodical published at regular intervals with the entire publication or individual articles viewable \u0028but not downloadable\u0029 on a device with access that expires after a stated period of time. The publication is accessed without a subscription.","docsApp.tax_code_details.txcd_10303101.name":"Digital Magazines\u002FPeriodicals - viewable only - non subscription - with limited rights","docsApp.tax_code_details.txcd_10303102.description":"A digital version of a traditional periodical published at regular intervals with the entire publication or individual articles viewable \u0028but not downloadable\u0029 on a device with permanent access granted. The publication is accessed without a subscription.","docsApp.tax_code_details.txcd_10303102.name":"Digital Magazines\u002FPeriodicals - viewable only - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10303104.description":"A digital version of a traditional periodical published at regular intervals with the entire publication or individual articles downloaded to a device with access that expires after a stated period of time. The publication is accessed without a subscription.","docsApp.tax_code_details.txcd_10303104.name":"Digital Magazines\u002FPeriodicals - downloadable - non subscription - with limited rights","docsApp.tax_code_details.txcd_10304000.description":"A digital version of a traditional newspaper published at regular intervals with the entire publication or individual articles downloaded to a device with permanent access granted. The publication is accessed without a subscription.","docsApp.tax_code_details.txcd_10304000.name":"Digital Newspapers - downloadable - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10304001.description":"A digital version of a traditional newspaper published at regular intervals with the entire publication or individual articles viewable \u0028but not downloadable\u0029 on a device with access that expires after a stated period of time. The publication is accessed without a subscription.","docsApp.tax_code_details.txcd_10304001.name":"Digital Newspapers - viewable only - non subscription - with limited rights","docsApp.tax_code_details.txcd_10304002.description":"A digital version of a traditional newspaper published at regular intervals with the entire publication or individual articles viewable \u0028but not downloadable\u0029 on a device with permanent access granted. The publication is accessed without a subscription.","docsApp.tax_code_details.txcd_10304002.name":"Digital Newspapers - viewable only - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10304003.description":"A digital version of a traditional newspaper published at regular intervals with the entire publication or individual articles downloaded to a device with access that expires after a stated period of time. The publication is accessed without a subscription.","docsApp.tax_code_details.txcd_10304003.name":"Digital Newspapers - downloadable - non subscription - with limited rights","docsApp.tax_code_details.txcd_10304100.description":"A digital version of a traditional newspaper published at regular intervals with the entire publication or individual articles downloaded to a device with access that is conditioned upon continued subscription payment.","docsApp.tax_code_details.txcd_10304100.name":"Digital Newspapers - downloadable - subscription - with conditional rights","docsApp.tax_code_details.txcd_10304101.description":"A digital version of a traditional newspaper published at regular intervals. The publication is accessed via a subscription which also entitles the purchaser to physical copies of the media.","docsApp.tax_code_details.txcd_10304101.name":"Digital Newspapers - subscription tangible and digital","docsApp.tax_code_details.txcd_10304102.description":"A digital version of a traditional newspaper published at regular intervals with the entire publication or individual articles viewable \u0028but not downloadable\u0029 on a device with access that is conditioned upon continued subscription payment.","docsApp.tax_code_details.txcd_10304102.name":"Digital Newspapers - viewable only - subscription - with conditional rights","docsApp.tax_code_details.txcd_10305000.description":"Works that are required as part of a formal academic education program and are transferred electronically. These goods are downloaded to a device with access that expires after a stated period of time.","docsApp.tax_code_details.txcd_10305000.name":"Digital School Textbooks - downloaded - non subscription - with limited rights","docsApp.tax_code_details.txcd_10305001.description":"Works that are required as part of a formal academic education program and are transferred electronically. These goods are downloaded to a device with permanent access granted.","docsApp.tax_code_details.txcd_10305001.name":"Digital School Textbooks - downloaded - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10401000.description":"Works that result from the fixation of a series of musical, spoken, or other sounds that are transferred electronically. These goods are streamed to a device with access that expires after a stated period of time. These goods include prerecorded or live music, prerecorded or live readings of books or other written materials, prerecorded or live speeches, ringtones, or other sound recordings, but not including audio greeting cards.","docsApp.tax_code_details.txcd_10401000.name":"Digital Audio Works - streamed - non subscription - with limited rights","docsApp.tax_code_details.txcd_10401001.description":"Works that result from the fixation of a series of musical, spoken, or other sounds that are transferred electronically. These goods are downloaded to a device with access that expires after a stated period of time. These goods include pre-recorded or live music, pre-recorded or live readings of books or other written materials, pre-recorded or live speeches, ringtones, or other sound recordings, but not including audio greeting cards. Note the presence of PTC 10301000 \u0028Audiobook\u0029, a more granular option for downloaded audiobooks.","docsApp.tax_code_details.txcd_10401001.name":"Digital Audio Works - downloaded - non subscription - with limited rights","docsApp.tax_code_details.txcd_10401100.description":"Works that result from the fixation of a series of musical, spoken, or other sounds that are transferred electronically. These goods are downloaded to a device with permanent access granted. These goods include pre-recorded or live music, pre-recorded or live readings of books or other written materials, pre-recorded or live speeches, ringtones, or other sound recordings, but not including audio greeting cards. Note the presence of PTC 10301000 \u0028Audiobook\u0029, a more granular option for downloaded audiobooks.","docsApp.tax_code_details.txcd_10401100.name":"Digital Audio Works - downloaded - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10401200.description":"Works that result from the fixation of a series of musical, spoken, or other sounds that are transferred electronically. These goods are streamed to a device with access that is conditioned upon continued subscription payment. These goods include prerecorded or live music, prerecorded or live readings of books or other written materials, prerecorded or live speeches, ringtones, or other sound recordings, but not including audio greeting cards.","docsApp.tax_code_details.txcd_10401200.name":"Digital Audio Works - streamed - subscription - with conditional rights","docsApp.tax_code_details.txcd_10402000.description":"A series of related images which, when shown in succession, impart an impression of motion, together with accompanying sounds, if any. These goods are streamed to a device with access that expires after a stated period of time. These goods include motion pictures, music videos, animations, news and entertainment programs, and live events, but do not include video greeting cards or video or electronic games.","docsApp.tax_code_details.txcd_10402000.name":"Digital Audio Visual Works - streamed - non subscription - with limited rights","docsApp.tax_code_details.txcd_10402100.description":"A series of related images which, when shown in succession, impart an impression of motion, together with accompanying sounds, if any. These goods are downloaded to a device with permanent access granted. These goods include motion pictures, music videos, animations, news and entertainment programs, and live events, but do not include video greeting cards or video or electronic games.","docsApp.tax_code_details.txcd_10402100.name":"Digital Audio Visual Works - downloaded - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10402110.description":"A series of related images which, when shown in succession, impart an impression of motion, together with accompanying sounds, if any. These goods are downloaded to a device with access that expires after a stated period of time. These goods include motion pictures, music videos, animations, news and entertainment programs, and live events, but do not include video greeting cards or video or electronic games.","docsApp.tax_code_details.txcd_10402110.name":"Digital Audio Visual Works - downloaded - non subscription - with limited rights","docsApp.tax_code_details.txcd_10402200.description":"A series of related images which, when shown in succession, impart an impression of motion, together with accompanying sounds, if any. These goods are streamed to a device with access that is conditioned upon continued subscription payment. These goods include motion pictures, music videos, animations, news and entertainment programs, and live events, but do not include video greeting cards or video or electronic games.","docsApp.tax_code_details.txcd_10402200.name":"Digital Audio Visual Works - streamed - subscription - with conditional rights","docsApp.tax_code_details.txcd_10402300.description":"An audio visual work of a live performance streamed over the internet that you can only access for a limited time during the performance \u0028e.g., a live concert stream\u0029.","docsApp.tax_code_details.txcd_10402300.name":"Digital Video Streaming - live events - limited use","docsApp.tax_code_details.txcd_10501000.description":"Digital images that are downloaded to a device with permanent access granted.","docsApp.tax_code_details.txcd_10501000.name":"Digital Photographs\u002FImages - downloaded - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10502000.description":"Gift card or gift certificate that you purchase and receive electronically and is assumed to be multi-purpose.","docsApp.tax_code_details.txcd_10502000.name":"Gift Card","docsApp.tax_code_details.txcd_10503000.description":"Individual digital news articles, newsletters, and other stand-alone documents. These goods are downloaded to a device with permanent access granted. These publications are accessed without a subscription.","docsApp.tax_code_details.txcd_10503000.name":"Digital other news or documents - downloadable - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10503001.description":"Individual digital news articles, newsletters, and other stand-alone documents. These goods are downloaded to a device with access that expires after a stated period of time.","docsApp.tax_code_details.txcd_10503001.name":"Digital other news or documents - downloadable - non subscription - with limited rights","docsApp.tax_code_details.txcd_10503002.description":"Individual digital news articles, newsletters, and other stand-alone documents. These goods are downloaded to a device with access that is conditioned upon continued subscription payment.","docsApp.tax_code_details.txcd_10503002.name":"Digital other news or documents - downloadable - subscription - with conditional rights","docsApp.tax_code_details.txcd_10503003.description":"Individual digital news articles, newsletters, and other stand-alone documents. These goods are viewable \u0028but not downloadable\u0029 on a device with access that expires after a stated period of time.","docsApp.tax_code_details.txcd_10503003.name":"Digital other news or documents - viewable only - non subscription - with limited rights","docsApp.tax_code_details.txcd_10503004.description":"Individual digital news articles, newsletters, and other stand-alone documents. These goods are viewable \u0028but not downloadable\u0029 on a device with permanent access granted.","docsApp.tax_code_details.txcd_10503004.name":"Digital other news or documents - viewable only - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10503005.description":"Individual digital news articles, newsletters, and other stand-alone documents. These goods are viewable \u0028but not downloadable\u0029 on a device with access that is conditioned upon continued subscription payment.","docsApp.tax_code_details.txcd_10503005.name":"Digital other news or documents - viewable only - subscription - with conditional rights","docsApp.tax_code_details.txcd_10504000.description":"Electronic software documentation or user manuals - For custom software \u0026 delivered electronically.","docsApp.tax_code_details.txcd_10504000.name":"Electronic software documentation or user manuals - Custom, electronic delivery","docsApp.tax_code_details.txcd_10504003.description":"Electronic software documentation or user manuals - For prewritten software \u0026 delivered electronically.","docsApp.tax_code_details.txcd_10504003.name":"Electronic software documentation or user manuals - Prewritten, electronic delivery","docsApp.tax_code_details.txcd_10505000.description":"The final art used for actual reproduction by photomechanical or other processes or for display purposes, but does not include website or home page design, and that is transferred electronically. These goods are downloaded to a device with access that expires after a stated period of time. These goods include drawings, paintings, designs, photographs, lettering, paste-ups, mechanicals, assemblies, charts, graphs, illustrative materials, etc.","docsApp.tax_code_details.txcd_10505000.name":"Digital Finished Artwork - downloaded - non subscription - with limited rights","docsApp.tax_code_details.txcd_10505001.description":"The final art used for actual reproduction by photomechanical or other processes or for display purposes, but does not include website or home page design, and that is transferred electronically. These goods are downloaded to a device with permanent access granted. These goods include drawings, paintings, designs, photographs, lettering, paste-ups, mechanicals, assemblies, charts, graphs, illustrative materials, etc.","docsApp.tax_code_details.txcd_10505001.name":"Digital Finished Artwork - downloaded - non subscription - with permanent rights","docsApp.tax_code_details.txcd_10505002.description":"The final art used for actual reproduction by photomechanical or other processes or for display purposes, but does not include website or home page design, and that is transferred electronically. These goods are downloaded to a device with access that is conditioned upon continued subscription payment. These goods include drawings, paintings, designs, photographs, lettering, paste-ups, mechanicals, assemblies, charts, graphs, illustrative materials, etc.","docsApp.tax_code_details.txcd_10505002.name":"Digital Finished Artwork - downloaded - subscription - with conditional rights","docsApp.tax_code_details.txcd_10506000.description":"An electronic greeting \"card\" typically sent via email that contains an audio only message.","docsApp.tax_code_details.txcd_10506000.name":"Digital Greeting Cards - Audio Only","docsApp.tax_code_details.txcd_10506001.description":"An electronic greeting \"card\" typically sent via email that contains a series of related images which, when shown in succession, impart an impression of motion, together with accompanying sounds, if any.","docsApp.tax_code_details.txcd_10506001.name":"Digital Greeting Cards - Audio Visual","docsApp.tax_code_details.txcd_10506002.description":"An electronic greeting \"card\" typically sent via email that contains only static images or text, rather than an audio visual or audio only experience.","docsApp.tax_code_details.txcd_10506002.name":"Digital Greeting Cards - Static text and\u002For images only","docsApp.tax_code_details.txcd_10701000.description":"Online advertising services such as creating and uploading advertisements on the internet. This is a standalone service that doesn't involve the sale of tangible personal property.","docsApp.tax_code_details.txcd_10701000.name":"Website Advertising","docsApp.tax_code_details.txcd_10701100.description":"A service to enable a customer's website to be accessible on the internet.","docsApp.tax_code_details.txcd_10701100.name":"Website Hosting","docsApp.tax_code_details.txcd_10701200.description":"A service to design a website or webpage.","docsApp.tax_code_details.txcd_10701200.name":"Website Design","docsApp.tax_code_details.txcd_10701300.description":"An online service that allows a customer to create, transform, process or access data electronically.","docsApp.tax_code_details.txcd_10701300.name":"Website Data Processing","docsApp.tax_code_details.txcd_10701400.description":"An online service furnishing information to customers, including online search and data comparison.","docsApp.tax_code_details.txcd_10701400.name":"Website Information Services","docsApp.tax_code_details.txcd_10804001.description":"A series of related images which, when shown in succession, impart an impression of motion, together with accompanying sounds, if any. These goods are streamed and\u002For downloaded to a device with access that is conditioned upon continued subscription payment. Any downloads received while under subscription remain the permanent property of the subscriber. These goods include motion pictures, music videos, animations, news and entertainment programmes, and live events, but do not include video greeting cards or video or electronic games. These goods further include self-study web-based training services that impart content via audio visual goods described here.","docsApp.tax_code_details.txcd_10804001.name":"Digital Audio Visual Works - bundle - downloaded with permanent rights and streamed - subscription - with conditional rights","docsApp.tax_code_details.txcd_10804002.description":"A series of related images which, when shown in succession, impart an impression of motion, together with accompanying sounds, if any. These goods can be streamed and\u002For downloaded to a device with access that expires after a stated period of time. These goods include motion pictures, music videos, animations, news and entertainment programs, and live events, but do not include video greeting cards or video or electronic games.","docsApp.tax_code_details.txcd_10804002.name":"Digital Audio Visual Works - bundle - downloaded with limited rights and streamed - non subscription","docsApp.tax_code_details.txcd_10804003.description":"A series of related images which, when shown in succession, impart an impression of motion, together with accompanying sounds, if any. These goods can be streamed and\u002For downloaded to a device with permanent access granted. These goods include motion pictures, music videos, animations, news and entertainment programs, and live events, but do not include video greeting cards or video or electronic games.","docsApp.tax_code_details.txcd_10804003.name":"Digital Audio Visual Works - bundle - downloaded with permanent rights and streamed - non subscription","docsApp.tax_code_details.txcd_20010003.description":"A charge for the cleaning of tangible personal property, other than motor vehicles or clothing.","docsApp.tax_code_details.txcd_20010003.name":"Cleaning of Tangible Personal Property","docsApp.tax_code_details.txcd_20010004.description":"A charge for janitorial services to commercial buildings, including the cleaning of floors, carpets, walls, windows, fixtures, exterior cleaning, etc.","docsApp.tax_code_details.txcd_20010004.name":"Commercial Cleaning Services","docsApp.tax_code_details.txcd_20010006.description":"A charge for custodial services to residential structures, including the cleaning of floors, carpets, walls, windows, appliances, furniture, fixtures, exterior cleaning, etc. No Tangible Personal Property is transferred.","docsApp.tax_code_details.txcd_20010006.name":"Residential Cleaning Services","docsApp.tax_code_details.txcd_20020009.description":"A labor charge to install hardware where the installed property isn't considered permanently attached to the real property.","docsApp.tax_code_details.txcd_20020009.name":"Installation of Hardware - Non-permanent","docsApp.tax_code_details.txcd_20020010.description":"A labor charge to install hardware where the installed property is permanently attached to the real property.","docsApp.tax_code_details.txcd_20020010.name":"Installation of Hardware - Permanent","docsApp.tax_code_details.txcd_20020018.description":"A charge separately stated from any sale of the product itself for the installation of tangible personal property. This is a labour charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20020018.name":"Installation of Tangible Personal Property","docsApp.tax_code_details.txcd_20030000.description":"General category for services. It should be used only when there is no more specific services category. In the European Union, the default rule for business-to-consumer sales \u0028B2C\u0029 is the location of the seller, whereas for business-to-business sales \u0028B2B\u0029 – the location of the buyer.","docsApp.tax_code_details.txcd_20030000.name":"General - Services","docsApp.tax_code_details.txcd_20030002.description":"Services provided by a facility for overnight care of an animal not related to veterinary care.","docsApp.tax_code_details.txcd_20030002.name":"Pet Boarding","docsApp.tax_code_details.txcd_20030003.description":"Grooming services for an animal such as haircuts, bathing, nail trimming, and flea dips.","docsApp.tax_code_details.txcd_20030003.name":"Pet Grooming","docsApp.tax_code_details.txcd_20040002.description":"A charge for personal care services. Please select a more granular product tax category where appropriate.","docsApp.tax_code_details.txcd_20040002.name":"Personal Care Services","docsApp.tax_code_details.txcd_20060000.description":"A charge for a service performed by providers considered professionals due to the extensive initial and continuing education and\u002For training requirements, and the likelihood of state or federal licensing requirements. Choose this product tax code for any professional service offering in which a more detailed code is not available.","docsApp.tax_code_details.txcd_20060000.name":"Professional Services","docsApp.tax_code_details.txcd_20060009.description":"A service that allows data to be created, transformed, where the service is not performed online. Select \"Website data processing\" if the service is performed online and data is accessed by the customer electronically.","docsApp.tax_code_details.txcd_20060009.name":"Data Processing","docsApp.tax_code_details.txcd_20060022.description":"Planning and design of interior spaces, including preparation of layout drawings, furniture arranging, design planning and purchasing of furniture, fixtures, and cabinetry, staging, lighting and sound design.","docsApp.tax_code_details.txcd_20060022.name":"Interior Decorating","docsApp.tax_code_details.txcd_20060035.description":"Services which include, but are not limited to, editing, letter writing, proofreading, resume writing, typing or word processing. Doesn't include court reporting and stenographic services.","docsApp.tax_code_details.txcd_20060035.name":"Secretarial\u002FEditing Services","docsApp.tax_code_details.txcd_20060042.description":"Services relating to providing personnel, on a temporary basis, to perform work or labour under the supervision or control of another.","docsApp.tax_code_details.txcd_20060042.name":"Temporary Help Services","docsApp.tax_code_details.txcd_20060044.description":"A charge for training sessions that provide instruction to the buyer. This includes education sessions or workshops but excludes physical exercise or workouts.","docsApp.tax_code_details.txcd_20060044.name":"Training","docsApp.tax_code_details.txcd_20060045.description":"Live web-based training. This does not include video replays of the instruction or course. This service allows for a level of participation that is substantially similar to an in-person training on the same subject matter.","docsApp.tax_code_details.txcd_20060045.name":"Training Services - Live Virtual","docsApp.tax_code_details.txcd_20060052.description":"Academic classes provided by traditional private education establishments and organizations.","docsApp.tax_code_details.txcd_20060052.name":"Educational Services","docsApp.tax_code_details.txcd_20060058.description":"Self-study web-based training, not instructor-led. This does not include downloads or streaming of video replays.","docsApp.tax_code_details.txcd_20060058.name":"Training Services - Self-study Web-based","docsApp.tax_code_details.txcd_20060059.description":"Personal or small group teaching, designed to help people who need extra help with their studies.","docsApp.tax_code_details.txcd_20060059.name":"Tutoring","docsApp.tax_code_details.txcd_20070006.description":"A charge for services related to the eradication of insects, rodents, and other pests.","docsApp.tax_code_details.txcd_20070006.name":"Extermination Services","docsApp.tax_code_details.txcd_20070007.description":"A charge for services related to the maintenance of grounds.","docsApp.tax_code_details.txcd_20070007.name":"Landscaping","docsApp.tax_code_details.txcd_20070010.description":"A charge for services related to the painting of surfaces or the application of wallpaper.","docsApp.tax_code_details.txcd_20070010.name":"Painting \u0026 Wallpapering Services","docsApp.tax_code_details.txcd_20080005.description":"A charge to repair or restore tangible personal property that was broken, worn, damaged, defective, or malfunctioning. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20080005.name":"Repair of Tangible Personal Property","docsApp.tax_code_details.txcd_20080007.description":"A charge to repair or maintain real property including repairs to HVAC, electrical, flooring, etc.","docsApp.tax_code_details.txcd_20080007.name":"Repairs to Real Property","docsApp.tax_code_details.txcd_20090004.description":"A charge to a non-commercial customer for the cleaning or renovating clothing by immersion and agitation, spraying, vaporization, or immersion only, in a volatile, commercially moisture-free solvent or by the use of a volatile or inflammable product. This does not include the use of a self-service coin \u0028or credit card\u0029 operated cleaning machine.","docsApp.tax_code_details.txcd_20090004.name":"Dry Cleaning","docsApp.tax_code_details.txcd_30011000.description":"Apparel and footwear for people made for general use.","docsApp.tax_code_details.txcd_30011000.name":"Clothing \u0026 Footwear","docsApp.tax_code_details.txcd_30011100.description":"Clothing designed for, and not normally worn except while attending, a formal function, including tuxedos, bridal gowns, and evening gowns.","docsApp.tax_code_details.txcd_30011100.name":"Formal or Special Occasion Wear","docsApp.tax_code_details.txcd_30011200.description":"Children's clothing and footwear including general purpose articles intended to be worn by a person based on certain size or age requirements.","docsApp.tax_code_details.txcd_30011200.name":"Children's clothing and footwear","docsApp.tax_code_details.txcd_30021000.description":"Clothing, footwear, and accessories worn on a person's body while participating in recreational or sporting activities, and which are not typical for everyday usage. Please select a more granular product tax category where appropriate.","docsApp.tax_code_details.txcd_30021000.name":"Athletic Activity Clothing","docsApp.tax_code_details.txcd_30021200.description":"Bathing suits, swim trunks, or bathing costumes meant to be worn in or near water.","docsApp.tax_code_details.txcd_30021200.name":"Swimsuits","docsApp.tax_code_details.txcd_30031404.description":"Clothing for human wear and designed as protection of the wearer against injury or disease or as protections against damage or injury of other persons or property but not suitable for general use.","docsApp.tax_code_details.txcd_30031404.name":"Protective\u002FSafety Clothing","docsApp.tax_code_details.txcd_30040003.description":"A reusable mask made of common fabrics worn over the mouth and nose to act as personal protection from airborne particles or pathogens.","docsApp.tax_code_details.txcd_30040003.name":"Cloth Face Masks","docsApp.tax_code_details.txcd_30040005.description":"Masks and accessories sold separately to be worn for costume purposes for seasonal or cultural holidays or celebrations.","docsApp.tax_code_details.txcd_30040005.name":"Costume Masks and Accessories","docsApp.tax_code_details.txcd_30040006.description":"Apparel worn by a person for seasonal or cultural holidays or celebrations, rather than for everday wear.","docsApp.tax_code_details.txcd_30040006.name":"Costumes","docsApp.tax_code_details.txcd_30051302.description":"Gloves for general use \u0028e.g. leather\u0029, but not gloves used for sporting \u0028e.g. football gloves\u0029.","docsApp.tax_code_details.txcd_30051302.name":"Gloves \u0028general use\u0029","docsApp.tax_code_details.txcd_30060001.description":"Bags including handbags, purses, coin purses, fanny packs \u002F bum bags, and diaper \u002F nappy bags.","docsApp.tax_code_details.txcd_30060001.name":"Purses and Handbags","docsApp.tax_code_details.txcd_30060006.description":"A shaped covering for the head worn for warmth, as a fashion item, or as part of a uniform.","docsApp.tax_code_details.txcd_30060006.name":"Hats","docsApp.tax_code_details.txcd_30060007.description":"Jewellery such as necklaces, earrings, rings, and more.","docsApp.tax_code_details.txcd_30060007.name":"Jewelry","docsApp.tax_code_details.txcd_30060010.description":"Articles, although worn on the body, which are not considered clothing or footwear. Examples include armbands, pocket protectors, shoulder boards, sleep masks, etc. Please select a more granular product tax category where appropriate.","docsApp.tax_code_details.txcd_30060010.name":"Non-Clothing Accessories","docsApp.tax_code_details.txcd_30060016.description":"A small timepiece worn typically on a strap on one's wrist.","docsApp.tax_code_details.txcd_30060016.name":"Watches","docsApp.tax_code_details.txcd_30071000.description":"Protective gear worn about the human body while participating in athletic, recreational, or sporting activities, and which are not typical for everyday usage. Please select a more granular product tax category where appropriate.","docsApp.tax_code_details.txcd_30071000.name":"Sports Activities Equipment","docsApp.tax_code_details.txcd_31030001.description":"A skin cream forming a protective barrier to help heal and soothe nappy rash discomfort. These products contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_31030001.name":"Nappy Cream","docsApp.tax_code_details.txcd_31030003.description":"Non medicated disposable moistened cleansing wipes. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_31030003.name":"Baby Wipes","docsApp.tax_code_details.txcd_31031202.description":"Disposable diapers for infants.","docsApp.tax_code_details.txcd_31031202.name":"Infant Nappies","docsApp.tax_code_details.txcd_31040001.description":"A bottle with a teat or nipple made for babies to drink from.","docsApp.tax_code_details.txcd_31040001.name":"Baby Feeding Bottles\u002FNipples","docsApp.tax_code_details.txcd_31040002.description":"A mechanical device that lactating women use to extract milk from their breasts.","docsApp.tax_code_details.txcd_31040002.name":"Breast Pumps","docsApp.tax_code_details.txcd_31070001.description":"A portable seat that can be installed and removed from motor vehicles designed to protect infants and children through a certain age or weight \u0028includes booster seats\u0029.","docsApp.tax_code_details.txcd_31070001.name":"Infant\u002FChild Car Seat","docsApp.tax_code_details.txcd_32010001.description":"Devices used by diabetic individuals to monitor sugar levels in the blood, sold without prescription order of a licensed professional \u0028e.g. blood sugar meters, glucose meters or glucometers\u0029. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32010001.name":"Blood Glucose Monitoring Devices","docsApp.tax_code_details.txcd_32010002.description":"Single-use supplies used by diabetics to monitor blood sugar or urine, including skin puncture lancets, test strips for blood glucose monitors, visual read test strips, and urine test strips, sold without prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32010002.name":"Diabetic Testing Supplies","docsApp.tax_code_details.txcd_32020002.description":"The term drug refers to a compound, substance or preparation intended for use in the diagnosis, cure, mitigation, treatment, or prevention of disease. An over-the-counter drug is a substance that contains a label identifying it as a drug and including a \"drug facts\" panel or a statement of active ingredients, that can be obtained without a prescription. A drug can be intended for internal \u0028ingestible, implant, injectable\u0029 or external \u0028topical\u0029 application to the human body.","docsApp.tax_code_details.txcd_32020002.name":"Drugs - Over the Counter","docsApp.tax_code_details.txcd_32030001.description":"Male or female condoms used to prevent pregnancy or exposure to sexually transmitted diseases.","docsApp.tax_code_details.txcd_32030001.name":"Condoms","docsApp.tax_code_details.txcd_32040005.description":"Feminine hygiene product designed to absorb the menstrual flow.","docsApp.tax_code_details.txcd_32040005.name":"Tampons\u002FPads\u002FSanitary Towels\u002FLiners","docsApp.tax_code_details.txcd_32050001.description":"Adult Disposable Nappies.","docsApp.tax_code_details.txcd_32050001.name":"Adult Disposable Nappies","docsApp.tax_code_details.txcd_32050005.description":"Masks designed for single use to protect the wearer from contamination of breathable particles. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32050005.name":"Disposable Face Masks","docsApp.tax_code_details.txcd_32050006.description":"Soaps, cleaning solutions, shampoo, toothpaste, mouthwash, antiperspirants, suntan lotions, etc. Please select a more granular category as appropriate.","docsApp.tax_code_details.txcd_32050006.name":"Grooming and Hygiene Products","docsApp.tax_code_details.txcd_32050007.description":"Soaps, cleaning solutions, shampoo, toothpaste, mouthwash, antiperspirants, suntan lotions, and sunscreens that contain medicinal ingredients as described on the product's label. Please select a more granular category as appropriate.","docsApp.tax_code_details.txcd_32050007.name":"Grooming and Hygiene Products - Medicated","docsApp.tax_code_details.txcd_32050009.description":"A liquid, gel, foam, or wipe generally used to decrease infectious agents on the hands. Alcohol-based versions typically contain some combination of isopropyl alcohol, ethanol \u0028ethyl alcohol\u0029, or n-propanol. Alcohol-free products are generally based on disinfectants, or on antimicrobial agents. These products contain a \"drug facts\" panel or a statement of active ingredients. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32050009.name":"Hand Sanitisers","docsApp.tax_code_details.txcd_32050012.description":"Topical medicated solutions for treating skin acne. These products contain a \"drug facts\" panel or a statement of active ingredients. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32050012.name":"Medicated Acne Treatments","docsApp.tax_code_details.txcd_32050013.description":"Lotions, moisturizers, creams, powders, sprays, etc that promote optimal skin health that do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050013.name":"Skin Care Products","docsApp.tax_code_details.txcd_32050014.description":"Lotions, moisturizers, creams, powders, sprays, etc that promote optimal skin health and contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050014.name":"Skin Care Products - Medicated","docsApp.tax_code_details.txcd_32050015.description":"Over-the-counter nicotine replacement products, including patches, gum, lozenges, sprays and inhalers that contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050015.name":"Smoking Cessation Products","docsApp.tax_code_details.txcd_32050017.description":"Toilet tissue or paper primarily used for the removal of feces.","docsApp.tax_code_details.txcd_32050017.name":"Toilet Tissue","docsApp.tax_code_details.txcd_32050018.description":"A small brush with a long handle, used for cleaning the teeth.","docsApp.tax_code_details.txcd_32050018.name":"Toothbrush","docsApp.tax_code_details.txcd_32050019.description":"A thick, soft, moist substance used on a brush for cleaning one's teeth.","docsApp.tax_code_details.txcd_32050019.name":"Toothpaste","docsApp.tax_code_details.txcd_32060001.description":"When sold without prescription order of a licensed professional, equipment that: can withstand repeated use; is primarily and customarily used to serve a medical purpose; generally is not useful to a person in the absence of illness or injury; and is not worn in or on the body. Home use means the equipment is sold to an individual for use at home, regardless of where the individual resides. Examples include hospital beds, commode chairs, bed pans, IV poles, etc.","docsApp.tax_code_details.txcd_32060001.name":"Durable Medical Equipment for Home Use","docsApp.tax_code_details.txcd_32070003.description":"An item that is applied directly to or inside a wound to absorb wound drainage, protect healing tissue, maintain a moist or dry wound environment \u0028as appropriate\u0029, or prevent bacterial contamination. Examples include bandages, dressings, gauze, medical tape. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070003.name":"Wound Care Supplies - Bandages, Dressings, Gauze","docsApp.tax_code_details.txcd_32070004.description":"A wound care supply is defined as an item that is applied directly to or inside a wound to absorb wound drainage, protect healing tissue, maintain a moist or dry wound environment \u0028as appropriate\u0029, or prevent bacterial contamination. These supplies contain medication such as an antibiotic ointment. They are labelled with a \"drug facts\" panel or a statement of active ingredients. Examples include bandages, dressings, gauze, medical tape. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070004.name":"Wound Care Supplies - Bandages, Dressings, Gauze - Medicated","docsApp.tax_code_details.txcd_32070018.description":"A collection of mixed supplies and equipment that is used to give medical treatment, often housed in durable plastic boxes, fabric pouches or in wall mounted cabinets. Qualifying medicinal items \u0028e.g. OTC drugs\u0029 make up 51% or more of the value of the kit. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070018.name":"First Aid Kits","docsApp.tax_code_details.txcd_32070019.description":"Single use disposable gloves \u0028latex, nitrile, vinyl, etc\u0029 not used for medical purposes.","docsApp.tax_code_details.txcd_32070019.name":"Gloves - Disposable \u0028non medical use\u0029","docsApp.tax_code_details.txcd_32070028.description":"Items for use in cure, treatment or diagnosis of injury, illness, disease or incapacity, and which is consumed during the use. Please select a more granular category as appropriate.","docsApp.tax_code_details.txcd_32070028.name":"Medical Supplies - Consumable","docsApp.tax_code_details.txcd_32080001.description":"Aids that can increase, improve, or assist mobility in the bathroom such as raised toilet seat, tub \u0026 shower stool, handrails, grab bars, etc.","docsApp.tax_code_details.txcd_32080001.name":"Bath Aids","docsApp.tax_code_details.txcd_32080003.description":"Equipment which is primarily and customarily used to provide or increase the ability to move from one place to another, sold without a prescription, and which is appropriate for use either in a home or a motor vehicle; Is not generally used by persons with normal mobility; and does not include any motor vehicle or equipment on a motor vehicle normally provided by a motor vehicle manufacturer. Examples include wheelchairs, crutches, canes, walkers, chair lifts, etc.","docsApp.tax_code_details.txcd_32080003.name":"Mobility Enhancing Equipment","docsApp.tax_code_details.txcd_32080004.description":"Parts for items such as crutch pads, walker tips, cane tips, crutch tips, etc.","docsApp.tax_code_details.txcd_32080004.name":"Repair \u0026 Replacement Parts for Mobility Enhancing Equipment","docsApp.tax_code_details.txcd_32090003.description":"Corrective lenses, including glasses and contact lenses, sold without a prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32090003.name":"Corrective Lenses","docsApp.tax_code_details.txcd_32090005.description":"Batteries specifically labelled and designed to operate hearing aid devices, sold without prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32090005.name":"Hearing Aid Batteries","docsApp.tax_code_details.txcd_32090006.description":"Artificial devices to correct or alleviate hearing deficiencies, sold without prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32090006.name":"Hearing Aids","docsApp.tax_code_details.txcd_32090007.description":"When sold without prescription order of a licensed professional, a replacement, corrective, or supportive device, worn on or in the body to: Artificially replace a missing portion of the body; Prevent or correct physical deformity or malfunction; or Support a weak or deformed portion of the body. Worn in or on the body means that the item is implanted or attached so that it becomes part of the body, or is carried by the body and does not hinder the mobility of the individual. Examples include artificial limbs, pacemakers, orthotics, orthopaedics, ostomy\u002Fcolostomy devices, catheters, etc.","docsApp.tax_code_details.txcd_32090007.name":"Prosthetic Device","docsApp.tax_code_details.txcd_32100006.description":"One-time use medical thermometers for oral, temporal\u002Fforehead, or rectal body temperature diagnostics. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32100006.name":"Medical Thermometers - Disposable","docsApp.tax_code_details.txcd_32100007.description":"Multiple use medical thermometers for oral, temporal\u002Fforehead, or rectal body temperature diagnostics. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32100007.name":"Medical Thermometers - Reusable","docsApp.tax_code_details.txcd_32100008.description":"Products carrying an Energy Star rating \u0028e.g. light bulbs, appliances, etc.\u0029. Please select a more granular product tax category where appropriate.","docsApp.tax_code_details.txcd_32100008.name":"Energy Star Products","docsApp.tax_code_details.txcd_33020001.description":"Ceiling Fans carrying an Energy Star rating.","docsApp.tax_code_details.txcd_33020001.name":"Ceiling Fans - Energy Star","docsApp.tax_code_details.txcd_33020002.description":"Domestic air conditioning \u0028central or room\u0029 systems carrying Energy Star rating.","docsApp.tax_code_details.txcd_33020002.name":"Air conditioners - Energy Star","docsApp.tax_code_details.txcd_33020003.description":"Domestic gas or oil furnaces carrying an Energy Star rating.","docsApp.tax_code_details.txcd_33020003.name":"Furnaces - Energy Star","docsApp.tax_code_details.txcd_33020004.description":"Domestic air source heat pumps carrying Energy Star rating.","docsApp.tax_code_details.txcd_33020004.name":"Heat Pumps - Energy Star","docsApp.tax_code_details.txcd_33020005.description":"Domestic water heater carrying Energy Star rating.","docsApp.tax_code_details.txcd_33020005.name":"Water Heater - Energy Star","docsApp.tax_code_details.txcd_33020006.description":"Domestic appliance carrying an Energy Star Rating which reduces and maintains the level of humidity in the air.","docsApp.tax_code_details.txcd_33020006.name":"Dehumidifier - Energy Star","docsApp.tax_code_details.txcd_33020007.description":"Domestic gas or oil boilers for space or water heating carrying an Energy Star rating.","docsApp.tax_code_details.txcd_33020007.name":"Boilers - Energy Star","docsApp.tax_code_details.txcd_33020008.description":"An in home programmable thermostat, such as a WiFi enabled smart thermostat, carrying an Energy Star rating.","docsApp.tax_code_details.txcd_33020008.name":"Programmable Wall Thermostat - Energy Star","docsApp.tax_code_details.txcd_33020009.description":"Domestic standard size refrigerators carrying Energy Star rating.","docsApp.tax_code_details.txcd_33020009.name":"Refrigerators - Energy Star","docsApp.tax_code_details.txcd_33020010.description":"Domestic dish washing appliances carrying Energy Star rating.","docsApp.tax_code_details.txcd_33020010.name":"Dishwashers - Energy Star","docsApp.tax_code_details.txcd_33020011.description":"Domestic freezers carrying Energy Star rating.","docsApp.tax_code_details.txcd_33020011.name":"Freezers- Energy Star","docsApp.tax_code_details.txcd_33020012.description":"Domestic clothes washing appliances carrying Energy Star rating.","docsApp.tax_code_details.txcd_33020012.name":"Clothes Washing Machine - Energy Star","docsApp.tax_code_details.txcd_33020013.description":"Domestic clothes drying appliances carrying Energy Star rating.","docsApp.tax_code_details.txcd_33020013.name":"Clothes Drying Machine - Energy Star","docsApp.tax_code_details.txcd_33020014.description":"Non-electric can opener.","docsApp.tax_code_details.txcd_33020014.name":"Can Opener - Manual","docsApp.tax_code_details.txcd_33020200.description":"Water conserving products are for conserving or retaining groundwater; recharging water tables; or decreasing ambient air temperature, and so limiting water evaporation. Examples include soil surfactants, a soaker or drip-irrigation hose, a moisture control for a sprinkler or irrigation system, a rain barrel or an alternative rain and moisture collection system, a permeable ground cover surface that allows water to reach underground basins, aquifers or water collection points.","docsApp.tax_code_details.txcd_33020200.name":"Water conserving products","docsApp.tax_code_details.txcd_33030001.description":"Single or multi-pack AA, AAA, c, D, 6-volt or 9-volt batteries, excluding automobile or boat batteries.","docsApp.tax_code_details.txcd_33030001.name":"Alkaline Batteries","docsApp.tax_code_details.txcd_33031001.description":"Mobile phone batteries.","docsApp.tax_code_details.txcd_33031001.name":"Mobile Phone Batteries","docsApp.tax_code_details.txcd_33080201.description":"Wipes used in the process of eliminating or reducing harmful microorganisms from inanimate objects and surfaces.","docsApp.tax_code_details.txcd_33080201.name":"Disinfectant Wipes","docsApp.tax_code_details.txcd_33080202.description":"Paper based items for household use designed to be disposed of after single use, including the the following...Facial tissue; Paper bags; Paper freezer wrap; Paper place mats; Paper plates and cups; Paper napkins; Paper straws; Paper tablecloths; Paper towels.","docsApp.tax_code_details.txcd_33080202.name":"Disposable Household Paper Products","docsApp.tax_code_details.txcd_33080300.description":"Includes blankets, pillows, bed linens\u002Fsheets, comforters, towels, wash cloths, shower curtains and bath mats. Please select a more granular category where appropriate.","docsApp.tax_code_details.txcd_33080300.name":"Household Linens\u002FBedding Towels Shower Curtains","docsApp.tax_code_details.txcd_33100001.description":"Landscape soil, mulch, compost - residential.","docsApp.tax_code_details.txcd_33100001.name":"Landscape Soil, Mulch, Compost - Residential","docsApp.tax_code_details.txcd_33100101.description":"Products for use in non-commercial food producing gardens to control insects, weeds, and fungus.","docsApp.tax_code_details.txcd_33100101.name":"Agricultural Chemicals - Non-commercial gardening","docsApp.tax_code_details.txcd_33100200.description":"Products for use in non-commercial food producing gardens to enhance plant growth.","docsApp.tax_code_details.txcd_33100200.name":"Agricultural Fertilizer - Non-commercial gardening","docsApp.tax_code_details.txcd_33110001.description":"Standard incandescent light bulbs carrying an Energy Star rating.","docsApp.tax_code_details.txcd_33110001.name":"Incandescent Light Bulbs - Energy Star","docsApp.tax_code_details.txcd_33110002.description":"Compact Fluorescent light \u0028CFL\u0029 bulbs carrying an Energy Star rating.","docsApp.tax_code_details.txcd_33110002.name":"Compact Fluorescent Light Bulbs - Energy Star","docsApp.tax_code_details.txcd_33110003.description":"Light emitting diode \u0028LED\u0029 bulbs carrying an Energy Star rating.","docsApp.tax_code_details.txcd_33110003.name":"LED Bulbs - Energy Star","docsApp.tax_code_details.txcd_33110004.description":"Portable self-powered or battery powered light sources, including flashlights, lanterns, emergency glow sticks or light sticks.","docsApp.tax_code_details.txcd_33110004.name":"Portable Light Sources","docsApp.tax_code_details.txcd_33110005.description":"Candles to be used as a light source.","docsApp.tax_code_details.txcd_33110005.name":"Candles","docsApp.tax_code_details.txcd_33120000.description":"Qualifying items for purposes of certain sales tax holidays such as cell phone batteries, cell phone chargers, and two-way radios.","docsApp.tax_code_details.txcd_33120000.name":"Storm Preparedness Items","docsApp.tax_code_details.txcd_33120001.description":"Portable self-powered or battery powered radio, two-way radio, weatherband radio.","docsApp.tax_code_details.txcd_33120001.name":"Portable Radios","docsApp.tax_code_details.txcd_33120002.description":"Non-electric food or beverage cooler.","docsApp.tax_code_details.txcd_33120002.name":"Food Storage Cooler","docsApp.tax_code_details.txcd_33120003.description":"Smoke Detectors.","docsApp.tax_code_details.txcd_33120003.name":"Smoke Detectors","docsApp.tax_code_details.txcd_33120004.description":"Carbon Monoxide Detectors.","docsApp.tax_code_details.txcd_33120004.name":"Carbon Monoxide Detectors","docsApp.tax_code_details.txcd_33120005.description":"Fire Extinguishers.","docsApp.tax_code_details.txcd_33120005.name":"Fire Extinguishers","docsApp.tax_code_details.txcd_33120006.description":"Portable fuel container.","docsApp.tax_code_details.txcd_33120006.name":"Portable Fuel Container","docsApp.tax_code_details.txcd_33120007.description":"Non-electric water container to store water for emergency usage.","docsApp.tax_code_details.txcd_33120007.name":"Water Storage Container","docsApp.tax_code_details.txcd_33120008.description":"Artificial ice, blue ice, ice packs, reusable ice.","docsApp.tax_code_details.txcd_33120008.name":"Artificial Ice","docsApp.tax_code_details.txcd_33120009.description":"Tarps, plastic sheeting, plastic drop cloths, waterproof sheeting.","docsApp.tax_code_details.txcd_33120009.name":"Tarpaulins and Weatherproof Sheeting","docsApp.tax_code_details.txcd_33120010.description":"Portable generator used to provide light or communications or power appliances during a power outage.","docsApp.tax_code_details.txcd_33120010.name":"Portable Generator","docsApp.tax_code_details.txcd_33120011.description":"Power cords used to connect electrical equipment and devices to power sockets.","docsApp.tax_code_details.txcd_33120011.name":"Power Cords","docsApp.tax_code_details.txcd_33120012.description":"An hand held tool with a bladed head on a handle used for hewing, cleaving, chopping, etc.","docsApp.tax_code_details.txcd_33120012.name":"Axes\u002FHatchets","docsApp.tax_code_details.txcd_33120013.description":"Gas-powered chainsaw.","docsApp.tax_code_details.txcd_33120013.name":"Garden Chainsaw","docsApp.tax_code_details.txcd_33120014.description":"Chainsaw accessories include chains, lubricants, motor oil, chain sharpeners, bars, wrenches, carrying cases, repair parts, safety apparel.","docsApp.tax_code_details.txcd_33120014.name":"Chainsaw Accessories","docsApp.tax_code_details.txcd_33120015.description":"Plywood, window film, storm shutters, hurricane shutters or other materials specifically designed to protect windows.","docsApp.tax_code_details.txcd_33120015.name":"Storm Shutters\u002FWindow Protection Devices","docsApp.tax_code_details.txcd_33120016.description":"Ladder used for home emergency evacuation.","docsApp.tax_code_details.txcd_33120016.name":"Emergency\u002FRescue Ladder","docsApp.tax_code_details.txcd_33120017.description":"Ropes and Cords and similar fastening products.","docsApp.tax_code_details.txcd_33120017.name":"Ropes and Cords","docsApp.tax_code_details.txcd_33120018.description":"Ground anchor systems and tie down kits for securing property against severe weather.","docsApp.tax_code_details.txcd_33120018.name":"Ground Anchor Systems and Tie-down Kits","docsApp.tax_code_details.txcd_33120019.description":"Duct Tape.","docsApp.tax_code_details.txcd_33120019.name":"Duct Tape","docsApp.tax_code_details.txcd_33150001.description":"WaterSense labeled toilets.","docsApp.tax_code_details.txcd_33150001.name":"Toilets - WaterSense","docsApp.tax_code_details.txcd_33150002.description":"WaterSense labeled urinals.","docsApp.tax_code_details.txcd_33150002.name":"Urinals - WaterSense","docsApp.tax_code_details.txcd_33150003.description":"WaterSense labeled bathroom sink faucets and accessories.","docsApp.tax_code_details.txcd_33150003.name":"Bathroom Faucets - WaterSense","docsApp.tax_code_details.txcd_33150004.description":"WaterSense labeled sprinkler body is the exterior shell that connects to the irrigation system piping and houses the spray nozzle that applies water on the landscape.","docsApp.tax_code_details.txcd_33150004.name":"Spray Water Sprinkler Bodies - WaterSense","docsApp.tax_code_details.txcd_33150005.description":"WaterSense labeled irrigation controllers, which act like a thermostat for your sprinkler system telling it when to turn on and off, use local weather and landscape conditions to tailor watering schedules to actual conditions on the site.","docsApp.tax_code_details.txcd_33150005.name":"Irrigation Controls - WaterSense","docsApp.tax_code_details.txcd_33150006.description":"WaterSense labeled showerheads.","docsApp.tax_code_details.txcd_33150006.name":"Showerheads - WaterSense","docsApp.tax_code_details.txcd_34010001.description":"A type of consumer electronic device used to play vinyl recordings.","docsApp.tax_code_details.txcd_34010001.name":"Audio Turntables","docsApp.tax_code_details.txcd_34010002.description":"Portable audio equipment that plays audio files encoded in MP3 and other audio formats.","docsApp.tax_code_details.txcd_34010002.name":"Digital Music Players","docsApp.tax_code_details.txcd_34010003.description":"A camera that captures moving images and sound and converts them into electronic signals so that they can be saved on a storage device, such as videotape or a hard drive, or viewed on a monitor.","docsApp.tax_code_details.txcd_34010003.name":"Video Cameras","docsApp.tax_code_details.txcd_34020001.description":"A camera that captures photographs in digital memory.","docsApp.tax_code_details.txcd_34020001.name":"Digital Cameras","docsApp.tax_code_details.txcd_34020002.description":"A framed display designed to display preloaded digital images \u0028jpeg or any digital image format\u0029. Has slots for flash memory cards and\u002For an interface for digital photo camera connection.","docsApp.tax_code_details.txcd_34020002.name":"Digital Picture Frames","docsApp.tax_code_details.txcd_34020003.description":"A portable electronic device for reading digital books and periodicals.","docsApp.tax_code_details.txcd_34020003.name":"E-Book Readers","docsApp.tax_code_details.txcd_34020004.description":"Wired and bluetooth headphones and earbuds for audio listening.","docsApp.tax_code_details.txcd_34020004.name":"Headphones\u002FEarbuds","docsApp.tax_code_details.txcd_34020005.description":"Consumer electronics peripherals and accessories. Please select a more granular product tax category where appropriate.","docsApp.tax_code_details.txcd_34020005.name":"Consumer Electronics Peripherals\u002FAccessories","docsApp.tax_code_details.txcd_34020006.description":"Televisions.","docsApp.tax_code_details.txcd_34020006.name":"Televisions","docsApp.tax_code_details.txcd_34020027.description":"Electronic devices bought for personal rather than commercial use. Please select a more granular product tax category where appropriate.","docsApp.tax_code_details.txcd_34020027.name":"Consumer Electronics","docsApp.tax_code_details.txcd_34021000.description":"A portable device for connecting to a telecommunications network in order to transmit and receive voice, video, or other data.","docsApp.tax_code_details.txcd_34021000.name":"Mobile Phones","docsApp.tax_code_details.txcd_34021001.description":"A device for recharging the battery of a mobile phone, especially one consisting of a cable connected to an adaptor which plugs into an electrical socket or usb port.","docsApp.tax_code_details.txcd_34021001.name":"Mobile Phone Charging Device\u002Fcord","docsApp.tax_code_details.txcd_34022000.description":"A specialized computer system designed for interactive video gameplay that typically connects to a television or other monitor.","docsApp.tax_code_details.txcd_34022000.name":"Video Gaming Console - Fixed","docsApp.tax_code_details.txcd_34022001.description":"A handheld portable electronic device used for playing video games that has its own screen, speakers and controls in one unit.","docsApp.tax_code_details.txcd_34022001.name":"Video Gaming Console - Portable","docsApp.tax_code_details.txcd_34040001.description":"Typically a lithium-ion remote power source for laptop computers.","docsApp.tax_code_details.txcd_34040001.name":"Computer Batteries","docsApp.tax_code_details.txcd_34040002.description":"Cables with industry standard connection and termination configurations used to connect various peripherals and equipment to computers.","docsApp.tax_code_details.txcd_34040002.name":"Computer Cables","docsApp.tax_code_details.txcd_34040003.description":"Storage drives, hard drives, Zip drives, etc.","docsApp.tax_code_details.txcd_34040003.name":"Computer Drives","docsApp.tax_code_details.txcd_34040004.description":"Computer Keyboards.","docsApp.tax_code_details.txcd_34040004.name":"Computer Keyboards","docsApp.tax_code_details.txcd_34040005.description":"Computer Microphones.","docsApp.tax_code_details.txcd_34040005.name":"Computer Microphones","docsApp.tax_code_details.txcd_34040006.description":"Computer Monitor\u002FDisplays.","docsApp.tax_code_details.txcd_34040006.name":"Computer Monitor\u002FDisplays","docsApp.tax_code_details.txcd_34040007.description":"Computer Mouse\u002FPointing Devices.","docsApp.tax_code_details.txcd_34040007.name":"Computer Mouse\u002FPointing Devices","docsApp.tax_code_details.txcd_34040008.description":"Computer Printer.","docsApp.tax_code_details.txcd_34040008.name":"Computer Printer","docsApp.tax_code_details.txcd_34040009.description":"Computer Speakers.","docsApp.tax_code_details.txcd_34040009.name":"Computer Speakers","docsApp.tax_code_details.txcd_34040010.description":"A docking station is a hardware frame and set of electrical connection interfaces that enable a notebook computer to effectively serve as a desktop computer.","docsApp.tax_code_details.txcd_34040010.name":"Docking Stations","docsApp.tax_code_details.txcd_34040011.description":"A device that makes possible the transmission of data to or from a computer via telephone or other communication lines.","docsApp.tax_code_details.txcd_34040011.name":"Modems","docsApp.tax_code_details.txcd_34040012.description":"A motherboard is the physical component in a computer that contains the computer's basic circuitry and other components.","docsApp.tax_code_details.txcd_34040012.name":"Motherboards","docsApp.tax_code_details.txcd_34040013.description":"A port replicator is an attachment for a notebook computer that allows a number of devices such as a printer, large monitor, and keyboard to be simultaneously connected.","docsApp.tax_code_details.txcd_34040013.name":"Port Replicators","docsApp.tax_code_details.txcd_34040014.description":"A device that connects computer networks to each other, and sends information between networks. The router, as commonly used in the home, is the hardware that allows communication between your personal computers and other connected device and the internet.","docsApp.tax_code_details.txcd_34040014.name":"Routers","docsApp.tax_code_details.txcd_34040015.description":"A device that scans documents and images and converts them into digital data for use on a computer.","docsApp.tax_code_details.txcd_34040015.name":"Scanners","docsApp.tax_code_details.txcd_34040016.description":"A sound card is an expansion component used in computers to receive and send audio.","docsApp.tax_code_details.txcd_34040016.name":"Sound Cards","docsApp.tax_code_details.txcd_34040017.description":"An expansion card that allows the computer to send graphical information to a video display device such as a monitor, TV, or projector. Video cards are often used by gamers in place of integrated graphics due to their extra processing power and video ram.","docsApp.tax_code_details.txcd_34040017.name":"Video\u002FGraphics Card","docsApp.tax_code_details.txcd_34040018.description":"A webcam is a video camera that feeds or streams an image or video in real time to or through a computer to a computer network, such as the Internet. Webcams are typically small cameras that sit on a desk, attach to a user's monitor, or are built into the hardware.","docsApp.tax_code_details.txcd_34040018.name":"Web Camera","docsApp.tax_code_details.txcd_35010000.description":"Books or booklets consisting of text or illustrations bound in a stiffer cover than the pages.","docsApp.tax_code_details.txcd_35010000.name":"Books","docsApp.tax_code_details.txcd_35010001.description":"Children's books including picture books, painting, drawing, and activity books.","docsApp.tax_code_details.txcd_35010001.name":"Books for Children","docsApp.tax_code_details.txcd_35010400.description":"Printed religious books and manuals.","docsApp.tax_code_details.txcd_35010400.name":"Religious Books","docsApp.tax_code_details.txcd_35010500.description":"Recognized in the ordinary and usual sense as a \"book\", except that the product is audio and delivered electronically or on a CD\u002FDVD instead of in a printed format.","docsApp.tax_code_details.txcd_35010500.name":"Audiobook \u0028Physical Copy\u0029","docsApp.tax_code_details.txcd_35020100.description":"Publications distributed to the public at regular intervals that contains news of general interest.","docsApp.tax_code_details.txcd_35020100.name":"Newspapers","docsApp.tax_code_details.txcd_35020200.description":"Publications, including magazines, distributed on a periodic basis.","docsApp.tax_code_details.txcd_35020200.name":"Periodicals","docsApp.tax_code_details.txcd_36010001.description":"Flea and tick products for animal use including soaps, cleaning solutions, and shampoos \u0028e.g., flea collars, flea powder, tick and flea soap, and tick sprays\u0029.","docsApp.tax_code_details.txcd_36010001.name":"Flea \u0026 Tick Products","docsApp.tax_code_details.txcd_36010002.description":"Drugs or substance for treating animals and intended for use in the diagnosis, cure, mitigation, treatment, or prevention of disease.","docsApp.tax_code_details.txcd_36010002.name":"Over-the-Counter Drugs for Animal Use Without a Prescription","docsApp.tax_code_details.txcd_36010003.description":"Medical supplies available without a prescription and used in the treatment of companion animals \u0028e.g., first aid items such as bandages and gauze\u0029.","docsApp.tax_code_details.txcd_36010003.name":"Over-the-Counter Medical Supplies for Pets","docsApp.tax_code_details.txcd_36010004.description":"Food for household pets that is consumed for nutritional value. This code is not intended for food related to working farm animals or animals raised for meat or milk production.","docsApp.tax_code_details.txcd_36010004.name":"Pet Food","docsApp.tax_code_details.txcd_36010005.description":"Pet food products offering additional nutrients or functional ingredients.","docsApp.tax_code_details.txcd_36010005.name":"Pet Vitamins","docsApp.tax_code_details.txcd_37010000.description":"Personal computers, including laptops, tablets, desktops.","docsApp.tax_code_details.txcd_37010000.name":"Personal Computers","docsApp.tax_code_details.txcd_37050001.description":"Books that are required or approved for use in conjunction with a curriculum provided by an educational institution.","docsApp.tax_code_details.txcd_37050001.name":"School Textbooks","docsApp.tax_code_details.txcd_37060001.description":"Bags designed to carry students' books during the school day. This category does not include backpacks for traveling, hiking, camping, etc.","docsApp.tax_code_details.txcd_37060001.name":"Bookbags\u002FBackpacks - Student","docsApp.tax_code_details.txcd_37060012.description":"An item commonly used by a student in a course of study. This category is limited to the following items...binders, blackboard chalk, cellophane tape, compasses, composition books, crayons, erasers, folders, glue\u002Fpaste\u002Fglue sticks, highlighters, index cards, index card boxes, legal pads, lunch boxes, markers, notebooks, paper \u0028copy, graph, tracing, manila, colored, construction, notebook\u0029, pencils, pencil boxes, pencil sharpeners, pens, posterboard, protractors, rulers, scissors, writing tablets.","docsApp.tax_code_details.txcd_37060012.name":"School Supplies","docsApp.tax_code_details.txcd_37070001.description":"Prewritten \u0028\"canned\"\u0029 software delivered on tangible media.","docsApp.tax_code_details.txcd_37070001.name":"Canned Software - Tangible Medium","docsApp.tax_code_details.txcd_40040000.description":"Food and beverage products sold at retail grocery-type establishments that are intended for consumption off the premises of the vendor.","docsApp.tax_code_details.txcd_40040000.name":"Food for Non-Immediate Consumption","docsApp.tax_code_details.txcd_40040004.description":"Foods and formulas meant for feeding babies and infants.","docsApp.tax_code_details.txcd_40040004.name":"Baby Food","docsApp.tax_code_details.txcd_40050004.description":"Food bundle or basket containing food staples combined with tangible personal property, with the food comprising between 50% and 90% of the overall value of the bundle.","docsApp.tax_code_details.txcd_40050004.name":"Food\u002FTPP Bundle with Food 50% to 90%","docsApp.tax_code_details.txcd_40050005.description":"Food bundle or basket containing food staples combined with tangible personal property, with the food comprising 90% or more of the overall value of the bundle.","docsApp.tax_code_details.txcd_40050005.name":"Food\u002FTPP Bundle with Food 90% or more","docsApp.tax_code_details.txcd_40050006.description":"Food bundle or basket containing food staples combined with tangible personal property, with the food comprising less than 50% of the overall value of the bundle.","docsApp.tax_code_details.txcd_40050006.name":"Food\u002FTPP Bundle with Food less than 50%","docsApp.tax_code_details.txcd_40060003.description":"Food and beverage products in a form suited for consumption on the premises of the vendor, described as prepared foods, ready-to-eat foods, or meals. Always use this PTC for heated foods, heated beverages, dispensed beverages, and foods sold with eating utensils.","docsApp.tax_code_details.txcd_40060003.name":"Food for Immediate Consumption","docsApp.tax_code_details.txcd_40070005.description":"Snack foods including chips, crisps, puffs, curls or sticks, popped corn, brittle pretzels, salted nuts and salted seeds, granola products and snack mixes. This category does not include items such as crackers, cookies, snack cakes or breakfast cereal.","docsApp.tax_code_details.txcd_40070005.name":"Snack Foods","docsApp.tax_code_details.txcd_40090001.description":"Tablet, capsule, powder, softgel, gelcap, or liquid intended that contain a vitamin, mineral, herb, other botanical, or amino acid and is labeled as a dietary supplement identifiable by the \"supplement facts\" box found on the label.","docsApp.tax_code_details.txcd_40090001.name":"Dietary Supplements","docsApp.tax_code_details.txcd_40090005.description":"A food which intended to be or is represented for special dietary use solely as a food for infants by reason of its simulation of human milk or its suitability as a complete or partial substitute for human milk.","docsApp.tax_code_details.txcd_40090005.name":"Infant Formula","docsApp.tax_code_details.txcd_40090008.description":"Products in various forms that are intended for ingestion and represented as a conventional food and labeled as a nutritional supplement and identifiable by the \"Nutrition Facts\" box found on the label.","docsApp.tax_code_details.txcd_40090008.name":"Nutritional Supplements","docsApp.tax_code_details.txcd_40100001.description":"A preparation of natural or artificial sweeteners in combination with chocolate, fruits, nuts, or other ingredients or flavorings in the form of bars, drops, or pieces.","docsApp.tax_code_details.txcd_40100001.name":"Candy","docsApp.tax_code_details.txcd_40100002.description":"A preparation of natural or artificial sweeteners in combination with chocolate, fruits, nuts, or other ingredients or flavorings in the form of bars, drops, or pieces and that contains flour as an ingredient.","docsApp.tax_code_details.txcd_40100002.name":"Candy \u0028Contains Flour\u0029","docsApp.tax_code_details.txcd_41030001.description":"Standard, unsweetened, non-carbonated water sold in containers. Includes waters containing only natural flavours or essences. Does not include distilled water.","docsApp.tax_code_details.txcd_41030001.name":"Bottled Water","docsApp.tax_code_details.txcd_41030002.description":"Bottled Water for human consumption, unsweetened, carbonated artificially. Includes carbonated waters containing only natural flavours or essences.","docsApp.tax_code_details.txcd_41030002.name":"Bottled Water - Carbonated Artificially","docsApp.tax_code_details.txcd_41040002.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and zero natural fruit or vegetable juice, not including carbonated water. Includes energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040002.name":"Carbonated Soft Drinks - 0% Fruit or Vegetable juice","docsApp.tax_code_details.txcd_41040003.description":"Ready to drink non-carbonated beverage containing tea with natural or artificial sweeteners.","docsApp.tax_code_details.txcd_41040003.name":"Bottled Tea - Non-Carbonated - Sweetened","docsApp.tax_code_details.txcd_41040004.description":"Bottled water for human consumption, containing natural or artificial sweeteners, non-carbonated. Waters containing zero-calorie natural flavouring should be associated with the 'Bottled Water' PTC.","docsApp.tax_code_details.txcd_41040004.name":"Bottled water - Sweetened","docsApp.tax_code_details.txcd_41040005.description":"Bottled water for human consumption, containing natural or artificial sweeteners, carbonated. Carbonated waters containing zero-calorie natural flavouring should be associated with either the 'Bottled Water - Carbonated Artificially' PTC or the 'Bottled Water - Carbonated Naturally' PTC.","docsApp.tax_code_details.txcd_41040005.name":"Bottled water - Carbonated - Sweetened","docsApp.tax_code_details.txcd_41040008.description":"Non-carbonated, non-alcoholic beverages that contain sweeteners, and zero natural fruit or vegetable juice, such as sweetened cocktail mixes that can be combined with alcohol, but doesn't include flavored water.","docsApp.tax_code_details.txcd_41040008.name":"Non-Carbonated Soft Drinks - 0% Fruit or Vegetable juice","docsApp.tax_code_details.txcd_41050006.description":"Coffee beans or ground coffee.","docsApp.tax_code_details.txcd_41050006.name":"Coffee Beans or Ground Coffee","docsApp.tax_code_details.txcd_41050008.description":"Tea leaves and tea bags.","docsApp.tax_code_details.txcd_41050008.name":"Tea Leaves or Tea Bags","docsApp.tax_code_details.txcd_41060003.description":"Milk type beverages from non-animal sources, such as soy, rice, almond, coconut, peanut, and hemp.","docsApp.tax_code_details.txcd_41060003.name":"Milk Substitutes","docsApp.tax_code_details.txcd_41060006.description":"Milk or milk substitutes, or drinks with bases of milk, coffee, unsweetened tea or cocoa.","docsApp.tax_code_details.txcd_41060006.name":"Milk Coffee Tea Cocoa Beverages","docsApp.tax_code_details.txcd_90020001.description":"Gratuity, otherwise known as a tip, is money that a customer leaves for an employee or employees that is in addition to and separate from the amount due for the goods or services rendered.","docsApp.tax_code_details.txcd_90020001.name":"Optional Gratuity","docsApp.tax_code_details.txcd_92010000.description":"Shipping and Handling Combined Charge.","docsApp.tax_code_details.txcd_92010000.name":"Shipping and Handling Combined Charge","docsApp.tax_code_details.txcd_92010001.description":"A shipping charge for the delivery of physical goods in conjunction with the sale of these goods. This tax category is not appropriate for stand alone transportation charges that are not associated with the sale of the goods being delivered.","docsApp.tax_code_details.txcd_92010001.name":"Shipping","docsApp.tax_code_details.txcd_92010002.description":"A shipping charge for the delivery of physical goods in conjunction with the sale of these goods. This tax category is not appropriate for standalone transport charges that are not associated with the sale of the goods being delivered.","docsApp.tax_code_details.txcd_92010002.name":"Shipping - Common Carrier FOB Origin","docsApp.tax_code_details.txcd_92010004.description":"Handling Charge.","docsApp.tax_code_details.txcd_92010004.name":"Handling Charge","docsApp.tax_code_details.txcd_99999999.description":"A physical good that can be moved or touched. Also known as tangible personal property.","docsApp.tax_code_details.txcd_99999999.name":"General - Tangible Goods","docsApp.tax_id_types.ae_trn.description":"United Arab Emirates TRN","docsApp.tax_id_types.at_vat.description":"European VAT number","docsApp.tax_id_types.au_abn.description":"Australian Business Number \u0028AU ABN\u0029","docsApp.tax_id_types.au_arn.description":"Australian Taxation Office Reference Number","docsApp.tax_id_types.be_vat.description":"European VAT number","docsApp.tax_id_types.bg_uic.description":"Bulgaria Unified Identification Code","docsApp.tax_id_types.bg_vat.description":"European VAT number","docsApp.tax_id_types.br_cnpj.description":"Brazilian CNPJ number","docsApp.tax_id_types.br_cpf.description":"Brazilian CPF number","docsApp.tax_id_types.ca_bn.description":"Canadian BN","docsApp.tax_id_types.ca_gst_hst.description":"Canadian GST\u002FHST number","docsApp.tax_id_types.ca_pst_bc.description":"Canadian PST number \u0028British Columbia\u0029","docsApp.tax_id_types.ca_pst_mb.description":"Canadian PST number \u0028Manitoba\u0029","docsApp.tax_id_types.ca_pst_sk.description":"Canadian PST number \u0028Saskatchewan\u0029","docsApp.tax_id_types.ca_qst.description":"Canadian QST number \u0028Québec\u0029","docsApp.tax_id_types.ch_vat.description":"Switzerland VAT number","docsApp.tax_id_types.cl_tin.description":"Chilean TIN","docsApp.tax_id_types.cy_vat.description":"European VAT number","docsApp.tax_id_types.cz_vat.description":"European VAT number","docsApp.tax_id_types.de_vat.description":"European VAT number","docsApp.tax_id_types.dk_vat.description":"European VAT number","docsApp.tax_id_types.ee_vat.description":"European VAT number","docsApp.tax_id_types.es_cif.description":"Spanish NIF number \u0028previously Spanish CIF number\u0029","docsApp.tax_id_types.es_vat.description":"European VAT number","docsApp.tax_id_types.eu_oss_vat.description":"European One Stop Shop VAT number for non-Union scheme","docsApp.tax_id_types.fi_vat.description":"European VAT number","docsApp.tax_id_types.fr_vat.description":"European VAT number","docsApp.tax_id_types.gb_vat.description":"United Kingdom VAT number","docsApp.tax_id_types.ge_vat.description":"Georgian VAT","docsApp.tax_id_types.gr_vat.description":"European VAT number","docsApp.tax_id_types.hk_br.description":"Hong Kong BR number","docsApp.tax_id_types.hr_vat.description":"European VAT number","docsApp.tax_id_types.hu_tin.description":"Hungary tax number \u0028adószám\u0029","docsApp.tax_id_types.hu_vat.description":"European VAT number","docsApp.tax_id_types.id_npwp.description":"Indonesian NPWP number","docsApp.tax_id_types.ie_vat.description":"European VAT number","docsApp.tax_id_types.il_vat.description":"Israel VAT","docsApp.tax_id_types.in_gst.description":"Indian GST number","docsApp.tax_id_types.is_vat.description":"Icelandic VAT","docsApp.tax_id_types.it_vat.description":"European VAT number","docsApp.tax_id_types.jp_cn.description":"Japanese Corporate Number \u0028*Hōjin Bangō*\u0029","docsApp.tax_id_types.jp_rn.description":"Japanese Registered Foreign Businesses' Registration Number \u0028*Tōroku Kokugai Jigyōsha no Tōroku Bangō*\u0029","docsApp.tax_id_types.kr_brn.description":"Korean BRN","docsApp.tax_id_types.li_uid.description":"Liechtensteinian UID number","docsApp.tax_id_types.lt_vat.description":"European VAT number","docsApp.tax_id_types.lu_vat.description":"European VAT number","docsApp.tax_id_types.lv_vat.description":"European VAT number","docsApp.tax_id_types.mt_vat.description":"European VAT number","docsApp.tax_id_types.mx_rfc.description":"Mexican RFC number","docsApp.tax_id_types.my_frp.description":"Malaysian FRP number","docsApp.tax_id_types.my_itn.description":"Malaysian ITN","docsApp.tax_id_types.my_sst.description":"Malaysian SST number","docsApp.tax_id_types.nl_vat.description":"European VAT number","docsApp.tax_id_types.no_vat.description":"Norwegian VAT number","docsApp.tax_id_types.nz_gst.description":"New Zealand GST number","docsApp.tax_id_types.pl_vat.description":"European VAT number","docsApp.tax_id_types.pt_vat.description":"European VAT number","docsApp.tax_id_types.ro_vat.description":"European VAT number","docsApp.tax_id_types.ru_inn.description":"Russian INN","docsApp.tax_id_types.ru_kpp.description":"Russian KPP","docsApp.tax_id_types.sa_vat.description":"Saudi Arabia VAT","docsApp.tax_id_types.se_vat.description":"European VAT number","docsApp.tax_id_types.sg_gst.description":"Singaporean GST","docsApp.tax_id_types.sg_uen.description":"Singaporean UEN","docsApp.tax_id_types.si_tin.description":"Slovenia tax number \u0028davčna številka\u0029","docsApp.tax_id_types.si_vat.description":"European VAT number","docsApp.tax_id_types.sk_vat.description":"European VAT number","docsApp.tax_id_types.th_vat.description":"Thai VAT","docsApp.tax_id_types.tw_vat.description":"Taiwanese VAT","docsApp.tax_id_types.ua_vat.description":"Ukrainian VAT","docsApp.tax_id_types.us_ein.description":"United States EIN","docsApp.tax_id_types.xi_vat.description":"Northern Ireland VAT number","docsApp.tax_id_types.za_vat.description":"South African VAT number","docsApp.videos.settings.backend":"Backend:","docsApp.videos.settings.frontend":"Frontend:","docsApp.videos.settings.platform":"Platform:","docsShell.CardPaymentDemo.buttonLabel":"Pay","docsShell.CardPaymentDemo.prefillLabel":"Prefill card details","docsShell.CardPaymentDemo.restartLabel":"Restart demo.","docsShell.CardPaymentDemo.successMessage":"Success\u0021 Here's the PaymentIntent that was returned by the Stripe API. The status of succeeded indicates that the payment was completed successfully.","docsShell.ConnectAccountCreateDemo.connectWith":"Connect with","docsShell.ConnectAccountCreateDemo.error":"Oh no, there's an error with this demo. We're working to fix it\u0021","docsShell.ConnectAccountCreateDemo.errorOther":"Oh no, there's an error with this demo. We're working to fix it\u0021","docsShell.ConnectAccountCreateDemo.errorTooManyRequests":"You've used the demo too many times today. Please try again later.","docsShell.ConnectAccountCreateDemo.loading":"Loading...","docsShell.ConnectAccountCreateDemo.refreshed":"You returned from the onboarding flow through the {refreshUrlCode} as your session expired. Please try again.","docsShell.ConnectAccountCreateDemo.resources":"The Connect button is available as an {imageLink} or {codeSnippetLink}.","docsShell.ConnectAccountCreateDemo.success":"You returned from the onboarding flow through the {redirectUrlCode}","docsShell.ConnectCheckoutDemo.canceled":"Welcome back\u0021 You canceled a test purchase.","docsShell.ConnectCheckoutDemo.checkout":"Checkout","docsShell.ConnectCheckoutDemo.infoText":"This sample integration is running in test mode, which means that it won’t create a real charge. Use {cardNumber} as your card number, any three-digit CVC code, and an expiration date in the future to simulate a successful payment.","docsShell.ConnectCheckoutDemo.success":"Welcome back\u0021 You successfully completed a test purchase.","docsShell.HomePage.ButtonLabel.LearnMore":"Learn more","docsShell.HomePage.Hero.description":"Build a web or mobile integration to accept payments online or in person.","docsShell.HomePage.Hero.getStarted":"Get started","docsShell.HomePage.QuickLink.inperson":"In-person","docsShell.HomePage.QuickLink.marketplaces":"Marketplaces","docsShell.HomePage.QuickLink.online":"Online","docsShell.HomePage.QuickLink.subscriptions":"Subscriptions","docsShell.HomePage.SplitHero.BusinessOperations.section.disputes":"Prevent and handle disputes","docsShell.HomePage.SplitHero.BusinessOperations.section.reports":"Generate reports","docsShell.HomePage.SplitHero.BusinessOperations.subtitle":"Programmatically or manually monitor, protect, and report on the money you make with Stripe.","docsShell.HomePage.SplitHero.BusinessOperations.title":"Business operations","docsShell.HomePage.SplitHero.FinancialServices.subtitle":"Move, control, and borrow money with Stripe's APIs and financial services.","docsShell.HomePage.SplitHero.FinancialServices.title":"Financial services","docsShell.HomePage.SplitHero.FinanicalServices.section.corpCard":"Learn about the Stripe Corporate Card","docsShell.HomePage.SplitHero.FinanicalServices.section.issueCards":"Issue cards instantly","docsShell.HomePage.SplitHero.inThisSection":"In this section","docsShell.HomePage.UseCase.Account.body":"Activate, manage, and configure your account.","docsShell.HomePage.UseCase.Account.heading":"Account","docsShell.HomePage.UseCase.DeveloperTools.body":"Get up and running with libraries, keys, and integration tools.","docsShell.HomePage.UseCase.DeveloperTools.heading":"Developer tools","docsShell.HomePage.UseCase.NoCode.body":"Find out about options to use Stripe without writing any code.","docsShell.HomePage.UseCase.NoCode.heading":"No-code","docsShell.HomePage.UseCase.Security.body":"Strengthen your integration security and learn about sensitive data.","docsShell.HomePage.UseCase.Security.heading":"Security","docsShell.HomePage.UseCase.exploreUsingStripe":"Learn about Stripe","docsShell.ReactStripeDemo.buttonLabel":"Pay","docsShell.ReactStripeDemo.buttonLabelProcessing":"Processing","docsShell.ReactStripeDemo.emailLabel":"Email","docsShell.ReactStripeDemo.nameLabel":"Name","docsShell.ReactStripeDemo.phoneLabel":"Phone","docsShell.ReactStripeDemo.successMessage":"Thanks for trying Stripe Elements. No money was charged, but we generated a PaymentMethod: {paymentMethodId}","docsShell.ReactStripeDemo.successTitle":"Payment successful","docsShell.ReaderDetails.chipper.badge.label":"U.S. Only","docsShell.ReaderDetails.chipper.description":"The handheld, Bluetooth reader that connects to iOS and Android applications","docsShell.ReaderDetails.chipper.feature1":"Create a roaming cashier experience, where customers can pay anywhere","docsShell.ReaderDetails.chipper.feature2":"Works with iOS and Android SDKs","docsShell.ReaderDetails.chipper.feature3":"Uses Bluetooth, optimized for mobile checkout experiences","docsShell.ReaderDetails.chipper.feature4":"Accepts contactless, chip, and swipe payments","docsShell.ReaderDetails.chipper.name":"BBPOS CHIPPER™ 2X BT","docsShell.ReaderDetails.p400.description":"The countertop reader with customer-facing screen for JavaScript, iOS, and Android applications","docsShell.ReaderDetails.p400.feature1":"Create a countertop checkout, with customizable customer-facing display","docsShell.ReaderDetails.p400.feature2":"Works with the JavaScript SDK and currently in beta for the iOS SDK","docsShell.ReaderDetails.p400.feature3":"Requires internet connection, best for stationary counter checkout","docsShell.ReaderDetails.p400.feature4":"Accepts tap, swipe, and dip payment methods","docsShell.ReaderDetails.p400.name":"Verifone® P400","docsShell.ReaderDetails.stripem2.badge.label":"U.S. Only","docsShell.ReaderDetails.stripem2.description":"The handheld, Bluetooth reader that connects to iOS and Android applications","docsShell.ReaderDetails.stripem2.feature1":"Pick from a suite of accessories to enable countertop or roaming checkout experiences","docsShell.ReaderDetails.stripem2.feature2":"Works with iOS and Android SDKs","docsShell.ReaderDetails.stripem2.feature3":"PCI certified and P2PE enabled, optimized for mobile checkout experiences","docsShell.ReaderDetails.stripem2.feature4":"Accepts contactless, chip, and swipe payments","docsShell.ReaderDetails.stripem2.name":"Stripe Reader M2","docsShell.ReaderDetails.wisepad3.badge.label":"BETA","docsShell.ReaderDetails.wisepad3.description":"The handheld, Bluetooth reader with customer-facing screen that connects to iOS and Android applications.","docsShell.ReaderDetails.wisepad3.feature1":"Create a roaming cashier experience, where customers can pay anywhere","docsShell.ReaderDetails.wisepad3.feature2":"Works with the iOS and Android SDKs","docsShell.ReaderDetails.wisepad3.feature3":"Uses Bluetooth, optimized for mobile checkout experiences","docsShell.ReaderDetails.wisepad3.feature4":"Accepts contactless and chip payment methods","docsShell.ReaderDetails.wisepad3.name":"BBPOS WisePad™ 3","docsShell.ReaderDetails.wisepose.description":"The hybrid countertop and handheld smart reader for JavaScript, iOS, and Android applications","docsShell.ReaderDetails.wisepose.feature1":"Customizable customer-facing display","docsShell.ReaderDetails.wisepose.feature2":"Works with the JavaScript, iOS, and Android SDKs","docsShell.ReaderDetails.wisepose.feature3":"Requires WiFi or Ethernet, best for countertop and roaming in-store checkouts","docsShell.ReaderDetails.wisepose.feature4":"Accepts contactless, chip, and swipe payment methods","docsShell.ReaderDetails.wisepose.name":"BBPOS WisePOS® E","docsShell.Terminal.countryNames.AT":"Austria","docsShell.Terminal.countryNames.AU":"Australia","docsShell.Terminal.countryNames.BE":"Belgium","docsShell.Terminal.countryNames.CA":"Canada","docsShell.Terminal.countryNames.CH":"Switzerland","docsShell.Terminal.countryNames.DE":"Germany","docsShell.Terminal.countryNames.DK":"Denmark","docsShell.Terminal.countryNames.ES":"Spain","docsShell.Terminal.countryNames.FI":"Finland","docsShell.Terminal.countryNames.FR":"France","docsShell.Terminal.countryNames.GB":"United Kingdom","docsShell.Terminal.countryNames.HK":"Hong Kong","docsShell.Terminal.countryNames.IE":"Ireland","docsShell.Terminal.countryNames.IT":"Italy","docsShell.Terminal.countryNames.LU":"Luxembourg","docsShell.Terminal.countryNames.MY":"Malaysia","docsShell.Terminal.countryNames.NL":"Netherlands","docsShell.Terminal.countryNames.NO":"Norway","docsShell.Terminal.countryNames.NZ":"New Zealand","docsShell.Terminal.countryNames.PT":"Portugal","docsShell.Terminal.countryNames.SE":"Sweden","docsShell.Terminal.countryNames.SG":"Singapore","docsShell.Terminal.countryNames.US":"United States","docsShell.Terminal.footnote.betaCountryFootnote":"Terminal is currently in beta in this country.","docsShell.Terminal.footnote.betaIntegrationShapeFootnote":"This Terminal integration shape is currently in beta.","docsShell.Terminal.footnote.reactNativeIntegrationShapeFootnote":"Compatibility for this mobile SDK also applies when used with React Native.","docsShell.TerminalCompatibilityMatrix.betaCountryFootnote":"Terminal is currently in beta in this country.","docsShell.TerminalCompatibilityMatrix.betaIntegrationShapeFootnote":"This Terminal integration shape is currently in beta.","docsShell.TerminalCompatibilityMatrix.countries":"Countries","docsShell.TerminalCompatibilityMatrix.country":"Country","docsShell.TerminalCompatibilityMatrix.countryNames.AU":"Australia","docsShell.TerminalCompatibilityMatrix.countryNames.CA":"Canada","docsShell.TerminalCompatibilityMatrix.countryNames.DE":"Germany","docsShell.TerminalCompatibilityMatrix.countryNames.FR":"France","docsShell.TerminalCompatibilityMatrix.countryNames.GB":"United Kingdom","docsShell.TerminalCompatibilityMatrix.countryNames.IE":"Ireland","docsShell.TerminalCompatibilityMatrix.countryNames.NL":"Netherlands","docsShell.TerminalCompatibilityMatrix.countryNames.NZ":"New Zealand","docsShell.TerminalCompatibilityMatrix.countryNames.SG":"Singapore","docsShell.TerminalCompatibilityMatrix.countryNames.US":"United States","docsShell.TerminalCompatibilityMatrix.formatPlatform.android":"Android","docsShell.TerminalCompatibilityMatrix.formatPlatform.ios":"iOS","docsShell.TerminalCompatibilityMatrix.formatPlatform.js":"JavaScript","docsShell.TerminalCompatibilityMatrix.formatPlatform.server.driven":"Server-Driven","docsShell.TerminalCompatibilityMatrix.formatReader.chipper":"BBPOS Chipper 2X","docsShell.TerminalCompatibilityMatrix.formatReader.p400":"Verifone P400","docsShell.TerminalCompatibilityMatrix.formatReader.stripe.m2":"Stripe Reader M2","docsShell.TerminalCompatibilityMatrix.formatReader.wisepad3":"BBPOS WisePad 3","docsShell.TerminalCompatibilityMatrix.formatReader.wisepos.e":"BBPOS WisePOS E","docsShell.TerminalCountrySelector.country":"Country","docsShell.TerminalHardwareOrderCountries.countryException.FR":"\u0028excluding Saint-Pierre and Miquelon, Saint Barthélemy, French Southern Territories, Wallis and Futuna, French Polynesia and New Caledonia\u0029","docsShell.TerminalHardwareOrderCountries.countryException.NO":"\u0028excluding Svalbard and Jan Mayen\u0029","docsShell.TerminalHardwareOrderCountries.countryException.US":"\u0028excluding Virgin Islands and military addresses\u0029","docsShell.TerminalLocationAddressRequirementsTable.countries":"Countries","docsShell.TerminalLocationAddressRequirementsTable.requiredAddressProperties":"Required Address Properties","docsShell.breadcrumbs.home":"Home","docsShell.breadcrumbs.label":"Breadcrumbs","docsShell.changelog.empty":"\u0028Changes introduced in this version have since been removed.\u0029","docsShell.codeBlock.keyToken.loggedOut":"This is a public \u003Cstrong\u003Esample\u003C\u002Fstrong\u003E test mode \u003Ca\u003EAPI key\u003C\u002Fa\u003E. Don’t submit any personally identifiable information in requests made with this key.","docsShell.codeBlock.keyToken.prompt":"\u003Cb\u003ESign in\u003C\u002Fb\u003E to see examples prefilled with your test keys.","docsShell.codeBlock.keyToken.type":"This is your {type} \u003Ca\u003EAPI key\u003C\u002Fa\u003E. Do not check it into your source control. You can manage and view your other keys in the \u003Cb\u003EDashboard\u003C\u002Fb\u003E.","docsShell.collectEmail.defaultFormCtaText":"Get updates","docsShell.collectEmail.defaultFormEmailPlaceholder":"Email","docsShell.collectEmail.emailConfimation.md":"Signed up successfully\u0021","docsShell.collectEmail.failed":"Sorry, your signup was unsuccessful.","docsShell.collectEmail.networkError":"You might have had an internet hiccup. Try again?","docsShell.collectEmail.privacyPolicy.md":"Read our \u003Ca\u003Eprivacy policy\u003C\u002Fa\u003E.","docsShell.complexityCallout.ariaLabel":"This integration has a complexity score of {complexity} out of 5. A score of 1 means it's easy to integrate while a score of 5 means it's difficult.","docsShell.complexityCallout.label":"Complexity","docsShell.connectButton.label":"Connect with","docsShell.connectPayoutCurrencies.error":"Unable to load the table of connect payout currencies","docsShell.connectPayoutCurrencies.loading":"Loading a table of connect payout currencies","docsShell.cookieBanner.accept":"Accept all","docsShell.cookieBanner.close":"Close","docsShell.cookieBanner.cookieDescription":"We use cookies to improve your experience and for marketing. Read our \u003CCookiePolicyLink\u003Ecookie policy\u003C\u002FCookiePolicyLink\u003E or \u003CManageCookiesLink\u003Emanage cookies\u003C\u002FManageCookiesLink\u003E.","docsShell.cookieBanner.dismiss":"OK\u0021 We'll only set cookies that are absolutely necessary for our systems to function.","docsShell.cookieBanner.manage":"Manage cookies","docsShell.cookieBanner.prompt":"We use cookies to improve your experience and for marketing. Learn more in our \u003Ca\u003Ecookie policy\u003C\u002Fa\u003E.","docsShell.cookieBanner.rejectAll":"Reject all","docsShell.csat.improve":"What went wrong?","docsShell.csat.mostHelpful":"What did you like?","docsShell.csat.no":"No","docsShell.csat.okToFollowUp":"Yes, it's okay to follow up by email","docsShell.csat.pageHelpful":"Was this page helpful?","docsShell.csat.submit":"Submit","docsShell.csat.thankYouMessage":"Thank you for helping improve Stripe's documentation\u0021","docsShell.csat.yes":"Yes","docsShell.currencies.alternativeCurrencySettlementFees.ChargeFeeHeader":"Charge fee","docsShell.currencies.alternativeCurrencySettlementFees.CurrencyHeader":"Currency","docsShell.currencies.alternativeCurrencySettlementFees.DisputeFeeHeader":"Dispute fee","docsShell.currencies.alternativeCurrencySettlementFees.DropDownLabel":"Viewing supported settlement currencies for","docsShell.currencies.alternativeCurrencySettlementFees.Error":"Unable to load the table of settlement fees","docsShell.currencies.alternativeCurrencySettlementFees.Loading":"Loading a table of settlement fees","docsShell.currencies.alternativeCurrencySettlementFees.TableHeader":"Acquiring fees for card usage in alternative currencies for accounts created in {countryName}.","docsShell.diagram.entityDiagram.hide":"hide sample arguments","docsShell.diagram.entityDiagram.show":"show sample arguments","docsShell.diagram.iconDiagram.account":"Connect account","docsShell.diagram.iconDiagram.bank":"Bank","docsShell.diagram.iconDiagram.client":"Client","docsShell.diagram.iconDiagram.customer":"Customer","docsShell.diagram.iconDiagram.platform":"Platform","docsShell.diagram.iconDiagram.reader":"Reader","docsShell.diagram.iconDiagram.server":"Server","docsShell.diagram.overviewDiagram.account":"Connected account","docsShell.diagram.overviewDiagram.bank":"Bank","docsShell.diagram.overviewDiagram.client":"Client","docsShell.diagram.overviewDiagram.customer":"Customer","docsShell.diagram.overviewDiagram.finaccount":"Financial account","docsShell.diagram.overviewDiagram.platform":"Platform","docsShell.diagram.overviewDiagram.reader":"Reader","docsShell.diagram.overviewDiagram.server":"Server","docsShell.diagram.overviewDiagram.terminal":"Reader","docsShell.enableACHButton.ACHactivated":"ACH Activated","docsShell.enableACHButton.enableACH":"Enable ACH","docsShell.footer.changeLog":"Check out our \u003Ca\u003Eproduct changelog\u003C\u002Fa\u003E.","docsShell.footer.devDigestFailed":"Sorry, your signup was unsuccessful","docsShell.footer.devDigestFailedEmail":"Sorry, your signup was unsuccessful due to an invalid email","docsShell.footer.devDigestThankYou":"Thank you, we’ll let you know when our next dev digest goes out.","docsShell.footer.devTutorials":"Watch our \u003Ca\u003Edeveloper tutorials\u003C\u002Fa\u003E.","docsShell.footer.poweredByMarkdoc.md":"Powered by \u003Ca\u003EMarkdoc\u003C\u002Fa\u003E","docsShell.footer.questions":"Questions? \u003Ca\u003EContact us\u003C\u002Fa\u003E.","docsShell.footer.signUp":"Sign up","docsShell.footer.signUpForUpdates":"Sign up for developer updates:","docsShell.footer.youCanUnsubscribe":"You can unsubscribe at any time. Read our \u003Ca\u003Eprivacy policy\u003C\u002Fa\u003E.","docsShell.home.title":"Stripe Documentation","docsShell.ib.billing.html.add-checkout-button.body":"Add a button to your order preview page. Clicking this button redirects your customer to the Stripe-hosted Checkout page. The \u003Ccode\u003Elookup_key\u003C\u002Fcode\u003E was added when you created the product and price in the first step. When the form is submitted it is used to retrieve the \u003Ccode\u003Eprice_id\u003C\u002Fcode\u003E on the server.","docsShell.ib.billing.html.add-checkout-button.heading":"Add a checkout button","docsShell.ib.billing.html.add-customer.body":"Attach an existing customer to a Checkout session.","docsShell.ib.billing.html.add-customer.heading":"Subscribe existing customers","docsShell.ib.billing.html.add-discount.body":"Attach a coupon to a Checkout session.","docsShell.ib.billing.html.add-discount.heading":"Add discounts","docsShell.ib.billing.html.add-portal-button.body":"Add a button to redirect to the customer portal to allow customers to manage their subscription. Clicking this button redirects your customer to the Stripe-hosted customer portal page.","docsShell.ib.billing.html.add-portal-button.heading":"Add a customer portal button","docsShell.ib.billing.html.add-trial.body":"Attach a trial period to a Checkout session.","docsShell.ib.billing.html.add-trial.heading":"Add trials","docsShell.ib.billing.html.cancel-page.body":"Add another page for \u003Ccode\u003Ecancel_url\u003C\u002Fcode\u003E. Stripe redirects to this page when the customer clicks the back button in Checkout.","docsShell.ib.billing.html.cancel-page.heading":"Add a canceled page","docsShell.ib.billing.html.create.body":"Add an endpoint on your server that creates a \u003Ca\u003ECheckout Session\u003C\u002Fa\u003E. A Checkout Session controls what your customer sees in the Stripe-hosted payment page such as line items, the order amount and currency, and acceptable payment methods.","docsShell.ib.billing.html.create.heading":"Create a Checkout Session","docsShell.ib.billing.html.create.portal.session.heading":"Create a customer portal session","docsShell.ib.billing.html.customer.body":"The ID of the customer for this Session. For Checkout Sessions in \u003Ccode\u003Epayment\u003C\u002Fcode\u003E or \u003Ccode\u003Esubscription\u003C\u002Fcode\u003E mode, Checkout creates a new customer object based on information provided during the payment flow unless an existing customer was provided when the Session was created. In \u003Ccode\u003Esubscription\u003C\u002Fcode\u003E mode, the customer’s default payment method will be used if it’s a card. Otherwise, the most recent card will be used. A valid billing address is required for Checkout to prefill the customer’s card details.","docsShell.ib.billing.html.customer.heading":"Reference existing customer","docsShell.ib.billing.html.customize.body":"You can customize by adding trials, adding discounts, or specifying an existing customer.","docsShell.ib.billing.html.customize.heading":"Customize your billing integration","docsShell.ib.billing.html.discounts.body":"You can apply coupons to subscriptions in a Checkout Session by setting discounts. Add the coupon or promotion code to apply to this Session. Currently, you can only specify one coupon.","docsShell.ib.billing.html.discounts.heading":"Discounts","docsShell.ib.billing.html.fetch-customer-portal.body":"Make a request to the endpoint on your server to create a new customer portal session as soon as the page loads. This request uses the session \u003Ccode\u003Eid\u003C\u002Fcode\u003E from the \u003Ca\u003ECheckout session\u003C\u002Fa\u003E that was created. The \u003Ccode\u003Esession_id\u003C\u002Fcode\u003E is used for demonstration purposes to retrieve the \u003Ccode\u003Ecustomer_id\u003C\u002Fcode\u003E. In a production environment, this is typically stored alongside the authenticated user in your database.","docsShell.ib.billing.html.fetch-customer-portal.heading":"Fetch the customer portal session","docsShell.ib.billing.html.line-items.body":"Always keep sensitive information about your product inventory, such as price and availability, on your server to prevent customer manipulation from the client. Pass in the predefined price ID retrieved above.","docsShell.ib.billing.html.line-items.heading":"Define the line items","docsShell.ib.billing.html.mode.body":"Use \u003Ccode\u003Esubscription\u003C\u002Fcode\u003E mode to set up a subscription. Checkout also has \u003Ccode\u003Epayment\u003C\u002Fcode\u003E and \u003Ccode\u003Esetup\u003C\u002Fcode\u003E modes. Learn more about \u003CpaymentA\u003Epayment\u003C\u002FpaymentA\u003E and \u003CsetupA\u003Esetup\u003C\u002FsetupA\u003E modes in the docs.","docsShell.ib.billing.html.mode.heading":"Choose the mode","docsShell.ib.billing.html.payment-methods.body":"Checkout supports \u003CseveralA\u003Eseveral payment methods\u003C\u002FseveralA\u003E beyond cards. If you pass multiple payment methods, Checkout dynamically reorders them to prioritize the most relevant payment methods based on the customer’s location and other characteristics. If you accept cards as a payment method, Apple Pay and Google Pay display in Stripe Checkout when applicable.","docsShell.ib.billing.html.payment-methods.heading":"Specify payment methods","docsShell.ib.billing.html.portal.body":"Add an endpoint on your server that creates a \u003Ca\u003Ecustomer portal session\u003C\u002Fa\u003E. The customer portal is a secure, Stripe-hosted page that lets your customers manage their subscriptions and billing details. A session creates an instance of the portal for a specific customer. When they visit the URL for the session, they can manage their subscriptions and billing details. ","docsShell.ib.billing.html.portal.heading":"Create a customer portal session","docsShell.ib.billing.html.preview-page.body":"Add a page to your site to display your product and offer your customers an option to subscribe to it. When they click the checkout button, they’re redirected to a Stripe-hosted \u003Ca\u003ECheckout\u003C\u002Fa\u003E page. The order is finalized when your customer is sent to the Checkout page—they can’t modify it after that point.","docsShell.ib.billing.html.preview-page.heading":"Add a pricing preview page","docsShell.ib.billing.html.price.body":"Use \u003Ca\u003EPrices\u003C\u002Fa\u003E to retrieve the price of the product you're selling by passing in the lookup key you created above.","docsShell.ib.billing.html.price.heading":"Get the price from lookup key","docsShell.ib.billing.html.redirect.body":"After creating the session, redirect your customer to the URL returned in the response \u0028either the success or cancel URL\u0029.","docsShell.ib.billing.html.redirect.checkout.body":"After creating the session, redirect your customer to the URL returned in the response \u0028either the success or cancel URL\u0029.","docsShell.ib.billing.html.redirect.checkout.heading":"Redirect to Checkout","docsShell.ib.billing.html.redirect.heading":"Redirect to Checkout","docsShell.ib.billing.html.redirect.portal.body":"After creating the portal session, redirect your customer to the URL returned in the response \u0028either the success or cancel URL\u0029.","docsShell.ib.billing.html.redirect.portal.heading":"Redirect to customer portal","docsShell.ib.billing.html.run-server.body":"Start your server and navigate to http:\u002F\u002Flocalhost:4242\u002F","docsShell.ib.billing.html.run-server.heading":"Run the application","docsShell.ib.billing.html.success-page.body":"Create a success page for the URL you provided as the Checkout Session \u003Ccode\u003Esuccess_url\u003C\u002Fcode\u003E to display order confirmation messaging or order details to your customer. Stripe redirects to this page after the customer successfully completes the checkout.","docsShell.ib.billing.html.success-page.heading":"Add a success page","docsShell.ib.billing.html.testing.body":"Click the checkout button to be redirected to the Stripe Checkout page. Use any of these test cards to simulate a payment.","docsShell.ib.billing.html.testing.heading":"Try it out","docsShell.ib.billing.html.trial-period-days.body":"Use \u003Ccode\u003Esubscription_data\u003C\u002Fcode\u003E to add an integer representing the number of \u003Ccode\u003Etrial_period_days\u003C\u002Fcode\u003E before the customer is charged for the first time. This must be at least 1.","docsShell.ib.billing.html.trial-period-days.heading":"Add a trial period","docsShell.ib.billing.html.urls.body":"Specify URLs for success and cancel pages—make sure they're publicly accessible so Stripe can redirect customers to them. You can also handle both the success and canceled states with the same URL. Add session_id query parameter at the end of your URL so you can retrieve the customer later.","docsShell.ib.billing.html.urls.heading":"Supply success and cancel URLs","docsShell.ib.billing.html.webhooks.body":"After a successful payment, a confirmation page displays. At this point it’s safe to provision the product for the customer—this means verifying the status of the subscription is \u003Ccode\u003Eactive\u003C\u002Fcode\u003E and granting them access to the products and features they subscribed to. Create your \u003Ccode\u003E\u002Fwebhook\u003C\u002Fcode\u003E endpoint and get your webhook secret key in the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E.","docsShell.ib.billing.html.webhooks.heading":"Provision access","docsShell.ib.billing.react.add-checkout-button.body":"Add a button to your order preview page. Clicking this button redirects your customer to the Stripe-hosted Checkout page. The \u003Ccode\u003Elookup_key\u003C\u002Fcode\u003E was added when you created the product and price in the first step. When the form is submitted it is used to retrieve the \u003Ccode\u003Eprice_id\u003C\u002Fcode\u003E on the server.","docsShell.ib.billing.react.add-checkout-button.heading":"Add a checkout button","docsShell.ib.billing.react.add-portal-button.body":"Add a button to redirect to the customer portal to allow customers to manage their subscription. When your customer clicks this button, they’re redirected to the Stripe-hosted customer portal page.","docsShell.ib.billing.react.add-portal-button.heading":"Add a customer portal button","docsShell.ib.billing.react.add-trial.body":"Attach a trial period to a Checkout session.","docsShell.ib.billing.react.add-trial.heading":"Add trials","docsShell.ib.billing.react.create.body":"Add an endpoint on your server that creates a \u003Ca\u003ECheckout Session\u003C\u002Fa\u003E. A Checkout Session controls what your customer sees in the Stripe-hosted payment page such as line items, the order amount and currency, and acceptable payment methods.","docsShell.ib.billing.react.create.heading":"Create a Checkout Session","docsShell.ib.billing.react.fetch-customer-portal.body":"Make a request to the endpoint on your server to redirect to a new customer portal session. This request uses the session \u003Ccode\u003Eid\u003C\u002Fcode\u003E from the \u003Ca\u003ECheckout session\u003C\u002Fa\u003E that was created. The \u003Ccode\u003Esession_id\u003C\u002Fcode\u003E is used for demonstration purposes to retrieve the \u003Ccode\u003Ecustomer_id\u003C\u002Fcode\u003E. In a production environment, this is typically stored alongside the authenticated user in your database.","docsShell.ib.billing.react.fetch-customer-portal.heading":"Redirect to the customer portal session","docsShell.ib.billing.react.line-items.body":"Always keep sensitive information about your product inventory, like price and availability, on your server to prevent customer manipulation from the client. Pass in the pre-defined price ID retrieved above.","docsShell.ib.billing.react.line-items.heading":"Define the line items","docsShell.ib.billing.react.mode.body":"Use \u003Ccode\u003Esubscription\u003C\u002Fcode\u003E mode to set up a subscription. Checkout also has \u003Ccode\u003Epayment\u003C\u002Fcode\u003E and \u003Ccode\u003Esetup\u003C\u002Fcode\u003E modes. Learn more about \u003CpaymentA\u003Epayment\u003C\u002FpaymentA\u003E and \u003CsetupA\u003Esetup\u003C\u002FsetupA\u003E modes in the docs.","docsShell.ib.billing.react.mode.heading":"Choose the mode","docsShell.ib.billing.react.payment-methods.body":"Checkout supports \u003CseveralA\u003Eseveral payment methods\u003C\u002FseveralA\u003E beyond cards. If you pass multiple payment methods, Checkout dynamically reorders them to prioritize the most relevant payment methods based on the customer’s location and other characteristics. If you accept cards as a payment method, Apple Pay and Google Pay are displayed in Stripe Checkout when applicable.","docsShell.ib.billing.react.payment-methods.heading":"Specify payment methods","docsShell.ib.billing.react.portal.body":"Add an endpoint on your server that creates a customer portal session. The customer portal is a secure, Stripe-hosted page that lets your customers manage their subscriptions and billing details. A session creates an instance of the portal for a specific customer. When the customer visits the session's URL, they can manage their subscriptions and billing details. ","docsShell.ib.billing.react.portal.heading":"Create a customer portal session","docsShell.ib.billing.react.preview-page.body":"Add a page to your site to display your product and offer your customers an option to subscribe to it. When they click the checkout button, they’re redirected to a Stripe-hosted \u003Ca\u003ECheckout\u003C\u002Fa\u003E page. The order is finalized when your customer is sent to the Checkout page—they can’t modify it after that point.","docsShell.ib.billing.react.preview-page.heading":"Add a pricing preview page","docsShell.ib.billing.react.price.body":"Use \u003Ca\u003EPrices\u003C\u002Fa\u003E to retrieve the price of the product you are selling by passing in the lookup key you created above.","docsShell.ib.billing.react.price.heading":"Get the price from lookup key","docsShell.ib.billing.react.redirect.body":"After creating the session, redirect your customer to the URL returned in the response \u0028either the success or cancel URL\u0029.","docsShell.ib.billing.react.redirect.heading":"Redirect to Checkout","docsShell.ib.billing.react.redirect.portal.body":"After creating the portal session, redirect your customer to the URL returned in the response \u0028either the success or cancel URL\u0029.","docsShell.ib.billing.react.redirect.portal.heading":"Redirect to customer portal","docsShell.ib.billing.react.run-server.body":"Start your server. It automatically opens a browser window to http:\u002F\u002Flocalhost:3000\u002Fcheckout","docsShell.ib.billing.react.run-server.heading":"Run the application","docsShell.ib.billing.react.success-page.body":"Create a success page for the URL you provided as the Checkout Session \u003Ccode\u003Esuccess_url\u003C\u002Fcode\u003E to display order confirmation messaging or order details to your customer. Stripe redirects to this page after the customer successfully completes the checkout.","docsShell.ib.billing.react.success-page.heading":"Add a success page","docsShell.ib.billing.react.testing.body":"Click the checkout button to be redirected to the Stripe Checkout page. Use any of these test cards to simulate a payment.","docsShell.ib.billing.react.testing.heading":"Try it out","docsShell.ib.billing.react.trial-period-days.body":"Use \u003Ccode\u003Esubscription_data\u003C\u002Fcode\u003E to add an integer representing the number of \u003Ccode\u003Etrial_period_days\u003C\u002Fcode\u003E before the customer is charged for the first time. Has to be at least 1.","docsShell.ib.billing.react.trial-period-days.heading":"Add a trial period","docsShell.ib.billing.react.urls.body":"Specify URLs for success and cancel pages—make sure they are publicly accessible so Stripe can redirect customers to them. You can also handle both the success and canceled states with the same URL. Add session_id query parameter at the end of your URL to be able to retrieve the customer later.","docsShell.ib.billing.react.urls.heading":"Supply success and cancel URLs","docsShell.ib.billing.react.webhooks.body":"After a successful payment, a confirmation page is displayed. At this point it’s safe to provision the product for the customer. This means verifying the status of the subscription is \u003Ccode\u003Eactive\u003C\u002Fcode\u003E and granting the customer access to the products and features they subscribed to. Create your \u003Ccode\u003E\u002Fwebhook\u003C\u002Fcode\u003E endpoint and get your webhook secret key in the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E.","docsShell.ib.billing.react.webhooks.heading":"Provision access","docsShell.ib.bucketPrice.description":"{bucketQuantity, plural,\n one {{usageType, select, metered {{formattedPrice} per {unitLabel}} other {{formattedPrice}}}}\n other {{formattedPrice} per group of {bucketQuantity, number}}\n }","docsShell.ib.checkout.html.add-button.body":"Add a button to your order preview page. When your customer clicks this button, they're redirected to the Stripe-hosted payment page.","docsShell.ib.checkout.html.add-button.heading":"Add a checkout button","docsShell.ib.checkout.html.address.body":"Use \u003Ccode\u003Ebilling_address_collection\u003C\u002Fcode\u003E and \u003Ccode\u003Eshipping_address_collection\u003C\u002Fcode\u003E to collect your customer's address. \u003Ccode\u003Eshipping_address_collection\u003C\u002Fcode\u003E requires a list of \u003Ccode\u003Eallowed_countries\u003C\u002Fcode\u003E. Checkout displays the list of allowed countries in a dropdown on the page.","docsShell.ib.checkout.html.address.heading":"Collect billing and shipping details","docsShell.ib.checkout.html.automatic-tax-param.body":"Set the \u003Ccode\u003Eautomatic_tax\u003C\u002Fcode\u003E parameter to \u003Ccode\u003Eenabled: true\u003C\u002Fcode\u003E.","docsShell.ib.checkout.html.automatic-tax-param.heading":"Add the automatic tax parameter","docsShell.ib.checkout.html.automatic-tax-setup.body":"\u003Ca\u003EActivate Stripe Tax\u003C\u002Fa\u003E to monitor your tax obligations, automatically collect tax, and access the reports you need to file returns.","docsShell.ib.checkout.html.automatic-tax-setup.heading":"Set up Stripe Tax in the dashboard","docsShell.ib.checkout.html.automatic-tax.body":"Calculate and collect the right amount of tax on your Stripe transactions. Learn more about \u003Ca1\u003EStripe Tax\u003C\u002Fa1\u003E and \u003Ca2\u003Ehow to add it to Checkout\u003C\u002Fa2\u003E.","docsShell.ib.checkout.html.automatic-tax.heading":"Automate tax collection","docsShell.ib.checkout.html.cancel-page.body":"Add another page for \u003Ccode\u003Ecancel_url\u003C\u002Fcode\u003E. Stripe redirects to this page when the customer clicks the back button in Checkout.","docsShell.ib.checkout.html.cancel-page.heading":"Add a canceled page","docsShell.ib.checkout.html.create.body":"Add an endpoint on your server that creates a \u003Ca\u003ECheckout Session\u003C\u002Fa\u003E. A Checkout Session controls what your customer sees in the Stripe-hosted payment page such as line items, the order amount and currency, and acceptable payment methods.","docsShell.ib.checkout.html.create.heading":"Create a Checkout Session","docsShell.ib.checkout.html.customize.body":"You can customize the appearance of the hosted Checkout page by adding your logo and color theme in the Dashboard's \u003CbrandingA\u003Ebranding settings\u003C\u002FbrandingA\u003E, or by using the API to activate additional features like address collection. Explore a few examples below, or see the \u003CapiRefA\u003EAPI reference\u003C\u002FapiRefA\u003E for the full list of configurable fields.","docsShell.ib.checkout.html.customize.heading":"Customize the checkout page","docsShell.ib.checkout.html.fetch-checkout-session.body":"Make a request to the endpoint on your server to create a new Checkout Session when your customer clicks on the checkout button.","docsShell.ib.checkout.html.fetch-checkout-session.heading":"Fetch a Checkout Session","docsShell.ib.checkout.html.init-stripe.body":"Initialize Stripe.js with your publishable API key.","docsShell.ib.checkout.html.init-stripe.heading":"Initialize Stripe.js","docsShell.ib.checkout.html.line-items.billing-period.custom":"Custom","docsShell.ib.checkout.html.line-items.billing-period.day":"Daily","docsShell.ib.checkout.html.line-items.billing-period.month":"Monthly","docsShell.ib.checkout.html.line-items.billing-period.quarter":"Every 3 months","docsShell.ib.checkout.html.line-items.billing-period.semiannual":"Every 6 months","docsShell.ib.checkout.html.line-items.billing-period.week":"Weekly","docsShell.ib.checkout.html.line-items.billing-period.year":"Yearly","docsShell.ib.checkout.html.line-items.body":"Always keep sensitive information about your product inventory, like price and availability, on your server to prevent customer manipulation from the client. Define product information when you create the Checkout Session using \u003Ca\u003Epredefined price IDs\u003C\u002Fa\u003E or on the fly with \u003Ccode\u003E\u003Ca2\u003Eprice_data\u003C\u002Fa2\u003E\u003C\u002Fcode\u003E.","docsShell.ib.checkout.html.line-items.heading":"Define the line items","docsShell.ib.checkout.html.line-items.option.addProduct":"Add new test product","docsShell.ib.checkout.html.line-items.option.billingPeriod":"Billing period","docsShell.ib.checkout.html.line-items.option.cancel":"Cancel","docsShell.ib.checkout.html.line-items.option.chooseLabel":"Select a test product or create a new one","docsShell.ib.checkout.html.line-items.option.createProduct":"Create test product","docsShell.ib.checkout.html.line-items.option.createProductTooltip":"When you're ready to go live, remember to update this with a live mode product.","docsShell.ib.checkout.html.line-items.option.error":"An unexpected error occurred. Please try again.","docsShell.ib.checkout.html.line-items.option.learnMore":"Learn more","docsShell.ib.checkout.html.line-items.option.lookupKey":"Lookup key","docsShell.ib.checkout.html.line-items.option.lookupKeyTooltip":"A lookup key used to retrieve prices dynamically from a static string.","docsShell.ib.checkout.html.line-items.option.moreProductOptions":"More options","docsShell.ib.checkout.html.line-items.option.name":"Name","docsShell.ib.checkout.html.line-items.option.namePlaceholder":"Sunglasses, premium plan, etc.","docsShell.ib.checkout.html.line-items.option.oneTime":"One-time","docsShell.ib.checkout.html.line-items.option.price":"Price","docsShell.ib.checkout.html.line-items.option.recurring":"Recurring","docsShell.ib.checkout.html.load-stripe.body":"Stripe Checkout relies on Stripe.js, Stripe’s foundational JavaScript library for collecting sensitive payment information and advanced fraud detection. Always load Stripe.js from js.stripe.com to remain compliant. Do not include the script in a bundle or host it yourself.","docsShell.ib.checkout.html.load-stripe.heading":"Load Stripe.js","docsShell.ib.checkout.html.mode.body":"Checkout has three modes: \u003Ccode\u003Epayment\u003C\u002Fcode\u003E, \u003Ccode\u003Esubscription\u003C\u002Fcode\u003E, or \u003Ccode\u003Esetup\u003C\u002Fcode\u003E. Use \u003Ccode\u003Epayment\u003C\u002Fcode\u003E mode for one-time purchases. Learn more about \u003CsubscriptionA\u003Esubscription\u003C\u002FsubscriptionA\u003E and \u003CsetupA\u003Esetup\u003C\u002FsetupA\u003E modes in the docs.","docsShell.ib.checkout.html.mode.heading":"Choose the mode","docsShell.ib.checkout.html.payment-methods.body":"Checkout supports \u003CseveralA\u003Eseveral payment methods\u003C\u002FseveralA\u003E beyond cards. If you pass multiple payment methods, Checkout dynamically reorders them to prioritize the most relevant payment methods based on the customer’s location and other characteristics. If you accept cards as a payment method, Apple Pay and Google Pay are displayed in Stripe Checkout when applicable.","docsShell.ib.checkout.html.payment-methods.heading":"Specify payment methods","docsShell.ib.checkout.html.prefill-email.body":"Use \u003Ccode\u003Ecustomer_email\u003C\u002Fcode\u003E to prefill the customer's email address in the email input field. You can also pass a \u003Ca\u003ECustomer\u003C\u002Fa\u003E ID to \u003Ccode\u003Ecustomer\u003C\u002Fcode\u003E field to prefill the email address field with the email stored on the Customer.","docsShell.ib.checkout.html.prefill-email.heading":"Prefill customer data","docsShell.ib.checkout.html.preview-page.body":"Finally, add a page to show a preview of the customer's order. Allow the customer to review or modify their order—once a customer is sent to the Checkout page, the order is final and cannot be modified without creating a new Checkout Session.","docsShell.ib.checkout.html.preview-page.heading":"Add an order preview page","docsShell.ib.checkout.html.redirect.body":"After creating the session, redirect your customer to the Checkout page's URL returned in the response.","docsShell.ib.checkout.html.redirect.heading":"Redirect to Checkout","docsShell.ib.checkout.html.run-server.body":"Start your server and navigate to \u003Ca\u003Ehttp:\u002F\u002Flocalhost:4242\u002Fcheckout.html\u003C\u002Fa\u003E","docsShell.ib.checkout.html.run-server.heading":"Run the application","docsShell.ib.checkout.html.submit-button.body":"Configure the copy displayed on the Checkout submit button by setting the \u003Ccode\u003Esubmit_type\u003C\u002Fcode\u003E. There are four different submit types.","docsShell.ib.checkout.html.submit-button.heading":"Pick a submit button","docsShell.ib.checkout.html.success-page.body":"Create a success page for the URL you provided as the Checkout Session \u003Ccode\u003Esuccess_url\u003C\u002Fcode\u003E to display order confirmation messaging or order details to your customer. Stripe redirects to this page after the customer successfully completes the checkout.","docsShell.ib.checkout.html.success-page.heading":"Add a success page","docsShell.ib.checkout.html.testing-customized.body":"Click the checkout button in the preview on the right to see a sample Stripe Checkout page with these additional fields. \u003Ca\u003ERead our docs\u003C\u002Fa\u003E for all the ways you can customize Checkout—we continuously add new features.","docsShell.ib.checkout.html.testing-customized.heading":"Preview the customized page","docsShell.ib.checkout.html.testing.body":"Click the checkout button to be redirected to the Stripe Checkout page. Use any of these test cards to simulate a payment.","docsShell.ib.checkout.html.testing.cards.auth":"Payment requires authentication","docsShell.ib.checkout.html.testing.cards.declined":"Payment is declined","docsShell.ib.checkout.html.testing.cards.success":"Payment succeeds","docsShell.ib.checkout.html.testing.heading":"Try it out","docsShell.ib.checkout.html.urls.body":"Specify URLs for success and cancel pages—make sure they are publicly accessible so Stripe can redirect customers to them. You can also handle both the success and canceled states with the same URL.","docsShell.ib.checkout.html.urls.heading":"Supply success and cancel URLs","docsShell.ib.defaultUnitLabel":"unit","docsShell.ib.orders.html.line-items.option.addProduct":"Add new test product","docsShell.ib.orders.html.line-items.option.cancel":"Cancel","docsShell.ib.orders.html.line-items.option.chooseLabel":"Select a test product or create a new one","docsShell.ib.orders.html.line-items.option.createProduct":"Create test product","docsShell.ib.orders.html.line-items.option.createProductTooltip":"When you’re ready to go live, remember to update this with a live mode product.","docsShell.ib.orders.html.line-items.option.error":"An unexpected error occurred. Please try again.","docsShell.ib.orders.html.line-items.option.learnMore":"Learn more","docsShell.ib.orders.html.line-items.option.moreProductOptions":"More product options","docsShell.ib.orders.html.line-items.option.name":"Name","docsShell.ib.orders.html.line-items.option.namePlaceholder":"Sunglasses, premium plan, etc.","docsShell.ib.orders.html.line-items.option.price":"Price","docsShell.ib.price.description":"{intervalCount, plural,\n one {{intervalUnit, select,\n day {{formattedPrice} \u002F day}\n week {{formattedPrice} \u002F week}\n month {{formattedPrice} \u002F month}\n year {{formattedPrice} \u002F year}\n one_time {{formattedPrice}}\n other {}\n }}\n other {{intervalUnit, select,\n day {{formattedPrice} every {formattedIntervalCount} days}\n week {{formattedPrice} every {formattedIntervalCount} weeks}\n month {{formattedPrice} every {formattedIntervalCount} months}\n year {{formattedPrice} every {formattedIntervalCount} years}\n other {}\n }}\n }","docsShell.ib.signIn.when.logged.out":"Sign in","docsShell.imageGroup.watchVideoButton":"Watch video","docsShell.integrationBuilder.aap.android.java.steps.collect-details.body":"When the customer clicks the pay button, create an \u003Ca\u003EConfirmPaymentIntentParams\u003C\u002Fa\u003E object with the card details and client secret from the PaymentIntent you created on the server.","docsShell.integrationBuilder.aap.android.java.steps.collect-details.heading":"Collect payment details","docsShell.integrationBuilder.aap.android.java.steps.create.body":"Add an endpoint on your server that creates a \u003Ca\u003EPaymentIntent\u003C\u002Fa\u003E when your customer is ready to pay. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring the customer can only be charged once. Return the PaymentIntent's client secret in the response to finish the payment on the client.","docsShell.integrationBuilder.aap.android.java.steps.create.heading":"Create a PaymentIntent","docsShell.integrationBuilder.aap.android.java.steps.define-form.body":"Add an instance of Stripe’s CardInputWidget to your checkout form. This is used to collect card details and ensures that the sensitive details never touch your server.","docsShell.integrationBuilder.aap.android.java.steps.define-form.heading":"Define your payment form","docsShell.integrationBuilder.aap.android.java.steps.fetch-pi.body":"Make a request to your server for a PaymentIntent as soon as the view loads. Store a reference to the client secret.","docsShell.integrationBuilder.aap.android.java.steps.fetch-pi.heading":"Fetch a PaymentIntent","docsShell.integrationBuilder.aap.android.java.steps.finish.body":"Send the payment details to Stripe with by calling \u003Ccode\u003EpaymentLauncher.confirm\u0028\u0029\u003C\u002Fcode\u003E.","docsShell.integrationBuilder.aap.android.java.steps.finish.heading":"Finish the payment","docsShell.integrationBuilder.aap.android.java.steps.handle-response.body":"If your customer’s card is declined, the completion block is called with an error. Show that error to your customer so they can try again with a different card. If no error occurred, tell your customer the payment was successful\u0021","docsShell.integrationBuilder.aap.android.java.steps.handle-response.heading":"Handle the response from Stripe","docsShell.integrationBuilder.aap.android.java.steps.load-stripe.body":"To install the SDK, add stripe-android as a dependency. This sample uses OkHttp and GSON to make requests to the server, also include those as dependencies if needed.","docsShell.integrationBuilder.aap.android.java.steps.load-stripe.github.body":"The Stripe Android SDK is open-sourced.","docsShell.integrationBuilder.aap.android.java.steps.load-stripe.github.label":"GitHub","docsShell.integrationBuilder.aap.android.java.steps.load-stripe.github.link.label":"View on GitHub","docsShell.integrationBuilder.aap.android.java.steps.load-stripe.gradle.body":"Add the dependencies to your build.gradle file:","docsShell.integrationBuilder.aap.android.java.steps.load-stripe.gradle.label":"Gradle","docsShell.integrationBuilder.aap.android.java.steps.load-stripe.heading":"Install the SDK","docsShell.integrationBuilder.aap.android.java.steps.test-cards.auth":"Payment requires authentication","docsShell.integrationBuilder.aap.android.java.steps.test-cards.body":"Use a test card number to try your integration. These card numbers work in test mode with any CVC, postal code, and future expiry date. Stripe also has a set of \u003Ca\u003Einternational test cards\u003C\u002Fa\u003E to test specific postal code formats \u0028e.g. only allow numerical values for U.S. zip codes\u0029.","docsShell.integrationBuilder.aap.android.java.steps.test-cards.declined":"Payment is declined","docsShell.integrationBuilder.aap.android.java.steps.test-cards.heading":"Make a test payment","docsShell.integrationBuilder.aap.android.java.steps.test-cards.success":"Payment succeeds","docsShell.integrationBuilder.aap.android.kotlin.steps.collect-details.body":"When the customer clicks the pay button, create an \u003Ca\u003EConfirmPaymentIntentParams\u003C\u002Fa\u003E object with the card details and client secret from the PaymentIntent you created on the server.","docsShell.integrationBuilder.aap.android.kotlin.steps.collect-details.heading":"Collect payment details","docsShell.integrationBuilder.aap.android.kotlin.steps.create.body":"Add an endpoint on your server that creates a \u003Ca\u003EPaymentIntent\u003C\u002Fa\u003E. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring the customer is only charged once. Return the PaymentIntent's client secret in the response to finish the payment on the client.","docsShell.integrationBuilder.aap.android.kotlin.steps.create.heading":"Create a PaymentIntent","docsShell.integrationBuilder.aap.android.kotlin.steps.define-form.body":"Add an instance of Stripe’s CardInputWidget to your checkout form. This is used to collect card details and ensures that the sensitive details never touch your server.","docsShell.integrationBuilder.aap.android.kotlin.steps.define-form.heading":"Define your payment form","docsShell.integrationBuilder.aap.android.kotlin.steps.fetch-pi.body":"Make a request to your server for a PaymentIntent as soon as the view loads. Store a reference to the client secret.","docsShell.integrationBuilder.aap.android.kotlin.steps.fetch-pi.heading":"Fetch a PaymentIntent","docsShell.integrationBuilder.aap.android.kotlin.steps.finish.body":"Send the payment details to Stripe by calling \u003Ccode\u003EconfirmPayment\u0028\u0029\u003C\u002Fcode\u003E.","docsShell.integrationBuilder.aap.android.kotlin.steps.finish.heading":"Finish the payment","docsShell.integrationBuilder.aap.android.kotlin.steps.handle-response.body":"If your customer’s card is declined, the completion block is called with an error. Show that error to your customer so they can try again with a different card. If no error occurred, tell your customer the payment was successful\u0021","docsShell.integrationBuilder.aap.android.kotlin.steps.handle-response.heading":"Handle the response from Stripe","docsShell.integrationBuilder.aap.android.kotlin.steps.load-stripe.body":"To install the SDK, add stripe-android as a dependency. This sample uses OkHttp and GSON to make requests to the server, also include those as dependencies if needed.","docsShell.integrationBuilder.aap.android.kotlin.steps.load-stripe.github.body":"The Stripe Android SDK is open-sourced.","docsShell.integrationBuilder.aap.android.kotlin.steps.load-stripe.github.label":"GitHub","docsShell.integrationBuilder.aap.android.kotlin.steps.load-stripe.github.link.label":"View on GitHub","docsShell.integrationBuilder.aap.android.kotlin.steps.load-stripe.gradle.body":"Add the dependencies to your build.gradle file:","docsShell.integrationBuilder.aap.android.kotlin.steps.load-stripe.gradle.label":"Gradle","docsShell.integrationBuilder.aap.android.kotlin.steps.load-stripe.heading":"Install the SDK","docsShell.integrationBuilder.aap.android.kotlin.steps.test-cards.auth":"Payment requires authentication","docsShell.integrationBuilder.aap.android.kotlin.steps.test-cards.body":"Use a test card number to try your integration. These card numbers work in test mode with any CVC, postal code, and future expiry date. Stripe also has a set of \u003Ca\u003Einternational test cards\u003C\u002Fa\u003E to test specific postal code formats \u0028e.g. only allow numerical values for U.S. zip codes\u0029.","docsShell.integrationBuilder.aap.android.kotlin.steps.test-cards.decline":"Payment is declined","docsShell.integrationBuilder.aap.android.kotlin.steps.test-cards.heading":"Make a test payment","docsShell.integrationBuilder.aap.android.kotlin.steps.test-cards.success":"Payment succeeds","docsShell.integrationBuilder.aap.ios.objc.steps.collect-details.body":"When the customer clicks the pay button, create an \u003Ca\u003ESTPPaymentIntentParams\u003C\u002Fa\u003E object with the card details and client secret from the PaymentIntent you created on the server.","docsShell.integrationBuilder.aap.ios.objc.steps.collect-details.heading":"Collect payment details","docsShell.integrationBuilder.aap.ios.objc.steps.create.body":"Add an endpoint on your server that creates a \u003Ca\u003EPaymentIntent\u003C\u002Fa\u003E. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring the customer is only charged once. Return the PaymentIntent's client secret in the response to finish the payment on the client.","docsShell.integrationBuilder.aap.ios.objc.steps.create.heading":"Create a PaymentIntent","docsShell.integrationBuilder.aap.ios.objc.steps.define-form.body":"Use Stripe’s \u003Ccode\u003ESTPPaymentCardTextField\u003C\u002Fcode\u003E class to display a text field to securely collect card details. By using \u003Ccode\u003ESTPPaymentCardTextField\u003C\u002Fcode\u003E, you guarantee that sensitive card details never touch your server.","docsShell.integrationBuilder.aap.ios.objc.steps.define-form.heading":"Define your payment form","docsShell.integrationBuilder.aap.ios.objc.steps.fetch-pi.body":"Make a request to your server for a PaymentIntent as soon as the view loads. Store a reference to the PaymentIntent's client secret returned by the server.","docsShell.integrationBuilder.aap.ios.objc.steps.fetch-pi.heading":"Fetch a PaymentIntent","docsShell.integrationBuilder.aap.ios.objc.steps.finish.body":"Send the payment details to Stripe by calling \u003Ccode\u003EconfirmPayment\u0028\u0029\u003C\u002Fcode\u003E.","docsShell.integrationBuilder.aap.ios.objc.steps.finish.heading":"Finish the payment","docsShell.integrationBuilder.aap.ios.objc.steps.handle-response.body":"If your customer’s card is declined, the completion block is called with an error. Show that error to your customer so they can try again with a different card. If no error occurred, tell your customer the payment was successful\u0021","docsShell.integrationBuilder.aap.ios.objc.steps.handle-response.heading":"Handle the response from Stripe","docsShell.integrationBuilder.aap.ios.objc.steps.load-stripe.body":"The iOS SDK is \u003Ca\u003Eopen source\u003C\u002Fa\u003E, fully documented, and compatible with apps supporting iOS 11 or above. Import Stripe in your project after installing.","docsShell.integrationBuilder.aap.ios.objc.steps.load-stripe.carthage.body":"Add this line to your Cartfile.","docsShell.integrationBuilder.aap.ios.objc.steps.load-stripe.carthage.label":"Carthage","docsShell.integrationBuilder.aap.ios.objc.steps.load-stripe.cocoa.body":"Add this line to your Podfile, and use the .xcworkspace file to open your project in Xcode, instead of the .xcodeproj file, from here on out.","docsShell.integrationBuilder.aap.ios.objc.steps.load-stripe.cocoa.label":"CocoaPods","docsShell.integrationBuilder.aap.ios.objc.steps.load-stripe.dynamic.body":"To include Stripe in your project, download Stripe.framework.zip from a release on GitHub and include it in the \"Embedded Binaries\" section of your XCode project. Make sure to select \"Copy items if needed\". Head to the \"Build Phases\" section of your Xcode project settings, and create a new \"Run Script Build Phase\". Paste the following snippet into the text field:","docsShell.integrationBuilder.aap.ios.objc.steps.load-stripe.dynamic.label":"Dynamic framework","docsShell.integrationBuilder.aap.ios.objc.steps.load-stripe.heading":"Install the SDK","docsShell.integrationBuilder.aap.ios.objc.steps.publishable-key.body":"Configure the Stripe SDK with your Stripe publishable API key.","docsShell.integrationBuilder.aap.ios.objc.steps.publishable-key.heading":"Set up the SDK","docsShell.integrationBuilder.aap.ios.objc.steps.test-cards.auth":"Payment requires authentication","docsShell.integrationBuilder.aap.ios.objc.steps.test-cards.body":"Use a test card number to try your integration. These card numbers work in test mode with any CVC, postal code, and future expiry date. Stripe also has a set of \u003Ca\u003Einternational test cards\u003C\u002Fa\u003E to test specific postal code formats \u0028e.g. only allow numerical values for U.S. zip codes\u0029.","docsShell.integrationBuilder.aap.ios.objc.steps.test-cards.declined":"Payment is declined","docsShell.integrationBuilder.aap.ios.objc.steps.test-cards.heading":"Make a test payment","docsShell.integrationBuilder.aap.ios.objc.steps.test-cards.success":"Payment succeeds","docsShell.integrationBuilder.aap.ios.swift.steps.collect-details.body":"When the customer clicks the pay button, create an \u003Ca\u003ESTPPaymentIntentParams\u003C\u002Fa\u003E object with the card details and client secret from the PaymentIntent you created on the server.","docsShell.integrationBuilder.aap.ios.swift.steps.collect-details.heading":"Collect payment details","docsShell.integrationBuilder.aap.ios.swift.steps.create.body":"Add an endpoint on your server that creates a \u003Ca\u003EPaymentIntent\u003C\u002Fa\u003E. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring the customer is only charged once. Return the PaymentIntent's client secret in the response to finish the payment on the client.","docsShell.integrationBuilder.aap.ios.swift.steps.create.heading":"Create a PaymentIntent","docsShell.integrationBuilder.aap.ios.swift.steps.define-form.body":"Use Stripe’s \u003Ccode\u003ESTPPaymentCardTextField\u003C\u002Fcode\u003E class to display a text field to securely collect card details. By using \u003Ccode\u003ESTPPaymentCardTextField\u003C\u002Fcode\u003E, you guarantee that sensitive card details never touch your server.","docsShell.integrationBuilder.aap.ios.swift.steps.define-form.heading":"Define your payment form","docsShell.integrationBuilder.aap.ios.swift.steps.fetch-pi.body":"Make a request to your server for a PaymentIntent as soon as the view loads. Store a reference to the PaymentIntent's client secret returned by the server.","docsShell.integrationBuilder.aap.ios.swift.steps.fetch-pi.heading":"Fetch a PaymentIntent","docsShell.integrationBuilder.aap.ios.swift.steps.finish.body":"Send the payment details to Stripe by calling \u003Ccode\u003EconfirmPayment\u0028\u0029\u003C\u002Fcode\u003E with the STPPaymentIntentParams.","docsShell.integrationBuilder.aap.ios.swift.steps.finish.heading":"Complete the payment","docsShell.integrationBuilder.aap.ios.swift.steps.handle-response.body":"If your customer’s card is declined, the completion block is called with an error. Show that error to your customer so they can try again with a different card. If no error occurred, tell your customer the payment was successful\u0021","docsShell.integrationBuilder.aap.ios.swift.steps.handle-response.heading":"Handle the response from Stripe","docsShell.integrationBuilder.aap.ios.swift.steps.load-stripe.body":"The iOS SDK is \u003Ca\u003Eopen source\u003C\u002Fa\u003E, fully documented, and compatible with apps supporting iOS 11 or above. Import the Stripe SDK into your checkout screen’s UIViewController.","docsShell.integrationBuilder.aap.ios.swift.steps.load-stripe.carthage.body":"Add this line to your Cartfile.","docsShell.integrationBuilder.aap.ios.swift.steps.load-stripe.carthage.label":"Carthage","docsShell.integrationBuilder.aap.ios.swift.steps.load-stripe.cocoa.body":"Add this line to your Podfile, and use the .xcworkspace file to open your project in Xcode, instead of the .xcodeproj file, from here on out.","docsShell.integrationBuilder.aap.ios.swift.steps.load-stripe.cocoa.label":"CocoaPods","docsShell.integrationBuilder.aap.ios.swift.steps.load-stripe.dynamic.body":"To include Stripe in your project, download Stripe.framework.zip from a release on GitHub and include it in the \"Embedded Binaries\" section of your XCode project. Make sure to select \"Copy items if needed\". Head to the \"Build Phases\" section of your Xcode project settings, and create a new \"Run Script Build Phase\". Paste the following snippet into the text field:","docsShell.integrationBuilder.aap.ios.swift.steps.load-stripe.dynamic.label":"Dynamic framework","docsShell.integrationBuilder.aap.ios.swift.steps.load-stripe.heading":"Install the SDK","docsShell.integrationBuilder.aap.ios.swift.steps.publishable-key.body":"Configure the Stripe SDK with your Stripe publishable API key.","docsShell.integrationBuilder.aap.ios.swift.steps.publishable-key.heading":"Set up the SDK","docsShell.integrationBuilder.aap.ios.swift.steps.test-cards.auth":"Payment requires authentication","docsShell.integrationBuilder.aap.ios.swift.steps.test-cards.body":"Use a test card number to try your integration. These card numbers work in test mode with any CVC, postal code, and future expiry date. Stripe also has a set of \u003Ca\u003Einternational test cards\u003C\u002Fa\u003E to test specific postal code formats \u0028e.g. only allow numerical values for U.S. zip codes\u0029.","docsShell.integrationBuilder.aap.ios.swift.steps.test-cards.declined":"Payment is declined","docsShell.integrationBuilder.aap.ios.swift.steps.test-cards.heading":"Make a test payment","docsShell.integrationBuilder.aap.ios.swift.steps.test-cards.success":"Payment succeeds","docsShell.integrationBuilder.aap.web.html.steps.build-form.body":"Add an empty placeholder \u003Ccode\u003Ediv\u003C\u002Fcode\u003E to your checkout form. Stripe inserts an iframe into this \u003Ccode\u003Ediv\u003C\u002Fcode\u003E that securely collects card information.","docsShell.integrationBuilder.aap.web.html.steps.build-form.heading":"Define the payment form","docsShell.integrationBuilder.aap.web.html.steps.charge.body":"When you're ready to charge the card again, create a new PaymentIntent with the Customer ID, the PaymentMethod ID of the card you want to charge, and set the \u003Ccode\u003Eoff_session\u003C\u002Fcode\u003E and \u003Ccode\u003Econfirm\u003C\u002Fcode\u003E flags to true.","docsShell.integrationBuilder.aap.web.html.steps.charge.heading":"Charge the card","docsShell.integrationBuilder.aap.web.html.steps.complete-payment.body":"Call \u003Ccode\u003EconfirmCardPayment\u0028\u0029\u003C\u002Fcode\u003E passing along the client secret and Card Element, to complete the payment. Stripe automatically displays a modal if the card \u003Ca\u003Erequires authentication\u003C\u002Fa\u003E like 3D Secure, where the customer must enter a passcode or other piece of identifying information to finalize the purchase.","docsShell.integrationBuilder.aap.web.html.steps.complete-payment.heading":"Complete the payment","docsShell.integrationBuilder.aap.web.html.steps.create-element.body":"Create a Card Element and mount it to the placeholder \u003Ccode\u003E'\u003Cdiv'\u003E\u003C\u002Fcode\u003E in your payment form. This creates a single input that collects the card number, expiry date, CVC, and postal code. Elements displays localized placeholder text of the postal code field based on your customer's \u003Ca\u003Ebrowser locale\u003C\u002Fa\u003E \u0028e.g. showing \"ZIP\" for U.S. cardholders, \"Postcode\" for U.K. cardholders\u0029.","docsShell.integrationBuilder.aap.web.html.steps.create-element.heading":"Create the Card Element","docsShell.integrationBuilder.aap.web.html.steps.create.body":"Add an endpoint on your server that creates a \u003Ca\u003EPaymentIntent\u003C\u002Fa\u003E. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring the customer is only charged once. Return the PaymentIntent's client secret in the response to finish the payment on the client.","docsShell.integrationBuilder.aap.web.html.steps.create.heading":"Create a PaymentIntent","docsShell.integrationBuilder.aap.web.html.steps.customer.body":"Stripe stores the card on a \u003Ca\u003ECustomer\u003C\u002Fa\u003E object. Create a new Customer before creating a PaymentIntent. You can also store name, email, shipping address, and other details on the Customer.","docsShell.integrationBuilder.aap.web.html.steps.customer.heading":"Create a customer","docsShell.integrationBuilder.aap.web.html.steps.email-0.body":"Add an input field to your payment form to collect an email address.","docsShell.integrationBuilder.aap.web.html.steps.email-0.heading":"Collect the customer's email address","docsShell.integrationBuilder.aap.web.html.steps.email-1.body":"Pass the provided email address as the receipt_email value when completing the payment with \u003Ccode\u003EconfirmCardPayment\u0028\u0029\u003C\u002Fcode\u003E. Stripe will send an email receipt when the payment succeeds in live mode \u0028but will not send one in test mode\u0029.","docsShell.integrationBuilder.aap.web.html.steps.email-1.heading":"Provide the email address to Stripe","docsShell.integrationBuilder.aap.web.html.steps.email.body":"Stripe can send an email receipt to your customer using your brand logo and color theme, configurable in \u003Ca\u003Ethe Dashboard\u003C\u002Fa\u003E.","docsShell.integrationBuilder.aap.web.html.steps.email.heading":"Send an email receipt","docsShell.integrationBuilder.aap.web.html.steps.fetch-pi.body":"Immediately make a request to the endpoint on your server to create a new PaymentIntent as soon as the page loads.","docsShell.integrationBuilder.aap.web.html.steps.fetch-pi.heading":"Fetch a PaymentIntent","docsShell.integrationBuilder.aap.web.html.steps.form-submit.body":"Listen to the form's submit event to know when to confirm the payment through the Stripe API.","docsShell.integrationBuilder.aap.web.html.steps.form-submit.heading":"Handle the submit event","docsShell.integrationBuilder.aap.web.html.steps.imports.heading":"Import additional Stripe resources","docsShell.integrationBuilder.aap.web.html.steps.init-elements.body":"Initialize the \u003Ca\u003EStripe Elements UI library\u003C\u002Fa\u003E. Elements manages the UI components you need to collect card details.","docsShell.integrationBuilder.aap.web.html.steps.init-elements.heading":"Initialize Stripe Elements","docsShell.integrationBuilder.aap.web.html.steps.init-stripe.body":"Initialize Stripe.js with your publishable API keys. You will use Stripe.js to create the card input field and complete the payment on the client.","docsShell.integrationBuilder.aap.web.html.steps.init-stripe.heading":"Initialize Stripe.js","docsShell.integrationBuilder.aap.web.html.steps.js-6.body":"If no error occurred, tell your customer the payment was successful\u0021 For any important post-payment actions \u0028such as shipping packages, sending email receipts\u0029 we recommend \u003Ca\u003Esetting up a webhook\u003C\u002Fa\u003E. If your customer’s card is declined, Stripe.js returns an error. Show that error message to your customer so they can try again with a different card","docsShell.integrationBuilder.aap.web.html.steps.js-6.heading":"Handle the API response","docsShell.integrationBuilder.aap.web.html.steps.listen-for-change.body":"Listen to changes on the Card Element to immediately surface card errors \u0028e.g. expiry date in the past\u0029 and disable the button if the Element is empty.","docsShell.integrationBuilder.aap.web.html.steps.listen-for-change.heading":"Optional: Surface card errors","docsShell.integrationBuilder.aap.web.html.steps.load-stripe.body":"Use Stripe.js to remain PCI compliant by ensuring that card details are sent directly to Stripe without hitting your server. Always load Stripe.js from js.stripe.com to remain compliant. Do not include the script in a bundle or host it yourself.","docsShell.integrationBuilder.aap.web.html.steps.load-stripe.heading":"Load Stripe.js","docsShell.integrationBuilder.aap.web.html.steps.pass-customer.body":"Pass the Customer ID to the PaymentIntent and set \u003Ccode\u003Esetup_future_usage\u003C\u002Fcode\u003E to \u003Ccode\u003Eoff_session\u003C\u002Fcode\u003E. \u003Ccode\u003Esetup_future_usage\u003C\u002Fcode\u003E tells Stripe how you plan to use the card — certain regions, such as Europe and India, have requirements around reusing card details. \u003CreadMoreA\u003ERead more\u003C\u002FreadMoreA\u003E about optimizing \u003Ccode\u003Esetup_future_usage\u003C\u002Fcode\u003E, otherwise simply set it to \u003Ccode\u003Eoff_session\u003C\u002Fcode\u003E. After the PaymentIntent succeeds, Stripe automatically \u003CattachA\u003Eattaches\u003C\u002FattachA\u003E the card details \u0028in a \u003CpaymentMethodA\u003EPaymentMethod\u003C\u002FpaymentMethodA\u003E object\u0029 to your Customer.","docsShell.integrationBuilder.aap.web.html.steps.pass-customer.heading":"Add the customer to the PaymentIntent","docsShell.integrationBuilder.aap.web.html.steps.run-server.heading":"Run the application","docsShell.integrationBuilder.aap.web.html.steps.save-card.body":"SaaS or e-commerce businesses often save card details for recurring customers.","docsShell.integrationBuilder.aap.web.html.steps.save-card.heading":"Save card after payment","docsShell.integrationBuilder.aap.web.html.steps.style-element.body":"Customize the card input by passing a \u003CstyleA\u003Estyle\u003C\u002FstyleA\u003E object. Use your company's color scheme and font to make it match with the rest of your checkout page. Use custom fonts \u0028e.g. from Google Fonts\u0029 by initializing Elements with a \u003CfontSetA\u003Efont set\u003C\u002FfontSetA\u003E.","docsShell.integrationBuilder.aap.web.html.steps.style-element.heading":"Optional: Style the checkout form","docsShell.integrationBuilder.aap.web.html.steps.style-element.tabs.button.label":"Button","docsShell.integrationBuilder.aap.web.html.steps.style-element.tabs.input.label":"Input fields","docsShell.integrationBuilder.aap.web.html.steps.test-cards.body":"Use a test card number to try your integration. These card numbers work in test mode with any CVC, postal code, and future expiry date. Stripe also has a set of \u003Ca\u003Einternational test cards\u003C\u002Fa\u003E to test specific postal code formats \u0028e.g. only allow numerical values for U.S. zip codes\u0029.","docsShell.integrationBuilder.aap.web.html.steps.test-cards.cards.auth":"Payment requires authentication","docsShell.integrationBuilder.aap.web.html.steps.test-cards.cards.declined":"Payment is declined","docsShell.integrationBuilder.aap.web.html.steps.test-cards.cards.succeeds":"Payment succeeds","docsShell.integrationBuilder.aap.web.html.steps.test-cards.heading":"Make a test payment","docsShell.integrationBuilder.aap.web.react.add-react-modules.body":"Use the Stripe.js and the Stripe Elements UI library to stay PCI compliant by ensuring that card details go directly to Stripe and never reach your server.","docsShell.integrationBuilder.aap.web.react.add-react-modules.heading":"Add Stripe to your React app","docsShell.integrationBuilder.aap.web.react.charge.body":"When you're ready to charge the card again, create a new PaymentIntent with the Customer ID, the PaymentMethod ID of the card you want to charge, and set the \u003Ccode\u003Eoff_session\u003C\u002Fcode\u003E and \u003Ccode\u003Econfirm\u003C\u002Fcode\u003E flags to true.","docsShell.integrationBuilder.aap.web.react.charge.heading":"Charge the card","docsShell.integrationBuilder.aap.web.react.complete-payment.body":"When your customer clicks the pay button, call \u003Ccode\u003EconfirmCardPayment\u0028\u0029\u003C\u002Fcode\u003E with the PaymentIntent client secret and CardElement. Stripe automatically displays a modal if the card \u003Ca\u003Erequires authentication\u003C\u002Fa\u003E like 3D Secure, where the customer must enter a passcode or other piece of identifying information to finalize the purchase.","docsShell.integrationBuilder.aap.web.react.complete-payment.heading":"Complete the payment","docsShell.integrationBuilder.aap.web.react.create.body":"Add an endpoint on your server that creates a \u003Ca\u003EPaymentIntent\u003C\u002Fa\u003E. A PaymentIntent tracks the customer's payment lifecycle, keeping track of any failed payment attempts and ensuring the customer is only charged once. Return the PaymentIntent's client secret in the response to finish the payment on the client.","docsShell.integrationBuilder.aap.web.react.create.heading":"Create a PaymentIntent","docsShell.integrationBuilder.aap.web.react.customer.body":"Stripe stores the card on a \u003Ca\u003ECustomer\u003C\u002Fa\u003E object. Create a new Customer before creating a PaymentIntent. You can also store name, email, shipping address, and other details on the Customer.","docsShell.integrationBuilder.aap.web.react.customer.heading":"Create a customer","docsShell.integrationBuilder.aap.web.react.email-0.body":"Add an input field to your payment form to collect the email address.","docsShell.integrationBuilder.aap.web.react.email-0.heading":"Collect the customer's email address","docsShell.integrationBuilder.aap.web.react.email-1.body":"Pass the provided email address as the receipt_email value. Stripe will send an email receipt when the payment succeeds in live mode \u0028but will not send one in test mode\u0029.","docsShell.integrationBuilder.aap.web.react.email-1.heading":"Provide the email address to Stripe","docsShell.integrationBuilder.aap.web.react.email-state.body":"Add a variable to keep track of the email the customer enters.","docsShell.integrationBuilder.aap.web.react.email-state.heading":"Add email to the state","docsShell.integrationBuilder.aap.web.react.email.body":"Stripe can send an email receipt to your customer using your brand logo and color theme, which are configurable in \u003Ca\u003Ethe Dashboard\u003C\u002Fa\u003E.","docsShell.integrationBuilder.aap.web.react.email.heading":"Send an email receipt","docsShell.integrationBuilder.aap.web.react.fetch-secret.body":"Immediately make a request to the endpoint on your server to create a new PaymentIntent as soon as your checkout page loads. The \u003Ccode\u003EclientSecret\u003C\u002Fcode\u003E returned by your endpoint is used to complete the payment.","docsShell.integrationBuilder.aap.web.react.fetch-secret.heading":"Fetch a PaymentIntent","docsShell.integrationBuilder.aap.web.react.handle-error.body":"If your customer’s card is declined, Stripe.js returns an error. Show that error message to your customer so they can try again with a different card. ","docsShell.integrationBuilder.aap.web.react.handle-error.heading":"Handle any card errors","docsShell.integrationBuilder.aap.web.react.imports.heading":"Import additional Stripe resources","docsShell.integrationBuilder.aap.web.react.init-elements.body":"Pass the resulting promise from \u003Ccode\u003EloadStripe\u003C\u002Fcode\u003E to the Elements provider. This allows the child components to access the Stripe service via the Elements consumer.","docsShell.integrationBuilder.aap.web.react.init-elements.heading":"Initialize Stripe Elements","docsShell.integrationBuilder.aap.web.react.init-state.body":"Initialize some state to keep track of the payment, show errors, and manage the user interface.","docsShell.integrationBuilder.aap.web.react.init-state.heading":"Set up the state","docsShell.integrationBuilder.aap.web.react.listen-for-change.body":"Define a function to listen for changes to the card input. Immediately surface card errors \u0028e.g. expiry date in the past\u0029 and disable the button if the input is empty.","docsShell.integrationBuilder.aap.web.react.listen-for-change.heading":"Optional: Surface card errors","docsShell.integrationBuilder.aap.web.react.load-stripe.body":"Call \u003Ccode\u003EloadStripe\u0028\u0029\u003C\u002Fcode\u003E with your Stripe publishable API key to configure the Stripe library.","docsShell.integrationBuilder.aap.web.react.load-stripe.heading":"Load Stripe.js","docsShell.integrationBuilder.aap.web.react.pass-customer.body":"Pass the Customer ID to the PaymentIntent and set \u003Ccode\u003Esetup_future_usage\u003C\u002Fcode\u003E to \u003Ccode\u003Eoff_session\u003C\u002Fcode\u003E. \u003Ccode\u003Esetup_future_usage\u003C\u002Fcode\u003E tells Stripe how you plan to use the card — certain regions, such as Europe and India, have requirements around reusing card details. \u003CreadMoreA\u003ERead more\u003C\u002FreadMoreA\u003E about optimizing \u003Ccode\u003Esetup_future_usage\u003C\u002Fcode\u003E, otherwise simply set it to \u003Ccode\u003Eoff_session\u003C\u002Fcode\u003E. After the PaymentIntent succeeds, Stripe automatically \u003CattachA\u003Eattaches\u003C\u002FattachA\u003E the card details \u0028in a \u003CpaymentMethodA\u003EPaymentMethod\u003C\u002FpaymentMethodA\u003E object\u0029 to your Customer.","docsShell.integrationBuilder.aap.web.react.pass-customer.heading":"Add the customer to the PaymentIntent","docsShell.integrationBuilder.aap.web.react.render-input.body":"Add a CardElement to your payment form, which embeds an iframe with the necessary input fields to collect the card data. This creates a single input that collects the card number, expiry date, CVC, and postal code. Elements displays localized placeholder text of the postal code field based on your customer's \u003Ca\u003Ebrowser locale\u003C\u002Fa\u003E \u0028e.g. showing \"ZIP\" for U.S. cardholders, \"Postcode\" for U.K. cardholders\u0029.","docsShell.integrationBuilder.aap.web.react.render-input.heading":"Add a CardElement","docsShell.integrationBuilder.aap.web.react.run-server.body":"Run the React app and the server. Go to \u003Ca\u003Elocalhost:3000\u002Fcheckout\u003C\u002Fa\u003E to see your checkout page.","docsShell.integrationBuilder.aap.web.react.run-server.heading":"Run the application","docsShell.integrationBuilder.aap.web.react.save-card.body":"Often used by SaaS or e-commerce businesses with recurring customers.","docsShell.integrationBuilder.aap.web.react.save-card.heading":"Save card after payment","docsShell.integrationBuilder.aap.web.react.style-element.body":"Stripe embeds an iframe to securely collect card details. Customize the iframe by passing a \u003CstyleA\u003Estyle\u003C\u002FstyleA\u003E object. Use your company's color scheme and font to make it match with the rest of your checkout page. Use custom fonts \u0028e.g. from Google Fonts\u0029 by initializing Elements with a \u003CfontSetA\u003Efont set\u003C\u002FfontSetA\u003E.","docsShell.integrationBuilder.aap.web.react.style-element.heading":"Optional: Style the card input","docsShell.integrationBuilder.aap.web.react.style-element.option.button":"Button","docsShell.integrationBuilder.aap.web.react.style-element.option.input":"Input fields","docsShell.integrationBuilder.aap.web.react.success.body":"If no error occurred, tell your customer the payment was successful\u0021 For any important post-payment actions \u0028like shipping packages, sending email receipts\u0029 we recommend \u003Ca\u003Esetting up a webhook\u003C\u002Fa\u003E.","docsShell.integrationBuilder.aap.web.react.success.heading":"Show a success message","docsShell.integrationBuilder.aap.web.react.test-cards.body":"Use a test card number to try your integration. These card numbers work in test mode with any CVC, postal code, and future expiry date. Stripe also has a set of \u003Ca\u003Einternational test cards\u003C\u002Fa\u003E to test specific postal code formats \u0028e.g. only allow numerical values for U.S. zip codes\u0029.","docsShell.integrationBuilder.aap.web.react.test-cards.heading":"Make a test payment","docsShell.integrationBuilder.aap.web.react.use-stripe.body":"Access the Stripe library in your CheckoutForm component by using the \u003Ccode\u003EuseStripe\u0028\u0029\u003C\u002Fcode\u003E and \u003Ccode\u003EuseElements\u0028\u0029\u003C\u002Fcode\u003E hooks. If you need to access Elements via a class component, use the \u003Ca\u003EElementsConsumer\u003C\u002Fa\u003E instead.","docsShell.integrationBuilder.aap.web.react.use-stripe.heading":"Store a reference to Stripe","docsShell.integrationBuilder.guide.checkoutLabel":"Stripe-hosted page","docsShell.integrationBuilder.guide.globalText":"Learn about the additional considerations for your selected country","docsShell.integrationBuilder.guide.guide":"View the \u003CGuideLink\u003Etext-based guide\u003C\u002FGuideLink\u003E.","docsShell.integrationBuilder.guide.guideText":"View the text-based guide","docsShell.integrationBuilder.guide.partners":"Don't code? Use Stripe’s \u003CNoCodeLink\u003Eno-code options\u003C\u002FNoCodeLink\u003E or get help from \u003CPartnersLink\u003Eour partners\u003C\u002FPartnersLink\u003E.","docsShell.integrationBuilder.guide.paymentCallout":"Stripe recommends getting started with the \u003Ca\u003EPayment Element integration builder\u003C\u002Fa\u003E. It allows you to accept multiple payment methods with a single Element. Learn more about when to use the \u003CaLearnMore\u003ECard Element and Payment Element.\u003C\u002FaLearnMore\u003E","docsShell.integrationBuilder.guide.paymentsLabel":"Custom payment flow","docsShell.integrationBuilder.guide.support":"Need more help? Contact support.","docsShell.integrationBuilder.guide.text":"Read the text-based version of this guide","docsShell.integrationBuilder.guide.wp3BetaText":"To get access to the WisePad 3 reader in {country}, please reach out to \u003CTerminalSupportEmail\u003Esupport\u002Bterminal@stripe.com\u003C\u002FTerminalSupportEmail\u003E or your account manager. In the meantime, you can use the simulated reader.","docsShell.integrationBuilder.test-cards.auth":"Payment requires authentication","docsShell.integrationBuilder.test-cards.decline":"Payment is declined","docsShell.integrationBuilder.test-cards.success":"Payment succeeds","docsShell.integrationBuilder.test-cards.terminal.one":"Payment succeeds","docsShell.integrationBuilder.test-cards.terminal.two":"Payment is declined","docsShell.logo":"The Stripe Docs logo","docsShell.markdocContent.beta":"Beta","docsShell.markdocContent.draft":"Draft","docsShell.markdocContent.glossaryIndexFilter":"Filtering to show entries with the tag:","docsShell.markdocContent.inviteOnly":"Invite only","docsShell.navigation.apis":"APIs \u0026 SDKs","docsShell.navigation.createAccount":"Create account","docsShell.navigation.dashboard":"Dashboard","docsShell.navigation.recommendedDocs":"Related Guides","docsShell.navigation.signIn":"Sign in","docsShell.navigation.supportLink":"Support","docsShell.navigation.toc":"On this page","docsShell.payoutSettlementCurrencies.connectHeader":"Accounts created in {countryName} and that are under the \u003Ca\u003E{service_agreement_type} service agreement\u003C\u002Fa\u003E can receive payouts in the following settlement currencies.","docsShell.payoutSettlementCurrencies.cost":"{percent}%, minimum fee of {cost}","docsShell.payoutSettlementCurrencies.countries":"Can be paid out to banks in these countries","docsShell.payoutSettlementCurrencies.dropDownLabel":"Viewing supported settlement currencies for Stripe accounts in","docsShell.payoutSettlementCurrencies.error":"Unable to load the table of settlement currencies","docsShell.payoutSettlementCurrencies.fullService":"Full Service Agreement","docsShell.payoutSettlementCurrencies.header":"Accounts created in {countryName} can receive payouts in the following settlement currencies.","docsShell.payoutSettlementCurrencies.loading":"Loading a table of settlement currencies","docsShell.payoutSettlementCurrencies.max":"Minimum auto payout amount","docsShell.payoutSettlementCurrencies.min":"Minimum manual payout amount","docsShell.payoutSettlementCurrencies.nonLocalCountries":"Can be paid out to banks in these countries","docsShell.payoutSettlementCurrencies.nonLocalDropDownLabel":"Viewing supported settlement currencies for Stripe accounts in","docsShell.payoutSettlementCurrencies.nonLocalHeader":"Accounts created in {countryName} can receive payouts in the following non-local settlement currencies.","docsShell.payoutSettlementCurrencies.pricing":"Pricing","docsShell.payoutSettlementCurrencies.recipientService":"Recipient Service Agreement","docsShell.payoutSettlementCurrencies.settlementCurrency":"Settlement currency","docsShell.refdropdown.label":"APIs \u0026 SDKs","docsShell.search.homeBreadcrumb":"Home › {breadcrumb}","docsShell.search.noResults":"No results","docsShell.search.searchDocumentation":"Search documentation... try “API keys”","docsShell.sepaTestAccountTable.accountHeader":"Account Number","docsShell.sepaTestAccountTable.delayedFailure":"The PaymentIntent status transitions from \u003CInlineCode\u003Eprocessing\u003C\u002FInlineCode\u003E to \u003CInlineCode\u003Erequires_payment_method\u003C\u002FInlineCode\u003E after at least three minutes.","docsShell.sepaTestAccountTable.delayedSuccess":"The PaymentIntent status transitions from \u003CInlineCode\u003Eprocessing\u003C\u002FInlineCode\u003E to \u003CInlineCode\u003Esucceeded\u003C\u002FInlineCode\u003E after at least three minutes.","docsShell.sepaTestAccountTable.descriptionHeader":"Description","docsShell.sepaTestAccountTable.dispute":"The PaymentIntent status transitions from \u003CInlineCode\u003Eprocessing\u003C\u002FInlineCode\u003E to \u003CInlineCode\u003Esucceeded\u003C\u002FInlineCode\u003E, but a dispute is immediately created.","docsShell.sepaTestAccountTable.immediateFailure":"The PaymentIntent status transitions from \u003CInlineCode\u003Eprocessing\u003C\u002FInlineCode\u003E to \u003CInlineCode\u003Erequires_payment_method\u003C\u002FInlineCode\u003E.","docsShell.sepaTestAccountTable.immediateSuccess":"The PaymentIntent status transitions from \u003CInlineCode\u003Eprocessing\u003C\u002FInlineCode\u003E to \u003CInlineCode\u003Esucceeded\u003C\u002FInlineCode\u003E.","docsShell.sidebarNavigation.badge.pending":"Page pending for translation","docsShell.sidebarNavigation.hide":"Click to collapse the sidebar and hide the navigation","docsShell.sidebarNavigation.home":"Home","docsShell.sidebarNavigation.overview":"Overview","docsShell.sidebarNavigation.show":"Click to open the sidebar and show the navigation","docsShell.sidebarNavigation.sidebarLinkTooltip.affirmativeHeader":"This link and any children will appear in the sidebar when:","docsShell.sidebarNavigation.sidebarLinkTooltip.negativeHeader":"This link and any children will appear in the sidebar unless:","docsShell.sidebar_navigation.badge.pending":"Page pending for translation","docsShell.stripeSessionsBanner.2022.learnMore":"Learn more","docsShell.stripeSessionsBanner.header":"Join us on May 24 at Sessions—our annual user conference—for product updates, demos, and talks.","docsShell.stripeSessionsBanner.learnMore":"Learn more","docsShell.supportedPresentmentCurrencies.amexIN":"You can charge American Express cards issued outside of India only in INR and USD","docsShell.supportedPresentmentCurrencies.amexMXN":"You can charge American Express cards only in MXN","docsShell.supportedPresentmentCurrencies.canOnlyUseBRL":"You can only charge Brazilian cards in BRL","docsShell.supportedPresentmentCurrencies.canOnlyUseJPY":"JCB, Diners Club, and Discover cards can only be charged in JPY","docsShell.supportedPresentmentCurrencies.canOnlyUseUSD":"JCB, Discover, Diners Club, and UnionPay cards can only be charged in USD","docsShell.supportedPresentmentCurrencies.canOnlyUseUSDAndCAD":"UnionPay cards can only be charged in USD and CAD","docsShell.supportedPresentmentCurrencies.domesticIN":"Domestic charges can only be in INR","docsShell.supportedPresentmentCurrencies.domesticMX":"You can charge domestic cards only in MXN","docsShell.supportedPresentmentCurrencies.followingExceptions":"Stripe users can process charges in the following list of currencies with these exceptions:","docsShell.supportedPresentmentCurrencies.indiaAmexCallout":"The \u003Ca1\u003EReserve Bank of India\u003C\u002Fa1\u003E has directed American Express to stop on-boarding new domestic customers from India onto their card networks from May 1, 2021. To stay compliant with these requirements, we will not offer American Express card processing on Stripe India accounts on-boarded to Stripe from May 1, 2021 onwards. Learn more on our \u003Ca2\u003Esupport page\u003C\u002Fa2\u003E. If you on-boarded to Stripe prior to May 1, 2021 you can charge American Express cards only in INR and USD.","docsShell.supportedPresentmentCurrencies.internationalIN":"International payments are allowed only in non-INR currencies","docsShell.supportedPresentmentCurrencies.noAmexSupport":"Currencies marked with \u003CInlineCode\u003E*\u003C\u002FInlineCode\u003E are not supported by American Express","docsShell.supportedPresentmentCurrencies.tiedToCardPayments":"These currencies apply to card payments: other payment methods are often tied to a specific currency","docsShell.toc.video":"Watch the video guide","docsShell.untranslatedNotice":"This page is not yet available in this language. We're working hard to make our documentation available in more languages and will provide a translation as soon as it's available.","docsShell.verificationDocuments.addressTab":"Address Documents","docsShell.verificationDocuments.addressTitle":"Acceptable forms of address verification:","docsShell.verificationDocuments.country":"Country","docsShell.verificationDocuments.documentLocalizedName":"{localized_name} \u0028{name}\u0029","docsShell.verificationDocuments.documentTwoSided":"{name} — scans of front and back are required","docsShell.verificationDocuments.documentTwoSided.1":"scans of front and back are required","docsShell.verificationDocuments.documentTwoSidedPhysicalRequired.1":"photos of front and back of the physical Emirates ID card or the front and back of the Emirates ID from the ICP app are required","docsShell.verificationDocuments.emiratesIDCallout":"For a resident UAE national both Emirates ID and passport are required. For a resident who is not a UAE national, an additional visa page is required. For an individual who is neither a UAE national nor resident, a passport is required. Power of Attorney is required for LLCs when the representative is not present on the Memorandum of Association.","docsShell.verificationDocuments.expirationPolicy.12months":"dated within 12 months","docsShell.verificationDocuments.expirationPolicy.6months":"dated within 6 months","docsShell.verificationDocuments.identificationTab":"Identity Documents","docsShell.verificationDocuments.identificationTabAEDisclaimer":"A trade license is a required document for all entity types. One or more Memoranda of Association and a Power of Attorney will also be required depending on the entity type.","docsShell.verificationDocuments.identificationTitle":"Acceptable forms of identification:","docsShell.verificationDocuments.legalTab":"Company\u002FEntity Documents","docsShell.verificationDocuments.legalTitle":"Acceptable forms of legal entity verification:","docsShell.verificationDocuments.passportCallout":"Acceptable identification documents vary by country. A passport scan for identity verification is always preferred and, in some cases, is required. When a Stripe account and an individual associated with that Stripe account \u0028for example, Business Representative, Owner\u0029 are from different countries, Stripe only accepts a passport to verify identity.","docsShell.verificationDocuments.uaeCallout":"For a resident UAE national, both Emirates ID and passport are required. For a resident who is not a UAE national, the residence visa is also required. For an individual who is neither a UAE national nor resident, a passport is required. Power of Attorney is required for LLCs when the representative is not present on the Memorandum of Association.","docsShell.verificationDocuments.uaePhysicalOrDigitalPassport":"a photo of the physical passport or the e-passport are required","docsShell.verificationDocuments.uaePhysicalOrDigitalVisa":"physical or digital version","docsShell.verificationDocuments.uaePhysicalPassportRequired":"physical document only, e-passports are not accepted","docsShell.verificationDocuments.uaePhysicalVisaRequired":"physical document only for visas issued prior to April 2022","docsShell.verificationDocuments.uaeResienceVisaExtraMessage":"passport visa page, digital visa from ICP app or front and back of physical Emirates ID card \u0028if issued after 11 April 2022\u0029","markdoc_articles.connect.top-ups.md.28575e1d3aa1cda5":"Make sure the wire or transfer from your bank includes your Stripe unique reference code in the transfer memo so that funds settle to your account without delay. You can find this unique reference code on the [Balances]\u0028https:\u002F\u002Fdashboard.stripe.com\u002Fbalance\u002Foverview\u0029 page in the Dashboard. Click **Add to balance**.","markdoc_articles.financial-connections.using-custom-connect.md.115849c21c83a6f5":"To create a Custom account, include the following code on your server to create a new Custom account. Set \u0060type\u0060 to \u0060custom\u0060 in the account creation request, set country to US and specify the appropriate capabilities]\u0028\u002Fdocs\u002Fconnect\u002Faccount-capabilities#supported-capabilities\u0029.","markdoc_articles.partials.link.accept-a-payment-web.md.150d038dabac28ec":"If you sell physical goods that require a shipping address, complete the step to collect shipping addresses]\u0028#collect-shipping\u0029","markdoc_articles.payments.link.beta-elements-FAQ.md.524b34c6a637b2b5":"Stripe waives all payment processing fees for the promised value. This doesn't apply to any non-payment processing fees and is valid for only the account number in the original email. Within 30 days of the deadline, you’ll see a banner in your Dashboard to accept the credit. When you accept your credit, see the [offer terms]\u0028add link\u0029.","markdoc_articles.payments.link.beta-elements-FAQ.md.d17843e4f647247f":"Read more about Link with Stripe]\u0028\u002Fdocs\u002Fpayments\u002Flink\u0029.","markdoc_articles.payments.link.beta.md.3be00622636db372":"Stripe waives all payment processing fees for the promised value, if you meet the credit requirements. This doesn't apply to any non-payment processing fees and is valid for only the account number in the original email. Within 30 days of the deadline, you’ll see a banner in your Dashboard to accept the credit. When you accept your credit, see the [offer terms]\u0028add link\u0029.","markdoc_articles.search.api-details.md.ed82922bbfe8b975":"The phone number associated with a customer object. You must specify phone numbers in the [E.164 format]\u0028https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FE.164\u0029. This starts with a plus \u0028\u002B\u0029 followed by a country code, followed by the subscriber number","markdoc_articles.search.beta-api-details.md.ed82922bbfe8b975":"The phone number associated with a customer object. You must specify phone numbers in the [E.164 format]\u0028https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FE.164\u0029. This starts with a plus \u0028\u002B\u0029 followed by a country code, followed by the subscriber number","markdoc_articles.search.index.md.ed82922bbfe8b975":"The phone number associated with a customer object. You must specify phone numbers in the [E.164 format]\u0028https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FE.164\u0029. This starts with a plus \u0028\u002B\u0029 followed by a country code, followed by the subscriber number","markdoc_articles.stripe-data-pipeline.set-up-redshift.md.e56b2e2a434cdaeb":"[Writing queries]\u0028https:\u002F\u002Fdocs.aws.amazon.com\u002Fredshift\u002Flatest\u002Fdg\u002Fcm_chap_SQLCommandRef.html\u0029","markdoc_articles.stripe-data-pipeline.set-up-redshift.md.fd2f2aa690efaa1d":"[Redshift data sharing]\u0028https:\u002F\u002Fdocs.aws.amazon.com\u002Fredshift\u002Flatest\u002Fdg\u002Fdatashare-overview.html\u0029","markdoc_articles.stripe-data-pipeline.set-up-snowflake.md.e0615758cd6de54c":"Learn more about account identifiers in the [Snowflake documentation]\u0028https:\u002F\u002Fdocs.snowflake.com\u002Fen\u002Fuser-guide\u002Fadmin-account-identifier.html\u0029.","markdoc_articles.terminal.fleet-management.locations.md.737bb8e17bfe28fe":"[discoverReaders \u0028JavaScript\u0029]\u0028https:\u002F\u002Fstripe.com \u002Fdocs\u002Fterminal\u002Freferences\u002Fapi\u002Fjs-sdk#discover-readers\u0029","markdoc_articles.terminal.partials.collecting-payments.md.17841977d40920d4":"{% if equals\u0028\u0024terminal-sdk-platform, \"ios\"\u0029 %} - [\u0060Cancelable\u0060 \u0028iOS\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-ios\u002Fdocs\u002FClasses\u002FSCPCancelable.html\u0029 {% \u002Fif %} {% if equals\u0028\u0024terminal-sdk-platform, \"android\"\u0029 %} - [\u0060Cancelable\u0060 \u0028Android\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-android\u002Fexternal\u002Fexternal\u002Fcom.stripe.stripeterminal.external.callable\u002F -cancelable\u002Findex.html\u0029 {% \u002Fif %}","markdoc_articles.terminal.partials.collecting-payments.md.1a25a719f69fa872":"{% if equals\u0028\u0024terminal-sdk-platform, \"ios\"\u0029 %} - [\u0060Cancelable\u0060 \u0028iOS\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-ios\u002Fdocs\u002FClasses\u002FSCPCancelable.html\u0029 {% \u002Fif %} {% if equals\u0028\u0024terminal-sdk-platform, \"android\"\u0029 %} - [\u0060Cancelable\u0060 \u0028Android\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-android\u002Fexternal\u002Fexternal\u002Fcom.stripe.stripeterminal.external.callable\u002F -cancelable\u002Findex.html\u0029 {% \u002Fif %} {% if equals\u0028\u0024terminal-sdk-platform, \"react-native\"\u0029 %} - [\u0060cancelCollectPaymentMethod\u0060 \u0028React Native\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-react-native\u002Fapi-reference\u002Fmodules.html#cancelCollectPaymentMethod\u0029 {% \u002Fif %}","markdoc_articles.terminal.partials.readers.internet-readers.md.43d45c3d9f71942c":"{% if equals\u0028\u0024terminal-sdk-platform, \"js\"\u0029 %} - [discoverReaders \u0028JavaScript\u0029]\u0028https:\u002F\u002Fstripe.com \u002Fdocs\u002Fterminal\u002Freferences\u002Fapi\u002Fjs-sdk#discover-readers\u0029 {% \u002Fif %} {% if equals\u0028\u0024terminal-sdk-platform, \"ios\"\u0029 %} - [discoverReaders \u0028iOS\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-ios\u002Fdocs\u002FClasses\u002FSCPTerminal.html#\u002Fc:objc\u0028cs\u0029SCPTerminal\u0028im\u0029discoverReaders:delegate:completion:\u0029 {% \u002Fif %} {% if equals\u0028\u0024terminal-sdk-platform, \"android\"\u0029 %} - [discoverReaders \u0028Android\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-android\u002Fcore\u002Fcore\u002Fcom.stripe.stripeterminal\u002F-terminal\u002Fdiscover-readers.html\u0029 {% \u002Fif %}","markdoc_articles.terminal.partials.readers.internet-readers.md.b21dd90842710d45":"{% if equals\u0028\u0024terminal-sdk-platform, \"js\"\u0029 %} [StripeTerminal.create \u0028JavaScript\u0029]\u0028https:\u002F\u002Fstripe.com \u002Fdocs\u002Fterminal\u002Freferences\u002Fapi\u002Fjs-sdk#stripeterminal-create\u0029 {% \u002Fif %} {% if equals\u0028\u0024terminal-sdk-platform, \"ios\"\u0029 %} - [didReportUnexpectedReaderDisconnect \u0028iOS\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-ios\u002Fdocs\u002FProtocols\u002FSCPTerminalDelegate.html#\u002Fc:objc\u0028pl\u0029SCPTerminalDelegate\u0028im\u0029terminal:didReportUnexpectedReaderDisconnect:\u0029 {% \u002Fif %} {% if equals\u0028\u0024terminal-sdk-platform, \"android\"\u0029 %} - [TerminalListener \u0028Android\u0029]\u0028https:\u002F\u002Fstripe.dev\u002Fstripe-terminal-android\u002Fexternal\u002Fexternal\u002Fcom.stripe.stripeterminal.external.callable\u002F-terminal-listener\u002Findex.html\u0029 {% \u002Fif %}","markdoc_articles.treasury.additional_documentation.complaints_guidance.md.4621785a5d6cdd90":"Complaints may be received through various means, including via telephone, in-person, social media, email, a regulatory agency, and direct written communication, and so on. Complaints must be forwarded to Stripe via email at [treasury-support@stripe.com]\u0028mailto: treasury-support@stripe.com\u0029. If you permit your customers to raise complaints through means other than email, you should either direct your customer to resend the complaint via email, or you may summarise the user’s complaint and forward the complaint to Stripe at [treasury-support@stripe.com]\u0028mailto: treasury-support@stripe.com\u0029.","markdoc_articles.treasury.additional_documentation.complaints_guidance.md.bea7500522d585f4":"Given that Platforms are responsible for managing customer support as well as resolving most complaints, it is important to distinguish between a regular customer service enquiry and a complaint. The guideline provided here will help you distinguish between general customer service enquiries versus complaints. If you are uncertain, please forward the customer enquiry to Stripe at [treasury-support@stripe.com]\u0028mailto: treasury-support@stripe.com\u0029 and we can help determine whether the communication constitutes a complaint.","markdoc_articles.treasury.additional_documentation.complaints_guidance.md.c32ec8d6b06e2f7d":"Given that Platforms are responsible for managing customer support as well as resolving most complaints, it is important to distinguish between a regular customer service enquiry and a complaint. The guideline provided here will help you distinguish between general customer service enquiries versus complaints. If you are uncertain, please forward the customer enquiry to Stripe at [treasury-support@stripe.com]\u0028mailto: treasury-support@stripe.com\u0029 and we can help determine whether the communication constitutes a complaint.","markdoc_articles.treasury.additional_documentation.complaints_guidance.md.c4fc38f7b0d0b0be":"Complaints may be received through various means, including via telephone, in-person, social media, email, a regulatory agency, and direct written communication, and so on. Complaints must be forwarded to Stripe via email at [treasury-support@stripe.com]\u0028mailto: treasury-support@stripe.com\u0029. If you permit your customers to raise complaints through means other than email, you should either direct your customer to resend the complaint via email, or you may summarise the user’s complaint and forward the complaint to Stripe at [treasury-support@stripe.com]\u0028mailto: treasury-support@stripe.com\u0029.","docsApp.components.Identifier.subscription":"Create a Subscription with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.Identifier.subscriptionSchedule":"Create a SubscriptionSchedule with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.list.emptyDescription":"No matches found.","docsApp.components.list.filterPlaceholder":"Filter...","docsApp.components.table.emptyDescription":"No matches found.","docsApp.components.table.filterPlaceholder":"Filter...","docsApp.glossary.definition.cardIssuer":"The entity that issued a payment card to a cardholder. This could be a bank, such as with the Visa or Mastercard network, or it could be the card network itself, such as with American Express.\n","docsApp.glossary.definition.cardNetworksNciDash":"Visa, Mastercard, and Discover.\n","docsApp.glossary.definition.fiscalRepresentation":"Fiscal representation is a process where a local entity acts as a representative of a foreign business for VAT purposes, usually in countries where they must register for VAT but can’t do so independently.\n","docsApp.glossary.definition.grossSales":"Gross sales refers to the total number of sales over a period of time including sales for resale, taxable and exempt sales.","docsApp.glossary.definition.retailSales":"For tax purposes, retail sales don't include sales of resale goods.\n","docsApp.glossary.term.cardIssuer":"card issuer","docsApp.glossary.term.cardNetworksNciDash":"card networks","docsApp.glossary.term.fiscalRepresentation":"fiscal representation","docsApp.glossary.term.grossSales":"gross sales","docsApp.glossary.term.retailSales":"retail sales","docsApp.tax_code_details.txcd_10702000.description":"A subscription service for membership to an online dating platform.","docsApp.tax_code_details.txcd_10702000.name":"Online Dating Services","docsApp.tax_code_details.txcd_20010001.description":"A charge to clean, wash or wax a motor vehicle, other than a self-service coin \u0028or credit card\u0029 operated washing station. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20010001.name":"Car Washing","docsApp.tax_code_details.txcd_20010007.description":"A charge for the service to maintain the proper operation of home or building gutters through cleaning out debris that could otherwise affect the proper water flow through the gutter system.","docsApp.tax_code_details.txcd_20010007.name":"Gutter Cleaning Services","docsApp.tax_code_details.txcd_20030004.description":"A charge for providing usage of a parking space.","docsApp.tax_code_details.txcd_20030004.name":"Parking Services","docsApp.tax_code_details.txcd_20030005.description":"Service to train an animal to obey certain commands.","docsApp.tax_code_details.txcd_20030005.name":"Pet Services - Obedience Training","docsApp.tax_code_details.txcd_20040001.description":"Services provided by beauty shops and barber shops, including but not limited to haircutting, hair coloring, shampooing, blow drying, permanents, hair extensions, hair straightening, and hair restorations.","docsApp.tax_code_details.txcd_20040001.name":"Hairdressing Services","docsApp.tax_code_details.txcd_20040003.description":"A charge for the puncturing or penetration of the skin of a person and the insertion of jewelry or other adornment into the opening.","docsApp.tax_code_details.txcd_20040003.name":"Body Piercing","docsApp.tax_code_details.txcd_20040004.description":"Services that provide non-medical care and supervision for infant to school-age children or senior citizens.","docsApp.tax_code_details.txcd_20040004.name":"Childcare Services \u002F Adultcare","docsApp.tax_code_details.txcd_20040005.description":"A service that arranges introductions, for a fee, for strangers seeking romantic partners or friends. This excludes online dating services.","docsApp.tax_code_details.txcd_20040005.name":"Dating Services","docsApp.tax_code_details.txcd_20040006.description":"Services provided by employment agencies to match employees to employers and employers to employees.","docsApp.tax_code_details.txcd_20040006.name":"Employment Services","docsApp.tax_code_details.txcd_20040007.description":"A charge for the cosmetic beauty treatment for the fingernails and toenails, including filing, cutting, shaping and the application of polish.","docsApp.tax_code_details.txcd_20040007.name":"Manicure Services","docsApp.tax_code_details.txcd_20040008.description":"Services where the use of structured touch, include holding, applying pressure, positioning, and mobilizing soft tissue of the body by manual technique. Note: This does not include medical massage prescribed by a physician.","docsApp.tax_code_details.txcd_20040008.name":"Massage Services","docsApp.tax_code_details.txcd_20040009.description":"Personal services typically with the purpose of improving health, beauty and relaxation through treatments such as hair, massages and facials.","docsApp.tax_code_details.txcd_20040009.name":"Spa Services","docsApp.tax_code_details.txcd_20040010.description":"Services for artificial tanning and skin beautification.","docsApp.tax_code_details.txcd_20040010.name":"Tanning Services","docsApp.tax_code_details.txcd_20040011.description":"A charge for the process that uses needles and colored ink to permanently put a mark or design on a person’s skin. Also applying permanent make-up, such as eyelining and other permanent colors to enhance the skin of the face, lips, eyelids, and eyebrows.","docsApp.tax_code_details.txcd_20040011.name":"Tattooing Services","docsApp.tax_code_details.txcd_20060001.description":"The measurement, processing and communication of financial information about economic entities including, but is not limited to, financial accounting, management accounting, auditing, cost containment and auditing services, taxation and accounting information systems; excluding general bookkeeping service.","docsApp.tax_code_details.txcd_20060001.name":"Accounting Services","docsApp.tax_code_details.txcd_20060002.description":"Services rendered for advertising which do not include the exchange of tangible personal property.","docsApp.tax_code_details.txcd_20060002.name":"Advertising Services","docsApp.tax_code_details.txcd_20060008.description":"Services rendered for the compiling and relating of information regarding the history of financial transactions of a person or entity.","docsApp.tax_code_details.txcd_20060008.name":"Credit Reporting Services","docsApp.tax_code_details.txcd_20060010.description":"Services performed to collect or adjust past-due debt from borrowers.","docsApp.tax_code_details.txcd_20060010.name":"Debt Collection Services","docsApp.tax_code_details.txcd_20060013.description":"Services provided by a professional trained to apply physical laws and principles of engineering in the design, development, and utilization of machines, materials, instruments, structures, processes, and systems. The services involve any of the following activities: provision of advice, preparation of feasibility studies, preparation of preliminary and final plans and designs, provision of technical services during the construction or installation phase, inspection and evaluation of engineering projects, and related services.","docsApp.tax_code_details.txcd_20060013.name":"Engineering Services","docsApp.tax_code_details.txcd_20060017.description":"Charges for installing, configuring, debugging, modifying, testing, or troubleshooting computer hardware, networks, programs or software. Labor only charge.","docsApp.tax_code_details.txcd_20060017.name":"Technical Support Services","docsApp.tax_code_details.txcd_20060021.description":"Charges associated loss or damage appraisals, inspections, actuarial services, claims adjustment or processing. Investigations as excluded from this definition.","docsApp.tax_code_details.txcd_20060021.name":"Insurance Services","docsApp.tax_code_details.txcd_20060026.description":"Services relating to advocating for the passage or defeat of legislation to members or staff of the government.","docsApp.tax_code_details.txcd_20060026.name":"Lobbying Services","docsApp.tax_code_details.txcd_20060027.description":"Services provided by a licensed or registered professional in the medical field. Examples: Doctor, dentist, nurse, optometrist, etc.","docsApp.tax_code_details.txcd_20060027.name":"Medical Professional Services","docsApp.tax_code_details.txcd_20060029.description":"Services to process employee payroll, including wages, withholding taxes, benefits. etc.","docsApp.tax_code_details.txcd_20060029.name":"Payroll Services","docsApp.tax_code_details.txcd_20060030.description":"Services providing a systematic inquiry, examination, or analysis of people, events or documents through surveillance, background checks, computer searches, fingerprinting, lie detector services, interviews, etc.","docsApp.tax_code_details.txcd_20060030.name":"Private Investigator Services","docsApp.tax_code_details.txcd_20060040.description":"Charges to electronically file a tax return on behalf of the taxpayer. This does not include manual preparation of tax returns.","docsApp.tax_code_details.txcd_20060040.name":"Electronic Filing Service","docsApp.tax_code_details.txcd_20060047.description":"Services related to the art and science of designing and building structures for human habitation or use and includes planning, providing preliminary studies, designs, specifications, working drawings and providing for general administration of construction contracts.","docsApp.tax_code_details.txcd_20060047.name":"Architectural Services","docsApp.tax_code_details.txcd_20060048.description":"The provision of expertise or strategic advice that is presented for consideration and decision-making.","docsApp.tax_code_details.txcd_20060048.name":"Consulting Services","docsApp.tax_code_details.txcd_20060049.description":"Medical procedure performed on an individual that is directed at improving the individual's appearance and that does not meaningfully promote the proper function of the body or prevent or treat illness or disease.","docsApp.tax_code_details.txcd_20060049.name":"Cosmetic Medical Procedure","docsApp.tax_code_details.txcd_20060050.description":"Services to track one's credit reports and provide notifications of activity with the intent of avoiding fraud.","docsApp.tax_code_details.txcd_20060050.name":"Credit Monitoring Services","docsApp.tax_code_details.txcd_20060051.description":"A service that allows merchants to accept credit cards as well as send credit card payment details to the credit card network. It then forwards the payment authorisation back to the acquiring bank.","docsApp.tax_code_details.txcd_20060051.name":"Credit Card Processing Services","docsApp.tax_code_details.txcd_20060053.description":"A charge for an objective visual examination of a house’s systems and physical structure. The charge includes a report of the inspector's findings including pictures, analysis, and recommendations.","docsApp.tax_code_details.txcd_20060053.name":"Home Inspection Services","docsApp.tax_code_details.txcd_20060054.description":"Services relating to or concerned with the law. Such services include, but are not limited to, representation by an attorney \u0028or other person, when permitted\u0029 in an administrative or legal proceeding, legal drafting, paralegal services, legal research services, arbitration, mediation, and court reporting services.","docsApp.tax_code_details.txcd_20060054.name":"Legal Services","docsApp.tax_code_details.txcd_20060055.description":"Services for consumer research and testing in connection with the development of particular products or services that the client sells to consumers in the regular course of business.","docsApp.tax_code_details.txcd_20060055.name":"Marketing Services","docsApp.tax_code_details.txcd_20060056.description":"Services to provide outreach designed to influence the general public or other groups by promoting the interests of a service recipient.","docsApp.tax_code_details.txcd_20060056.name":"Public Relations","docsApp.tax_code_details.txcd_20060057.description":"Services that include typing, taking shorthand, and taking and transcribing dictation for others for a consideration.","docsApp.tax_code_details.txcd_20060057.name":"Stenographic Services","docsApp.tax_code_details.txcd_20070001.description":"A charge for monitoring an electronically controlled alarm system for residential or commercial properties to minimize or prevent loss or damage to life, limb, or property.","docsApp.tax_code_details.txcd_20070001.name":"Security - Alarm Services","docsApp.tax_code_details.txcd_20070008.description":"A charge for services of general lawn and grounds maintenance, including lawn cutting, weeding, yard clean-up, shrub and tree trimming, periodic seeding or aeration, etc. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20070008.name":"Lawn Maintenance Services","docsApp.tax_code_details.txcd_20070013.description":"Services related to protecting persons or their property, preventing the theft of goods, merchandise, or money. Responding to alarm signal device, burglar alarm, television camera, still camera, or a mechanical or electronic device installed or used to prevent or detect burglary, theft, shoplifting, pilferage, losses, or other security measures. Providing management and control of crowds for safety and protection.","docsApp.tax_code_details.txcd_20070013.name":"Security - Guard Services","docsApp.tax_code_details.txcd_20070016.description":"Services mapping, detecting or establishing the relative position of points at, above, or below the surface of the earth. These services may include surveying and mapping of areas above or below the surface of the earth, such as the creation of view easements or segregating rights in parcels of land by creating underground utility easements.","docsApp.tax_code_details.txcd_20070016.name":"Property Surveying Services","docsApp.tax_code_details.txcd_20080003.description":"A charge to repair or restore to operating condition a motor vehicle that was broken, worn, damaged, defective, or malfunctioning. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20080003.name":"Motor Vehicle Repair","docsApp.tax_code_details.txcd_20080004.description":"A charge to repair or restore footwear was broken, worn, damaged, defective, or malfunctioning. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20080004.name":"Shoe Repair","docsApp.tax_code_details.txcd_20080008.description":"A charge to repair or restore to operating condition an aircraft that was broken, worn, damaged, defective, or malfunctioning. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential. Commercial aircraft is excluded.","docsApp.tax_code_details.txcd_20080008.name":"Aircraft Repair","docsApp.tax_code_details.txcd_20080009.description":"A charge to repair or restore to operating condition an appliance \u0028dishwasher, washing machine, refrigerator, etc.\u0029 that was broken, worn, damaged, defective, or malfunctioning. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20080009.name":"Appliance Repair","docsApp.tax_code_details.txcd_20080010.description":"A charge to repair or restore to operating condition computer hardware that was broken, worn, damaged, defective, or malfunctioning. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20080010.name":"Computer Repair","docsApp.tax_code_details.txcd_20080011.description":"A separately stated labor charge to cover a piece of furniture previously owned by the customer with new fabric coverings. Any materials transferred as part of the service are separately stated.","docsApp.tax_code_details.txcd_20080011.name":"Furniture Reupholstering","docsApp.tax_code_details.txcd_20080012.description":"A charge to repair or restore jewelry that was broken, worn, damaged, defective, or malfunctioning. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20080012.name":"Jewelry Repair","docsApp.tax_code_details.txcd_20080013.description":"A charge to repair or restore to operating condition a machine that was broken, worn, damaged, defective, or malfunctioning. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20080013.name":"Machine Repair","docsApp.tax_code_details.txcd_20090001.description":"A charge to perform an alteration on a item of clothing by the vendor of the article. The alteration is separately stated from the clothing, but contracted for at the time of the clothing purchase. Alterations could include hemming of a dress, shortening of pants, adjusting the waistline of a garment, etc.","docsApp.tax_code_details.txcd_20090001.name":"Garment Alterations - in conjunction with purchase of garment","docsApp.tax_code_details.txcd_20090002.description":"A charge to perform an alteration on a item of clothing by a service provider other than vendor of the article. The alteration is not linked to the clothing purchase. Alterations could include hemming of a dress, shortening of pants, adjusting the waistline of a garment, etc.","docsApp.tax_code_details.txcd_20090002.name":"Garment Alterations - separate from purchase of garment","docsApp.tax_code_details.txcd_20090003.description":"A charge to have files or documents shredded either onsite or offsite.","docsApp.tax_code_details.txcd_20090003.name":"Shredding Service","docsApp.tax_code_details.txcd_20090006.description":"A charge to create a finished good from materials supplied by the customer. This is a labor only charge to transform a customer's existing property.","docsApp.tax_code_details.txcd_20090006.name":"Fabrication","docsApp.tax_code_details.txcd_20090010.description":"A charge for the wrapping of articles in a box or bag with paper and other decorative additions. The charge is separately stated from the article. This is not relevant for non-US countries where packaging is added to the price of the product.","docsApp.tax_code_details.txcd_20090010.name":"Gift Wrapping - in conjunction with purchase of article","docsApp.tax_code_details.txcd_20090012.description":"A charge to provide laundry services to clothing. The business customer is the owner of the items being cleaned.","docsApp.tax_code_details.txcd_20090012.name":"Linen Services - Laundry only","docsApp.tax_code_details.txcd_20090015.description":"A charge separately stated from the sale of the product itself that entitles the purchaser to future repair and labor services to return the defective item of tangible personal property to its original state. The warranty contract is mandatory and is required to be purchased on conjunction with the purchased tangible personal property. Motor vehicle warranties are excluded.","docsApp.tax_code_details.txcd_20090015.name":"Warranty - Mandatory","docsApp.tax_code_details.txcd_20090018.description":"A charge separately stated from the sale of the product itself that entitles the purchaser to future repair and labor services to return the defective item of tangible personal property to its original state. The warranty contract is optional to the purchaser. Motor vehicle warranties are excluded.","docsApp.tax_code_details.txcd_20090018.name":"Warranty - Optional","docsApp.tax_code_details.txcd_20090022.description":"A charge separately stated from the sale of the product itself to bring the article to its finished state and in the condition specified by the buyer.","docsApp.tax_code_details.txcd_20090022.name":"Assembly - in conjunction with final purchase of article","docsApp.tax_code_details.txcd_20090023.description":"A charge to assemble goods for a purchaser who will later sell the assembled goods to end consumers.","docsApp.tax_code_details.txcd_20090023.name":"Assembly - prior to final purchase of article","docsApp.tax_code_details.txcd_20090024.description":"A charge to a non-commercial customer for the cleaning or renovating items other than clothing by immersion and agitation, spraying, vaporization, or immersion only, in a volatile, commercially moisture-free solvent or by the use of a volatile or inflammable product. This does not include the use of a self-service coin \u0028or credit card\u0029 operated cleaning machine.","docsApp.tax_code_details.txcd_20090024.name":"Dry Cleaning - other than clothing","docsApp.tax_code_details.txcd_20090025.description":"A charge for the wrapping of articles in a box or bag with paper and other decorative additions. The wrapping not linked the purchased of the article\u0028s\u0029 and is performed by a party other vendor of the article\u0028s\u0029.","docsApp.tax_code_details.txcd_20090025.name":"Gift Wrapping - separate from purchase of article","docsApp.tax_code_details.txcd_20090026.description":"A charge to provide laundry services to linens and the like. This charge is not for clothing items. The business customer is the owner of the items being cleaned.","docsApp.tax_code_details.txcd_20090026.name":"Linen Services - Laundry only - other than clothing","docsApp.tax_code_details.txcd_20090027.description":"A charge to make customer provided meat suitable for human consumption, typically referred to a butcher or slaughter services.","docsApp.tax_code_details.txcd_20090027.name":"Meat Processing","docsApp.tax_code_details.txcd_20090028.description":"A charge for the printing, imprinting, lithographing, mimeographing, photocopying, and similar reproductions of various articles including mailers, catalogs, letterhead, envelopes, business cards, presentation folders, forms, signage, etc. The end result is the transfer of tangible personal property to the customer.","docsApp.tax_code_details.txcd_20090028.name":"Printing","docsApp.tax_code_details.txcd_20090029.description":"A charge for the printing, imprinting, or lithographing on any article supplied by the customer. The customer owns the article throughout the process. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20090029.name":"Printing - customer supplied articles","docsApp.tax_code_details.txcd_20090030.description":"A charge to preserve an animal's body via mounting or stuffing, for the purpose of display or study. The customer provide the animal. This a labor charge, with any non-separately stated property transferred in performing the service considered inconsequential.","docsApp.tax_code_details.txcd_20090030.name":"Taxidermy Services","docsApp.tax_code_details.txcd_20090031.description":"A charge for engraving services performed on goods owned by the purchaser. This is a standalone service not done in conjunction with the sale of the goods.","docsApp.tax_code_details.txcd_20090031.name":"Engraving Services - separate from purchase of article","docsApp.tax_code_details.txcd_20090032.description":"A charge for engraving a good, such as jewelry, in conjunction with the retail purchase of that item. The charge for the engraving services is separately stated from the charge for the good being engraved.","docsApp.tax_code_details.txcd_20090032.name":"Engraving Services - in conjunction with purchase of article","docsApp.tax_code_details.txcd_20091000.description":"An agreement between a service contract provider and a customer where the service provider agrees to repair or replace certain parts on a motor vehicle that has had a failure after the original manufacturer’s warranty has expired. Commonly referred to as extended warranty or protection plan. Contract covers both parts and labor, and is made at the same time as Motor Vehicle purchase but is separately stated.","docsApp.tax_code_details.txcd_20091000.name":"Optional Extended Warranty Contract on Motor Vehicle","docsApp.tax_code_details.txcd_20091001.description":"An agreement between a service contract provider and a customer for prepaid routine maintenance \u0028e.g. oil changes, tire rotations, air filter, spark plugs, transmission and transfer case fluid changes\u0029 for a motor vehicle. Contract covers both parts and labor and is made at the same time as Motor Vehicle purchase but is separately stated.","docsApp.tax_code_details.txcd_20091001.name":"Optional Maintenance Contract on Motor Vehicle","docsApp.tax_code_details.txcd_20091002.description":"An agreement between a service contract provider and a customer for prepaid routine maintenance \u0028e.g. oil changes, tire rotations, air filter, spark plugs, transmission and transfer case fluid changes\u0029 of a leased motor vehicle. Contract covers both parts and labor.","docsApp.tax_code_details.txcd_20091002.name":"Optional Extended Warranty Contract on Leased Motor Vehicle","docsApp.tax_code_details.txcd_20091003.description":"An agreement between a service contract provider and a customer where the service provider agrees to repair or replace certain parts on a leased motor vehicle that has had a failure after the original manufacturer’s warranty has expired. Commonly referred to as extended warranty or protection plan. Contract covers both parts and labor.","docsApp.tax_code_details.txcd_20091003.name":"Optional Maintenance Contract on Leased Motor Vehicle","docsApp.tax_code_details.txcd_20091004.description":"An agreement between a service contract provider and a customer where the service provider agrees to repair or replace certain parts on a motor vehicle that has had a failure after the original manufacturer’s warranty has expired. Commonly referred to as extended warranty or protection plan. Contract covers both parts and labor and is made after the motor vehicle purchase.","docsApp.tax_code_details.txcd_20091004.name":"Optional Extended Warranty Contract on Motor Vehicle - After Market","docsApp.tax_code_details.txcd_20091005.description":"An agreement between a service contract provider and a customer for prepaid routine maintenance \u0028e.g. oil changes, tire rotations, air filter, spark plugs, transmission and transfer case fluid changes\u0029 of a motor vehicle. Contract covers both parts and labor and is made after the motor vehicle purchase.","docsApp.tax_code_details.txcd_20091005.name":"Optional Maintenance Contract on Motor Vehicle - After Market","docsApp.tax_code_details.txcd_20100001.description":"Services under armed private security guard to transport from one place to another any currency, jewels, stocks, bonds, paintings, or other valuables of any kind in a specially equipped motor vehicle that offers a high degree of security. It is assumed that the transport takes place within one country.","docsApp.tax_code_details.txcd_20100001.name":"Armored Car Services","docsApp.tax_code_details.txcd_30011002.description":"The clasp used to fasten a belt, sold separately from the belt.","docsApp.tax_code_details.txcd_30011002.name":"Belt Buckle","docsApp.tax_code_details.txcd_30011003.description":"A belt is band of flexible material worn around a person's waist for supporting clothing. Suspenders are a pair of straps that pass over the shoulders and fasten to the waistband of a pair of trousers or a skirt at the front and back to hold it up.","docsApp.tax_code_details.txcd_30011003.name":"Belts or Suspenders","docsApp.tax_code_details.txcd_30011015.description":"A closed tube of fabric worn about the neck for warmth. It can be pulled over mouth and nose to protect against wind, dust, or other particles.","docsApp.tax_code_details.txcd_30011015.name":"Neck Gaiter","docsApp.tax_code_details.txcd_30011020.description":"A set of standardized clothes worn primarily during attendnce at an educational institution.","docsApp.tax_code_details.txcd_30011020.name":"School Uniforms","docsApp.tax_code_details.txcd_30011028.description":"Clothing or footwear, such as coats, hats, ear muffs, gloves, etc. worn on the human body made of imitation fur materials.","docsApp.tax_code_details.txcd_30011028.name":"Fur Clothing - Synthetic","docsApp.tax_code_details.txcd_30011034.description":"A broad strip of cloth that covers the shoulders, neck, or head for warmth or appearance.","docsApp.tax_code_details.txcd_30011034.name":"Scarves","docsApp.tax_code_details.txcd_30011045.description":"A necktie, or simply a tie, is a piece of cloth worn by men and women for decorative purposes around the neck, resting under the shirt collar and knotted at the throat, and often draped down the chest.","docsApp.tax_code_details.txcd_30011045.name":"Neckties","docsApp.tax_code_details.txcd_30011201.description":"Clothing or footwear, such as coats, hats, ear muffs, gloves, etc. worn on the human body made of the real pelt of an animal.","docsApp.tax_code_details.txcd_30011201.name":"Fur Clothing","docsApp.tax_code_details.txcd_30021001.description":"A band of absorbent material worn around the head or wrist to soak up sweat, especially by participants in physical activity.","docsApp.tax_code_details.txcd_30021001.name":"Sweat Bands","docsApp.tax_code_details.txcd_30030001.description":"Clothing worn while performing an employment role, such as paramedic uniforms, firefighter uniforms, military uniforms, medical attire, law enforcement attire, etc.","docsApp.tax_code_details.txcd_30030001.name":"Occupational Uniforms","docsApp.tax_code_details.txcd_30031004.description":"Clothing and related covering material that is worn within cleanrooms, which require controlled low levels of environmental contaminants such as dusts, microbes, vapors, and aerosol particles.","docsApp.tax_code_details.txcd_30031004.name":"Cleanroom Apparel","docsApp.tax_code_details.txcd_30031041.description":"High-visibility warning clothing to signal the presence of the user in places and situations which may cause potential threats to their health and safety.","docsApp.tax_code_details.txcd_30031041.name":"Reflective Apparel","docsApp.tax_code_details.txcd_30031405.description":"Clothing worn by an employee during employment for protection against injury or disease or as protection against damage or injury of other persons or property. Such clothing items are not suitable for general use.","docsApp.tax_code_details.txcd_30031405.name":"Protective\u002FSafety Clothing - Occupational Use","docsApp.tax_code_details.txcd_30031406.description":"Footwear for human wear and designed as protection of the wearer against injury or disease or as protections against damage or injury of other persons or property but not suitable for general use.","docsApp.tax_code_details.txcd_30031406.name":"Protective\u002FSafety Footwear","docsApp.tax_code_details.txcd_30031407.description":"Footwear worn by an employee during employment for protection against injury or disease or as protection against damage or injury of other persons or property. Such clothing items are not suitable for general use.","docsApp.tax_code_details.txcd_30031407.name":"Protective\u002FSafety Footwear - Occupational Use","docsApp.tax_code_details.txcd_30031408.description":"Equipment type accessories \u0028such as helmets, eyeshields, facemasks, pads, etc\u0029 for human wear and designed as protection of the wearer against injury or disease or as protections against damage or injury of other persons or property but not suitable for general use.","docsApp.tax_code_details.txcd_30031408.name":"Protective\u002FSafety Equipment","docsApp.tax_code_details.txcd_30031409.description":"Equipment type accessories \u0028such as helmets, eyeshields, facemasks, pads, etc.\u0029 worn by an employee during employment for protection against injury or disease or as protection against damage or injury of other persons or property. Such clothing items are not suitable for general use.","docsApp.tax_code_details.txcd_30031409.name":"Protective\u002FSafety Equipment - Occupational Use","docsApp.tax_code_details.txcd_30060004.description":"A small usually square piece of cloth used for usually personal purposes \u0028such as blowing the nose\u0029 or as a clothing accessory.","docsApp.tax_code_details.txcd_30060004.name":"Handkerchiefs","docsApp.tax_code_details.txcd_30060005.description":"Hair notions such as headbands, barrettes, bows, clips, and pins.","docsApp.tax_code_details.txcd_30060005.name":"Hair Accessories","docsApp.tax_code_details.txcd_30060011.description":"A plastic cap worn in the shower to keep the hair dry.","docsApp.tax_code_details.txcd_30060011.name":"Shower Caps","docsApp.tax_code_details.txcd_30060013.description":"Umbrellas.","docsApp.tax_code_details.txcd_30060013.name":"Umbrellas","docsApp.tax_code_details.txcd_30060014.description":"Wigs, Hairpieces, Hair extensions.","docsApp.tax_code_details.txcd_30060014.name":"Wigs, Hairpieces, Hair extensions","docsApp.tax_code_details.txcd_30060015.description":"Suitcases and baggage typically used for transporting travellers' belongings.","docsApp.tax_code_details.txcd_30060015.name":"Luggage","docsApp.tax_code_details.txcd_30060017.description":"Sunglasses with a lens containing no lens powers to correct vision problems.","docsApp.tax_code_details.txcd_30060017.name":"Sunglasses - Non-prescription","docsApp.tax_code_details.txcd_30060018.description":"A digital wristwatch that provides many other features besides timekeeping. Like a smartphone, a smartwatch has a touchscreen display, which allows you to perform actions by tapping or swiping on the screen. Smartwatches include allow access to apps, similar to apps for smartphones and tablets.","docsApp.tax_code_details.txcd_30060018.name":"Watches - Smart","docsApp.tax_code_details.txcd_30060019.description":"A flat, rectangular case with a handle, often of leather, for carrying books, papers, etc.","docsApp.tax_code_details.txcd_30060019.name":"Briefcases","docsApp.tax_code_details.txcd_30060020.description":"A piece of clothing, such as a kitchen apron, that you wear over the front of other clothes to keep the clothes clean.","docsApp.tax_code_details.txcd_30060020.name":"Aprons","docsApp.tax_code_details.txcd_30060021.description":"A triangular or square piece of cloth tied around the head, face or neck for protective or decorative purposes.","docsApp.tax_code_details.txcd_30060021.name":"Bandannas","docsApp.tax_code_details.txcd_30060101.description":"A small folding case for carrying paper money, credit cards and other flat objects.","docsApp.tax_code_details.txcd_30060101.name":"Wallets","docsApp.tax_code_details.txcd_30070001.description":"A bicycle helmet that is NOT marketed and labeled as being intended for youth.","docsApp.tax_code_details.txcd_30070001.name":"Bicycle Helmets - Adult","docsApp.tax_code_details.txcd_30070002.description":"A bicycle helmet marketed and labeled as being intended for youth.","docsApp.tax_code_details.txcd_30070002.name":"Bicycle Helmets - Youth","docsApp.tax_code_details.txcd_30070003.description":"Footwear worn exclusively while participating in ballet or tap dancing.","docsApp.tax_code_details.txcd_30070003.name":"Ballet or Tap Shoes","docsApp.tax_code_details.txcd_30070004.description":"Gloves worn by baseball\u002Fsoftball participants while hitting.","docsApp.tax_code_details.txcd_30070004.name":"Baseball Batting Gloves","docsApp.tax_code_details.txcd_30070005.description":"Gloves worn while rolling a bowling ball to the support the muscles in the hand and wrist, and to provide extra padding or grip.","docsApp.tax_code_details.txcd_30070005.name":"Bowling Gloves","docsApp.tax_code_details.txcd_30070006.description":"Footwear uniquely designed to be worn while bowling, having a slick smooth sole meant for gliding.","docsApp.tax_code_details.txcd_30070006.name":"Bowling Shoes","docsApp.tax_code_details.txcd_30070007.description":"A heavily padded mitten worn in boxing.","docsApp.tax_code_details.txcd_30070007.name":"Boxing Gloves","docsApp.tax_code_details.txcd_30070008.description":"Athletic footwear having cleats or spikes to improve traction on various playing field surfaces.","docsApp.tax_code_details.txcd_30070008.name":"Cleated or Spiked Shoes","docsApp.tax_code_details.txcd_30070009.description":"Thin, lightweight gloves designed mainly for wide receivers in football to help with grip while catching.","docsApp.tax_code_details.txcd_30070009.name":"Football Receiver Gloves","docsApp.tax_code_details.txcd_30070010.description":"A glove worn by golfers to give a firm grip on the handle of the golf club.","docsApp.tax_code_details.txcd_30070010.name":"Golf Gloves","docsApp.tax_code_details.txcd_30070011.description":"Footwear designed for golf course play, usually spiked \u0028featuring actual cleats on the outsole\u0029 or spikeless \u0028featuring a flat outsole with rubber studs or dimples in place of spikes\u0029.","docsApp.tax_code_details.txcd_30070011.name":"Golf Shoes","docsApp.tax_code_details.txcd_30070012.description":"Ice Skates.","docsApp.tax_code_details.txcd_30070012.name":"Ice Skates","docsApp.tax_code_details.txcd_30070013.description":"A inflatable sleeveless jacket worn to keep a person afloat when in danger of drowning.","docsApp.tax_code_details.txcd_30070013.name":"Life Vests","docsApp.tax_code_details.txcd_30070014.description":"Clothing apparel\u002Funiforms that are specific to the training and competition of various martial arts.","docsApp.tax_code_details.txcd_30070014.name":"Martial Arts Attire","docsApp.tax_code_details.txcd_30070015.description":"A helmet designed for used when opertating a motorcycle, atv, snowmobile, etc.","docsApp.tax_code_details.txcd_30070015.name":"Motorcycle Helmets","docsApp.tax_code_details.txcd_30070017.description":"A protective device for the mouth that covers the teeth and gums to prevent and reduce injury to the teeth, arches, lips and gums.","docsApp.tax_code_details.txcd_30070017.name":"Mouth Guards","docsApp.tax_code_details.txcd_30070018.description":"Roller Skates or Roller Blades.","docsApp.tax_code_details.txcd_30070018.name":"Roller Skates or Roller Blades","docsApp.tax_code_details.txcd_30070019.description":"A stiff pad worn typically worn under socks to protect the shins when playing soccer, hockey, and other sports.","docsApp.tax_code_details.txcd_30070019.name":"Shin Guards","docsApp.tax_code_details.txcd_30070020.description":"A hard protective pad for the shoulders used in certain sports, such as ice hockey and football.","docsApp.tax_code_details.txcd_30070020.name":"Shoulder Pads for Sports","docsApp.tax_code_details.txcd_30070021.description":"A rigid padded shoe that extends above the ankle, is secured to the foot, and is locked into position in a ski binding.","docsApp.tax_code_details.txcd_30070021.name":"Ski Boots","docsApp.tax_code_details.txcd_30070022.description":"Athletic uniforms not containing protective padding or gear.","docsApp.tax_code_details.txcd_30070022.name":"Sport Uniforms","docsApp.tax_code_details.txcd_30070023.description":"Flippers on the foot or leg and made from rubber or plastic, to aid movement through the water in water sports.","docsApp.tax_code_details.txcd_30070023.name":"Swim Fins","docsApp.tax_code_details.txcd_30070024.description":"Goggles to protect the eyes from material in the water, while swimming.","docsApp.tax_code_details.txcd_30070024.name":"Swim Goggles","docsApp.tax_code_details.txcd_30070025.description":"A close-fitting garment covering most of the body worn for warmth in water sports or diving.","docsApp.tax_code_details.txcd_30070025.name":"Wetsuit","docsApp.tax_code_details.txcd_30070026.description":"An elastic support for the male genitals, worn especially in athletic or other strenuous activity.","docsApp.tax_code_details.txcd_30070026.name":"Athletic Supporter","docsApp.tax_code_details.txcd_30070028.description":"Vests designed primarily for wear while hunting, but which are also adaptable to everyday use.","docsApp.tax_code_details.txcd_30070028.name":"Hunting Vests","docsApp.tax_code_details.txcd_30070029.description":"Clothing, footwear, and accessories for wear while hunting, but that are not adaptable to everyday use.","docsApp.tax_code_details.txcd_30070029.name":"Hunting Activity Clothing","docsApp.tax_code_details.txcd_30080001.description":"Button covers are clothing accessories that slip over simple buttons for stylistic adornment.","docsApp.tax_code_details.txcd_30080001.name":"Button Covers","docsApp.tax_code_details.txcd_30080002.description":"Items items used to make or repair clothing, including buttons, clasps, fabric, thread, yarn, snaps, hooks, zippers, sequins, fabric dye, and the like.","docsApp.tax_code_details.txcd_30080002.name":"Component Clothing Items","docsApp.tax_code_details.txcd_30090005.description":"Rubber boots worn over regular footwear to prevent them from wet or soiled.","docsApp.tax_code_details.txcd_30090005.name":"Overshoes","docsApp.tax_code_details.txcd_30090009.description":"Over the counter inserts or insoles for in-shoe foot comfort.","docsApp.tax_code_details.txcd_30090009.name":"Shoe Inserts","docsApp.tax_code_details.txcd_30090010.description":"Shoelaces.","docsApp.tax_code_details.txcd_30090010.name":"Shoelaces","docsApp.tax_code_details.txcd_31020001.description":"A piece of cloth or plastic fastened around a baby's neck to keep their clothes clean while eating.","docsApp.tax_code_details.txcd_31020001.name":"Bibs","docsApp.tax_code_details.txcd_31020002.description":"Blankets made to stretch to tightly around babies, and may have features like velcro or specially designed shapes or flaps to facilitate swaddle wrapping.","docsApp.tax_code_details.txcd_31020002.name":"Infant Swaddles","docsApp.tax_code_details.txcd_31020003.description":"A small lightweight blanket used to wrap an infant, eg. after bathing.","docsApp.tax_code_details.txcd_31020003.name":"Infant Receiving Blankets","docsApp.tax_code_details.txcd_31031203.description":"Absorbent single use underpants worn by children during potty training as a transition between diapers and cloth underwear.","docsApp.tax_code_details.txcd_31031203.name":"Disposable Toddler Training Pants","docsApp.tax_code_details.txcd_31031204.description":"One time use diaper liners for capturing solid waste for ease of disposal.","docsApp.tax_code_details.txcd_31031204.name":"Diaper Liners - Single Use","docsApp.tax_code_details.txcd_31031205.description":"Infant washable\u002Freusable cloth diapers.","docsApp.tax_code_details.txcd_31031205.name":"Cloth Diapers","docsApp.tax_code_details.txcd_32070020.description":"Single use disposable gloves \u0028latex, nitrile, vinyl, etc\u0029 that have an application in a first aid or medical setting. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070020.name":"Gloves - Disposable \u0028medical use\u0029","docsApp.tax_code_details.txcd_37010003.description":"Removable storage media such as compact disks, flash drives, thumb drives, flash memory cards.","docsApp.tax_code_details.txcd_37010003.name":"Computer Storage Media","docsApp.tax_code_details.txcd_37010036.description":"Ink cartridges for printers.","docsApp.tax_code_details.txcd_37010036.name":"Printer Ink","docsApp.tax_code_details.txcd_37030002.description":"A globe that could be used by a student in a course of study as a reference and to learn the subject being taught.","docsApp.tax_code_details.txcd_37030002.name":"Globes - Student","docsApp.tax_code_details.txcd_37030003.description":"A map that could be used by a student in a course of study as a reference and to learn the subject being taught.","docsApp.tax_code_details.txcd_37030003.name":"Maps - Student","docsApp.tax_code_details.txcd_37040001.description":"Paper suitable for printers.","docsApp.tax_code_details.txcd_37040001.name":"Printer Paper","docsApp.tax_code_details.txcd_37060002.description":"Typically a small electronic device with a keyboard and visual display used for making used for making mathematical calculations.","docsApp.tax_code_details.txcd_37060002.name":"Calculators","docsApp.tax_code_details.txcd_37060003.description":"A calendar based notebook to aid in outlining one's daily appointments, classes, activities, etc.","docsApp.tax_code_details.txcd_37060003.name":"Daily Planners","docsApp.tax_code_details.txcd_37060008.description":"Portable locks used by students in a school setting to prevent use, theft, vandalism or harm.","docsApp.tax_code_details.txcd_37060008.name":"Padlocks - Student","docsApp.tax_code_details.txcd_37060009.description":"An item commonly used by a student in a course of study for artwork. This category is limited to the following items...clay and glazes, paints, paintbrushes for artwork, sketch and drawing pads, watercolors.","docsApp.tax_code_details.txcd_37060009.name":"School Art Supplies","docsApp.tax_code_details.txcd_37060010.description":"Reference printed material commonly used by a student in a course of study as a reference and to learn the subject being taught.","docsApp.tax_code_details.txcd_37060010.name":"Dictionaries\u002FThesauruses","docsApp.tax_code_details.txcd_37060011.description":"Sheet music used by a student in conjunciton with school activities.","docsApp.tax_code_details.txcd_37060011.name":"Sheet music - Student","docsApp.tax_code_details.txcd_37060013.description":"A device that joins pages of paper or similar material by fastening a thin metal staple through the sheets and folding the ends underneath.","docsApp.tax_code_details.txcd_37060013.name":"Staplers\u002FStaples","docsApp.tax_code_details.txcd_37060035.description":"Pins\u002Ftacks to secure papers, pictures, calendars, etc. to bulletin boards, walls, etc.","docsApp.tax_code_details.txcd_37060035.name":"Push pins\u002Ftacks","docsApp.tax_code_details.txcd_37060045.description":"A handheld computer that is capable of plotting graphs, solving simultaneous equations, and performing other tasks with variables.","docsApp.tax_code_details.txcd_37060045.name":"Graphing Calculators","docsApp.tax_code_details.txcd_37060046.description":"A musical instrument used by a student in conjunciton with school activities.","docsApp.tax_code_details.txcd_37060046.name":"Musical instruments - Student","docsShell.stripeSessionsBanner.2022.header":"Join us on May 24 at Sessions—our annual user conference—for product updates, demos, and talks.","docsApp.glossary.definition.multiCurrencyPrice":"A single Price object can support multiple currencies. Each purchase uses one of the supported currencies for the Price, depending on how you use the Price in your integration.\n","docsApp.glossary.term.multiCurrencyPrice":"multi-currency price","docsShell.Terminal.countryNames.CZ":"Czech Republic","docsApp.components.Identifier.subscriptionItem":"Identifier of a SubscriptionItem \u0028si_123\u0029 associated with a Subscription previously created via the \u003Ca\u003EAPI\u003C\u002Fa\u003E.","docsApp.glossary.definition.hst":"In many Canadian provinces the Goods and Services Tax \u0028levied by the country\u0029 is merged with the Provincial Sales Tax \u0028levied by the province\u0029 and is called Harmonized Sales Tax \u0028HST\u0029.\n","docsApp.glossary.definition.pst":"A Provincial Sales Tax \u0028PST\u0029 is a type of tax imposed on consumers and levied by provinces in several Canadian provinces.\n","docsApp.glossary.definition.qst":"The province-specific sales tax in Quebec is called Quebec Sales Tax \u0028QST\u0029.\n","docsApp.glossary.definition.rst":"The Retail Sales Tax \u0028RST\u0029 is a tax imposed by the Canadian province of Manitoba to the retail sale of goods and services.\n","docsApp.glossary.term.hst":"HST","docsApp.glossary.term.pst":"PST","docsApp.glossary.term.qst":"QST","docsApp.glossary.term.rst":"RST","docsApp.components.contrib.roleDescriptions.supportOnly.descriptionOfWhatRoleCanDo":"This role is for people who need to use the support centre.","docsApp.components.contrib.roleDescriptions.supportOnly.descriptionOfWhatRoleCannotDo":"They can't do anything that's not related to support.","docsApp.components.contrib.roleDescriptions.supportOnly.shortDescription":"Can access the support centre","docsShell.verificationDocuments.thPassportExtraMessage":"only acceptable for non-Thai nationals","docsShell.navigation.home":"Home","docsApp.glossary.definition.disputeInquiry":"A pre-dispute request from a card issuer, asking for information about a charge. Based on the response from the business, an enquiry might or might not escalate to a full chargeback. Enquiries are sometimes called \"retrievals\" or \"requests for information\".\n","docsApp.glossary.term.disputeInquiry":"dispute inquiry","docsShell.diagram.overviewDiagram.location":"Location","docsShell.diagram.overviewDiagram.pos":"Point of Sale","docsApp.ResetFormButton.resetForm":"Reset","docsApp.glossary.definition.sepa":"Single Euro Payments Area \u0028SEPA\u0029 is a payment-integration initiative to simplify bank transfers involving euros. Several dozen countries comprise SEPA. Most of the participating countries are in the European Union and have euro-based economies, but this is not a requirement.\n","docsApp.glossary.term.sepa":"Single Euro Payments Area","docsApp.integrationBuilder.feedback.whatDidYouThinkSampleApp":"What did you think of this experience?","docsApp.components.contrib.groupDescriptions.identity":"These roles are only available if you use \u003Ca\u003EIdentity\u003C\u002Fa\u003E","docsApp.components.contrib.groupNames.identity":"Identity roles","docsApp.components.contrib.roleDescriptions.identityAnalyst.descriptionOfWhatRoleCanDo":"This role is for Identity users who need to create, review, cancel, or redact verifications.","docsApp.components.contrib.roleDescriptions.identityAnalyst.descriptionOfWhatRoleCannotDo":"This role can’t edit verifications for connected accounts.","docsApp.components.contrib.roleDescriptions.identityAnalyst.roleName":"Identity Analyst","docsApp.components.contrib.roleDescriptions.identityViewOnly.descriptionOfWhatRoleCanDo":"This role is for Identity users who need to view verification data.","docsApp.components.contrib.roleDescriptions.identityViewOnly.descriptionOfWhatRoleCannotDo":"This role can’t create, review, cancel, or redact verifications.","docsApp.components.contrib.roleDescriptions.identityViewOnly.roleName":"Identity View Only","docsApp.components.contrib.thingsRolesCanDo.createEditIdentityVerifications":"Create and edit identity verifications.","docsApp.components.contrib.thingsRolesCanDo.createViewEditIdentityVerificationsConnect":"Create, view, and edit identity verifications for connected accounts.","docsApp.components.contrib.thingsRolesCanDo.createViewEditVerifications":"Create, view, and edit identity verifications.","docsApp.components.contrib.thingsRolesCanDo.manuallyReviewVerifications":"Manually review, cancel, and redact identity verifications.","docsApp.components.contrib.thingsRolesCanDo.viewIdentityVerifications":"View identity verifications.","docsApp.tax_code_details.txcd_15100001.description":"Jet fuel is a refined kerosene-based, colorless type of fuel that’s used in aircraft with turbine engines, including turboprops and jet engines. There are two main types of jet fuel – Jet A and Jet A1.","docsApp.tax_code_details.txcd_15100001.name":"Jet Fuel - Kerosene","docsShell.HomePage.UseCase.Testing.body":"Use test card numbers to simulate different payment scenarios.","docsShell.HomePage.UseCase.Testing.heading":"Testing","docsShell.payoutSettlementCurrencies.free":"FREE","docsShell.sampleApp.seeAlso":"Read a related guide","docsApp.components.contrib.groupNames.finance":"Finance roles","docsApp.components.Identifier.idempotencyKey":"An idempotency key is a unique value generated by the client which the server uses to recognize subsequent retries of the same request. How you create unique keys is up to you, but we suggest using V4 UUIDs, or another random string with enough entropy to avoid collisions. Idempotency keys can be up to 255 characters long.","docsApp.components.codeBlock.submittedToStripe":"Your report will be submitted to our team. Thank you for helping to improve our docs.","docsApp.demo.shippingAddressElement.body.customerLocation":"The address element supports 236 country address formats. Only a sample is shown here. Stripe automatically formats addresses with autocomplete to help with a faster checkout and more accurate address collection.","docsApp.demo.shippingAddressElement.body.theme":"Create a theme to match your brand with the Appearance API.","docsApp.demo.shippingAddressElement.label.autocompleteToggle":"Autocomplete","docsApp.demo.shippingAddressElement.label.customerLocation":"Customer Location","docsApp.demo.shippingAddressElement.label.customizationMenuHeading":"Customization","docsApp.demo.shippingAddressElement.label.phoneToggle":"Phone number","docsApp.demo.shippingAddressElement.label.size":"Size","docsApp.demo.shippingAddressElement.label.theme":"Theme","docsApp.demo.shippingAddressElement.title.customerLocation":"Address formats differ in some countries.","docsApp.demo.shippingAddressElement.title.theme":"Customize it","docsApp.demo.shippingAddressElement.unexpectedError":"An error occurred. We're looking into it\u0021","docsApp.glossary.definition.accountSessionSecret":"The client secret is a unique string returned from Stripe as part of an AccountSession. This string lets the client access a specific Stripe account with Connect embedded components.\n","docsApp.glossary.definition.csp":"Content Security Policy \u0028CSP\u0029 is an added layer of security that helps to detect and mitigate certain types of attacks, including Cross-Site Scripting \u0028XSS\u0029 and data injection attacks.\n","docsApp.glossary.term.accountSessionSecret":"AccountSession client secret","docsApp.glossary.term.csp":"Content Security Policy","docsShell.TerminalHardwareOrderCountries.countryException.GB":"\u0028excluding Jersey, Guernsey, Isle of Man, and the British Virgin Islands\u0029","docsShell.TerminalHardwareOrderCountries.countryException.NL":"\u0028excluding Aruba, Curaçao, Sint Maarten, Bonaire, Sint Eustatius, and Saba\u0029","docsApp.components.table.sortAlphabetic":"Sort: Alphabetically \u0028A-Z\u0029","docsApp.components.table.sortAlphabeticDesc":"Sort: Alphabetically \u0028Z-A\u0029","docsApp.components.table.sortOriginalOrder":"Sort: Original Order","docsApp.apiExplorer.disclaimer":"Some optional parameters may be conditionally required.\n Please refer to the API Reference for more details.","docsApp.tax_code_details.txcd_33080301.description":"Bedclothes items including sheets, pillow cases, bedspreads, comforters, blankets, throws, duvet covers, pillow shams, valances, mattress pad, mattress toppers, and pillows.","docsApp.tax_code_details.txcd_33080302.description":"A small mat\u002Frug used to cover portion of bathroom floor.","docsApp.tax_code_details.txcd_33080302.name":"Bath Mats\u002FRugs","docsApp.tax_code_details.txcd_33080303.description":"Towels used for individual drying of persons, including bath towels, beach towels, wash cloths, hand towels, facetowels, sport towels, etc.","docsApp.tax_code_details.txcd_33080303.name":"Bath Towels","docsApp.tax_code_details.txcd_33080304.description":"Shower curtain\u002Fliner used to keep water from escaping a showering area.","docsApp.tax_code_details.txcd_33080304.name":"Shower Curtain or Liner","docsApp.tax_code_details.txcd_33080305.description":"A bumper\u002Fliner that borders the interior walls\u002Fslats of the crib to help protect the baby.","docsApp.tax_code_details.txcd_33080305.name":"Crib Bumpers\u002FLiners","docsApp.tax_code_details.txcd_33080306.description":"Dish towels used for kitchenware drying.","docsApp.tax_code_details.txcd_33080306.name":"Dish Towels","docsApp.tax_code_details.txcd_33080400.description":"Yarn for use other than fabricating\u002Frepairing clothing.","docsApp.tax_code_details.txcd_33080400.name":"Yarn - Non-clothing","docsApp.tax_code_details.txcd_35010410.description":"The sacred writings of a religion.","docsApp.tax_code_details.txcd_35010410.name":"Bibles","docsApp.tax_code_details.txcd_35020220.description":"Periodicals, printed, sold by subscription.","docsApp.tax_code_details.txcd_35020220.name":"Magazine by Subscription","docsApp.tax_code_details.txcd_37070002.description":"Prewritten \u0028\"canned\"\u0029 software on tangible media used for non-recreational purposes, such as antivirus, database, educational, financial, word processing, etc. The software is intended for personal use, rather than for consumption in a commercial enterprise. Note: The distinction between business use and personal use for this tax code is relevant only if you are transacting business in the US.","docsApp.tax_code_details.txcd_37070002.name":"Canned Software - Tangible Medium - Non-recreational","docsApp.tax_code_details.txcd_37071001.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to obtain periodic canned software updates, upgrades, and error corrections in electronic form.","docsApp.tax_code_details.txcd_37071001.name":"Software Maintenance Agreement - Optional, Prewritten, Electronic Delivery, Updates Only","docsApp.tax_code_details.txcd_37071002.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to obtain periodic canned software updates, upgrades, and error corrections in electronic form, as well as non-separately stated support services, such as consultation or phone support.","docsApp.tax_code_details.txcd_37071002.name":"Software Maintenance Agreement - Optional, Prewritten, Electronic Delivery, Updates and Services","docsApp.tax_code_details.txcd_37071003.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to only support services, such as consultation or phone support. The agreement does not include periodic canned software updates, upgrades, or error corrections in any form.","docsApp.tax_code_details.txcd_37071003.name":"Software Maintenance Agreement - Optional, Prewritten, Services Only","docsApp.tax_code_details.txcd_37071006.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to obtain periodic canned software updates, upgrades, and error corrections in tangible form.","docsApp.tax_code_details.txcd_37071006.name":"Software Maintenance Agreement - Optional, Prewritten, Tangible Delivery, Updates Only","docsApp.tax_code_details.txcd_37071007.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to obtain periodic canned software updates, upgrades, and error corrections in tangible form, as well as non-separately stated support services, such as consultation or phone support.","docsApp.tax_code_details.txcd_37071007.name":"Software Maintenance Agreement - Optional, Prewritten, Tangible Delivery, Updates and Services","docsApp.tax_code_details.txcd_37071009.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to obtain, from the original seller of the software, periodic custom software updates, upgrades, and error corrections in electronic form.","docsApp.tax_code_details.txcd_37071009.name":"Software Maintenance Agreement - Optional, Custom, Electronic Delivery, Updates Only","docsApp.tax_code_details.txcd_37071010.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to obtain, from the original seller of the software, periodic custom software updates, upgrades, and error corrections in electronic form, as well as non-separately stated support services, such as consultation or phone support.","docsApp.tax_code_details.txcd_37071010.name":"Software Maintenance Agreement - Optional, Custom, Electronic Delivery, Updates and Services","docsApp.tax_code_details.txcd_37071011.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to only support services, such as consultation or phone support. The agreement does not include periodic custom software updates, upgrades, or error corrections in any form.","docsApp.tax_code_details.txcd_37071011.name":"Software Maintenance Agreement - Optional, Custom, Services Only","docsApp.tax_code_details.txcd_37071014.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to obtain, from the original seller of the software, periodic custom software updates, upgrades, and error corrections in tangible form.","docsApp.tax_code_details.txcd_37071014.name":"Software Maintenance Agreement - Optional, Custom, Tangible Delivery, Updates Only","docsApp.tax_code_details.txcd_37071015.description":"A charge, apart from the charge for the software, for an agreement that is not required to be purchased in order to obtain the software. The agreement entitles the software user to obtain, from the original seller of the software, periodic custom software updates, upgrades, and error corrections in tangible form, as well as non-separately stated support services, such as consultation or phone support.","docsApp.tax_code_details.txcd_37071015.name":"Software Maintenance Agreement - Optional, Custom, Tangible Delivery, Updates and Services","docsApp.tax_code_details.txcd_37071101.description":"A charge, apart from the charge for the software, for an agreement that is required to be purchased in order to obtain the software. The agreement entitles the software user to obtain periodic canned software updates, upgrades, and error corrections in electronic form. The agreement may or may not also include non-separately stated support services, such as consultation or phone support.","docsApp.tax_code_details.txcd_37071101.name":"Software Maintenance Agreement - Mandatory, Prewritten, Electronic Delivery","docsApp.tax_code_details.txcd_37071103.description":"A charge, apart from the charge for the software, for an agreement that is required to be purchased in order to obtain the software. The agreement entitles the software user to obtain periodic canned software updates, upgrades, and error corrections in tangible form. The agreement may or may not also include non-separately stated support services, such as consultation or phone support.","docsApp.tax_code_details.txcd_37071103.name":"Software Maintenance Agreement - Mandatory, Prewritten, Tangible Delivery","docsApp.tax_code_details.txcd_37071104.description":"A charge, apart from the charge for the software, for an agreement that is required to be purchased in order to obtain the software. The agreement entitles the software user to obtain periodic custom software updates, upgrades, and error corrections in electronic form. The agreement may or may not also include non-separately stated support services, such as consultation or phone support.","docsApp.tax_code_details.txcd_37071104.name":"Software Maintenance Agreement - Mandatory, Custom, Electronic Delivery","docsApp.tax_code_details.txcd_37071106.description":"A charge, apart from the charge for the software, for an agreement that is required to be purchased in order to obtain the software. The agreement entitles the software user to obtain periodic custom software updates, upgrades, and error corrections in tangible form. The agreement may or may not also include non-separately stated support services, such as consultation or phone support.","docsApp.tax_code_details.txcd_37071106.name":"Software Maintenance Agreement - Mandatory, Custom, Tangible Delivery","docsApp.tax_code_details.txcd_40010000.description":"Grain, as an important staple food, is the harvested seed of grasses such as wheat, oats, rice, corn, orghum, millet, rye, and barley.","docsApp.tax_code_details.txcd_40010000.name":"Cereal Grains","docsApp.tax_code_details.txcd_40010001.description":"A dough of flour, eggs, and water made in different shapes and dried or used fresh.","docsApp.tax_code_details.txcd_40010001.name":"Pasta","docsApp.tax_code_details.txcd_40010002.description":"The starchy grain of ceral grass used as a staple food.","docsApp.tax_code_details.txcd_40010002.name":"Rice","docsApp.tax_code_details.txcd_40020002.description":"Cooking oils such as olive oil, vegetable oil, corn oil, etc.","docsApp.tax_code_details.txcd_40020002.name":"Edible Oils","docsApp.tax_code_details.txcd_40020004.description":"A sweet substance especially from the plants sugar cane and sugar beet, used to make food and drinks sweet. This category also supports artifical sugars such as saccharine, aspartame, sucralose, etc.","docsApp.tax_code_details.txcd_40020004.name":"Sugar and Sugar Substitutes","docsApp.tax_code_details.txcd_40020005.description":"Flour is a white or brown powder that is made by grinding grain, used chielfy in baking.","docsApp.tax_code_details.txcd_40020005.name":"Flour","docsApp.tax_code_details.txcd_40020006.description":"A type of plant whose leaves are used in cooking to give flavour to particular dishes, such as basil, oregano, and coriander, etc.","docsApp.tax_code_details.txcd_40020006.name":"Herbs","docsApp.tax_code_details.txcd_40020007.description":"Seasonings such as salt, pepper, paprika, chili powder, etc.","docsApp.tax_code_details.txcd_40020007.name":"Seasonings","docsApp.tax_code_details.txcd_40020008.description":"Any edible dye, pigment, or substance that imparts color when it is added to food or drink.","docsApp.tax_code_details.txcd_40020008.name":"Food Colouring","docsApp.tax_code_details.txcd_40040003.description":"A dark brown powder made from cocoa beans, used to add a chocolate flavour to beverages, as in hot chocolate.","docsApp.tax_code_details.txcd_40040003.name":"Cocoa Mix","docsApp.tax_code_details.txcd_40040009.description":"A dark brown powder made from cocoa beans, used to make chocolate and add a chocolate flavour to the baking process.","docsApp.tax_code_details.txcd_40040009.name":"Baking Cocoa","docsApp.tax_code_details.txcd_40040010.description":"Ice for human consumption.","docsApp.tax_code_details.txcd_40040010.name":"Ice Cubes","docsApp.tax_code_details.txcd_40040013.description":"The flesh \u0028muscle tissue\u0029 of an animal consumed as food.","docsApp.tax_code_details.txcd_40040013.name":"Meat and Meat Products","docsApp.tax_code_details.txcd_40040016.description":"Nuts and seeds in unroasted, unsalted, unflavoured form.","docsApp.tax_code_details.txcd_40040016.name":"Nuts and Seeds","docsApp.tax_code_details.txcd_40040017.description":"Nuts and seeds that have been salted, spiced, smoked, or roasted.","docsApp.tax_code_details.txcd_40040017.name":"Nuts and Seeds, Processed","docsApp.tax_code_details.txcd_40040019.description":"Vegetables are parts of plants that are consumed as food.","docsApp.tax_code_details.txcd_40040019.name":"Vegetables","docsApp.tax_code_details.txcd_40040020.description":"Cracker bread is a thin and crispy flat bread that is often used as an accompaniment to meals in many different cultures, most notably Turkish, Indian, and Mediterranean cuisine.","docsApp.tax_code_details.txcd_40040020.name":"Cracker Bread","docsApp.tax_code_details.txcd_40040021.description":"Plain Breads include items ordinary loaves, such as sourdough, multigrain, and rye loaves.","docsApp.tax_code_details.txcd_40040021.name":"Plain Breads","docsApp.tax_code_details.txcd_40040022.description":"Speciality Breads are artisan breads, including cheese bread, olive loaves, date and walnut bread, etc.","docsApp.tax_code_details.txcd_40040022.name":"Speciality Breads","docsApp.tax_code_details.txcd_40050003.description":"Food bundle or basket containing food staples combined with tangible personal property, with the food comprising between 50% and 75% of the overall value of the bundle.","docsApp.tax_code_details.txcd_40050003.name":"Food\u002FTPP Bundle - with Food between 50% and 75%","docsApp.tax_code_details.txcd_40050007.description":"Food bundle or basket containing food staples combined with tangible personal property, with the food comprising 90% or more of the overall value of the bundle, where all food consists of confectionery \u0028not containing flour\u0029.","docsApp.tax_code_details.txcd_40050007.name":"Food\u002FTPP Bundle - with Food 90% or more - Food is all Confectionery","docsApp.tax_code_details.txcd_40050008.description":"Food bundle or basket containing food staples combined with tangible personal property, with the food comprising between 50% and 75% of the overall value of the bundle, where all food consists of confectionery \u0028not containing flour\u0029.","docsApp.tax_code_details.txcd_40050008.name":"Food\u002FTPP Bundle - with Food between 50% and 75% - Food is all Confectionery","docsApp.tax_code_details.txcd_40050009.description":"Food bundle or basket containing food staples combined with tangible personal property, with the food comprising between 76% and 89% of the overall value of the bundle.","docsApp.tax_code_details.txcd_40050009.name":"Food\u002FTPP Bundle - with Food between 76% and 89%","docsApp.tax_code_details.txcd_40050010.description":"Food bundle or basket containing food staples combined with tangible personal property, with the food comprising between 76% and 89% of the overall value of the bundle, where all food consists of confectionery \u0028not containing flour\u0029.","docsApp.tax_code_details.txcd_40050010.name":"Food\u002FTPP Bundle - with Food between 76% and 89% - Food is all Confectionery","docsApp.tax_code_details.txcd_40051001.description":"Food bundle or basket containing food staples combined with confectionery, with the confectionery comprising 10% or less of the overall value of the bundle \u0028food comprises 90% or more\u0029. Note that any confectionery containing flour should be considered as food \u0028and not confectionery\u0029 when determining bundle percentages.","docsApp.tax_code_details.txcd_40051001.name":"Food\u002FConfectionery Bundle - with Confectionery 10% or less","docsApp.tax_code_details.txcd_40051002.description":"Food bundle or basket containing food staples combined with confectionery, with the confectionery comprising between 11% and 24% of the overall value of the bundle \u0028food comprises 76% to 89%\u0029. Note that any confectionery containing flour should be considered as food \u0028and not confectionery\u0029 when determining bundle percentages.","docsApp.tax_code_details.txcd_40051002.name":"Food\u002FConfectionery Bundle - with Confectionery 11% to 24%","docsApp.tax_code_details.txcd_40051003.description":"Food bundle or basket containing food staples combined with confectionery, with the confectionery comprising between 25% and 49% of the overall value of the bundle \u0028food comprises 51 to 75%\u0029. Note that any confectionery containing flour should be considered as food \u0028and not confectionery\u0029 when determining bundle percentages.","docsApp.tax_code_details.txcd_40051003.name":"Food\u002FConfectionery Bundle - with Confectionery 25% to 49%","docsApp.tax_code_details.txcd_40051004.description":"Food bundle or basket containing food staples combined with confectionery, with the confectionery comprising 50% or more of the overall value of the bundle \u0028food comprises 50% or less\u0029. Note that any confectionery containing flour should be considered as food \u0028and not confectionery\u0029 when determining bundle percentages.","docsApp.tax_code_details.txcd_40051004.name":"Food\u002FConfectionery Bundle - with Confectionery 50% or more","docsApp.tax_code_details.txcd_40070001.description":"Granola Bars, Cereal Bars, Energy Bars, Protein Bars containing flour.","docsApp.tax_code_details.txcd_40070001.name":"Granola Bars, Cereal Bars, Energy Bars, Protein Bars Containing Flour","docsApp.tax_code_details.txcd_40070002.description":"Granola Bars, Cereal Bars, Energy Bars, Protein Bars containing no flour.","docsApp.tax_code_details.txcd_40070002.name":"Granola Bars, Cereal Bars, Energy Bars, Protein Bars Containing No Flour","docsApp.tax_code_details.txcd_40070006.description":"A biscuit is a typically hard, small baked product that would be called a \"cookie\" In the US.","docsApp.tax_code_details.txcd_40070006.name":"Biscuits\u002FCookies - Plain","docsApp.tax_code_details.txcd_40070007.description":"A biscuit is a typically hard, small baked product that would be called a \"cookie\" In the US. This cookie is covered or coated in chocolate.","docsApp.tax_code_details.txcd_40070007.name":"Biscuits\u002FCookies - Chocolate Coated","docsApp.tax_code_details.txcd_40090002.description":"Nutritional supplement in powder form, dairy based or plant based, focused on increasing ones intake of protein for various benefits.","docsApp.tax_code_details.txcd_40090002.name":"Protein Powder","docsApp.tax_code_details.txcd_40100003.description":"Ice cream, frozen yogurt, or similar, packaged in a container that is one pint or larger. The default behaviour of this category assumes off-premises consumption.","docsApp.tax_code_details.txcd_40100003.name":"Ice Cream, Packaged - One Pint or Greater","docsApp.tax_code_details.txcd_40100004.description":"Ice cream, frozen yogurt, or similar, packaged in a container that is less than one pint. The default behaviour of this category assumes off-premises consumption.","docsApp.tax_code_details.txcd_40100004.name":"Ice Cream, Packaged - Less Than One Pint Container","docsApp.tax_code_details.txcd_40100010.description":"A soft, cohesive substance designed to be chewed without being swallowed.","docsApp.tax_code_details.txcd_40100010.name":"Chewing Gum","docsApp.tax_code_details.txcd_40100011.description":"A mint-flavoured sweet intended to freshen the breath.","docsApp.tax_code_details.txcd_40100011.name":"Breath Mints","docsApp.tax_code_details.txcd_40400005.description":"Dried fruit is fruit from which the majority of the original water content has been removed either naturally, through sun drying, or through the use of specialised dryers or dehydrators. Common dried fruits are dried fruits sold are raisins, dates, prunes, and figs.","docsApp.tax_code_details.txcd_40400005.name":"Dried Fruit - Unsweetened","docsApp.tax_code_details.txcd_41020001.description":"Beer is an alcoholic drink that is flavoured with hops and consists of yeast-fermented malt. Malt beverage is a type of alcoholic drink in which the grain, or seed, of the barley plant is the main ingredient. This code represents packaged beverages for non-immediate consumption.","docsApp.tax_code_details.txcd_41020001.name":"Alcoholic Beverages - Beer\u002FMalt Beverage","docsApp.tax_code_details.txcd_41020002.description":"Alcoholic beverages created in a distillation process, and are known by the common names of vodka, gin, whiskey, rum, tequila, brandy, etc. This code represents packaged beverages for non-immediate consumption.","docsApp.tax_code_details.txcd_41020002.name":"Alcoholic Beverages - Spirits","docsApp.tax_code_details.txcd_41020003.description":"An alcoholic beverage created through fermentation of grapes of various varieties. This code represents packaged beverages for non-immediate consumption.","docsApp.tax_code_details.txcd_41020003.name":"Alcoholic Beverages - Wine","docsApp.tax_code_details.txcd_41030003.description":"Bottled Water for human consumption, unsweetened, carbonated naturally. Includes carbonated waters containing only natural flavours or essences.","docsApp.tax_code_details.txcd_41030003.name":"Bottled Water - Carbonated Naturally","docsApp.tax_code_details.txcd_41040009.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 1-9% natural vegetable juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040009.name":"Soft Drinks - Carbonated - 1-9% Vegetable juice","docsApp.tax_code_details.txcd_41040010.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 1-9% natural fruit juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040010.name":"Soft Drinks - Carbonated - 1-9% Fruit juice","docsApp.tax_code_details.txcd_41040011.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 10-24% natural fruit juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040011.name":"Soft Drinks - Carbonated - 10-24% Fruit juice","docsApp.tax_code_details.txcd_41040012.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 10-24% natural vegetable juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040012.name":"Soft Drinks - Carbonated - 10-24% Vegetable juice","docsApp.tax_code_details.txcd_41040013.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 100% natural fruit or vegetable juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040013.name":"Soft Drinks - Carbonated - 100% Fruit or Vegetable juice","docsApp.tax_code_details.txcd_41040014.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 25-50% natural fruit juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040014.name":"Soft Drinks - Carbonated - 25-50% Fruit juice","docsApp.tax_code_details.txcd_41040015.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 25-50% natural vegetable juice. This does not flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040015.name":"Soft Drinks - Carbonated - 25-50% Vegetable juice","docsApp.tax_code_details.txcd_41040016.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 51-69% natural fruit juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040016.name":"Soft Drinks - Carbonated - 51-69% Fruit juice","docsApp.tax_code_details.txcd_41040017.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 51-69% natural vegetable juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040017.name":"Soft Drinks - Carbonated - 51-69% Vegetable juice","docsApp.tax_code_details.txcd_41040018.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 70-99% natural fruit juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040018.name":"Soft Drinks - Carbonated - 70-99% Fruit juice","docsApp.tax_code_details.txcd_41040019.description":"Carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 70-99% natural vegetable juice. This does not include flavoured carbonated water. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040019.name":"Soft Drinks - Carbonated - 70-99% Vegetable juice","docsApp.tax_code_details.txcd_41040020.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 1-9% natural vegetable juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040020.name":"Soft Drinks - Non-Carbonated - 1 -9% Vegetable juice","docsApp.tax_code_details.txcd_41040021.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 1-9% natural fruit juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040021.name":"Soft Drinks - Non-Carbonated - 1-9% Fruit juice","docsApp.tax_code_details.txcd_41040022.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 10-24% natural fruit juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040022.name":"Soft Drinks - Non-Carbonated - 10-24% Fruit juice","docsApp.tax_code_details.txcd_41040023.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 10-24% natural vegetable juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040023.name":"Soft Drinks - Non-Carbonated - 10-24% Vegetable juice","docsApp.tax_code_details.txcd_41040024.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 100% natural fruit or vegetable juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040024.name":"Soft Drinks - Non-Carbonated - 100% Fruit or Vegetable juice","docsApp.tax_code_details.txcd_41040025.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 25-50% natural fruit juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040025.name":"Soft Drinks - Non-Carbonated - 25-50% Fruit juice","docsApp.tax_code_details.txcd_41040026.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 25-50% natural vegetable juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040026.name":"Soft Drinks - Non-Carbonated - 25-50% Vegetable juice","docsApp.tax_code_details.txcd_41040027.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 51-69% natural fruit juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040027.name":"Soft Drinks - Non-Carbonated - 51-69% Fruit juice","docsApp.tax_code_details.txcd_41040028.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 51-69% natural vegetable juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040028.name":"Soft Drinks - Non-Carbonated - 51-69% Vegetable juice","docsApp.tax_code_details.txcd_41040029.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 70-99% natural fruit juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040029.name":"Soft Drinks - Non-Carbonated - 70-99% Fruit juice","docsApp.tax_code_details.txcd_41040030.description":"Non-carbonated non-alcoholic beverages that contain natural or artificial sweeteners, and 70-99% natural vegetable juice. This does not include flavoured water. This does include sweetened cocktail mixes that can be combined with alcohol. This does include beverages marketed as energy drinks that carry a Nutrition Facts label and contain a blend of energy enhancing ingredients.","docsApp.tax_code_details.txcd_41040030.name":"Soft Drinks - Non-Carbonated - 70-99% Vegetable juice","docsApp.tax_code_details.txcd_41050001.description":"Ready to drink coffee based beverage containing milk or milk substitute.","docsApp.tax_code_details.txcd_41050001.name":"Bottled coffee - Containing Milk or Milk Substitute","docsApp.tax_code_details.txcd_41050002.description":"Ready to drink coffee based beverage not containing milk, containing natural or artificial sweetener.","docsApp.tax_code_details.txcd_41050002.name":"Bottled Coffee - No Milk - Sweetened","docsApp.tax_code_details.txcd_41050003.description":"Ready to drink coffee based beverage containing neither milk nor natural or artificial sweeteners.","docsApp.tax_code_details.txcd_41050003.name":"Bottled Coffee - No Milk - Unsweetened","docsApp.tax_code_details.txcd_41050004.description":"Ready to drink carbonated beverage containing tea and without any natural or artificial sweeteners.","docsApp.tax_code_details.txcd_41050004.name":"Bottled Tea - Carbonated - Unsweetened","docsApp.tax_code_details.txcd_41050005.description":"Ready to drink non-carbonated beverage containing tea without natural or artificial sweeteners.","docsApp.tax_code_details.txcd_41050005.name":"Bottled Tea - Non-Carbonated - Unsweetened","docsApp.tax_code_details.txcd_41050007.description":"Ready to drink carbonated beverage containing tea with natural or artificial sweeteners.","docsApp.tax_code_details.txcd_41050007.name":"Bottled Tea - Carbonated - Sweetened","docsApp.tax_code_details.txcd_41051001.description":"Carbonated beverages marketed as energy drinks, carrying a Supplement Facts Label, that contain a blend of energy enhancing vitamins, minerals, herbals, stimulants, etc.","docsApp.tax_code_details.txcd_41051001.name":"Energy Beverages - Carbonated - with Supplement Facts Label","docsApp.tax_code_details.txcd_41051002.description":"Non-carbonated beverages marketed as energy drinks, carrying a Supplement Facts Label, that contain a blend of energy enhancing vitamins, minerals, herbals, stimulants, etc.","docsApp.tax_code_details.txcd_41051002.name":"Energy Beverages - Non-Carbonated - with Supplement Facts Label","docsApp.tax_code_details.txcd_41052001.description":"Non-alcoholic beer is beer with little or no alcohol content. In the United States, beverages containing less than 0.5% alcohol by volume \u0028ABV\u0029 fall under this term.","docsApp.tax_code_details.txcd_41052001.name":"Food and Beverage - Non-Alcoholic Beer\u002F Wine","docsApp.tax_code_details.txcd_41053001.description":"Ready-to-drink beverages, containing milk, formulated and labelled for their nutritional value, such as increased calorific or protein intake.","docsApp.tax_code_details.txcd_41053001.name":"Nutritional Supplement, Protein Drinks, Shakes - Contains Milk","docsApp.tax_code_details.txcd_41053002.description":"Ready-to-drink beverages, not containing milk, formulated and labelled for their nutritional value, such as increased calorific or protein intake and containing natural or artificial sweeteners.","docsApp.tax_code_details.txcd_41053002.name":"Nutritional Supplement, Protein Drink, Shakes - Contains No Milk","docsApp.tax_code_details.txcd_41054001.description":"Powdered mixes to be reconstituted into a drinkable beverage using milk or a milk substitute.","docsApp.tax_code_details.txcd_41054001.name":"Powdered Drink Mixes - To Be Mixed with Milk","docsApp.tax_code_details.txcd_41054002.description":"Powdered mixes to be reconstituted into a drinkable beverage using water.","docsApp.tax_code_details.txcd_41054002.name":"Powdered Drink Mixes - To Be Mixed with Water","docsApp.tax_code_details.txcd_90000001.description":"A monetary donation for a cause, in which the donee receives nothing in return.","docsApp.tax_code_details.txcd_90000001.name":"Cash Donation","docsApp.apiWorksheet.objectHelp":"Call APIs from the Stripe Shell, copy-paste the object IDs, and press the Enter key to submit. If necessary you can ","docsApp.apiWorksheet.restart":"restart","docsApp.apiWorksheet.resume":"Resume","docsApp.apiWorksheet.shortAnswerHelp":"Press the Enter key to submit. If necessary you can ","docsApp.apiWorksheet.urlHelp":"Find the answer, click its heading or copy a deep link, paste above, and press the Enter key to submit. If necessary you can ","docsShell.navigation.stripeProducts":"Products Used","docsApp.components.contrib.thingsRolesCanDo.editClimateSettings":"Edit climate settings","docsApp.components.contrib.thingsRolesCanDo.viewAndEditAlmostAllProductSettingsExceptClimate":"View and edit almost all product settings \u0028for example, payment methods, radar settings, or connect settings\u0029 except climate","docsApp.components.serverSelector.cli":"Stripe CLI","docsApp.components.serverSelector.curl":"cURL","docsApp.components.serverSelector.dotnet":".NET","docsApp.components.serverSelector.go":"Go","docsApp.components.serverSelector.java":"Java","docsApp.components.serverSelector.node":"Node.js","docsApp.components.serverSelector.php":"PHP","docsApp.components.serverSelector.python":"Python","docsApp.components.serverSelector.ruby":"Ruby","docsApp.glossary.definition.paymentMethodProvider":"A Payment Method Provider integrates with Stripe so that businesses can support the payment method using Stripe.\n","docsApp.glossary.term.paymentMethodProvider":"Payment Method Provider \u0028PMP\u0029","docsShell.connectRequiredVerificationInformation.error":"Unable to load required verification information","docsShell.connectRequiredVerificationInformation.loading":"Loading required verification information","docsApp.componenets.codeBlock.reportIncorrectCode":"Report incorrect code","docsApp.components.codeBlock.cancel":"Cancel","docsApp.components.codeBlock.reported":"Reported\u0021","docsApp.components.codeBlock.submit":"Submit","docsApp.components.codeBlock.whatsWrong":"What's wrong with the code?","docsShell.navigation.apiRefs":"Related API Resources","docsApp.integrationBuilder.demo.connectElements.config.experience":"Element","docsApp.integrationBuilder.demo.connectElements.config.experience.payments":"Payments","docsApp.integrationBuilder.demo.connectElements.config.experience.payouts":"Payouts","docsApp.integrationBuilder.demo.connectElements.config.size":"Size","docsApp.integrationBuilder.demo.connectElements.config.size.desktop":"Desktop","docsApp.integrationBuilder.demo.connectElements.config.size.mobile":"Mobile","docsApp.integrationBuilder.demo.connectElements.unexpectedError":"An error occurred. We're looking into it\u0021","docsShell.ib.checkout.html.line-items.option.paymentLink.copied":"Copied","docsShell.ib.checkout.html.line-items.option.paymentLink.copyToClipboard":"Copy to clipboard","docsShell.ib.checkout.html.line-items.option.paymentLink.createPaymentLink":"Create your payment link","docsShell.navigation.relatedDocs":"Related Guides","docsApp.apiWorksheet.inputHelp":"Type your answer here","docsApp.apiWorksheet.shellKeyboardHelp":"Press ctrl\u002B\u0060 to re-open Stripe Shell","docsApp.apiWorksheet.shellMouseHelp":"Click here to re-open Stripe Shell","docsApp.tax_id_types.jp_trn.description":"Japanese Tax Registration Number \u0028*Tōroku Bangō*\u0029","docsApp.demo.shippingAddressElement.tooltip.phoneToggle":"This will enable phone number collection when the address form is expanded or using a contact.","docsApp.tax_id_types.ke_pin.description":"Kenya Revenue Authority Personal Identification Number","docsApp.demo.shippingAddressElement.label.contactsToggle":"Contacts","docsShell.ib.checkout.html.line-items.option.paymentLink.openPaymentLink":"Open payment link","docsShell.csat.terminal.badCsatMessageBody":"Stripe Terminal doesn't come with a point-of-sale \u0028POS\u0029 application. This documentation is for developers writing their own apps. To set up your Terminal reader without writing code, use one of our \u003CPartnersLink\u003EPOS partners\u003C\u002FPartnersLink\u003E. Not what you expected? You can \u003CSupportLink\u003Ereturn your reader\u003C\u002FSupportLink\u003E.","docsShell.csat.terminal.notSureWhatToDo":"Not sure what to do with your reader?","docsApp.components.codeBlock.copyToClipboard":"Copy to clipboard","docsApp.components.codeBlock.runWithShell":"Customise \u0026 run","docsApp.demo.cartElement.body.customerLocation":"Only a subset of available languages is shown here.","docsApp.demo.cartElement.body.descriptor":"Defaults to \"cart\"","docsApp.demo.cartElement.body.theme":"Cart can be fully customised to match the design of your site.","docsApp.demo.cartElement.label.addToBag":"Add to bag","docsApp.demo.cartElement.label.addToBasket":"Add to basket","docsApp.demo.cartElement.label.addToCart":"Add to cart","docsApp.demo.cartElement.label.customerLocation":"Location","docsApp.demo.cartElement.label.customizationMenuHeading":"Customisation","docsApp.demo.cartElement.label.descriptor":"Descriptor","docsApp.demo.cartElement.label.headerInput":"Header","docsApp.demo.cartElement.label.lineItem":"Line Item","docsApp.demo.cartElement.label.promoToggle":"Promo code","docsApp.demo.cartElement.label.shippingToggle":"Shipping","docsApp.demo.cartElement.label.showOnAddToggle":"Show on add","docsApp.demo.cartElement.label.size":"Size","docsApp.demo.cartElement.label.theme":"Theme","docsApp.demo.cartElement.label.viewBag":"View bag","docsApp.demo.cartElement.label.viewBasket":"View basket","docsApp.demo.cartElement.label.viewCart":"View cart","docsApp.demo.cartElement.placeholder.headerInput":"Custom header","docsApp.demo.cartElement.title.customerLocation":"Cart supports 40\u002B different languages.","docsApp.demo.cartElement.title.descriptor":"Term used to refer to the cart in the UI","docsApp.demo.cartElement.title.theme":"Themes are just the start","docsApp.demo.cartElement.tooltip.headerInput":"Replaces \"Your Cart\" as the cart header","docsApp.demo.cartElement.tooltip.promo":"Try code {promo}","docsApp.demo.cartElement.tooltip.showOnAdd":"Whether to automatically open the cart each time an item is added","docsApp.demo.cartElement.unexpectedError":"An error occurred. We're looking into it\u0021","docsApp.glossary.definition.reversal":"A reversal is the cancellation of a transaction before it's fully processed. Stripe doesn't withhold any fees for payment reversals.\n","docsApp.glossary.definition.twoFactorAuthentication2Fa":"Two-factor authentication \u00282FA\u0029, also known as two-step verification, is a security process that requires users to provide two different authentication factors to verify their identity.\n","docsApp.glossary.term.reversal":"reversal","docsApp.glossary.term.twoFactorAuthentication2Fa":"2FA","docsShell.sidebarNavigation.sidebarLinkTooltip.affirmativeHeaderSidebarHeader":"This header will appear in the sidebar when:","docsShell.sidebarNavigation.sidebarLinkTooltip.affirmativeHeaderSidebarItem":"This link and any children will appear in the sidebar when:","docsShell.sidebarNavigation.sidebarLinkTooltip.negativeHeaderSidebarHeader":"This header will appear in the sidebar unless:","docsShell.sidebarNavigation.sidebarLinkTooltip.negativeHeaderSidebarItem":"This link and any children will appear in the sidebar unless:","docsApp.paymentLinksOnRamp.billingPeriod.daily":"Daily","docsApp.paymentLinksOnRamp.billingPeriod.label":"Billing period","docsApp.paymentLinksOnRamp.billingPeriod.monthly":"Monthly","docsApp.paymentLinksOnRamp.billingPeriod.weekly":"Weekly","docsApp.paymentLinksOnRamp.billingPeriod.yearly":"Yearly","docsApp.paymentLinksOnRamp.createPaymentLinkLabel":"Create your payment link","docsApp.paymentLinksOnRamp.currency.label":"Currency","docsApp.paymentLinksOnRamp.productName.label":"Name","docsApp.paymentLinksOnRamp.productPrice.label":"Price","docsApp.paymentLinksOnRamp.selectType.donation":"Collect a donation","docsApp.paymentLinksOnRamp.selectType.label":"Type","docsApp.paymentLinksOnRamp.selectType.otp":"Sell a product or service","docsApp.paymentLinksOnRamp.selectType.subscription":"Sell a subscription","docsApp.componenets.codeBlock.copied":"Copied\u0021","docsApp.componenets.codeBlock.copy":"Copy","docsApp.tax_code_details.txcd_33080301.name":"Bedding","docsApp.components.codeBlock.seeAllLinesCountless":"See all lines","docsApp.components.contrib.productList.dataPipeline":"Data warehouse sync","docsApp.components.contrib.productList.datapipeline":"Data Pipeline","docsApp.paymentLinksOnRamp.selectType.customAmount":"Collect tips or donations","docsApp.tax_code_details.txcd_32010003.description":"Devices used by diabetic individuals to monitor sugar levels in the blood, sold under prescription order of a licensed professional \u0028e.g. blood sugar meters, glucose meters or glucometers\u0029. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32010003.name":"Blood Glucose Monitoring Devices with Prescription","docsApp.tax_code_details.txcd_32010004.description":"Single-use supplies used by diabetics to monitor blood sugar or urine, including skin puncture lancets, test strips for blood glucose monitors, visual read test strips, and urine test strips, sold under prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32010004.name":"Diabetic Testing Supplies with Prescription","docsApp.tax_code_details.txcd_32020001.description":"A substance that can only be obtained via a prescription of a licensed professional. A drug is a compound, substance, or preparation, and any component thereof, not including food or food ingredients, dietary supplements, or alcoholic beverages, that is: recognized in the official United States pharmacopoeia, official homeopathic pharmacopoeia of the United States, or official national formulary, and supplement to any of them; intended for use in the diagnosis, cure, mitigation, treatment, or prevention of disease; or intended to affect the structure or any function of the body. A drug can be intended for internal \u0028ingestible, implant, injectable\u0029 or external \u0028topical\u0029 application to the human body. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32020001.name":"Prescription Drugs","docsApp.tax_code_details.txcd_32020003.description":"The term drug refers to a compound, substance or preparation intended for use in the diagnosis, cure, mitigation, treatment, or prevention of disease. An over-the-counter drug with prescription is a substance that contains a label identifying it as a drug and including a \"drug facts\" panel or a statement of active ingredients, that can be obtained without a prescription, but is sold under prescription order of a licensed professional. A drug can be intended for internal \u0028ingestible, implant, injectable\u0029 or external \u0028topical\u0029 application to the human body. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32020003.name":"Over-the-Counter Drugs with Prescription","docsApp.tax_code_details.txcd_32020004.description":"Synthetic or animal-based insulin used as an injectable drug for diabetes patients, sold under prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32020004.name":"Insulin with Prescription","docsApp.tax_code_details.txcd_32020005.description":"Synthetic or animal-based insulin used as an injectable drug for diabetes patients, sold without prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32020005.name":"Insulin","docsApp.tax_code_details.txcd_32020006.description":"Medical grade oxygen sold under prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32020006.name":"Medical Oxygen with Prescription","docsApp.tax_code_details.txcd_32020011.description":"Medical grade oxygen sold without prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32020011.name":"Medical Oxygen","docsApp.tax_code_details.txcd_32030002.description":"Male or female condoms and vaginal sponges used to prevent pregnancy and\u002For exposure to STDs, sold under prescription order of a licensed professional.","docsApp.tax_code_details.txcd_32030002.name":"Condoms with Prescription","docsApp.tax_code_details.txcd_32030003.description":"Male or female condoms used to prevent pregnancy or exposure to STDs, containing a spermicidal lubricant as indicated by a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32030003.name":"Condoms with Spermicide","docsApp.tax_code_details.txcd_32030004.description":"Male or female condoms and vaginal sponges used to prevent pregnancy and\u002For exposure to STDs, containing a spermicidal lubricant as indicated by a \"drug facts\" panel or a statement of active ingredients, sold under prescription order of a licensed professional.","docsApp.tax_code_details.txcd_32030004.name":"Condoms with Spermicide with Prescription","docsApp.tax_code_details.txcd_32030005.description":"A topical preparation containing a spermicidal lubricant to prevent pregnancy as indicated by a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32030005.name":"Contraceptive Ointments","docsApp.tax_code_details.txcd_32030006.description":"Over-the-Counter emergency contraceptive pills act to prevent pregnancy after intercourse. The contraceptive contains a hormone that prevents ovulation, fertilisation, or implantation of an embryo.","docsApp.tax_code_details.txcd_32030006.name":"Birth Control - Over-the-Counter Oral Contraceptives","docsApp.tax_code_details.txcd_32030007.description":"Over-the-Counter emergency contraceptive pills act to prevent pregnancy after intercourse, sold under prescription order of a licensed professional. The contraceptive contains a hormone that prevents ovulation, fertilisation, or implantation of an embryo.","docsApp.tax_code_details.txcd_32030007.name":"Birth Control - Over-the-Counter Oral Contraceptives with Prescription","docsApp.tax_code_details.txcd_32030008.description":"Barrier-based prescription only birth control methods, including the diaphragm and cervical cap that prevent the joining of the sperm and egg, available only under prescription order of a licensed professional.","docsApp.tax_code_details.txcd_32030008.name":"Birth Control - Prescription non-Oral Contraceptives - Barriers","docsApp.tax_code_details.txcd_32030009.description":"Hormonal based birth control methods other than the oral pill, including intrauterine devices, injections, skin implants, transdermal patches, and vaginal rings that release a continuous dose of hormones to eliminate ovulation and prevent pregnancy, available only under prescription order of a licensed professional.","docsApp.tax_code_details.txcd_32030009.name":"Birth Control - Prescription non-Oral Contraceptives - Hormonal","docsApp.tax_code_details.txcd_32030010.description":"An oral medication containing hormones effective in altering the menstrual cycle to eliminate ovulation and prevent pregnancy, available only under prescription order of a licensed professional. Other than preventing pregnancy, hormonal birth control can also be used to treat various conditions, such as Polycystic Ovary Syndrome, Endometriosis, Primary Ovarian Insufficiency, etc.","docsApp.tax_code_details.txcd_32030010.name":"Birth Control - Prescription Oral Contraceptives","docsApp.tax_code_details.txcd_32040002.description":"Vaginal cleaning products include douches and wipes.","docsApp.tax_code_details.txcd_32040002.name":"Feminine Cleansing Solutions","docsApp.tax_code_details.txcd_32040003.description":"Vaginal cleaning products include douches and wipes with medication such as an antiseptic, containing a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32040003.name":"Feminine Cleansing Solutions - Medicated","docsApp.tax_code_details.txcd_32040004.description":"Over-the-counter anti-fungal creams, ointments or suppositories to treat yeast infections, containing a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32040004.name":"Feminine Yeast Treatments","docsApp.tax_code_details.txcd_32050020.description":"Baby oil is an inert \u0028typically mineral\u0029 oil for the purpose of keeping skin soft and supple. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050020.name":"Baby Oil","docsApp.tax_code_details.txcd_32050021.description":"Baby powder is an astringent powder used for preventing nappy rash, as a spray, and for other cosmetic uses. It may be composed of talcum \u0028in which case it is also called talcum powder\u0029 or corn starch. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050021.name":"Baby Powder","docsApp.tax_code_details.txcd_32050022.description":"Breath spray is a product sprayed into the mouth and breath strips dissolve in the mouth for the purpose of eliminating halitosis. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050022.name":"Breath Spray\u002FDissolvable Strips","docsApp.tax_code_details.txcd_32050023.description":"Various surfactant preparations to improve cleaning, enhance the enjoyment of bathing, and serve as a vehicle for cosmetic agents. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050023.name":"Bubble Bath\u002FBath Salts, Oils, Crystals","docsApp.tax_code_details.txcd_32050024.description":"A hair care product typically applied and rinsed after shampooing that is used to improve the feel, appearance and manageability of hair. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050024.name":"Conditioner - Hair","docsApp.tax_code_details.txcd_32050025.description":"Articles intended to be rubbed, poured, sprinkled, or sprayed on, introduced into, or otherwise applied to the human body or any part thereof for beautifying, promoting attractiveness, or altering the appearance. This category supports only the following items: Acrylic fingernail glue, Acrylic fingernails, Artificial eyelashes, Blush, Bronzer, Body glitter, Concealer, Eyelash glue, Finger\u002Ftoenail decorations, Finger\u002Ftoenail polish, Nail polish remover, Hair colouring, Hair mousse\u002Fgel, Hair oil, Hair spray, Hair relaxer, Hair wave treatment, Hair wax, Lip gloss, Lip liner, Lipstick, Liquid foundation, Makeup, Mascara, Nail polish remover, Powder foundation, Cologne, Perfume.","docsApp.tax_code_details.txcd_32050025.name":"Cosmetics - Beautifying","docsApp.tax_code_details.txcd_32050026.description":"A soft, strong, waxed or unwaxed thread for drawing between the teeth to remove food particles and prevent the build-up of plaque.","docsApp.tax_code_details.txcd_32050026.name":"Dental Floss\u002FPicks","docsApp.tax_code_details.txcd_32050027.description":"Denture adhesives are pastes, powders or adhesive pads that may be placed in\u002Fon dentures to help them stay in place. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050027.name":"Denture Creams\u002FAdhesives","docsApp.tax_code_details.txcd_32050028.description":"Personal underarm deodorants\u002Fanti-perspirants containing natural ingredients and\u002For ingredients that are not considered drugs. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050028.name":"Deodorant - Natural or No Active Ingredients","docsApp.tax_code_details.txcd_32050029.description":"Personal underarm deodorants\u002Fanti-perspirants. These products do contain a \"drug facts\" panel or a statement of active ingredients, typically aluminium.","docsApp.tax_code_details.txcd_32050029.name":"Deodorant\u002FAntiperspirant","docsApp.tax_code_details.txcd_32050030.description":"Topical foams, creams, gels, etc. that prevent hair loss and promote hair regrowth. These products contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050030.name":"Hair Loss Products","docsApp.tax_code_details.txcd_32050031.description":"Depilatories are cosmetic preparations used to remove hair from the skin. Chemical depilatories are available in gel, cream, lotion, aerosol, roll-on, and powder forms. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050031.name":"Hair Removal Products","docsApp.tax_code_details.txcd_32050032.description":"A skin protector for the lips. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050032.name":"Lip Balm","docsApp.tax_code_details.txcd_32050033.description":"A medicated skin protector for the lips. These products contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050033.name":"Lip Balm - Medicated","docsApp.tax_code_details.txcd_32050034.description":"Cosmetic mouthwash may temporarily control bad breath and leave behind a pleasant taste, but has no chemical or biological application beyond a temporary benefit. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050034.name":"Mouthwash - Cosmetic","docsApp.tax_code_details.txcd_32050035.description":"Therapeutic mouthwash, having active ingredients \u0028such as antiseptic, or fluoride\u0029 intended to help control or reduce conditions like bad breath, gingivitis, plaque, and tooth decay. These products contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050035.name":"Mouthwash - Therapeutic","docsApp.tax_code_details.txcd_32050036.description":"A hair care product for cleansing the hair\u002Fscalp. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050036.name":"Shampoo","docsApp.tax_code_details.txcd_32050037.description":"A hair care product for cleansing the hair\u002Fscalp, with anti-dandruff active ingredients. These products contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050037.name":"Shampoo - Medicated","docsApp.tax_code_details.txcd_32050038.description":"A cosmetic foam or gel used for shaving preparation. The purpose of shaving cream is to soften the hair by providing lubrication. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050038.name":"Shaving Creams","docsApp.tax_code_details.txcd_32050039.description":"Soaps, body washes, shower gels for personal hygiene containing antibacterial agents. These products contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050039.name":"Soaps - Antibacterial","docsApp.tax_code_details.txcd_32050040.description":"A lotion, spray, gel, foam, stick or other topical product that absorbs or reflects some of the sun's ultraviolet \u0028UV\u0029 radiation and thus helps protect against sunburn. Sunscreen contains a \"drug facts\" label or statement of active ingredients.","docsApp.tax_code_details.txcd_32050040.name":"Sunscreen","docsApp.tax_code_details.txcd_32050041.description":"Teeth whitening gels, rinse, strips, trays, etc., containing bleaching agents. These products do not contain a \"drug facts\" panel or a statement of active ingredients.","docsApp.tax_code_details.txcd_32050041.name":"Teeth Whitening Kits","docsApp.tax_code_details.txcd_32060002.description":"When sold under prescription order of a licensed professional, equipment that: can withstand repeated use; is primarily and customarily used to serve a medical purpose; generally is not useful to a person in the absence of illness or injury; and is not worn in or on the body. Home use means the equipment is sold to an individual for use at home, regardless of where the individual resides. Examples include hospital beds, commode chairs, bed pans, IV poles, etc.","docsApp.tax_code_details.txcd_32060002.name":"Durable Medical Equipment for Home Use with Prescription","docsApp.tax_code_details.txcd_32060007.description":"When sold under prescription order of a licensed professional, nutritional tube feeding equipment including button-style feeding tubes, standard G-tubes, NG-tubes, extension sets, adapters, feeding pumps, feeding pump delivery sets.","docsApp.tax_code_details.txcd_32060007.name":"Enteral Feeding Equipment for Home Use with Prescription","docsApp.tax_code_details.txcd_32060012.description":"When sold under prescription order of a licensed professional, a machine used that filters a patient's blood to remove excess water and waste products when the kidneys are damaged, dysfunctional, or missing. The kidney dialysis machine is an artificial part which augments the natural functioning of the kidneys.","docsApp.tax_code_details.txcd_32060012.name":"Kidney Dialysis Equipment for Home Use with Prescription","docsApp.tax_code_details.txcd_32060017.description":"When sold without prescription order of a licensed professional, a machine used that filters a patient's blood to remove excess water and waste products when the kidneys are damaged, dysfunctional, or missing. The kidney dialysis machine is an artificial part which augments the natural functioning of the kidneys.","docsApp.tax_code_details.txcd_32060017.name":"Kidney Dialysis Equipment for Home Use","docsApp.tax_code_details.txcd_32060018.description":"When sold under prescription order of a licensed professional, equipment used to administer oxygen directly into the lungs of the patient for the relief of conditions in which the human body experiences an abnormal deficiency or inadequate supply of oxygen. Oxygen equipment means oxygen cylinders, cylinder transport devices, including sheaths and trolleys, cylinder studs and support devices, regulators, flowmeters, tank wrenches, oxygen concentrators, liquid oxygen base dispensers, liquid oxygen portable dispensers, oxygen tubing, nasal cannulas, face masks, oxygen humidifiers, and oxygen fittings and accessories.","docsApp.tax_code_details.txcd_32060018.name":"Oxygen Delivery Equipment for Home Use with Prescription","docsApp.tax_code_details.txcd_32060023.description":"When sold without prescription order of a licensed professional, equipment used to administer oxygen directly into the lungs of the patient for the relief of conditions in which the human body experiences an abnormal deficiency or inadequate supply of oxygen. Oxygen equipment means oxygen cylinders, cylinder transport devices, including sheaths and trolleys, cylinder studs and support devices, regulators, flowmeters, tank wrenches, oxygen concentrators, liquid oxygen base dispensers, liquid oxygen portable dispensers, oxygen tubing, nasal cannulas, face masks, oxygen humidifiers, and oxygen fittings and accessories.","docsApp.tax_code_details.txcd_32060023.name":"Oxygen Delivery Equipment for Home Use","docsApp.tax_code_details.txcd_32060024.description":"A heating pad is a pad used for warming of parts of the body in order to manage pain. Types of heating pads include electrical, chemical and hot water bottles. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32060024.name":"Heating Pads","docsApp.tax_code_details.txcd_32060025.description":"A reusable pain management supply that includes artificial ice packs, gel packs, heat wraps, etc used for pain relief. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32060025.name":"Cold or Hot Therapy Packs - Reusable","docsApp.tax_code_details.txcd_32060026.description":"When sold without prescription order of a licensed professional, nutritional tube feeding equipment including button-style feeding tubes, standard G-tubes, NG-tubes, extension sets, adapters, feeding pumps, feeding pump delivery sets.","docsApp.tax_code_details.txcd_32060026.name":"Enteral Feeding Equipment for Home Use","docsApp.tax_code_details.txcd_32070029.description":"A collection of mixed supplies and equipment that is used to give medical treatment, often housed in durable plastic boxes, fabric pouches or in wall mounted cabinets. Qualifying medicinal items \u0028e.g. OTC drugs\u0029 make up 50% or less of the value of the kit. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070029.name":"First Aid Kits - 50% or Less Medicinal Items","docsApp.tax_code_details.txcd_32070030.description":"Liquid solution for cleaning and disinfecting contact lenses.","docsApp.tax_code_details.txcd_32070030.name":"Contact Lens Disinfecting Solutions","docsApp.tax_code_details.txcd_32070031.description":"Liquid solution for lubricating\u002Frewetting, but not disinfecting, contact lenses. This solution is applied directly to the eye.","docsApp.tax_code_details.txcd_32070031.name":"Contact Lens Lubricating Solutions","docsApp.tax_code_details.txcd_32070032.description":"Single-use cotton balls or swabs for application of antiseptics and medications and to cleanse scratches, cuts or minor wounds. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070032.name":"Cotton Balls\u002FSwabs - Sterile","docsApp.tax_code_details.txcd_32070033.description":"Single-use cotton balls or swabs for multi-purpose use other than applying medicines and cleaning wounds, due to not being sterile. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070033.name":"Cotton Balls\u002FSwabs - Unsterile","docsApp.tax_code_details.txcd_32070034.description":"A single-use pain management supply that includes artificial ice packs, gel packs, heat wraps, etc., used for pain relief. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070034.name":"Cold or Hot Therapy Packs - Disposable","docsApp.tax_code_details.txcd_32070035.description":"A single-use pain management supply that includes artificial ice packs, gel packs, heat wraps, etc used for pain relief. These products contain a \"drug facts\" panel or a statement of active ingredients. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070035.name":"Cold or Hot Therapy Packs - Disposable - Medicated","docsApp.tax_code_details.txcd_32070036.description":"Flexible adhesive strips that attach over the bridge of the nose to lift the sides of the nose, opening the nasal passages to provide relief for congestion and snoring. The products are drug-free and contain no active drug ingredients.","docsApp.tax_code_details.txcd_32070036.name":"Nasal Breathing Strips","docsApp.tax_code_details.txcd_32070037.description":"Single-use hollow needle commonly used with a syringe to inject insulin into the body by diabetic individuals, sold under prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070037.name":"Hypodermic Needles\u002FSyringes with Prescription - Insulin","docsApp.tax_code_details.txcd_32070038.description":"Single-use hollow needle commonly used with a syringe to inject insulin into the body by diabetic individuals, sold without prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070038.name":"Hypodermic Needles\u002FSyringes - Insulin","docsApp.tax_code_details.txcd_32070039.description":"Hydrogen peroxide is a mild antiseptic used on the skin to prevent infection of minor cuts, scrapes, and burns. It may also be used as a mouth rinse to help remove mucus or to relieve minor mouth irritation \u0028e.g. due to canker\u002Fcold sores, gingivitis\u0029. These products contain a \"drug facts\" panel or a statement of active ingredients. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070039.name":"Hydrogen Peroxide","docsApp.tax_code_details.txcd_32070040.description":"A multi-purpose skin protector and topical ointment. These products contain a \"drug facts\" panel or a statement of active ingredients. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070040.name":"Petroleum Jelly","docsApp.tax_code_details.txcd_32070041.description":"Liquid drops to be placed inside the ear canal to reduce the symptoms of an ear ache, or to act as an ear drying aid, or to loosen, cleanse, and aid in the removal of ear wax. These products contain a \"drug facts\" panel or a statement of active ingredients. Examples include Ear Ache, Swimmers' Ears, and Ear Wax removal drops. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070041.name":"Ear Drops - Medicated","docsApp.tax_code_details.txcd_32070042.description":"A liquid solution typically used as a topical antiseptic. The products contain a \"drug facts\" panel or a statement of active ingredients. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32070042.name":"Isopropyl \u0028Rubbing\u0029 Alcohol","docsApp.tax_code_details.txcd_32080005.description":"Equipment which is primarily and customarily used to provide or increase the ability to move from one place to another, sold under a prescription, and which is appropriate for use either in a home or a motor vehicle; Is not generally used by persons with normal mobility; and does not include any motor vehicle or equipment on a motor vehicle normally provided by a motor vehicle manufacturer. Examples include wheelchairs, crutches, canes, walkers, chair lifts, etc.","docsApp.tax_code_details.txcd_32080005.name":"Mobility Enhancing Equipment with Prescription","docsApp.tax_code_details.txcd_32090008.description":"When sold under prescription order of a licensed professional, a replacement, corrective, or supportive device, worn on or in the body to: Artificially replace a missing portion of the body; Prevent or correct physical deformity or malfunction; or Support a weak or deformed portion of the body. Worn in or on the body means that the item is implanted or attached so that it becomes part of the body, or is carried by the body and does not hinder the mobility of the individual. Examples include artificial limbs, pacemakers, orthotics, orthopaedics, ostomy\u002Fcolostomy devices, catheters, etc.","docsApp.tax_code_details.txcd_32090008.name":"Prosthetic Devices with Prescription","docsApp.tax_code_details.txcd_32090013.description":"Corrective lenses, glasses\u002Fspectacles, sold under prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32090013.name":"Corrective Lenses with Prescription","docsApp.tax_code_details.txcd_32090014.description":"Contact lenses, sold under prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32090014.name":"Contact Lenses with Prescription","docsApp.tax_code_details.txcd_32090015.description":"When sold under prescription order of a licensed professional, a replacement, corrective, or supportive device, worn in the mouth, including dentures, orthodontics, crowns, bridges, etc.","docsApp.tax_code_details.txcd_32090015.name":"Dental Prosthetics with Prescription","docsApp.tax_code_details.txcd_32090016.description":"When sold without prescription order of a licensed professional, a replacement, corrective, or supportive device, worn in the mouth, including dentures, orthodontics, crowns, bridges, etc.","docsApp.tax_code_details.txcd_32090016.name":"Dental Prosthetics","docsApp.tax_code_details.txcd_32090017.description":"Artificial devices to correct or alleviate hearing deficiencies, sold under prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32090017.name":"Hearing Aids with Prescription","docsApp.tax_code_details.txcd_32090018.description":"Batteries specifically labelled and designed to operate hearing aid devices, sold under prescription order of a licensed professional. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32090018.name":"Hearing Aid Batteries with Prescription","docsApp.tax_code_details.txcd_32100001.description":"At-home urine-based tests used to detect pregnancy hormone levels.","docsApp.tax_code_details.txcd_32100001.name":"Pregnancy Testing Kits","docsApp.tax_code_details.txcd_32100002.description":"At-home urine-based tests used to detect impending ovulation to assist in pregnancy planning.","docsApp.tax_code_details.txcd_32100002.name":"Ovulation Testing Kits","docsApp.tax_code_details.txcd_32100003.description":"An at-home infectious disease test kit that can be sold without a prescription.","docsApp.tax_code_details.txcd_32100003.name":"Infectious Disease Test","docsApp.tax_code_details.txcd_32100004.description":"An at-home infectious disease test kit that can only be sold with a prescription.","docsApp.tax_code_details.txcd_32100004.name":"Infectious Disease Test - Prescription-only","docsApp.tax_code_details.txcd_32100005.description":"At-home saliva, cheek swab or blood drop based tests used to detect various genetic markers in an individual.","docsApp.tax_code_details.txcd_32100005.name":"DNA Testing Kits","docsApp.tax_code_details.txcd_32100010.description":"At home digital or manual \u0028aneroid\u0029 sphygmomanometers, also known as a blood pressure meter, blood pressure monitor, or blood pressure gauge, are devices used to measure blood pressure, composed of an inflatable cuff to collapse and then release the artery under the cuff in a controlled manner. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32100010.name":"Blood Pressure Testing Devices","docsApp.tax_code_details.txcd_32100011.description":"An electronic device that clips onto a patient's finger to measure heart rate and oxygen saturation in their red blood cells. This code is intended for sales directly to end consumers that are NOT healthcare providers.","docsApp.tax_code_details.txcd_32100011.name":"Pulse Oximeter","docsApp.tax_code_details.txcd_32100012.description":"At home urine-based tests used to detect the presence of various drug substances in an individual.","docsApp.tax_code_details.txcd_32100012.name":"Drug Testing Kits","docsApp.tax_code_details.txcd_32100013.description":"At home blood-prick based tests used to monitor cholesterol levels in an individual.","docsApp.tax_code_details.txcd_32100013.name":"Cholesterol Testing Kits","docsApp.tax_id_types.eg_tin.description":"Egyptian Tax Identification Number","docsApp.tax_id_types.ph_tin.description":"Philippines Tax Identification Number","docsApp.tax_id_types.tr_tin.description":"Turkish Tax Identification Number","docsShell.search.suggestedAPIKeys":"API keys","docsApp.paymentLinksOnRamp.checkoutPreviewCaption":"Payment Links supports over \u003Cb\u003E30 languages\u003C\u002Fb\u003E and over \u003Ca\u003E20 payment methods\u003C\u002Fa\u003E.","docsShell.search.searchHeadingRecentlyViewed":"Recently viewed","docsShell.search.searchHeadingSuggested":"Suggested","docsShell.search.suggestedTestCards":"Test cards","docsApp.api.hooks.useFetch.loading":"Loading...","docsApp.api.hooks.useFetch.unexpectedError":"An error occurred. We're looking into it\u0021","docsApp.glossary.definition.chargeCard":"A type of credit card that requires payment in full at the end of every credit period rather than allowing a minimum payment with a balance carryover.\n","docsApp.glossary.definition.postFund":"Post-funding is the ability to use Stripe Credit to fund Issuing card spend after it's accrued, rather than by pre-funding.\n","docsApp.glossary.term.chargeCard":"charge card","docsApp.glossary.term.postFund":"post-fund","docsShell.HomePage.Hero.exploreAllProducts":"Explore all products","docsShell.HomePage.Hero.getStartedWithPayments":"Get started with payments","docsApp.paymentLinksOnRamp.fakeCheckout.businessNamePlaceholder":"Your business name","docsApp.paymentLinksOnRamp.fakeCheckout.dayBillingPeriodSuffix":"per day","docsApp.paymentLinksOnRamp.fakeCheckout.monthBillingPeriodSuffix":"per month","docsApp.paymentLinksOnRamp.fakeCheckout.otpProductNamePlaceholder":"Sunglasses","docsApp.paymentLinksOnRamp.fakeCheckout.subscriptionProductNamePlaceholder":"Premium plan","docsApp.paymentLinksOnRamp.fakeCheckout.weekBillingPeriodSuffix":"per week","docsApp.paymentLinksOnRamp.fakeCheckout.yearBillingPeriodSuffix":"per year","docsApp.paymentLinksOnRamp.invalidPriceMessage":"Price must adhere to the \u003Ca\u003Eminimum and maximum charge amounts\u003C\u002Fa\u003E for the specified currency.","docsApp.paymentLinksOnRamp.otpPlaceholderName":"Sunglasses, etc...","docsApp.paymentLinksOnRamp.subscriptionPlaceholderName":"Premium plan, etc...","docsApp.stripeShell.listenHelp":"\n The listen command watches and forwards webhook events from Stripe to your\n browser by connecting directly to Stripe's API.\n\n Usage:\n stripe listen [flags]\n\n Examples:\n stripe listen\n stripe listen --latest\n\n Flags:\n -l, --latest Receive events formatted with the latest API version \u0028default: your account's default API version\u0029\n","docsApp.components.narrative.productGrid.atlas":"Atlas","docsApp.components.narrative.productGrid.bankingAAS":"Banking as a service","docsApp.components.narrative.productGrid.billing":"Billing","docsApp.components.narrative.productGrid.businessFinancing":"Business financing","docsApp.components.narrative.productGrid.businessOperations":"Business Operations","docsApp.components.narrative.productGrid.capital":"Capital","docsApp.components.narrative.productGrid.cardCreation":"Card creation","docsApp.components.narrative.productGrid.checkout":"Checkout","docsApp.components.narrative.productGrid.climate":"Climate","docsApp.components.narrative.productGrid.connect":"Connect","docsApp.components.narrative.productGrid.corporateCard":"Corporate Card","docsApp.components.narrative.productGrid.customReports":"Custom reports","docsApp.components.narrative.productGrid.dataPipeline":"Data warehouse sync","docsApp.components.narrative.productGrid.datapipeline":"Data Pipeline","docsApp.components.narrative.productGrid.directPayments":"Direct payments","docsApp.components.narrative.productGrid.elements":"Elements","docsApp.components.narrative.productGrid.financialConnections":"Financial Connections","docsApp.components.narrative.productGrid.financialConnectionsDescription":"Connect users' financial accounts","docsApp.components.narrative.productGrid.financialServices":"Financial services","docsApp.components.narrative.productGrid.fraudAndRisk":"Fraud and risk management","docsApp.components.narrative.productGrid.identity":"Identity","docsApp.components.narrative.productGrid.identityVerification":"Online identity verification","docsApp.components.narrative.productGrid.inPersonAndOmnichannel":"In-person and omnichannel payments","docsApp.components.narrative.productGrid.invoicing":"Invoicing","docsApp.components.narrative.productGrid.issuing":"Issuing","docsApp.components.narrative.productGrid.moneySAE":"Money storage and expenses","docsApp.components.narrative.productGrid.multipartyPayments":"Multiparty payments","docsApp.components.narrative.productGrid.noCodePayments":"No-code payments","docsApp.components.narrative.productGrid.oneOffInvoices":"One-off invoices","docsApp.components.narrative.productGrid.onlinePayments":"Online payments","docsApp.components.narrative.productGrid.opal":"Opal","docsApp.components.narrative.productGrid.paymentLinks":"Payment Links","docsApp.components.narrative.productGrid.payments":"Payments","docsApp.components.narrative.productGrid.paymentsForPlatforms":"Payments for platforms","docsApp.components.narrative.productGrid.prebuiltCheckout":"Pre-built, Stripe-hosted checkout page","docsApp.components.narrative.productGrid.prebuiltComponents":"Pre-built components","docsApp.components.narrative.productGrid.radar":"Radar","docsApp.components.narrative.productGrid.removeCarbon":"Carbon removal","docsApp.components.narrative.productGrid.revenue":"Revenue Recognition","docsApp.components.narrative.productGrid.revenueDescription":"Accounting automation","docsApp.components.narrative.productGrid.secureFrontendComponents":"Secure front-end UI components","docsApp.components.narrative.productGrid.sigma":"Sigma","docsApp.components.narrative.productGrid.spendManagement":"Spend management","docsApp.components.narrative.productGrid.startupIncorporation":"Startup incorporation","docsApp.components.narrative.productGrid.subscriptionsAndRecurring":"Subscriptions and recurring payments","docsApp.components.narrative.productGrid.tax":"Tax","docsApp.components.narrative.productGrid.taxCalculation":"Sales tax and VAT automation","docsApp.components.narrative.productGrid.terminal":"Terminal","docsApp.components.narrative.productGrid.treasury":"Treasury","docsShell.HomePage.ProductGrid.exploreAllProducts":"Browse by product","docsApp.component.NoCodePromo.badge":"Set up in under 5 minutes","docsApp.component.NoCodePromo.badge3":"No coding required","docsApp.component.NoCodePromo.badge6":"5-minute setup","docsApp.component.NoCodePromo.create":"Create payment link","docsApp.component.NoCodePromo.description":"Try creating payment links instead.","docsApp.component.NoCodePromo.description1":"Try using payment links instead.","docsApp.component.NoCodePromo.description2":"Create a payment link in a few clicks.","docsApp.component.NoCodePromo.start":"Start","docsApp.component.NoCodePromo.title":"Not ready to code?","docsApp.component.NoCodePromo.title1":"Start selling fast, no coding required","docsApp.component.NoCodePromo.title2":"Don't want to build anything?","docsApp.component.NoCodePromo.title3":"Not ready to code?","docsApp.component.NoCodePromo.title4":"Accept payments in minutes","docsApp.component.NoCodePromo.title5":"Accept payments faster","docsApp.component.NoCodePromo.title6":"Short on time?","docsApp.demo.paymentElement.label.layout":"Layout","docsShell.supportedPresentmentCurrencies.amexDomesticIN":"American Express cards issued in India are currently not supported for businesses in India in any currency","docsApp.components.contrib.roleDescriptions.paidSupportOnly.descriptionOfWhatRoleCanDo":"This role is for people who need to access only the Support Centre.","docsApp.components.contrib.roleDescriptions.paidSupportOnly.descriptionOfWhatRoleCannotDo":"They can’t view anything else on the dashboard.","docsApp.components.contrib.roleDescriptions.paidSupportOnly.roleName":"Support Only","docsApp.components.contrib.roleDescriptions.paidSupportOnly.shortDescription":"Can access only the support centre","docsShell.transform.navigation.home":"Home","docsApp.components.contrib.roleDescriptions.dataMigrationSpecialist.descriptionOfWhatRoleCannotDo":"They can't create connected accounts, transfer funds, payout money, or edit any account and product settings.","docsApp.components.contrib.roleDescriptions.dataMigrationSpecialist.roleName":"Data Migration Specialist","docsApp.getStartedRecommendation.start":"Start","docsApp.integrationAdvisor.badges.lowCode":"Low code","docsApp.integrationAdvisor.badges.noCode":"No code","docsApp.integrationAdvisor.badges.someCode":"Some coding","docsApp.integrationAdvisor.businessNeed.title":"Which best describes what your business needs?","docsApp.integrationAdvisor.invoicingType.title":"How do you want to invoice your customers?","docsApp.integrationAdvisor.marketplaceOrPlatform.title":"How do you want to facilitate payments?","docsApp.integrationAdvisor.multipleSelect.subtitle":"You can select more than one","docsApp.integrationAdvisor.noMatches":"No recommendations match your criteria","docsApp.integrationAdvisor.onlinePayments.title":"How do you want to charge your customers?","docsApp.integrationAdvisor.ownPos.title":"How do you want to accept in-person payments?","docsApp.integrationAdvisor.partnersAndSales.md":"Looking for something else? \u003CSalesLink\u003EContact sales\u003C\u002FSalesLink\u003E or \u003CPartnersLink\u003Eexplore our partners’ solutions\u003C\u002FPartnersLink\u003E","docsApp.integrationAdvisor.payments.title":"Refine your requirement","docsApp.integrationAdvisor.paymentsBuildItYourself.title":"How do you want to get started?","docsApp.integrationAdvisor.paymentsType.title":"What kind of payments do you want to accept?","docsApp.integrationAdvisor.pendingRecommendations":"Your recommendations will appear here","docsApp.integrationAdvisor.questions.choices.acceptInPersonPayments":"In-person payments","docsApp.integrationAdvisor.questions.choices.acceptPayments":"Accept payments directly, online, or in person","docsApp.integrationAdvisor.questions.choices.acceptPaymentsOnline":"Online payments","docsApp.integrationAdvisor.questions.choices.automaticallyCalculateTaxes":"Automatically calculate taxes","docsApp.integrationAdvisor.questions.choices.buildItMyself":"Build your integration or use a no-code solution from Stripe","docsApp.integrationAdvisor.questions.choices.createAPlatformOrMarketplace":"Facilitate payments between multiple parties","docsApp.integrationAdvisor.questions.choices.createAPlatformOrMarketplace.description":"For platforms and marketplaces, like DoorDash or Lyft","docsApp.integrationAdvisor.questions.choices.customPos":"I want to integrate with a custom point of sale","docsApp.integrationAdvisor.questions.choices.financeABusiness":"Get financing to grow your business","docsApp.integrationAdvisor.questions.choices.findAPartner":"Find a partner","docsApp.integrationAdvisor.questions.choices.findAPartner.description":"Like Squarespace or Shopify","docsApp.integrationAdvisor.questions.choices.fullyCustomizeAppearance":"Fully customise appearance","docsApp.integrationAdvisor.questions.choices.invoiceYourCustomers":"Invoices or quotes","docsApp.integrationAdvisor.questions.choices.issueCards":"Issue cards and manage expenses","docsApp.integrationAdvisor.questions.choices.knownAudience":"Bill a specific customer that you know ahead of time","docsApp.integrationAdvisor.questions.choices.manageMoney":"Embed financial services in your platform using banking-as-a-service APIs","docsApp.integrationAdvisor.questions.choices.marketplace":"As a marketplace","docsApp.integrationAdvisor.questions.choices.marketplaceDescription":"Like Lyft, Instacart, or Postmates. Collect payments from customers, then pay out to sellers or service providers.","docsApp.integrationAdvisor.questions.choices.nativeAppSupport":"Native mobile app support","docsApp.integrationAdvisor.questions.choices.noCodingRequired":"No coding required","docsApp.integrationAdvisor.questions.choices.offTheShelf":"I want to use a plug-and-play solution","docsApp.integrationAdvisor.questions.choices.platform":"As a platform","docsApp.integrationAdvisor.questions.choices.platformDescription":"Like Shopify, DocuSign, or Xero. Facilitate payments between other businesses and their own customers.","docsApp.integrationAdvisor.questions.choices.quotes":"Quote for good and services","docsApp.integrationAdvisor.questions.choices.quotes.description":"Send quotes to your customers and convert them to invoices when approved","docsApp.integrationAdvisor.questions.choices.recurring":"On a recurring basis","docsApp.integrationAdvisor.questions.choices.recurring.description":"Used by SaaS and subscription based businesses","docsApp.integrationAdvisor.questions.choices.recurringInvoicingDescription":"Invoice your customers for subscriptions","docsApp.integrationAdvisor.questions.choices.singleTransaction":"As a single transaction","docsApp.integrationAdvisor.questions.choices.singleTransaction.":"Common for e-commerce websites and digital products","docsApp.integrationAdvisor.questions.choices.singleTransactionInvoicingDescription":"Send one-off invoices","docsApp.integrationAdvisor.questions.choices.unknownAudience":"Enable any customer to start a subscription on their own","docsApp.integrationAdvisor.recommendations.capital.description":"Stripe Capital provides access to fast financing with one flat fee and flexible payments.","docsApp.integrationAdvisor.recommendations.capital.title":"Get funding to grow your business","docsApp.integrationAdvisor.recommendations.checkout.description":"Send your customers to a Stripe-hosted checkout page.","docsApp.integrationAdvisor.recommendations.checkout.title":"Use Checkout","docsApp.integrationAdvisor.recommendations.checkoutWithBillingTitle.description":"Send your customers to a Stripe-hosted checkout page.","docsApp.integrationAdvisor.recommendations.checkoutWithBillingTitle.title":"Use Checkout with Billing","docsApp.integrationAdvisor.recommendations.connectMarketplace.description":"Like Lyft, Instacart, or Postmates. Collect payments from customers, then pay out to sellers or service providers.","docsApp.integrationAdvisor.recommendations.connectMarketplace.title":"Facilitate payments for your marketplace","docsApp.integrationAdvisor.recommendations.connectPlatform.description":"Like Shopify, DocuSign, or Xero. Facilitate payments between other businesses and their own customers.","docsApp.integrationAdvisor.recommendations.connectPlatform.title":"Enable payments on your platform","docsApp.integrationAdvisor.recommendations.customerPortal.description":"Send your customers to a pre-built page to let them manage their subscriptions.","docsApp.integrationAdvisor.recommendations.customerPortal.title":"Integrate customer portal","docsApp.integrationAdvisor.recommendations.elements.description":"Add a pre-built, customisable UI component to accept multiple payment methods.","docsApp.integrationAdvisor.recommendations.elements.title":"Use Elements","docsApp.integrationAdvisor.recommendations.elementsWithBilling.description":"Add a pre-built, customisable UI component to accept multiple payment methods.","docsApp.integrationAdvisor.recommendations.elementsWithBilling.title":"Use Elements with Billing","docsApp.integrationAdvisor.recommendations.findAPartner.description":"Run and grow your business with Stripe and our partners.","docsApp.integrationAdvisor.recommendations.findAPartner.title":"Find a partner","docsApp.integrationAdvisor.recommendations.findATerminalPartnerTitle.title":"Find a point of sale partner","docsApp.integrationAdvisor.recommendations.invoices.description":"Email your customer an invoice and a link they can use to pay the invoice online.","docsApp.integrationAdvisor.recommendations.invoices.title":"Send invoice from the Dashboard","docsApp.integrationAdvisor.recommendations.invoicesAPI.description":"Create and send one-off invoices programmatically.","docsApp.integrationAdvisor.recommendations.invoicesAPI.title":"Integrate with Invoices API","docsApp.integrationAdvisor.recommendations.issuing.description":"Use the Dashboard to issue a card and assign it to a cardholder.","docsApp.integrationAdvisor.recommendations.issuing.title":"Issue a virtual or physical card","docsApp.integrationAdvisor.recommendations.optional":"Optional","docsApp.integrationAdvisor.recommendations.paymentLinks.description":"Embed or share a link to a Stripe-hosted payment page to accept payments quickly.","docsApp.integrationAdvisor.recommendations.paymentLinks.title":"Create payment links","docsApp.integrationAdvisor.recommendations.paymentLinksWithRecurringPrices.description":"Embed or share a link to a Stripe payment page to accept payments quickly.","docsApp.integrationAdvisor.recommendations.paymentLinksWithRecurringPrices.title":"Use Payment links with recurring prices","docsApp.integrationAdvisor.recommendations.quotes.description":"Provide pricing estimates to customers before starting a subscription or invoice.","docsApp.integrationAdvisor.recommendations.quotes.title":"Share a quote","docsApp.integrationAdvisor.recommendations.subscriptions.description":"Manually create subscriptions to charge customers on a set schedule.","docsApp.integrationAdvisor.recommendations.subscriptions.title":"Create a subscription from the Dashboard","docsApp.integrationAdvisor.recommendations.terminal.description":"Build your perfect point of sale with Terminal, extending Stripe payments to your in-person business.","docsApp.integrationAdvisor.recommendations.terminal.title":"Build your Terminal integration","docsApp.integrationAdvisor.recurringAudience.title":"How do you want to bill your customers?","docsApp.integrationAdvisor.results.alsoConsider":"Also consider","docsApp.integrationAdvisor.results.optional":"Also works with","docsApp.integrationAdvisor.results.startOver":"Start over","docsApp.integrationAdvisor.results.title":"Top recommendation for your business","docsApp.integrationAdvisor.root.button":"Let’s go","docsApp.integrationAdvisor.root.subtitle":"Answer a few questions about your business to get started. You can always change your answers later.","docsApp.integrationAdvisor.root.title":"Get personalised recommendations in 30 seconds","docsApp.integrationAdvisor.subscriptions.title":"Refine your requirement","docsApp.components.seealso.defaultHeading":"See also","docsApp.components.contrib.roleDescriptions.dataMigrationSpecialist.descriptionOfWhatRoleCanDo":"This role is for people who need to perform data migrations \u0028copy, import, export\u0029 for their account.","docsShell.HomePage.TestMode.CommandOptions.learnMore.PaymentIntents":"Learn more about Payment Intents","docsShell.HomePage.TestMode.CommandOptions.learnMore.ProductsAndPrices":"Learn more about products and prices","docsShell.HomePage.TestMode.CommandOptions.learnMore.coupons":"Learn more about coupons","docsShell.HomePage.TestMode.CommandOptions.learnMore.getBalance":"Learn more about the Balance object","docsShell.HomePage.TestMode.CommandOptions.learnMore.issueCoupons":"Issue coupons","docsShell.HomePage.TestMode.CommandOptions.learnMore.manageTaxes":"Manage taxes","docsShell.HomePage.TestMode.CommandOptions.learnMore.taxRates":"Learn more about tax rates","docsShell.HomePage.TestMode.CommandOptions.sellAProduct":"Sell a product","docsShell.HomePage.TestMode.CommandOptions.startAPayment":"Start a payment","docsShell.HomePage.TestMode.login":"\u003Ca\u003ESign in\u003C\u002Fa\u003E to edit real requests.","docsShell.HomePage.TestMode.openInDashboard":"Open in the Dashboard","docsShell.HomePage.TestMode.tryItOutTestMode":"Try it out","docsApp.glossary.definition.recall":"Customer-originated attempt to undo a previously sent EUR bank transfer payment \u0028SEPA Credit Transfer\u0029. Recipients can freely accept or reject the recall.\n","docsApp.glossary.term.recall":"Recall","docsApp.integrationAdvisor.questions.choices.buildAnExtension":"Build a Stripe App to extend or customise Stripe","docsApp.integrationAdvisor.recommendations.extensions.description":"Stripe Apps lets you embed custom user experiences directly in the Stripe Dashboard and orchestrate the Stripe API.","docsApp.integrationAdvisor.recommendations.extensions.title":"Build a Stripe App for Stripe","docsApp.components.narrative.productGrid.bankingAsAService":"Banking-as-a-service","docsApp.components.narrative.productGrid.revenueAndFinancial":"Revenue and financial management","docsApp.components.narrative.productGrid.globalPayments":"Payments","docsShell.HomePage.TestMode.CommandOptions.getBalance":"Get your balance","docsShell.HomePage.TestMode.CommandOptions.issueCoupons":"Issue coupons","docsShell.HomePage.TestMode.CommandOptions.manageTaxes":"Manage taxes","docsShell.HomePage.TestMode.downloadStripeCli":"Download Stripe CLI","docsShell.HomePage.TestMode.useInTestMode":"These are common \u003Ca\u003ECLI\u003C\u002Fa\u003E actions. Choose one, and try it by clicking in the terminal to the right.","docsShell.HomePage.TestMode.useInTestMode.loggedOut":"\u003Cb\u003ESign in\u003C\u002Fb\u003E to use Stripe Shell to run API requests in test mode. Here are some common \u003Ca\u003ECLI\u003C\u002Fa\u003E actions you could run.","docsApp.Params.notSupported":"Not supported","docsApp.paymentLinksOnRamp.customAmountPlaceholderName":"Fundraising dinner, etc...","docsApp.paymentLinksOnRamp.fakeCheckout.customAmountProductNamePlaceholder":"Fundraising dinner","docsShell.HomePage.TestMode.loggedOut.copiedCommand":"Command copied","docsShell.HomePage.TestMode.loggedOut.copyCommand":"Copy command","docsShell.HomePage.utilityCard.apiKeys":"Test API keys","docsShell.HomePage.utilityCard.apiKeys.loggedOut":"\u003Ca\u003ESign in\u003C\u002Fa\u003E or \u003Cca\u003Ecreate an account\u003C\u002Fca\u003E to load your test API keys.","docsShell.HomePage.utilityCard.apiKeys.publishable":"Publishable key","docsShell.HomePage.utilityCard.apiKeys.publishable.copy":"Copy publishable test key","docsShell.HomePage.utilityCard.apiKeys.secret":"Secret key","docsShell.HomePage.utilityCard.apiKeys.secret.copy":"Copy secret test key","docsShell.HomePage.utilityCard.recentlyViewed":"Recently viewed","docsShell.HomePage.utilityCard.testCard.copy":"Copy test card number","docsShell.HomePage.utilityCard.testCard.moreTestCards":"Test cards","docsApp.PrintSdkCode.copyLabel":"Copy snippet","docsApp.components.Identifier.bankAccountToken":"Create a Bank Account Token with the \u003Ca\u003E API \u003C\u002Fa\u003E before making this request or use a \u003Ca2\u003Etest Token\u003C\u002Fa2\u003E.","docsApp.components.Identifier.charge":"Identifier of a Charge created using the \u003Ca\u003E API \u003C\u002Fa\u003E or as part of a \u003Ca2\u003EPaymentIntent\u003C\u002Fa2\u003E.","docsApp.components.Identifier.transfer":"Identifier of a Transfer created with the \u003Ca\u003EAPI\u003C\u002Fa\u003E or part of a \u003Ca2\u003EConnect funds flow\u003C\u002Fa2\u003E.","docsShell.HomePage.TestMode.tryWithNoCode":"Try it without code","docsApp.components.Identifier.defaultTooltipMessage":"Create a{n} {IdentifierResource} with the {Api} before making this request.","docsApp.components.Identifier.payment":"Identifier of a Payment created using the \u003Ca\u003EAPI\u003C\u002Fa\u003E, as part of a \u003Ca2\u003EPaymentIntent\u003C\u002Fa2\u003E, or the result of a \u003Ca3\u003Edestination charge\u003C\u002Fa3\u003E.","docsApp.components.contrib.groupNotes.accountOwner":"Account owner","docsApp.components.contrib.groupNotes.canInviteAdditionalUsers":"These roles can invite additional users to your account, and if compromised by an attacker would allow them to invite users under their control.","docsApp.components.contrib.groupNotes.important":"Important","docsApp.components.section.betaBadge":"Beta","docsApp.demo.payButtonElement.caption":"The Pay Button Element displays multiple buttons at the same time in the order that maximises payment conversion on your page.","docsApp.demo.payButtonElement.googleCaption":"The demo sets the {walletsParam} parameter to 'always' for all wallets. Google Pay and Apple Pay are displayed only on their available platforms.","docsApp.demo.payButtonElement.label.backgroundColor":"Background Colour","docsApp.demo.payButtonElement.label.layout":"Layout","docsApp.demo.payButtonElement.label.shipping":"Collect Shipping Address","docsApp.demo.payButtonElement.label.size":"Size","docsApp.demo.payButtonElement.tooltip.shipping":"Enables shipping collection in the payment interface.","docsApp.glossary.definition.eMandate":"An e-mandate is a form of authorisation provided by cardholders to issuing banks that grants permission for recurring payments on their card. Any recurring payment arrangements \u0028for example, monthly subscriptions to OTT services\u0029 need an associated e-mandate to be successful. The e-mandate needs to be registered and then validated through AFA, such as 3DS.\n","docsApp.glossary.term.eMandate":"e-mandate","docsShell.survey.popInPrompt.link":"Take feedback survey","docsShell.survey.popInPrompt.prompt":"Take a quick 2-minute survey about your integration experience?","docsShell.prerequisites.header":"Before you begin","docsApp.tax_code_details.txcd_10171500.description":"Payment Processing Service.","docsApp.tax_code_details.txcd_10171500.name":"Payment Processing Service","docsApp.tax_code_details.txcd_10193001.description":"SaaS Business Use.","docsApp.tax_code_details.txcd_10193001.name":"SaaS Business Use","docsApp.tax_code_details.txcd_20069000.description":"Professional Services.","docsApp.tax_code_details.txcd_20069000.name":"Professional Services","docsApp.tax_code_details.txcd_20069009.description":"Data Processing Service.","docsApp.tax_code_details.txcd_20069009.name":"Data Processing Service","docsApp.tax_code_details.txcd_20069017.description":"Technical Support.","docsApp.tax_code_details.txcd_20069017.name":"Technical Support","docsApp.tax_code_details.txcd_20110001.description":"Banking and Finance Fees.","docsApp.tax_code_details.txcd_20110001.name":"Banking and Finance Fees","docsApp.tax_code_details.txcd_20110002.description":"Fraud Prevention.","docsApp.tax_code_details.txcd_20110002.name":"Fraud Prevention","docsApp.tax_code_details.txcd_90030001.description":"Charitable Donation.","docsApp.tax_code_details.txcd_90030001.name":"Charitable Donation","docsApp.tax_code_details.txcd_92019001.description":"Separately Stated Shipping.","docsApp.tax_code_details.txcd_92019001.name":"Separately Stated Shipping","docsApp.YouTube.loading":"Loading video content...","docsShell.survey.toast.thanks":"Thank you for your feedback\u0021","docsApp.ApiExplorerFooter.back":"Back","docsApp.ApiExplorerFooter.cancel":"Cancel","docsApp.ApiExplorerFooter.save":"Save","docsApp.Params.editing":"Editing","docsApp.tax_id_types.al_tin.description":"Albania Tax Identification Number","docsShell.csat.anotherReason":"Another reason","docsShell.csat.anotherReasonPrompt":"Tell us more about your experience.","docsShell.csat.commentsOptional":"\u0028Optional\u0029 Try to be as specific and detailed as possible\u0021","docsShell.csat.helpfulAccurateDescription":"Accurately describes the product or feature.","docsShell.csat.helpfulAccurateLabel":"Accurate","docsShell.csat.helpfulEasyToUnderstandDescription":"Easy to follow and comprehend.","docsShell.csat.helpfulEasyToUnderstandLabel":"Easy to understand","docsShell.csat.helpfulHelpedMeDecideToUseTheProductDescription":"Convinced me to adopt the product or feature.","docsShell.csat.helpfulHelpedMeDecideToUseTheProductLabel":"Helped me decide to use the product","docsShell.csat.helpfulSolvedMyProblemDescription":"Helped me resolve an issue.","docsShell.csat.helpfulSolvedMyProblemLabel":"Solved my problem.","docsShell.csat.unhelpfulCodeSampleErrorsDescription":"One or more code samples are incorrect.","docsShell.csat.unhelpfulCodeSampleErrorsLabel":"Code sample errors","docsShell.csat.unhelpfulCouldnotFindWhatIWasLookingForDescription":"Missing important information.","docsShell.csat.unhelpfulCouldnotFindWhatIWasLookingForLabel":"Couldn't find what I was looking for","docsShell.csat.unhelpfulHardToUnderstandDescription":"Too complicated or unclear.","docsShell.csat.unhelpfulHardToUnderstandLabel":"Hard to understand","docsShell.csat.unhelpfulInaccurateDescription":"Doesn't accurately describe the product or feature.","docsShell.csat.unhelpfulInaccurateLabel":"Inaccurate","docsShell.sidebarNavigation.dropdownClosed":"Dropdown closed","docsShell.sidebarNavigation.dropdownOpen":"Dropdown open","docsApp.shell.apiref-header.dashboard":"Dashboard","docsApp.shell.apiref-header.docs":"Docs","docsApp.shell.apiref-header.signin":"Sign in","docsApp.shell.apiref-header.support":"Support","docsApp.shell.apiref-header.title":"API Reference","docsApp.tax_code_details.txcd_50021001.description":"Charges associated with recurring membership dues allowing access or use of health clubs and fitness clubs. Outside the United States, these charges are not applicable for services provided by non-profit sports organisations.","docsApp.tax_code_details.txcd_50021001.name":"Fitness Centres - Dues and Membership Fees","docsApp.tax_code_details.txcd_50021002.description":"Initiation fees are an upfront one-time charge occurring at the time a new member joins a health club or fitness centre. Outside the United States, these charges are not applicable for services provided by non-profit sports organisations.","docsApp.tax_code_details.txcd_50021002.name":"Fitness Centres - Initiation Fees","docsApp.tax_code_details.txcd_50021003.description":"Charges associated with the service of providing in-person personal fitness training or group exercise classes. Outside the United States, these charges are not applicable for services provided by non-profit sports organisations.","docsApp.tax_code_details.txcd_50021003.name":"Fee for Personal Training\u002FFitness Classes","docsApp.tax_code_details.txcd_50021101.description":"Charges associated with one-off access for use of health clubs and fitness clubs. Outside the United States, these charges are not applicable for services provided by non-profit sports organisations.","docsApp.tax_code_details.txcd_50021101.name":"Fitness Centres - Single Use Access Fees","docsApp.tax_code_details.txcd_50021103.description":"Charges associated with the service of providing in-person instruction in an athletic pursuit, e.g. golf, tennis, skiing, etc. Outside the United States, these charges are not applicable for services provided by non-profit sports organisations.","docsApp.tax_code_details.txcd_50021103.name":"Fee For Sport Instruction Classes","docsShell.apiRef.search.checkToEnableCmdF":"Open on {CmdF}","docsShell.apiRef.search.footer.go":"Go","docsShell.apiRef.search.footer.navigate":"Navigate","docsShell.apiRef.search.footer.noResults":"No results","docsShell.apiRef.search.placeholder":"Find anything","docsShell.apiRef.search.pressCmdFAgainToUseBrowserSearch":"Press {CmdF} again to use native browser search.","docsShell.apiRef.search.recentlyViewed":"Recently viewed","docsShell.apiRef.search.searchLabel":"Search the API","docsShell.apiRef.search.searchPlaceholder":"Go to...","docsApp.components.Identifier.TerminalHardwareOrder":"Create a Terminal Hardware Order with the \u003Ca\u003EAPI\u003C\u002Fa\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E before making this request.","docsApp.components.Identifier.pricingTable":"Create a Pricing Table through the \u003Ca1\u003EDashboard\u003C\u002Fa1\u003E.","docsApp.components.Identifier.terminalHardwareProduct":"Query for a Terminal Hardware Product with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.availability.merchantAvailable":"Available for merchants in: ","docsApp.demo.expressCheckoutElement.caption":"The Express Checkout Element displays multiple buttons at the same time in the order that maximises payment conversion on your page.","docsApp.demo.paymentElement.linkAuthInstructions":"To see how Link works for a returning user, enter the email demo@stripe.com. To see how Link works during a new sign-up, enter any other email address and complete the rest of the form.","docsShell.apiref.copiedConfirmation":"Copied\u0021","docsShell.apiref.merchantSelector.signIn":"Sign in","docsShell.apiref.merchantSelector.unnamedAccount":"New business","docsShell.apiref.merchantSelector.visitTheDashboard":"Visit the Dashboard","docsShell.apiref.viewDefinition":"Jump to definition in {resource} object","docsShell.footer.contactSales":"Questions? \u003Ca\u003EContact Sales\u003C\u002Fa\u003E.","docsShell.footer.contactSupport":"Need help? \u003Ca\u003EContact Support\u003C\u002Fa\u003E.","docsShell.helpdropdown.label":"Help","docsShell.navigation.salesLink":"Contact sales","docsShell.apiref.localizedCurrencySymbol.subunit":"cents","docsShell.apiref.localizedCurrencySymbol.symbol":"\u0024","docsShell.apiref.subfields.hideAttributes":"Hide child attributes","docsShell.apiref.subfields.hideParameters":"Hide child parameters","docsShell.apiref.subfields.showAttributes":"Show child attributes","docsShell.apiref.subfields.showParameters":"Show child parameters","docsApp.components.Identifier.buyButton":"Create a Buy Button through the \u003Ca1\u003EDashboard\u003C\u002Fa1\u003E from a Payment Link.","docsShell.payoutSettlementCurrencies.costOr":"{percent}% or minimum fee of {cost}","docsShell.apiref.fieldlist.collapseAll":"Collapse all","docsShell.apiref.fieldlist.expandAll":"Expand all","docsShell.markdocContent.deprecated":"Deprecated","docsShell.apiref.copyPrompt":"Click to copy","docsApp.glossary.term.checkout":"Stripe Checkout","docsApp.glossary.term.paymentIntent":"PaymentIntent","docsApp.components.contrib.roleDescriptions.sandboxAdmin.descriptionOfWhatRoleCanDo":"This role is for people who need to create and manage sandboxes for testing purposes and need Administrator level privileges in all sandboxes.","docsApp.components.contrib.roleDescriptions.sandboxAdmin.descriptionOfWhatRoleCannotDo":"They can't view or make changes to anything in your live account.","docsApp.components.contrib.roleDescriptions.sandboxAdmin.roleName":"Sandbox Admin","docsApp.components.contrib.thingsRolesCanDo.createEditDeleteLiveAPIKeys":"Create, view, edit, or delete live API keys","docsApp.components.contrib.thingsRolesCanDo.createEditDeleteLiveCustomers":"Create, edit, or delete live customers","docsApp.components.contrib.thingsRolesCanDo.createEditDeleteLiveProducts":"Create, edit, or delete live products","docsApp.components.contrib.thingsRolesCanDo.createViewModifyDeleteSandboxes":"Create, view, modify, and delete sandboxes","docsApp.components.contrib.thingsRolesCanDo.createViewRefundLivePayments":"Create, view, or refund live payments","docsApp.components.contrib.thingsRolesCanDo.createViewRefundPaymentsSandboxes":"Create, view, and refund payments in sandboxes","docsApp.components.contrib.thingsRolesCanDo.inviteEditRemoveTeamMembersSandboxes":"Invite, edit, and remove team members","docsApp.components.contrib.thingsRolesCanDo.viewLiveBalance":"View live balance","docsApp.glossary.definition.checkout":"A secure, hosted checkout page that you redirect customers to in a simplified web integration. Many features are built in, and no front-end code is required.\n","docsApp.glossary.definition.paymentIntent":"API object that represents your intent to collect payment from a customer, tracking charge attempts and payment state changes throughout the process.\n","docsApp.kycapi.approved.confirmation":"You’re all set","docsApp.kycapi.approved.getstarted":"Get started","docsApp.kycapi.email.label":"Email","docsApp.kycapi.firstname.label":"First Name","docsApp.kycapi.lastname.label":"Last Name","docsApp.kycapi.submit":"Submit","docsApp.kycapi.tos.agree.label":"Agree","docsApp.kycapi.tos.decline.label":"Decline","docsShell.apiref.viewLogs":"View logs","docsApp.integrationBuilder.demo.connectElements.config.experience.preview":"Preview","docsApp.form.description.label":"Describe how you want to use the KYC API","docsApp.glossary.definition.secretKey":"Stripe APIs use your secret API key to authenticate requests from your server; you can use this key to make any API call on behalf of your account, such as creating a charge or performing a refund.\n","docsApp.glossary.term.secretKey":"secret key","docsApp.integrationBuilder.demo.connectElements.appearanceParameters":"Appearance parameters","docsApp.kycapi.agree.tos":"Agree to Attestation","docsApp.kycapi.approved.details":"You’re ready to create a restricted key.","docsApp.kycapi.attestation":"You are asking Stripe to provide you with the data Stripe maintains related to your Platform Users and their Representatives \u0028“Connected Account Data”\u0029. You recognise that in doing so, Stripe is acting as a Data Processor to you and your Platform Users, providing the Stripe Connect Services pursuant to the \u003CSSA\u003EStripe Services Agreement\u003C\u002FSSA\u003E, Stripe’s \u003CCAA\u003EConnected Account Agreement\u003C\u002FCAA\u003E, and any other existing agreement for the provision of Stripe Connect Services to facilitate the Platform Services. You agree that you will use the Connected Account Data solely as is reasonably necessary to provide the Platform User to which the data relates with the Platform Services facilitated by the Stripe Connect Services. You further agree that you will not under any circumstances provide the Connected Account Data to a third party or use the Connected Account Data for advertising or marketing purposes. You will defend and indemnify the Stripe Parties against any Claims or Stripe Liabilities arising from your use of the Connected Account Data to the same extent and in the same manner as you would be required to for any breach under the \u003CSSA\u003EStripe Services Agreement\u003C\u002FSSA\u003E. All terms in the preceding agreement shall have the same meaning given to them in the \u003CSSA\u003EStripe Services Agreement\u003C\u002FSSA\u003E.","docsApp.kycapi.confirmation":"Got it, thanks\u0021","docsApp.kycapi.error.field.required":"Field is required","docsApp.kycapi.error.phone.invalid":"Phone number is invalid","docsApp.kycapi.form.subtitle":"Fill out this form to request access.","docsApp.kycapi.form.title":"Get access to the KYC API for {platform}","docsApp.kycapi.form.title.without.platform":"Get access to the KYC API","docsApp.kycapi.loginError":"You must be logged in to complete this form.","docsApp.kycapi.phoneNumber.label":"Phone Number","docsApp.kycapi.unknownerror":"There was an error. Please try again","docsApp.kycapi.view.tos":"View Attestation","docsApp.integrationBuilder.demo.connectElements.config.experience.paymentDetails":"Payment details","docsApp.integrationBuilder.demo.connectElements.openPaymentDetails":"Open payment details","docsApp.kycapi.attestation.title":"Please read this attestation","docsApp.kycapi.confirmation.details":"We’ll get back to you as soon as possible.","docsApp.kycapi.form.tos":"I have read and accepted the \u003CSKAA\u003EStripe KYC API Attestation.\u003C\u002FSKAA\u003E","docsApp.kycapi.tos.close.label":"Close","docsApp.demo.connectEmbeddedComponents.config.experience":"Element","docsApp.demo.connectEmbeddedComponents.config.size":"Size","docsApp.demo.connectEmbeddedComponents.config.size.desktop":"Desktop","docsApp.demo.connectEmbeddedComponents.config.size.mobile":"Mobile","docsApp.demo.connectEmbeddedComponents.unexpectedError":"An error occurred. We're looking into it\u0021","docsApp.demo.connectEmbeddedComponentsCustomization.guideText":"View the text-based guide","docsApp.demo.connectEmbeddedComponentsCustomization.preview":"Preview","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.paymentDetails":"Payment details","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.payments":"Payments","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.payouts":"Payouts","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.preview":"Preview","docsApp.components.callout.beta":"Beta","docsApp.components.callout.note":"Note","docsApp.components.callout.regional":"Regional considerations","docsApp.components.callout.warning":"Warning","docsApp.components.callout.caution":"Caution","docsApp.components.callout.mistake":"Common mistake","docsApp.components.callout.security":"Security tip","docsApp.components.narrative.productGrid.buildingBlocks":"Building blocks for financial services","docsApp.components.narrative.productGrid.financeAutomation":"Finance automation","docsApp.demo.connectEmbeddedComponents.openPaymentDetails":"Open payment details","docsShell.apiref.section.badge.testhelper":"Test helper","docsShell.apiref.v1inlineKey.loggedIn":"This is your test mode \u003Ca\u003EAPI key\u003C\u002Fa\u003E. \u003Cb\u003EView your other keys\u003C\u002Fb\u003E.","docsShell.apiref.v1inlineKey.loggedOut":"This is a public \u003Cstrong\u003Esample\u003C\u002Fstrong\u003E test mode \u003Clink\u003EAPI key\u003C\u002Flink\u003E. Don’t submit any personally identifiable information in requests made with this key.","docsShell.apiref.v2inlineKey.loggedIn":"This is a placeholder for your v2 API key. Get your v2 keys from the \u003Clink\u003Edashboard\u003C\u002Flink\u003E.","docsShell.apiref.v2inlineKey.loggedOut":"This is a placeholder for a \u003Clink\u003Ev2 API key\u003C\u002Flink\u003E. Log in to the Stripe dashboard to access your v2 keys.","docsShell.apiref.section.badge.beta":"Beta","docsShell.apiref.section.badge.deprecated":"Deprecated","docsShell.TerminalCompatibilityMatrix.formatReader.stripe.s700":"Stripe Reader S700","docsShell.TerminalCompatibilityMatrix.formatReader.stripe.taptopay":"Tap to Pay","docsApp.glossary.definition.exposureLimit":"The exposure limit is the maximum aggregate amount that can be spent beyond pre-funded balances.\n","docsApp.glossary.term.exposureLimit":"exposure limit","docsApp.tax_id_types.tr_vat.description":"Deprecated, please use tr_tin","docsApp.tax_id_types.ec_ruc.description":"Ecuadorian RUC number","docsApp.demo.payButtonElement.label.maxColumns":"Max Columns","docsApp.demo.payButtonElement.label.maxRows":"Max Rows","docsApp.demo.payButtonElement.label.overflow":"Overflow","docsApp.demo.payButtonElement.tooltip.maxColumns":"Defines the maximum number of columns the Express Checkout Element can use to render, where 0 is unlimited.","docsApp.demo.payButtonElement.tooltip.maxRows":"Defines the maximum number of rows the Express Checkout Element can use to render, where 0 is unlimited.","docsApp.demo.payButtonElement.tooltip.overflow":"Enables Elements to determine when to show the overflow menu.","docsApp.tax_id_types.co_vat.description":"Deprecated; will be removed in the future","docsShell.skipToContent.label":"Skip to content","docsApp.components.callout.pilot":"Limited Pilot","docsApp.tax_code_details.txcd_10804010.description":"Works that result from the fixation of a series of musical, spoken, or other sounds that are transferred electronically. These goods are streamed and\u002For downloaded to a device with access that is conditioned upon continued subscription payment. Any downloads received while under subscription remain the permanent property of the subscriber. These goods include pre-recorded or live music, pre-recorded or live readings of books or other written materials, pre-recorded or live speeches, ringtones, or other sound recordings, but not including audio greeting cards. These goods further include self-study web-based training services that impart content via audio goods described here. Note the presence of PTC 10301000 \u0028Audiobook\u0029, a more granular option for downloaded audiobooks.","docsApp.tax_code_details.txcd_10804010.name":"Digital Audio Works - bundle - downloaded with permanent rights and streamed - subscription - with conditional rights","docsApp.apiref.runWithShell":"Customize \u0026 run","docsApp.components.countryFlagList.preview":"Preview","docsApp.components.exposedInstitutionTable.headerCells.institution":"Institution","docsApp.components.exposedInstitutionTable.headerCells.supportsBalances":"Balance Data","docsApp.components.exposedInstitutionTable.headerCells.supportsMoneyMovement":"Money Movement","docsApp.components.exposedInstitutionTable.headerCells.supportsOwnership":"Ownership","docsApp.components.exposedInstitutionTable.headerCells.supportsTransactions":"Transaction Data","docsApp.tax_code_details.txcd_10401299.name":"\u0028CUSTOM\u0029 Digital Audio Works – streamed – subscription – with conditional rights","docsApp.tax_code_details.txcd_10701499.description":"An online service furnishing information to customers, including online search and data comparison. \u0028CUSTOM\u0029.","docsApp.tax_code_details.txcd_10701499.name":"\u0028CUSTOM\u0029 Website Information Services","docsApp.glossary.definition.mobile":"A set of UI components for building mobile checkout flows. They adapt to your customer's locale, validate input, and use tokenisation, keeping sensitive customer data from touching your server.\n","docsApp.glossary.definition.paymentLinks":"A link to a secure, hosted payment page that you can generate without code. Share it directly with your customers, or point them to it with a button or QR code.\n","docsApp.glossary.term.mobile":"Mobile Elements","docsApp.glossary.term.paymentLinks":"Payment Links","docsShell.apiref.section.badge.preview":"Preview feature","docsApp.components.taxCategoryDetails.clearButton":"Clear","docsApp.components.taxCategoryDetails.digitalProductsType":"Digital products","docsApp.components.taxCategoryDetails.doneButton":"Done","docsApp.components.taxCategoryDetails.filterLabel":"Filter","docsApp.components.taxCategoryDetails.filtersHeader":"Filters","docsApp.components.taxCategoryDetails.noMatchesMessage":"No matching tax codes found","docsApp.components.taxCategoryDetails.physicalGoodsType":"Physical goods","docsApp.components.taxCategoryDetails.servicesType":"Services","docsApp.components.taxCodeDetails.column.categoryColumn":"Category name","docsApp.components.taxCodeDetails.column.nameColumn":"Tax code","docsApp.components.taxCodeDetails.column.usageColumn":"Use this tax code for","docsApp.components.exposedInstitutionTable.headerCells.balanceDataTooltip":"Retrieve the current and available balances of a Financial Connections Account.","docsApp.components.exposedInstitutionTable.headerCells.ownershipDetailsTooltip":"Retrieve the ownership details of a Financial Connections Account.","docsApp.components.exposedInstitutionTable.headerCells.paymentDetailsTooltip":"Use Financial Connections Accounts as payment methods.","docsApp.components.exposedInstitutionTable.headerCells.supportsOwnershipDetails":"Ownership Details","docsApp.components.exposedInstitutionTable.headerCells.supportsPaymentDetails":"Account Details","docsApp.components.exposedInstitutionTable.headerCells.transactionDataTooltip":"Retrieve the pending, posted, and voided transactions of a Financial Connections Account.","docsApp.components.taxCategoryDetails.digitalProductsFilter":"Digital products","docsApp.components.taxCategoryDetails.filterLabelWithCount":"Filter \u0028{count}\u0029","docsApp.components.taxCategoryDetails.physicalGoodsFilter":"Physical goods","docsApp.components.taxCategoryDetails.servicesFilter":"Services","docsApp.components.taxCodeDetails.column.typeColumn":"Category type","docsApp.components.taxCodeDetails.search.digitalPtcsCheckbox":"Only show digital product tax codes","docsApp.components.taxCodeDetails.search.searchTaxCodesPlaceholder":"Search tax codes...","docsApp.glossary.definition.electronicCommerceIndicator":"An Electronic Commerce Indicator \u0028ECI\u0029 is a code returned alongside a 3D Secure authentication result. It indicates the authentication method and result and may be used subsequently to, for example, determine eligibility for liability shift.\n","docsApp.glossary.definition.originatingEvent":"The activity that triggers a subsequent action, such as the application of a network cost.\n","docsApp.glossary.term.electronicCommerceIndicator":"Electronic Commerce Indicator \u0028ECI\u0029","docsApp.glossary.term.originatingEvent":"originating event","docsApp.tax_code_details.txcd_10401299.description":"Works that result from the fixation of a series of musical, spoken, or other sounds that are transferred electronically. These goods are streamed to a device with access that is conditioned upon continued subscription payment. These goods include pre-recorded or live music, pre-recorded or live readings of books or other written materials, pre-recorded or live speeches, ringtones, or other sound recordings, but not including audio greeting cards. \u0028CUSTOM\u0029.","docsApp.tax_id_types.ad_nrt.description":"Andorran NRT number","docsApp.tax_id_types.ar_cuit.description":"Argentinian tax ID number","docsApp.tax_id_types.bo_tin.description":"Bolivian tax ID","docsApp.tax_id_types.cn_tin.description":"Chinese tax ID","docsApp.tax_id_types.co_nit.description":"Colombian NIT number","docsApp.tax_id_types.cr_tin.description":"Costa Rican tax ID","docsApp.tax_id_types.do_rcn.description":"Dominican RCN number","docsApp.tax_id_types.pe_ruc.description":"Peruvian RUC number","docsApp.tax_id_types.rs_pib.description":"Serbian PIB number","docsApp.tax_id_types.sv_nit.description":"El Salvadorian NIT number","docsApp.tax_id_types.uy_ruc.description":"Uruguayan RUC number","docsApp.tax_id_types.ve_rif.description":"Venezuelan RIF number","docsApp.tax_id_types.vn_tin.description":"Vietnamese tax ID number","docsShell.apiref.elementlist.collapseAll":"Collapse all","docsShell.apiref.elementlist.expandAll":"Expand all","docsApp.cryptoOnramp.copiedUrlLabel":"Copied to clipboard","docsApp.cryptoOnramp.copyUrlLabel":"Copy to clipboard","docsShell.apiRef.element.dataType.javaMap":"Map","docsApp.components.contrib.roleDescriptions.iamAdminRoleWithSuperAdmin.descriptionOfWhatRoleCanDo":"The Identity and Access Management \u0028IAM\u0029 Admin role is for people who need to invite team members and assign roles. They can also remove any user, including Administrators and Super Administrators.","docsApp.components.contrib.roleDescriptions.iamAdminRoleWithSuperAdmin.descriptionOfWhatRoleCannotDo":"They can't do anything beyond access management. They also can't assign a user to the Administrator or Super Administrator role.","docsApp.components.contrib.roleDescriptions.superAdminRole.descriptionOfWhatRoleCanDo":"This role is assigned to the creator of a business account and should only be assigned to users who are allowed to perform all privileged actions. Only a Super Administrator can assign the Super Administrator role to other team members.","docsApp.components.contrib.roleDescriptions.superAdminRole.descriptionOfWhatRoleCannotDo":"Change the account owner \u0028only the owner can transfer ownership\u0029.","docsApp.components.contrib.roleDescriptions.superAdminRole.roleName":"Super Administrator","docsApp.components.contrib.thingsRolesCanDo.addAccountsToOrganization":"Add accounts to an organisation \u0028the user must be a Super Administrator in the accounts and the organisation\u0029","docsApp.components.contrib.thingsRolesCanDo.assignSuperAdminRole":"Assign super administrator role to other users","docsApp.cryptoOnramp.destinationCurrencyError":"Destination currency must also be set if destination amount is set","docsApp.cryptoOnramp.exampleButtonLabel":"Example button with redirect URL","docsApp.cryptoOnramp.footer":"For additional branding and customisation or to integrate the onramp in-line, \u003Capplicationlink\u003Esubmit an application\u003C\u002Fapplicationlink\u003E and try the \u003Cembeddableonramplink\u003Eembeddable version of the onramp\u003C\u002Fembeddableonramplink\u003E\u0021","docsApp.cryptoOnramp.form.destinationAmountDescription":"Enter the amount of crypto you want to buy. Maximum value of 1500 USD.","docsApp.cryptoOnramp.form.destinationCurrencyDescription":"Select a destination currency","docsApp.cryptoOnramp.form.destinationCurrencyLabel":"Destination currency","docsApp.cryptoOnramp.form.heading":"Try our Buy Crypto button in less than 5 seconds","docsApp.cryptoOnramp.form.sourceAmountDescription":"Enter the amount of fiat you want to exchange into crypto","docsApp.cryptoOnramp.form.sourceAmountLabel":"Source amount \u0028USD\u0029","docsApp.cryptoOnramp.redirectUrlCodeLabel":"Generate a redirect URL with code","docsApp.cryptoOnramp.redirectUrlLabel":"Send users to this URL directly","docsApp.cryptoOnramp.sourceAmountMaximumError":"The maximum purchase amount is 1500 USD","docsApp.cryptoOnramp.sourceAmountMinimmumError":"The minimum purchase amount is 1 USD","docsApp.cryptoOnramp.toggleType.destinationAmount":"Destination amount","docsApp.cryptoOnramp.toggleType.sourceAmount":"Source amount","docsApp.glossary.definition.mcc":"A Merchant Category Code \u0028MCC\u0029 is a four-digit number that classifies the type of goods or services a business offers.\n","docsApp.glossary.term.mcc":"mcc","docsShell.apiRef.element.dataType.associativeArray":"associative array","docsShell.apiRef.element.dataType.associativeArrays":"associative arrays","docsShell.apiRef.element.dataType.dictionaries":"dictionaries","docsShell.apiRef.element.dataType.dictionary":"dictionary","docsShell.apiRef.element.dataType.dotnetDictionaries":"Dictionaries","docsShell.apiRef.element.dataType.dotnetDictionary":"Dictionary","docsShell.apiRef.element.dataType.hash":"hash","docsShell.apiRef.element.dataType.hashes":"hashes","docsShell.apiRef.element.dataType.javaMaps":"Maps","docsShell.apiRef.element.dataType.map":"map","docsShell.apiRef.element.dataType.maps":"maps","docsShell.apiRef.element.dataType.object":"object","docsShell.apiRef.element.dataType.objects":"objects","docsShell.template.error":"Unable to copy the text to your clipboard.","docsShell.template.copied":"Copied\u0021","docsShell.template.copy":"Copy","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.accountManagement":"Account management","docsApp.components.exposedInstitutionSectionContent.failDescription":"There was an error fetching the supported institutions. Please contact your Stripe representative.","docsApp.components.exposedInstitutionSectionContent.failTitle":"Failed to load institutions","docsApp.components.exposedInstitutionSectionContent.limitLabel":"Maximum number of results:","docsApp.cryptoOnramp.form.destinationAmountDescription2":"Enter the amount of crypto you want to buy. Maximum value of 1500 USD equivalent.","docsApp.demo.connectEmbeddedComponents.exitedOnboarding":"The user has exited onboarding\u0021 At this point this embedded component emitted the \"onboardingexited\" event for the host application to handle. Typically the user would be redirected to a different page after onboarding. To try the experience again, refresh the page.","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.accountOnboarding":"Account onboarding","docsApp.tax_id_types.ro_tin.description":"Romanian tax ID number","docsShell.smartSearch.apiKeys.title":"API Keys","docsShell.smartSearch.copyableMenuItem.copied":"Copied\u0021","docsShell.smartSearch.recentlyViewed.title":"Recently viewed","docsShell.smartSearch.searchDialogFooter.supportLink":"Stripe Support","docsShell.smartSearch.searchFeedback.label":"More information","docsShell.smartSearch.searchFeedback.submitButtonLabel":"Send feedback","docsShell.smartSearch.searchFeedback.title":"Was this useful?","docsShell.smartSearch.searchModeChiclet.api":"API Reference","docsShell.smartSearch.searchResults.noResults":"No results found.","docsShell.smartSearch.searchResults.title":"Results","docsShell.smartSearch.testCards.title":"Test cards","docsShell.smartSearch.apiKeys.testPublishableKey":"Test publishable key","docsShell.smartSearch.apiKeys.testSecretKey":"Test secret key","docsShell.smartSearch.askResultSources.title":"Summarised from these articles","docsShell.smartSearch.askResultSummary.gatheringSources":"Gathering sources","docsShell.smartSearch.askResultSummary.sorry":"Sorry, I wasn't able to answer your question using the Stripe docs.","docsShell.smartSearch.askResultSummary.summarizing":"Summarising","docsShell.smartSearch.defaultSuggestions.getAnswers":"Ask AI Assistant","docsShell.smartSearch.defaultSuggestions.title":"Suggested","docsShell.smartSearch.defaultSuggestions.viewApiKeys":"View API Keys","docsShell.smartSearch.defaultSuggestions.viewTestCards":"View test cards","docsShell.smartSearch.exampleQuestions.title":"Example questions","docsShell.smartSearch.recentlyAsked.title":"Recently asked","docsShell.smartSearch.searchFeedback.prompt":"Thanks\u0021 Please tell us more about how we did, and what we can improve.","docsShell.smartSearch.searchFeedback.thanks":"Thanks for the feedback\u0021","docsShell.smartSearch.searchFieldPlaceholder.api":"Search for an API resource","docsShell.smartSearch.searchFieldPlaceholder.ask":"Ask a question","docsShell.smartSearch.searchFieldPlaceholder.search":"Search the docs","docsShell.smartSearch.searchFieldPlaceholder.searchOrAsk":"Search the docs or ask a question","docsShell.smartSearch.searchModeChiclet.ask":"AI Assistant","docsShell.smartSearch.searchOrAskPrompt":"Search the docs or ask a question","docsShell.smartSearch.searchPrompt":"Search the docs","docsShell.smartSearch.testCards.testCard3DSAuthNeeded":"Test card: 3DS authentication needed","docsShell.smartSearch.testCards.testCardFailedPayment":"Test card: failed payment","docsShell.smartSearch.testCards.testCardSuccessfulPayment":"Test card: successful payment","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.notificationBanner":"Notification banner","docsShell.AccountSwitcher.defaultName":"New business","docsShell.verificationDocuments.uaeResidenceVisaExtraMessage":"passport visa page, digital visa from ICP app or front and back of physical Emirates ID card \u0028if issued after 11 April 2022\u0029","docsShell.codeBlock.keyToken.copied":"Copied\u0021","docsShell.codeBlock.keyToken.v2.loggedIn":"This is a placeholder for your secret key. Get your API keys from the \u003Clink\u003Edashboard\u003C\u002Flink\u003E.","docsApp.components.Identifier.context":"Identifier of a Connected Account, Customer, or Sandbox created using the \u003Ca\u003EV2 API\u003C\u002Fa\u003E.","docsApp.components.table.columnToggle.toggleColumns":"Display columns","docsApp.glossary.definition.asynchronous":"Asynchronous refers to events happening at independent times in independent systems.\n","docsApp.glossary.term.asynchronous":"asynchronous","docsShell.verificationDocuments.entityTab.CaCompanyPrivatePartnership":"Additional forms of legal entity verification for \u003CBoldText\u003Epartnerships\u003C\u002FBoldText\u003E:","docsShell.verificationDocuments.entityTab.CaNonProfit":"Additional forms of legal entity verification for \u003CBoldText\u003Enon-profit organisations\u003C\u002FBoldText\u003E:","docsShell.verificationDocuments.entityTab.CaNonProfitRegisteredCharityCompanyRegistrationCertificate":"Acceptable forms of legal entity verification for \u003CBoldText\u003Eregistered charities to verify charity registration statuses\u003C\u002FBoldText\u003E:","docsShell.verificationDocuments.entityTab.InCompanyLimitedLiabilityPartnership":"Acceptable forms of legal entity verification for \u003CBoldText\u003Elimited liability partnerships\u003C\u002FBoldText\u003E:","docsShell.verificationDocuments.entityTab.InCompanyPrivateCompany":"Acceptable forms of legal entity verification for \u003CBoldText\u003Ecompanies\u003C\u002FBoldText\u003E:","docsShell.verificationDocuments.entityTab.InCompanySoleProprietorship":"Acceptable forms of legal entity verification for \u003CBoldText\u003Esole proprietorships\u003C\u002FBoldText\u003E:","docsShell.verificationDocuments.entityTab.all":"Acceptable forms of legal entity verification for \u003CBoldText\u003Eall legal entity types\u003C\u002FBoldText\u003E:","docsShell.codeBlock.keyToken.v2.loggedOut":"This is a placeholder for a secret API key.","docsApp.components.exposedInstitutionTable.noInstitutionsFound":"No supported institutions found","docsApp.components.exposedInstitutionTable.noInstitutionsFoundDescription":"Refresh the page or try another search query","docsShell.smartSearch.searchFieldPlaceholder.cli":"Search for a Stripe CLI resource","docsShell.smartSearch.searchFieldPlaceholder.js":"Search for a Stripe JS resource","docsShell.smartSearch.searchModeChiclet.cli":"CLI Reference","docsShell.smartSearch.searchModeChiclet.js":"JS Reference","docsApp.components.countryFlagList.paused":"Paused","docsApp.components.Identifier.accountToken":"Create an Account Token with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.components.Identifier.clientApplication":"Identifier of your application's client ID found in your \u003Ca1\u003EConnect settings\u003C\u002Fa1\u003E.","docsApp.components.Identifier.paymentMethodConfiguration":"Identifier of a PaymentMethodConfiguration created using the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E or through the \u003Ca2\u003EDashboard\u003C\u002Fa2\u003E.","docsShell.apiref.EnumValuesList.possibleEnumValues":"Possible enum values","docsShell.apiref.EnumValuesList.showMore":"Show {count} more","docsApp.TestModeBankAccounts.routingTypeSortCode":"Sort Code","docsShell.apiref.fence.unsupportedLang":"We show the cURL request because this method is currently unsupported in the {language} client. To see it in the library, \u003Ca\u003Elet us know\u003C\u002Fa\u003E about your use case.","docsShell.apiref.section.csat.contactSupport":"If you need help or have any questions, please consider \u003Ca\u003Econtacting support\u003C\u002Fa\u003E.","docsShell.apiref.section.csat.sectionHelpful":"Was this section helpful?","docsShell.apiref.section.csat.sectionImprove":"How could this section be improved?","docsShell.intellisense.viewReference":"View reference","docsApp.components.Identifier.issuingCardholder":"Create an Issuing Cardholder with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.glossary.definition.confirmationTokens":"ConfirmationTokens help capture data from your client, such as your customer's payment instruments and shipping address, and are used to confirm a PaymentIntent or SetupIntent.\n","docsApp.glossary.term.confirmationTokens":"ConfirmationTokens","docsApp.components.contrib.connectPlatformPrefs.dashboard":"Account dashboard:","docsApp.components.contrib.connectPlatformPrefs.embeddedDashboard":"Embedded","docsApp.components.contrib.connectPlatformPrefs.full":"Stripe","docsApp.components.contrib.connectPlatformPrefs.lossLiabilityOwner":"Loss liability:","docsApp.components.contrib.connectPlatformPrefs.onboardingSurface":"Onboarding:","docsApp.components.contrib.connectPlatformPrefs.platform":"Platform","docsApp.components.contrib.connectPlatformPrefs.stripe":"Stripe","docsApp.components.contrib.connectPlatformPrefs.embeddedOnboarding":"Embedded","docsApp.components.contrib.connectPlatformPrefs.hosted":"Hosted","docsApp.glossary.definition.climateOfftakeAgreement":"A contractual agreement to purchase carbon removal at a certain price if and when tons of carbon removal are delivered and verified.\n","docsApp.glossary.definition.climateOrderDelayed":"We consider a project to be delayed if it is unable to deliver by the original expected_delivery_year but expects to deliver within two years.\n","docsApp.glossary.definition.climateOrderExpectedDeliveryYear":"The year when a climate order's carbon removal units are expected to be delivered and verified.","docsApp.glossary.definition.climateOrderFailed":"We consider a project to have failed if it is unable to deliver within 2 years of the original expected_delivery_year.\n","docsApp.glossary.definition.climateProduct":"Products represent the different types of carbon removal units that are available for purchase.\n","docsApp.glossary.definition.partialRefundMulticapture":"A partial refund is any refund in which less than the remaining refundable amount is refunded in a single request. The remaining refundable amount is the payment_intent.amount_received - charge.amount_refunded.\n","docsApp.glossary.term.climateOfftakeAgreement":"climate offtake agreement","docsApp.glossary.term.climateOrderDelayed":"climate order delayed","docsApp.glossary.term.climateOrderExpectedDeliveryYear":"climate order expected delivery year","docsApp.glossary.term.climateOrderFailed":"climate order failed","docsApp.glossary.term.climateProduct":"climate product","docsApp.glossary.term.partialRefundMulticapture":"partial refund","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.paymentMethodSettings":"Payment method settings","docsApp.integrationBuilder.settings.fundingsource":"Funding source:","docsApp.transactionCategoryTable.inboundDeposit":"Non-regular income from deposits, such as cheque and cash deposits, and deposits from wallets and peer-to-peer money sending apps \u0028Venmo, Zelle, Cash App, etc\u0029","docsApp.transactionCategoryTable.inboundDividend":"Income from a dividend payment","docsApp.transactionCategoryTable.inboundInterest":"Income from interest","docsApp.transactionCategoryTable.inboundOther":"Other transactions that positively affect the account holder’s net worth","docsApp.transactionCategoryTable.inboundTaxRefund":"Income from a tax refund","docsApp.transactionCategoryTable.inboundWages":"Fixed recurring income.","docsApp.transactionCategoryTable.outboundFeeAtm":"ATM fees","docsApp.transactionCategoryTable.outboundFeeForeignExchange":"Foreign exchange fees","docsApp.transactionCategoryTable.outboundFeeOther":"Other fees","docsApp.transactionCategoryTable.outboundFeeOverdraft":"Overdraft protection\u002FNSF fees","docsApp.transactionCategoryTable.outboundOther":"Other transactions that negatively affect the account holder’s net worth","docsApp.transactionCategoryTable.outboundWithdrawal":"Withdrawals to cash, cheques, wallets, or peer to peer money sending apps \u0028Venmo, Zelle, Cash App, etc\u0029.","docsApp.transactionCategoryTable.transferAccountToAccount":"Transfer between two cash accounts","docsApp.transactionCategoryTable.transferInvestment":"Transfer to or from an investment account","docsApp.transactionCategoryTable.transferLoanDisbursement":"Transfer into an account from a loan","docsApp.transactionCategoryTable.transferLoanPaymentCreditCard":"Loan payment towards a credit card","docsApp.transactionCategoryTable.transferLoanPaymentMortgage":"Loan payment towards a mortgage","docsApp.transactionCategoryTable.transferLoanPaymentOther":"Other loan payments","docsApp.transactionCategoryTable.transferLoanPaymentPersonalOrBnpl":"Loan payment towards a personal loan or a BNPL provider","docsApp.transactionCategoryTable.transferLoanPaymentStudentLoan":"Loan payment towards a student loan","docsApp.transactionCategoryTable.transferOther":"Other transactions that do not affect the account holder’s net worth","docsApp.transactionCategoryTable.undeterminedOther":"Transactions where a category could not be found.","docsShell.verificationDocuments.sgCallout":"For accounts subject to enhanced identity verification, Stripe requires the representative of the account to be verified by means such as MyInfo, or by taking a selfie with an identity document using Stripe Identity. To collect such information, your platform must integrate with Connect Onboarding or you won’t be able to onboard connected accounts subject to enhanced identity verification.","docsApp.demo.connectEmbeddedComponents.config.locale":"Locale","docsApp.components.contrib.roleDescriptions.supportAssociate.descriptionOfWhatRoleCanDo":"This role is for people who need to refund payments and resolve disputes, but should not have the ability to edit products. It has administration permissions for connected accounts, where it can edit the payout schedule, update the legal entity, and more.","docsApp.components.contrib.roleDescriptions.supportAssociate.descriptionOfWhatRoleCannotDo":"They can't create connected accounts, transfer funds, payout money, or edit any account or product settings.","docsApp.components.contrib.roleDescriptions.supportAssociate.roleName":"Support Associate","docsShell.sidebarNavigation.sidebarLinkTooltip.affirmativeHeaderTopic":"This tab will appear in the header when:","docsShell.sidebarNavigation.sidebarLinkTooltip.negativeHeaderTopic":"This tab will appear in the header unless:","docsShell.smartSearch.askResultSummary.experimentalWarning":"These answers are generated using artificial intelligence. This is an experimental technology, and information may occasionally be incorrect or misleading.","docsShell.smartSearch.askResultSummary.summaryFailed.withSources":"Sorry, there was a problem generating the summary for your question. The links below might still be useful, or click \u003Ca\u003Ehere\u003C\u002Fa\u003E to try again.","docsShell.smartSearch.askResultSummary.summaryFailed.withoutSources":"Sorry, there was a problem generating the summary for your question. Click \u003Ca\u003Ehere\u003C\u002Fa\u003E to try again.","docsShell.smartSearch.searchFeedback.discord":"Thanks for the feedback\u0021 If you'd like more help, come and talk to us on \u003Clink\u003EDiscord\u003C\u002Flink\u003E.","docsApp.glossary.term.ic":"IC\u002B","docsApp.components.contrib.connectPlatformPrefs.embeddedDashboardDisabledUnlessEmbeddedOnboarding":"If your connected accounts use hosted onboarding, they have access to the Stripe Dashboard. You can still use embedded components in your app.","docsApp.components.contrib.connectPlatformPrefs.platformOwnedLossLiabilityDisabledUnlessStandardDashboardTooltip":"If your users will be using embedded onboarding and embedded dashboard components, only Stripe may hold loss liability.","docsApp.components.contrib.connectPlatformPrefs.selectorDescription":"For configuration:","docsApp.glossary.definition.accountId":"When you create a Stripe account, Stripe generates a unique account ID for you. Find your account ID in the Dashboard by navigating to Profile \u003E Accounts.\n","docsApp.glossary.definition.carbonRemovalUnit":"Carbon removal units represent amounts of carbon that has been removed from the atmosphere and retired on behalf of the buyer.\n","docsApp.glossary.definition.ic":"A pricing plan where businesses pay the variable network cost for each transaction plus the Stripe fee rather than a flat rate for all transactions. This pricing model provides more visibility into payments costs.\n","docsApp.glossary.term.accountId":"account ID","docsApp.glossary.term.carbonRemovalUnit":"offtake","docsShell.apiref.section.badge.terminal":"Terminal only","docsApp.glossary.definition.climateBeneficiary":"The beneficiary is the entity that can claim to have removed carbon from the atmosphere.\n","docsApp.glossary.term.climateBeneficiary":"climate beneficiary","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.toLearnMore":"\u003CComponentLink\u003ELearn more about the {component} component →\u003C\u002FComponentLink\u003E","docsApp.connectRequiredInfo.capabilitySelectorRowLabel":"Capability","docsApp.connectRequiredInfoTable.accountInformationTableRowHeader":"Account information","docsApp.connectRequiredInfoTable.companyTableRowHeader":"Company","docsApp.connectRequiredInfoTable.directorsTableRowHeader":"Directors","docsApp.connectRequiredInfoTable.documentsTableRowHeader":"Documents","docsApp.connectRequiredInfoTable.individualsTableRowHeader":"Individuals","docsApp.connectRequiredInfoTable.linePayoutsBadge":"Payouts","docsApp.connectRequiredInfoTable.lineVerifiedBadge":"Verified","docsApp.connectRequiredInfoTable.ownersTableRowHeader":"Owners","docsApp.connectRequiredInfoTable.representativeTableRowHeader":"Representative","docsApp.connectRequiredInfoTable.requirementTableColumnHeader":"Requirements","docsApp.stripelet.errorBoundary.error":"Unable to load this view","docsApp.components.Identifier.identityVerificationFlow":"Identifier of a Verification Flow \u0028vs_abc123\u0029 created using the Dashboard.","docsApp.connectRequiredInfo.accountCountrySelectorLabel":"Account Country","docsApp.connectRequiredInfo.businessTypeSelectorLabel":"Business Type","docsApp.connectRequiredInfo.businessTypeSelectorTooltip":"You are able to further classify some business types by identifying their legal business structure. Providing this information may reveal fewer onboarding requirements to collect.","docsApp.connectRequiredInfo.cardPaymentsRequiredNote":"The {CardPayments} capability is required when the account has the {Full} service agreement.","docsApp.connectRequiredInfo.formHeader":"Viewing requirements for connected accounts","docsApp.connectRequiredInfo.orrProgramSelectorLabel":"Connect Integration Update","docsApp.connectRequiredInfo.orrProgramSelectorTooltip":"The active integration update is dependent upon the country, capabilities, account type, service agreement, and more. View current programs in your Compliance Review dashboard.","docsApp.connectRequiredInfo.platformCountrySelectorLabel":"Platform Country","docsApp.connectRequiredInfo.recipientNotAvailableNote":"The {CardPayments} capability is not available for accounts with a {Recipient} service agreement.","docsApp.connectRequiredInfo.selector.capabilitySelectorLabel":"Add a capability...","docsApp.connectRequiredInfo.selector.capabilitySelectorPlaceholder":"Search available capabilities...","docsApp.connectRequiredInfo.serviceAgreementSelectorLabel":"Service Agreement","docsApp.connectRequiredInfo.serviceAgreementSelectorTooltip":"The service agreements available are a function of the country selected as well as the currently logged-in account. This enables you to see what would be available via the API through this account.","docsApp.connectRequiredInfo.transfersRequiredNote":"The {Transfers} capability is required when the {CardPayments} capability is requested.","docsApp.connectRequiredInfoTable.enhancedIdentityVerificationNotice":"This requirement applies only to accounts subject to enhanced identity verification.","docsApp.connectRequiredInfoTable.executivesTableRowHeader":"Executives","docsApp.connectRequiredInfoTable.firstActionCharge":"First charge","docsApp.connectRequiredInfoTable.firstActionMoneyMovement":"First money movement","docsApp.connectRequiredInfoTable.firstActionTransfer":"First transfer","docsApp.connectRequiredInfoTable.linePayoutsTooltip":"Required before this threshold to keep payouts enabled.","docsApp.connectRequiredInfoTable.lineVerifiedTooltip":"Verification of this field required before this threshold.","docsApp.connectRequiredInfoTable.minimumVerificationRequirementsHeader":"Minimum verification requirements for connected accounts in {Country} matching the above selections.","docsApp.connectRequiredInfoTable.requiredBeforeTableColumnHeader":"Required before","docsApp.connectRequiredInfoTable.requirementAlternativeNotice":"If the user cannot provide their {Requirement}, you can provide","docsApp.connectRequiredInfoTable.selectionTableRowHeader":"Selections","docsApp.glossary.definition.avs":"The address verification system \u0028AVS\u0029 is used to pass billing address information to issuers to verify the data if available.\n","docsApp.glossary.definition.cvc":"The card verification code \u0028CVC\u0029 or card verification value \u0028CVV\u0029 is a three- or four-digit number printed directly on a card used to verify the entered card number.\n","docsApp.glossary.term.avs":"Address Verification System \u0028AVS\u0029","docsApp.glossary.term.cvc":"Card Verification Code check \u0028CVC\u0029","docsShell.integrationBuilder.guide.embeddedCheckoutLabel":"Embedded form","docsShell.verificationDocuments.relationshipTab":"Relationship Documents","docsShell.verificationDocuments.relationshipTab.directorship":"Acceptable forms of \u003CBoldText\u003Edirectorship\u003C\u002FBoldText\u003E verification:","docsShell.verificationDocuments.relationshipTab.ownership":"Acceptable forms of \u003CBoldText\u003Eownership\u003C\u002FBoldText\u003E verification:","docsApp.connectRequiredInfo.accountTypeSelectorLabel":"Account Type","docsApp.integrationBuilder.guide.contentUnavailableDescription":"The docs for {platform} are under development, and we don't have a quickstart guide available. Please refer to the \u003Ca\u003Etext-based guide\u003C\u002Fa\u003E.","docsApp.integrationBuilder.guide.contentUnavailableHeading":"Quickstart guide unavailable","docsApp.glossary.definition.taxLiability":"The responsibility for collecting and reporting taxes for transactions in a Connect integration. It can belong to the platform or to connected accounts, depending on your business model, government regulations, and individual transaction details.\n","docsApp.glossary.term.taxLiability":"tax liability","docsApp.TestModeBankAccounts.behaviorTypeSuccessInstantUnsupported":"Payout fails if \u003CInlineCode\u003E{method}\u003C\u002FInlineCode\u003E is \u003CInlineCode\u003E{instant}\u003C\u002FInlineCode\u003E. Bank account is not eligible for Instant Payouts.","docsShell.smartSearch.defaultSuggestions.searchCodeSnippets":"Search code examples across docs","docsShell.smartSearch.searchFieldPlaceholder.code":"Search code examples across docs","docsShell.smartSearch.searchModeChiclet.code":"Code examples","docsApp.components.narrative.ComplexityCallout.CheckoutPreview.imageAltText":"Checkout preview","docsApp.components.narrative.ComplexityCallout.ComplexityRating.mostCoding":"Most coding","docsApp.components.narrative.ComplexityCallout.ComplexityRating.significantCoding":"Significant coding","docsApp.components.narrative.ComplexityCallout.EmbeddedCheckout.imageAltText":"Embedded Checkout preview","docsApp.components.narrative.ComplexityCallout.ComplexityRating.minimalCoding":"Minimal coding","docsApp.components.narrative.ComplexityCallout.ComplexityRating.moreCoding":"More coding","docsApp.components.narrative.ComplexityCallout.ComplexityRating.noCoding":"No coding","docsShell.smartSearch.exampleSnippets.title":"Code examples","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.issuingCard":"Issuing card","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.issuingCardsList":"Issuing cards list","docsApp.glossary.definition.genericClientSecret":"A client secret is used with your publishable key to authenticate a request for a single object. Each client secret is unique to the object it's associated with.\n","docsApp.glossary.definition.paymentIntentSecret":"The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent \u0028status, amount, currency\u0029 while hiding sensitive ones \u0028metadata, customer\u0029.\n","docsApp.glossary.term.genericClientSecret":"client secret","docsApp.glossary.term.paymentIntentSecret":"PaymentIntent client secret","docsApp.components.narrative.ComplexityCallout.ComplexityRating.API":"API","docsApp.components.narrative.ComplexityCallout.ComplexityRating.lowCode":"Low code","docsApp.components.narrative.ComplexityCallout.ComplexityRating.noCode":"No code","docsApp.components.narrative.ComplexityCallout.ComplexityRating.someCode":"Some code","docsShell.smartSearch.searchResults.menuItemBadge.deprecated":"Deprecated","docsApp.components.IntegrationCard.integrationEffort":"Integration effort","docsApp.components.contrib.groupNames.other":"Other roles","docsApp.components.contrib.roleDescriptions.topupSpecialistRole.descriptionOfWhatRoleCanDo":"This role gives access to the Top-ups feature, including creating, viewing, and updating top-ups, as well as viewing balance and payouts. Accountants or Financial employees may find this useful.","docsApp.components.contrib.roleDescriptions.topupSpecialistRole.descriptionOfWhatRoleCannotDo":"They can't access any other Stripe features.","docsApp.components.contrib.roleDescriptions.topupSpecialistRole.roleName":"Top-up Specialist","docsApp.integrationBuilder.settings.dashboardType":"Account dashboard:","docsApp.integrationBuilder.settings.lossLiabilityOwner":"Loss liability:","docsApp.integrationBuilder.settings.onboardingSurface":"Onboarding surface:","docsApp.components.ClimateProductTable.idHeader":"ID","docsApp.components.ClimateProductTable.locationsHeader":"Locations","docsApp.components.ClimateProductTable.pathwayHeader":"Pathway","docsApp.components.ClimateProductTable.pathways.biomassCarbonRemovalAndStorage":"Biomass carbon removal and storage","docsApp.components.ClimateProductTable.pathways.directAirCapture":"Direct air capture","docsApp.components.ClimateProductTable.pathways.enhancedWeathering":"Enhanced weathering","docsApp.components.ClimateProductTable.pathways.mineralization":"Mineralization","docsApp.components.ClimateProductTable.pathways.oceanAlkalinityEnhancement":"Ocean alkalinity enhancement","docsApp.components.ClimateProductTable.productHeader":"Product","docsApp.components.contrib.connectPlatformPrefs.none":"None","docsApp.financialConnectionsDemo.explore":"Explore Financial Connections","docsApp.financialConnectionsDemo.learnMore":"Learn more","docsApp.financialConnectionsDemo.newUser":"New user","docsApp.financialConnectionsDemo.tryAgain":"Try again","docsApp.components.ClimateProductTable.expectedDeliveryYearHeader":"Expected delivery year","docsApp.components.ClimateProductTable.pathways.various":"Various","docsApp.components.ClimateProductTable.pricePerMetricTonHeader":"Price per metric ton","docsApp.components.Identifier.entitlementsFeature":"Create a Feature Token with the \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsApp.financialConnectionsDemo.launchDemo":"Launch demo","docsApp.financialConnectionsDemo.newUserDescription":"Connect a new bank account","docsApp.financialConnectionsDemo.returningUser":"Returning user","docsApp.financialConnectionsDemo.returningUserDescription":"Connect an existing bank account that was previously saved with \u003Ca\u003ELink\u003C\u002Fa\u003E \u0028built by Stripe\u0029","docsApp.financialConnectionsDemo.success":"Your accounts were connected\u0021","docsApp.financialConnectionsDemo.successNextUp":"Next up, explore how you could use this information to accept ACH payments, process payouts, and build data products.","docsApp.glossary.definition.entitlement":"An entitlement represents a feature that a customer is \"entitled\" to.\n","docsApp.glossary.definition.feature":"A feature represents a monetisable ability or functionality in your system. Features can be assigned to products, and when those products are purchased, Stripe will create an entitlement to the feature for the purchasing customer.\n","docsApp.glossary.definition.nsf":"A shorthand way of referring to the Non-sufficient Funds ACH return code R01.\n","docsApp.glossary.term.entitlement":"entitlement","docsApp.glossary.term.feature":"feature","docsApp.glossary.term.nsf":"NSF","docsApp.integrationBuilder.settings.economicModel":"Monetisation:","docsShell.apiref.ElementTitle.copiedUrl":"Copied\u0021","docsShell.smartSearch.askResultSummary.unanswerable.withSources":"Sorry, I wasn't able to answer your question using the Stripe docs, but here are some results that may be helpful.","docsShell.smartSearch.askResultSummary.unanswerable.withoutSources":"Sorry, I wasn't able to answer your question using the Stripe docs.","docsApp.components.contrib.roleDescriptions.financialConnectionsSpecialistRole.descriptionOfWhatRoleCannotDo":"They can't access any other Stripe features.","docsApp.components.contrib.roleDescriptions.financialConnectionsSpecialistRole.descriptionOfWhatRoleCanDo":"This role gives edit access to the Financial Connections settings page and Financial Connections application.","docsApp.components.contrib.roleDescriptions.financialConnectionsSpecialistRole.roleName":"Financial Connections Specialist","docsApp.components.contrib.thingsRolesCanDo.activateFinancialConnections":"Apply to activate the Financial Connections product and edit that application","docsApp.components.contrib.thingsRolesCanDo.anythingBesidesConnections":"Anything not related to the Financial Connections product","docsApp.components.contrib.thingsRolesCanDo.editFinancialConnectionsSettings":"Edit the Financial Connections settings","docsApp.components.contrib.AccountTypeDescriptor.blurb":"Connected accounts have \u003CAccountTraitsLink\u003Etraits\u003C\u002FAccountTraitsLink\u003E.","docsApp.components.contrib.AccountTypeDescriptor.complianceOwner.platform":"This content applies only to Custom accounts.","docsApp.components.contrib.AccountTypeDescriptor.complianceOwner.stripe":"This content applies only to Standard and Express accounts.","docsApp.components.contrib.AccountTypeDescriptor.dashboardType.express":"This content applies only to Express accounts.","docsApp.components.contrib.AccountTypeDescriptor.dashboardType.full":"This content applies only to Standard accounts.","docsApp.components.contrib.AccountTypeDescriptor.dashboardType.none":"This content applies only to Custom accounts.","docsApp.components.contrib.AccountTypeDescriptor.lossLiability.platform":"This content applies only to Express and Custom accounts.","docsApp.components.contrib.AccountTypeDescriptor.lossLiability.stripe":"This content applies only to Standard accounts.","docsApp.components.contrib.AccountTypeDescriptor.pricingControl.platform":"This content applies only to Express and Custom accounts.","docsApp.components.contrib.AccountTypeDescriptor.pricingControl.stripe":"This content applies only to Standard accounts.","docsApp.components.contrib.AccountTypeDescriptor.title":"Account traits","docsApp.components.contrib.AccountTypeDesctiptor.complianceOwner.platform":"This content applies to connected accounts that your platform manages compliance for, which includes Custom accounts.","docsApp.components.contrib.AccountTypeDesctiptor.complianceOwner.stripe":"This content applies to connected accounts that Stripe manages compliance for, which includes Standard and Express accounts.","docsApp.components.contrib.AccountTypeDesctiptor.dashboardType.express":"This content applies to connected accounts that have access to the Express Dashboard, which includes Express accounts.","docsApp.components.contrib.AccountTypeDesctiptor.dashboardType.full":"This content applies to connected accounts that have access to the Stripe Dashboard, which includes Standard accounts.","docsApp.components.contrib.AccountTypeDesctiptor.dashboardType.none":"This content applies to connected accounts that have no dashboard access, which includes Custom accounts.","docsApp.components.contrib.AccountTypeDesctiptor.lossLiability.platform":"This content applies to connected accounts that your platform is loss liable for, which includes Express and Custom accounts.","docsApp.components.contrib.AccountTypeDesctiptor.lossLiability.stripe":"This content applies to connected accounts that Stripe is loss liable for, which includes Standard accounts.","docsApp.components.contrib.AccountTypeDesctiptor.pricingControl.platform":"This content applies to connected accounts that your platform manages pricing for, which includes Express and Custom accounts.","docsApp.components.contrib.AccountTypeDesctiptor.pricingControl.stripe":"This content applies to connected accounts that Stripe manages pricing for, which includes Standard accounts.","docsApp.components.samplesBrowser.noResults":"No sample projects matched your search.","docsApp.components.contrib.connectPlatformPrefs.apiOnboardingDisabledTooltip":"API onboarding is only available when you create Custom connected accounts.","docsApp.components.contrib.thingsRolesCanDo.viewOrEditOrRejectConnectedAccounts":"View, edit, or reject connected accounts","docsApp.components.exposedInstitutionSectionContent.emptyState.signInToView":"\u003Ca\u003ESign in\u003C\u002Fa\u003E to view Financial Connections supported institutions.","docsApp.components.contrib.connectPlatformPrefs.accountType":"Account type:","docsApp.components.contrib.connectPlatformPrefs.apiOnboarding":"API","docsApp.components.contrib.connectPlatformPrefs.custom":"Custom","docsApp.components.contrib.connectPlatformPrefs.express":"Express","docsApp.components.contrib.connectPlatformPrefs.standard":"Standard","docsApp.components.samplesBrowser.resetFilters":"Clear filters","docsApp.components.samplesBrowser.samplesBrowserCard.languages":"Languages","docsApp.components.samplesBrowser.samplesBrowserCard.platform":"Platform","docsApp.components.samplesBrowser.samplesBrowserCard.product":"Product","docsApp.components.contrib.connectPlatformPrefs.embeddedOnboardingDisabledTooltip":"Embedded onboarding is only available when you create Standard or Custom connected accounts.","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.getStarted":"Get started","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.learnMore":"Learn more","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.learnMoreOrQuickstart":"\u003CQuickstartLink\u003ETry the quickstart\u003C\u002FQuickstartLink\u003E or \u003CLearnMoreLink\u003Eread more\u003C\u002FLearnMoreLink\u003E.","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.acceptPayments":"Choose a charge type and get started with accepting payments.","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.apiOnboarding":"Create connected accounts and collect requirements using the Stripe API. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.customApiOnboarding":"Create Custom connected accounts and collect requirements using the Stripe API. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.customEmbeddedOnboarding":"Create Custom connected accounts and collect requirements by embedding the Account Onboarding component in your application. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.customHostedOnboarding":"Create Custom connected accounts and collect requirements using Stripe-hosted onboarding. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.customPayUsers":"Manage bank accounts and debit cards using Stripe Financial Connections or the Stripe API, then pay out your connected accounts.","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.defaultPayUsers":"Understand how to control bank account and debit card payouts.","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.embeddedOnboarding":"Create connected accounts and collect requirements by embedding the Account Onboarding component in your application. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.expressDashboard":"Use login links to direct your connected accounts to the Express Dashboard. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.expressHostedOnboarding":"Create Express connected accounts and collect requirements using Stripe-hosted onboarding. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.handleCompliance":"Handle ongoing changes in requirements for your connected accounts using the Stripe API. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.hostedOnboarding":"Create connected accounts and collect requirements using Stripe-hosted onboarding. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.noDashboard":"Build a dashboard yourself using the Stripe API.","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.platformManagedRisk":"Build tools and processes to manage negative balance liabilities on your connected accounts. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.standardEmbeddedOnboarding":"Create Standard connected accounts collect requirements by embedding the Account Onboarding component in your application. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.standardHostedOnboarding":"Create Standard connected accounts and collect requirements using Stripe-hosted onboarding. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.stripeDashboard":"Understand the Stripe Dashboard and control what your connected accounts can do with it.","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.stripeDashboardBranding":"\u003CLink\u003ESet up your branding\u003C\u002FLink\u003E for the Stripe Dashboard","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.stripeManagedRisk":"Understand how Stripe handles negative balance liabilities on your connected accounts. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.acceptPayments":"\u003CLink\u003EAccept a payment\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.buildAnAccountDashboard":"\u003CLink\u003EBuild an account dashboard\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.createAndOnboardAccounts":"\u003CLink\u003EUse the onboarding quickstart\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.handleCompliance":"\u003CLink\u003ECollect ongoing requirements\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.payUsers":"\u003CLink\u003EPay out users\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.platformManagedRisk":"\u003CLink\u003EUnderstand your platform’s merchant risk responsibilities\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.setUpExpressDashboard":"\u003CLink\u003ESet up the Express Dashboard for your users\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.setUpStripeDashboard":"\u003CLink\u003ESet up the Stripe Dashboard\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.stripeManagedRisk":"\u003CLink\u003EUnderstand Stripe’s merchant risk responsibilities\u003C\u002FLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.title":"Build your Connect integration","docsApp.components.samplesBrowser.results":"\n \u003Cb\u003E\n {numSamples, plural,\n =0 {No results}\n one {# result}\n other {# results}\n }\n \u003C\u002Fb\u003E\n {hasQuery, select,\n true { matching \u003Cb\u003E\"{query}\"\u003C\u002Fb\u003E}\n false {}\n other {}\n }\n {hasPlatforms, select,\n true { for \u003Cb\u003E{platforms}\u003C\u002Fb\u003E}\n false {}\n other {}\n }\n {hasLanguages, select,\n true { written in \u003Cb\u003E{languages}\u003C\u002Fb\u003E}\n false {}\n other {}\n }\n {hasProducts, select,\n true { using \u003Cb\u003E{products}\u003C\u002Fb\u003E}\n false {}\n other {}\n }\n ","docsApp.components.samplesBrowser.searchbar.placeholder":"Search {numSamples, plural, =0 {0 sample projects} one {# sample project} other {# sample projects}}...","docsApp.tax_code_details.txcd_11010099.description":"A subscription service providing digital audio programming to a large area via communications satellites \u0028CUSTOM\u0029.","docsApp.tax_code_details.txcd_11010099.name":"\u0028CUSTOM\u0029 Satellite Radio","docsApp.tax_id_types.no_voec.description":"Norwegian VAT on e-commerce number","docsShell.verificationDocuments.relationshipTab.CaNonProfitDirectorship":"Additional forms of \u003CBoldText\u003Edirectorship\u003C\u002FBoldText\u003E verification for \u003CBoldText\u003Enon-profit organisations\u003C\u002FBoldText\u003E:","docsApp.components.contrib.AccountTypeDescriptor.isControlled.false":"This content applies to Standard connected accounts without platform controls.","docsApp.components.contrib.AccountTypeDescriptor.isControlled.true":"This content applies to Custom and Express accounts, and Standard accounts with platform controls enabled.","docsApp.components.contrib.AccountTypeDesctiptor.isControlled.false":"This content applies to Standard connected accounts without platform controls.","docsApp.components.contrib.AccountTypeDesctiptor.isControlled.true":"This content applies to connected accounts that your platform controls, which includes Custom and Express accounts, and Standard accounts with platform controls enabled.","docsApp.components.contrib.connectPlatformPrefs.buyrate":"Your platform","docsApp.components.contrib.connectPlatformPrefs.economicModel":"Who pays fees:","docsApp.components.contrib.connectPlatformPrefs.economicModelDisabledTooltip":"You can configure monetisation of payments only when connected accounts don't use a Stripe-hosted dashboard and Stripe is liable for negative account balances.","docsApp.components.contrib.connectPlatformPrefs.hostedDashboardsDisabledTooltip":"If you use API onboarding, your connected accounts cannot use a Stripe-hosted dashboard.","docsApp.components.contrib.connectPlatformPrefs.noDashboardsDisabledTooltip":"If your connected accounts use hosted onboarding, they have access to the Stripe Dashboard. You can still use embedded components in your app.","docsApp.components.contrib.connectPlatformPrefs.platformOwnedLossLiabilityDisabledForNoDashboardTooltip":"If your connected accounts use embedded onboarding and embedded dashboard components, Stripe must be liable for negative account balances.","docsApp.components.contrib.connectPlatformPrefs.platformOwnedLossLiabilityDisabledForStandardDashboardTooltip":"When your connected accounts use the Stripe Dashboard, your platform cannot be liable for negative account balances.","docsApp.components.contrib.connectPlatformPrefs.revshare":"Your connected accounts","docsApp.components.contrib.connectPlatformPrefs.stripeOwnedLossLiabilityDisabledForAPIOnboardingTooltip":"If your connected accounts use API onboarding, your platform must be liable for negative account balances.","docsApp.components.contrib.connectPlatformPrefs.stripeOwnedLossLiabilityDisabledForExpressDashboardTooltip":"If your connected accounts use the Express Dashboard, your platform must be liable for negative account balances.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.title":"Account types","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.documents":"Documents","docsApp.components.contrib.AccountTypeDescriptor.withTraits.blurb":"Connected accounts can be \u003CAccountTraitsLink\u003Econfigured with properties\u003C\u002FAccountTraitsLink\u003E that determine how the account will behave. Account types can be mapped to their corresponding properties.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.title":"Account properties","docsApp.components.contrib.AccountTypeDescriptor.withTypes.blurb":"Connect platforms can work with three different \u003CAccountTypeLink\u003Eaccount types\u003C\u002FAccountTypeLink\u003E.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.complianceOwner.platform":"This content applies only to Custom accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.complianceOwner.stripe":"This content applies only to Standard and Express accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.dashboardType.express":"This content applies only to Express accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.dashboardType.full":"This content applies only to Standard accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.dashboardType.none":"This content applies only to Custom accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.isControlled.false":"This content applies to Standard connected accounts without \u003CPlatformControlsLink\u003Eplatform controls\u003C\u002FPlatformControlsLink\u003E enabled.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.isControlled.true":"This content applies to Custom and Express accounts, and Standard accounts with \u003CPlatformControlsLink\u003Eplatform controls\u003C\u002FPlatformControlsLink\u003E enabled.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.lossLiability.platform":"This content applies only to Express and Custom accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.lossLiability.stripe":"This content applies only to Standard accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.pricingControl.platform":"This content applies only to Express and Custom accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTypes.pricingControl.stripe":"This content applies only to Standard accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.complianceOwner.platform":"This content applies to connected accounts that your platform manages compliance for, which includes Custom accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.complianceOwner.stripe":"This content applies to connected accounts that Stripe manages compliance for, which includes Standard and Express accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.dashboardType.express":"This content applies to connected accounts that have access to the Express Dashboard, which includes Express accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.dashboardType.full":"This content applies to connected accounts that have access to the Stripe Dashboard, which includes Standard accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.dashboardType.none":"This content applies to connected accounts that have no dashboard access, which includes Custom accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.isControlled.false":"This content applies to Standard connected accounts without platform controls.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.isControlled.true":"This content applies to connected accounts that your platform controls, which includes Custom and Express accounts, and Standard accounts with platform controls enabled.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.lossLiability.platform":"This content applies to connected accounts that your platform is loss liable for, which includes Express and Custom accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.lossLiability.stripe":"This content applies to connected accounts that Stripe is loss liable for, which includes Standard accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.pricingControl.platform":"This content applies to connected accounts that your platform manages pricing for, which includes Express and Custom accounts.","docsApp.components.contrib.AccountTypeDesctiptor.withTraits.pricingControl.stripe":"This content applies to connected accounts that Stripe manages pricing for, which includes Standard accounts.","docsApp.components.contrib.connectPlatformPrefs.buyRateDisabledTooltip":"Your platform can only pay Stripe fees when your connected accounts do not use the Stripe Dashboard.","docsApp.components.contrib.connectPlatformPrefs.chargeType":"Charge type:","docsApp.components.contrib.connectPlatformPrefs.dashboardAccess":"Dashboard access:","docsApp.components.contrib.connectPlatformPrefs.destination":"Destination","docsApp.components.contrib.connectPlatformPrefs.direct":"Direct","docsApp.components.contrib.connectPlatformPrefs.negativeBalanceLiability":"Negative balance liability:","docsApp.components.contrib.connectPlatformPrefs.revshareDisabledForStripeDashboardPlatformLiableTooltip":"If your connected accounts use the Stripe Dashboard and your platform is liable for negative balances, Stripe fees must be collected from your platform account.","docsApp.components.contrib.connectPlatformPrefs.revshareDisabledTooltip":"Your connected accounts can only pay Stripe fees when Stripe is liable for negative account balances.","docsApp.components.contrib.connectPlatformPrefs.separateChargesAndTransfers":"Separate charges and transfers","docsShell.verificationDocuments.bankAccountTab":"Bank Account Documents","docsShell.verificationDocuments.bankAccountTab.title":"Acceptable forms of bank account ownership verification:","docsApp.glossary.term.legacyCheckout":"Legacy Checkout","docsApp.components.contrib.thingsRolesCanDo.viewFinancialReports":"View and download financial reports","docsApp.glossary.definition.legacyCheckout":"A modal to collect card details.\n","docsShell.smartSearch.ask.title":"Ask AI Assistant","docsApp.components.contrib.connectPlatformPrefs.noDirectChargesWithExpressTooltip":"If your connected accounts use the Express Stripe Dashboard, Stripe strongly recommends using destination charges or separate charges and transfers.","docsApp.components.contrib.connectPlatformPrefs.onlyDirectChargesForStripeDashboardTooltip":"If your connected accounts use the full Stripe Dashboard, Stripe strongly recommends using direct charges.","docsApp.components.contrib.connectPlatformPrefs.revshareDisabledDueToApiOnboardingTooltip":"Your platform must pay Stripe fees if you use API onboarding.","docsApp.components.contrib.connectPlatformPrefs.stripeOwnedLossLiabilityDisabledForNonDirectChargesTooltip":"If you use destination charges or separate charges and transfers, your platform must be liable for negative account balances.","docsShell.smartSearch.exampleSnippet.title":"Code example","docsShell.apiref.merchantSelector.switchAccount":"Switch account","docsApp.components.contrib.connectPlatformPrefs.platformOwnedLossLiabilityDisabledForNoDashboardAndRevshareTooltip":"If your connected accounts don't use a Stripe-provided dashboard and they pay Stripe fees themselves, Stripe must be liable for negative account balances.","docsApp.components.contrib.connectPlatformPrefs.revshareDisabledDueToDestinationChargesTooltip":"Your platform must pay Stripe fees if you use destination charges.","docsApp.components.contrib.connectPlatformPrefs.revshareDisabledDueToSeparateChargesAndTransfersTooltip":"Your platform must pay Stripe fees if you use separate charges and transfers.","docsApp.components.contrib.connectPlatformPrefs.revshareDisabledTooltipDueToExpressDashboardTooltip":"Your platform must pay Stripe fees if your connected accounts use the Express Dashboard.","docsApp.components.narrative.contrib.ConnectTaskList.chargeType":"Charge type","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.acceptPaymentsDestinationCharges":"Create destination charges and collect revenue using application fees. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.acceptPaymentsDirectCharges":"Create direct charges. Your connected accounts will pay Stripe fees. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.acceptPaymentsDirectChargesBuyRate":"Create direct charges. Your platform will pay Stripe fees and can collect revenue using application fees. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.acceptPaymentsSeparateChargesAndTransfers":"Create charges and split them between multiple connected accounts. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.dashboardAccess":"Dashboard access","docsApp.components.narrative.contrib.ConnectTaskList.economicModel":"Who pays Stripe fees","docsApp.components.narrative.contrib.ConnectTaskList.lossLiabilityOwner":"Negative balance liability","docsApp.components.narrative.contrib.ConnectTaskList.onboarding":"Onboarding","docsApp.components.narrative.contrib.ConnectTaskList.revert":"Reset","docsApp.components.narrative.contrib.ConnectTaskList.title":"Properties","docsApp.components.narrative.contrib.ConnectTaskList.tooltip":"Reset your choices to the values that you chose when onboarding to Connect.","docsApp.glossary.definition.connectedAccount":"A person or business accepting payments or receiving payouts on a Connect platform.\n","docsApp.glossary.definition.connectedAccountOnboarding":"Platforms onboard connected accounts to a Stripe account using a hosted onboarding flow, an embedded onboarding flow, or a custom onboarding flow that they build using the API.\n","docsApp.glossary.definition.dashboardAccess":"Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API.\n","docsApp.glossary.definition.negativeBalanceLiability":"The responsibility for managing risk and recovering negative balances on connected accounts. Stripe or the Connect platform can be liable for negative balances on connected accounts.\n","docsApp.glossary.definition.requirementCollection":"The responsibility for collecting required information from connected accounts to keep their Stripe accounts active. Stripe or the Connect platform can be responsible for requirement collection.\n","docsApp.glossary.definition.stripeFeeCollection":"In a Connect implementation, Stripe collects Stripe fees either from the platform account or from the platform's connected accounts.\n","docsApp.glossary.term.connectedAccount":"connected account","docsApp.glossary.term.connectedAccountOnboarding":"connected account onboarding","docsApp.glossary.term.dashboardAccess":"dashboard access","docsApp.glossary.term.negativeBalanceLiability":"negative balance liability","docsApp.glossary.term.requirementCollection":"requirement collection","docsApp.glossary.term.stripeFeeCollection":"Stripe fee collection","docsShell.apiref.merchantSelector.currentAccount":"Current account","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.financialAccount":"Financial account","docsApp.components.contrib.roleDescriptions.connectRiskAnalyst.descriptionOfWhatRoleCanDo":"This role is for people who need to manage risk on connected accounts and take actions such as pausing payments and payouts.","docsApp.components.contrib.roleDescriptions.connectRiskAnalyst.descriptionOfWhatRoleCannotDo":"They can't do anything on the platform account except view and edit connected accounts and their capabilities.","docsApp.components.contrib.roleDescriptions.connectRiskAnalyst.roleName":"Connect Risk Analyst","docsApp.components.contrib.thingsRolesCanDo.pausePayments":"Pause a connected account's payments","docsApp.components.contrib.thingsRolesCanDo.pausePayouts":"Pause a connected account's payouts","docsApp.components.narrative.contrib.ConnectTaskList.soldOnlyCta":"Request access","docsApp.components.narrative.contrib.ConnectTaskList.soldOnlyNote":"Contact Stripe Sales to learn more and evaluate if this is a good fit for your use case.","docsApp.connect.automaticPayments.form.selectOptionLabelExpressDashboard":"Express","docsApp.connect.automaticPayments.form.selectOptionLabelFullDashboard":"Stripe","docsApp.connect.automaticPayments.form.selectOptionLabelNoDashboard":"None","docsApp.components.contrib.AccountTypeDescriptor.withTraits.complianceOwner.platform":"This content applies to connected accounts when you're responsible for collecting updated information when requirements are due or change. This includes \u003CStrong\u003ECustom\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.complianceOwner.stripe":"This content applies to connected accounts when Stripe is responsible for collecting updated information when requirements are due or change. This includes \u003CStrong\u003EStandard\u003C\u002FStrong\u003E and \u003CStrong\u003EExpress\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.dashboardType.express":"This content applies to connected accounts that have Express Dashboard access. This includes \u003CStrong\u003EExpress\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.dashboardType.full":"This content applies to connected accounts that have full Stripe Dashboard access. This includes \u003CStrong\u003EStandard\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.dashboardType.none":"This content applies to connected accounts that have no dashboard access. This includes \u003CStrong\u003ECustom\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.isControlled.false":"This content applies to connected accounts that your platform doesn't control. This includes \u003CStrong\u003EStandard\u003C\u002FStrong\u003E accounts without \u003CPlatformControlsLink\u003Eplatform controls\u003C\u002FPlatformControlsLink\u003E enabled.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.isControlled.true":"This content applies to connected accounts that your platform controls. This includes \u003CStrong\u003ECustom\u003C\u002FStrong\u003E and \u003CStrong\u003EExpress\u003C\u002FStrong\u003E accounts, and \u003CStrong\u003EStandard\u003C\u002FStrong\u003E accounts with \u003CPlatformControlsLink\u003Eplatform controls\u003C\u002FPlatformControlsLink\u003E enabled.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.lossLiability.platform":"This content applies to connected accounts that you're liable for if they can't pay back negative balances. This includes \u003CStrong\u003ECustom\u003C\u002FStrong\u003E and \u003CStrong\u003EExpress\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.lossLiability.stripe":"This content applies to connected accounts that you're not liable for if they can't pay back negative balance. This includes \u003CStrong\u003EStandard\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.pricingControl.platform":"This content applies to connected accounts when Stripe collected Stripe fees from you. This includes \u003CStrong\u003ECustom\u003C\u002FStrong\u003E and \u003CStrong\u003EExpress\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.AccountTypeDescriptor.withTraits.pricingControl.stripe":"This content applies to connected accounts when Stripe collects Stripe fees directly from them. This includes \u003CStrong\u003EStandard\u003C\u002FStrong\u003E accounts.","docsApp.components.contrib.connectPlatformPrefs.buyRateDisabledForDirectChargesTooltip":"If you use direct charges, your platform cannot pay Stripe fees.","docsApp.components.contrib.connectPlatformPrefs.directChargesDisabledForNoDashboardTooltip":"If your connected accounts don't use a Stripe-hosted dashboard, you shouldn't use direct charges.","docsApp.components.contrib.connectPlatformPrefs.directChargesDisabledForNoDashboardUnlessEmbeddedOnboardingTooltip":"If your connected accounts don't use embedded onboarding and don't use a Stripe-hosted dashboard, you cannot use direct charges.","docsApp.components.contrib.connectPlatformPrefs.noDashboardDisabledUnlessApiOnboardingTooltip":"If your connected accounts use hosted or embedded onboarding, they must use a Stripe-hosted Dashboard.","docsApp.components.contrib.connectPlatformPrefs.onlyDirectChargesForNoDashboardWithEmbeddedOnboarding":"If your connected accounts don't use a Stripe-hosted dashboard and you don't use API onboarding, you must use direct charges.","docsApp.components.contrib.connectPlatformPrefs.platformOwnedLossLiabilityDisabledForEmbeddedOnboardingAndNoDashboardTooltip":"If your connected accounts use embedded onboarding and don't use a Stripe-hosted dashboard, your platform cannot be liable for negative account balances.","docsApp.components.contrib.connectPlatformPrefs.platformOwnedLossLiabilityDisabledForStandardDashboardRevshareTooltip":"If your connected accounts use the Stripe Dashboard and pay Stripe fees, your platform cannot be liable for negative account balances.","docsApp.components.narrative.contrib.ConnectPlatformPrefs.PrefSelector.callout":"You selected {valFromOnboarding} when onboarding to Connect.","docsApp.components.narrative.contrib.ConnectPlatformPrefs.PrefSelector.calloutCta":"Review","docsApp.components.narrative.contrib.ConnectPlatformPrefs.PrefSelector.calloutWithComplianceAck":"You selected {valFromOnboarding} when onboarding to Connect. To use API onboarding, review and acknowledge your responsibility to collect updated information when requirements are due or change.","docsApp.components.narrative.contrib.ConnectPlatformPrefs.PrefSelector.calloutWithLossLiabilityAck":"You selected {valFromOnboarding} when onboarding to Connect. To change your selection, review and acknowledge your responsibility when you are liable if your connected accounts can't pay back negative balances.","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.financialAccountTransactions":"Financial account transactions","docsApp.connect.automaticPayments.form.dashboardTypeRowLabel":"Dashboard access:","docsApp.demo.expressCheckoutElement.country.au":"Australia","docsApp.demo.expressCheckoutElement.country.ca":"Canada","docsApp.demo.expressCheckoutElement.country.de":"Germany","docsApp.demo.expressCheckoutElement.country.fr":"France","docsApp.demo.expressCheckoutElement.country.gb":"United Kingdom","docsApp.demo.expressCheckoutElement.country.jp":"Japan","docsApp.demo.expressCheckoutElement.country.us":"United States","docsApp.demo.expressCheckoutElement.label.merchantCountry":"Merchant Country","docsApp.components.Identifier.productFeature":"Identifier of a Product Feature created using the \u003Ca1\u003EAPI\u003C\u002Fa1\u003E by attaching a Feature to a Product.","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.readOnlyNote":"This demo is read-only. Write operations \u0028such as performing a refund or saving account information\u0029 are not supported for this demo.","docsApp.tax_id_types.bh_vat.description":"Bahraini VAT Number","docsApp.tax_id_types.kz_bin.description":"Kazakhstani Business Identification Number","docsApp.tax_id_types.ng_tin.description":"Nigerian Tax Identification Number","docsApp.tax_id_types.om_vat.description":"Omani VAT Number","docsShell.mobileCreateAccountOrSignIn.label":"\u003CCreateAccount\u003ECreate account\u003C\u002FCreateAccount\u003E or \u003CSignIn\u003ESign in\u003C\u002FSignIn\u003E","docsApp.components.narrative.contrib.FeesPayerProductTable.billableMerchant.connectedAccount":"Connected Account","docsApp.components.narrative.contrib.FeesPayerProductTable.billableMerchant.invalid":"Invalid","docsApp.components.narrative.contrib.FeesPayerProductTable.billableMerchant.platform":"Platform","docsApp.components.narrative.contrib.FeesPayerProductTable.billableMerchant.unavailable":"Unavailable","docsApp.components.narrative.contrib.FeesPayerProductTable.billableMerchant.varies":"Varies","docsApp.components.narrative.contrib.FeesPayerProductTable.headerCells.account":"account","docsApp.components.narrative.contrib.FeesPayerProductTable.headerCells.productCategory":"Product Category","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.taxRegistrations":"Tax registrations","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.taxSettings":"Tax settings","docsShell.stripeApps.pageSelector.version":"SDK version","docsApp.components.supportResources.aiTitle":"AI Assistant","docsApp.components.supportResources.devResourcesTitle":"Developer resources","docsApp.components.supportResources.guidesTitle":"Guides","docsApp.components.supportResources.supportTitle":"Support site","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.balances":"Balances","docsApp.demo.expressCheckoutElement.amazonPaypalCaption":"Amazon Pay and Paypal are only displayed if they are available in the selected business country.","docsApp.demo.expressCheckoutElement.dropdown.body":"Only a subset of available merchant countries is shown here.","docsApp.demo.expressCheckoutElement.dropdown.merchantCountry":"The Express Checkout Element is available in any country where \u003Ca\u003Esupported payment methods are available.\u003C\u002Fa\u003E","docsApp.components.narrative.contrib.ConnectTaskList.longFormMessage":"Your choices don't match what you chose when onboarding to Connect.","docsApp.components.narrative.contrib.FeesPayerProductTable.headerCells.application":"application","docsApp.components.narrative.contrib.FeesPayerProductTable.headerCells.applicationCustom":"application_custom","docsApp.components.narrative.contrib.FeesPayerProductTable.headerCells.applicationExpress":"application_express","docsApp.components.narrative.contrib.FeesPayerProductTable.headerCells.applicationUnifiedAccountsBeta":"application_unified_accounts_beta","docsApp.components.narrative.contrib.FeesPayerProductTable.headerCells.feesPayerValue":"fees_payer_value","docsApp.components.supportResources.aiBody":"Ask questions in the Docs search bar and get answers instantly.","docsApp.components.supportResources.devResourcesBody":"Sign up for the newsletter, follow Stripe on X, or chat with the community on the official Discord.","docsApp.components.supportResources.guidesBody":"Explore insights to inform business decisions on everything from global payments to scaling a team.","docsApp.components.supportResources.partnerBody":"Get expert help from certified service partners or use pre-built integrations from technology partners.","docsApp.components.supportResources.partnerTitle":"Partner directory","docsApp.components.supportResources.supportBody":"Learn the answers to common account questions and get troubleshooting tips and tricks.","docsApp.components.supportResources.watchYoutube":"Watch tutorials, discover new features, and hear customer stories.","docsApp.components.supportResources.youtube":"YouTube resources","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.payoutsList":"Payouts list","docsShell.stripeApps.pageSelector.releaseChannel":"Release channel","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.embeddedNoDashboard":"Build a dashboard yourself using the Stripe API or use embedded components. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepDescriptionMessages.embeddedStripeManagedRisk":"Integrate required embedded components to enable Stripe to handle negative balance liabilities on your connected accounts. \u003CLearnMoreLink\u003ELearn more\u003C\u002FLearnMoreLink\u003E","docsApp.components.narrative.contrib.ConnectTaskList.connectPath.stepTitleMessages.embeddedStripeManagedRisk":"\u003CLink\u003EEnable Stripe to handle merchant risk responsibilities\u003C\u002FLink\u003E","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.capitalOverview":"Capital overview","docsShell.footer.joinStripeInsiders":"Join our \u003Ca\u003Eearly access programme\u003C\u002Fa\u003E.","docsApp.glossary.definition.aft":"Account Funding Transactions \u0028AFT\u0029 are card-based transactions where funds are simply transferred from one account to another.\n","docsApp.glossary.term.aft":"AFT","docsApp.components.ClimateProductTable.pathways.directOceanRemoval":"Direct ocean removal","docsApp.components.ClimateProductTable.pathways.storage":"Storage","docsApp.demo.dynamicPaymentMethods.label.customerLocation":"Customer location","docsApp.demo.dynamicPaymentMethods.label.paymentMethod":"Payment Methods","docsApp.demo.dynamicPaymentMethods.title.paymentMethods":"Payment Methods","docsApp.demo.dynamicPaymentMethods.body.customerLocation":"The Payment Element supports 135\u002B currencies. Only a sample is shown here. Stripe automatically reorders payment methods to increase potential conversion.","docsApp.demo.dynamicPaymentMethods.title.customerLocation":"Every country pays differently","docsShell.V2AccountSwitcher.testMode":"Test mode","docsShell.V2AccountSwitcher.testMode.legacy":"Legacy","docsApp.connectRequiredInfo.dashboardTypeSelectorLabel":"Dashboard Type","docsApp.connectRequiredInfo.dashboardTypeSelectorTooltip":"The Stripe-hosted Dashboard that connected accounts can access.","docsApp.components.supportResources.appsTitle":"Stripe Apps","docsApp.components.supportResources.appsBody":"Connect your business tools, such as customer management and accounting systems, to Stripe.","docsShell.AccountPicker.SandboxMenu.switch":"Switch","docsShell.AccountPicker.newBusiness":"New business","docsShell.AccountPicker.testMode":"Test mode","docsShell.AccountPicker.testMode.legacy":"Legacy","docsShell.AccountPicker.LivemodeCompartmentMenu.selectLiveAccount":"Select a live account","docsShell.AccountPicker.newSandbox":"New sandbox","docsShell.AccountPicker.openDashboard":"Open Dashboard","docsShell.AccountPicker.selected":"Selected","docsApp.components.contrib.groupNames.sandboxes":"Sandboxes roles","docsApp.components.contrib.roleDescriptions.sandboxUser.descriptionOfWhatRoleCanDo":"This role is for people who only need to create and manage sandboxes for testing purposes.","docsApp.components.contrib.roleDescriptions.sandboxUser.descriptionOfWhatRoleCannotDo":"They can't view or make changes to anything in your live account.","docsApp.components.contrib.roleDescriptions.sandboxUser.roleName":"Sandbox User","docsApp.components.contrib.thingsRolesCanDo.createSandboxes":"Create sandboxes","docsApp.components.contrib.thingsRolesCanDo.createViewRefundPaymentsSandboxesTheyHaveCreated":"Create, view, and refund payments in sandboxes they have created","docsApp.components.contrib.thingsRolesCanDo.inviteEditRemoveTeamMembersSandboxesTheyHaveCreated":"Invite, edit, and remove team members from sandboxes they have created","docsApp.components.contrib.thingsRolesCanDo.viewModifyDeleteSandboxesTheyHaveCreated":"View, modify, and delete sandboxes they have created","docsApp.demo.paymentElement.body.appearanceApiLink":"Appearance API","docsShell.verificationDocuments.jpCallout":"A Japanese government-issued identification document is always required for account representatives.","docsShell.AccountPicker.errorLoadingMerchantsTryAgain":"Try again","docsShell.rightPane.quickActions.createInvoice":"Create invoice","docsShell.rightPane.quickActions.label":"Quick actions","docsShell.integrationBuilder.featureList.error":"An unexpected error occurred. Please try again.","docsApp.components.contrib.roleDescriptions.supportCommunications.roleName":"Support Communications","docsShell.integrationBuilder.featureList.create":"Create test feature","docsShell.integrationBuilder.featureList.featureList":"Existing features of {product}","docsShell.integrationBuilder.featureList.featureName":"New feature name","docsShell.integrationBuilder.featureList.featureNamePlaceHolder":"Example: Unlimited SMS.","docsShell.integrationBuilder.featureList.featureNameTooLong":"The feature name must be 50 characters or fewer.","docsShell.integrationBuilder.featureList.nameEmpty":"The feature name cannot be empty.","docsShell.integrationBuilder.featureList.selectProductDescription":"Create or select a product before adding a feature.","docsShell.stripeApps.example.missingComponentExample":"Component example not found.","docsShell.stripeApps.pageSelector.unstableVersionWarning":"This version of the SDK is a pre-release and can be unstable. Avoid using this version unless it's necessary for your integration.","docsApp.glossary.definition.ivCryptography":"The initialisation vector \u0028IV\u0029 is a cryptographically-secure generated random value that enhances encryption security and ensures that unique ciphertexts are produced for the same message.\n","docsApp.glossary.definition.tlv":"TLV \u0028sometimes called BER-TLV\u0029 stands for basic encoding rules-tag length value, and is a data encoding scheme used in payment processing systems.\n","docsApp.glossary.definition.tr31Keyblock":"TR-31 key blocks are standardised data structures that securely encapsulate cryptographic keys, enabling their reliable exchange and management across diverse systems and applications. They consist of a header, key component, and optional additional information such as key usage, expiration, and other metadata.\n","docsApp.glossary.definition.track2":"Track 2 data is a numerical format that contains information necessary for processing in-person card transactions. The data consists of the primary account number \u0028PAN\u0029 and the card expiry date, along with issuer-specific data.\n","docsApp.glossary.term.ivCryptography":"IV","docsApp.glossary.term.tlv":"TLV","docsApp.glossary.term.tr31Keyblock":"TR 31 KeyBlock","docsApp.glossary.term.track2":"Track 2","docsShell.AccountPicker.errorLoadingMerchants":"Something went wrong when loading your merchants.","docsShell.AccountSwitcher.openDashboard":"Open dashboard","docsShell.HomePage.utilityCard.apiKeys.noAccess":"You do not have permission to view API keys.","docsApp.components.Identifier.platformCustomer":"The customer of the platform making the request.","docsApp.components.contrib.roleDescriptions.supportCommunications.descriptionOfWhatRoleCanDo":"This role is for people who need to authenticate email support cases, use Support Centre to view and respond to support cases, or share files securely with Stripe.","docsApp.components.contrib.roleDescriptions.supportCommunications.descriptionOfWhatRoleCannotDo":"They can’t access financial information, transfer funds, access or edit connected accounts, or edit any account and product settings.","docsApp.components.contrib.roleDescriptions.supportCommunications.shortDescription":"Can access Support Centre","docsApp.glossary.definition.ucc1":"A publicly available notice filed by a creditor that secures the creditor's interest in certain assets of a debtor. Creditors file UCC-1 statements with the Secretary of State where a business debtor is incorporated at the time a loan first originates.\n","docsApp.glossary.term.ucc1":"ucc-1","docsApp.tax_id_types.de_stn.description":"German Tax Number \u0028Steuernummer\u0029","docsShell.AccountPicker.genericError":"Something went wrong. Click to retry, or refresh the page.","docsShell.verificationDocuments.registrationStatusTab":"Registration Documents","docsShell.verificationDocuments.registrationStatusTab.CaNonProfitRegisteredCharityCompanyRegistrationCertificate":"Acceptable forms of registration status verification for \u003CBoldText\u003Eregistered charities\u003C\u002FBoldText\u003E:","docsShell.verificationDocuments.registrationStatusTab.all":"Acceptable forms of registration status verification for \u003CBoldText\u003Eall legal entity types\u003C\u002FBoldText\u003E:","docsShell.verificationDocuments.registrationStatusTab.default":"Acceptable forms of registration status verification:","docsShell.verificationDocuments.sgUboLoaExtraMessage":"download a template \u003CSGLOATemplate\u003Ehere\u003C\u002FSGLOATemplate\u003E.","docsShell.AccountPicker.LivemodeCompartmentMenu.selectAccount":"Select an account","docsShell.AccountPicker.organization":"Organisation","docsShell.AccountPicker.noAccessibleSandboxes":"Visit \u003Ca\u003EDashboard\u003C\u002Fa\u003E to create a sandbox.","docsApp.tax_id_types.ch_uid.description":"Switzerland UID number","docsShell.verificationDocuments.expirationPolicy.3months":"dated within 3 months","docsShell.HomePage.TestMode.CommandOptions.learnMore.stripeTax":"Learn more about Stripe Tax","docsShell.AccountPicker.sandboxOrganization":"Sandbox Organisation","docsApp.components.Identifier.taxCalculation":"Calculate tax with \u003Ca\u003EAPI\u003C\u002Fa\u003E before making this request.","docsShell.CodeBlockDropdownSelector.resources":"Resources","docsShell.CodeBlockDropdownSelector.selectLanguage":"Select a language","docsShell.CodeBlockDropdownSelector.services":"Services","docsApp.glossary.term.mrr":"MRR","docsApp.glossary.definition.mrr":"Monthly Recurring Revenue, the total predictable monthly revenue from subscriptions.\n","docsApp.glossary.definition.aesCbc":"Advanced Encryption Standard-Cipher Block Chaining \u0028AES-CBC\u0029 mode is a block cipher technique that encrypts data blocks by chaining each block to the previous ciphertext block.\n","docsApp.glossary.definition.aesEcb":"Advanced Encryption Standard-Electronic Codebook \u0028AES-ECB\u0029 mode is a simple block cipher technique where each data block is encrypted independently without chaining.\n","docsApp.glossary.definition.quickChipEmv":"Quick Chip is a contact EMV transaction process, designed to expedite transaction times and allows the removal of the card before the transaction response is validated against the chip, through the second generate application cryptogram. This is only available in the US through most major card networks.\n","docsApp.glossary.definition.standardEmv":"Standard EMV, or Full EMV flow, is a contact EMV transaction process that requires the card to remain inserted throughout the online authorisation, with the transaction only being captured after the EMV chip validates the authorisation and provides a second application cryptogram. If this validation fails, the transaction is reversed.\n","docsApp.glossary.term.aesCbc":"AES-CBC","docsApp.glossary.term.aesEcb":"AES-ECB","docsApp.glossary.term.quickChipEmv":"Quick Chip EMV","docsApp.glossary.term.standardEmv":"Standard EMV","docsApp.components.changesetChanges.added":"Added","docsApp.components.changesetUpgrade.or":"or","docsApp.components.changelogBrowser.searchbar.placeholder":"Search...","docsApp.components.changesetChanges.removed":"Removed","docsApp.components.changesetChanges.backported":"Backported","docsApp.components.changesetChanges.changed":"Changed","docsApp.components.changesetRelatedRequests.workbenchLink":"View logs in Workbench","docsApp.components.changesetUpgrade.bothGuides":"Explore our interactive guide in Workbench or follow our step-by-step instructions for easy upgrades.","docsApp.components.changesetUpgrade.upgradeGuideCTA":"Follow an upgrade guide","docsApp.components.changesetUpgrade.upgradeGuideOnly":"Follow our step-by-step instructions for easy upgrades.","docsApp.components.changesetUpgrade.workbenchOnly":"Explore our interactive guide in Workbench for easy upgrades.","docsApp.components.changesetUpgrade.workbenchUpgradeCTA":"Upgrade in Workbench","docsApp.tax_code_details.txcd_10701401.description":"An online service furnishing information to customers, including online search and data comparison. This PTC involves the customer using an SaaS programme to access the information content.  This offering is intended for personal use, rather than for use by a commercial enterprise.  Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10701401.name":"Website Information Services – Personal Use","docsApp.tax_code_details.txcd_10701410.description":"The furnishing of information of any kind by electronic means. This PTC does not involve the customer using an SaaS programme to access the information content. This offering is intended for use by a commercial enterprise. Note: The distinction between business use and personal use for this PTC is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10701410.name":"Electronically Delivered Information Services – Business Use","docsApp.tax_code_details.txcd_10701411.description":"The furnishing of information of any kind by electronic means. This PTC does not involve the customer using an SaaS programme to access the information content. This offering is intended for personal use, rather than for use by a commercial enterprise. Note: The distinction between business use and personal use for this product tax category is relevant only if you have sales in the US.","docsApp.tax_code_details.txcd_10701411.name":"Electronically Delivered Information Services – Personal Use","docsApp.components.changelogBrowser.breaking":"Breaking changes","docsApp.glossary.definition.testHelper":"Test helpers are test-only API endpoints that allow you to simulate actions that happen outside of Stripe's API, like funding balances or advancing time.","docsApp.glossary.term.testHelper":"test helper","docsShell.apiref.section.v2.description":"Endpoints within the \u002Fv2 namespace have different behaviour than \u002Fv1 endpoints.","docsShell.apiref.section.v2.linktext":"Learn more about calling API v2 endpoints.","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.readOnlyWithDemo":"This demo is read-only with limited functionality. Visit \u003CLink\u003Efurever.dev\u003C\u002FLink\u003E for a fully functional demo.","docsApp.glossary.definition.onDemand":"When a customer stores their payment method with a business, they can make on-demand future purchases without re-authenticating, such as ordering a ride in their ride-share app.\n","docsApp.glossary.term.onDemand":"on-demand payment","docsApp.components.samplesBrowser.samplesBrowserCard.samples.github":"View in GitHub","docsApp.components.samplesBrowser.samplesBrowserCard.samples.noVscode":"Not available in VS Code","docsApp.components.samplesBrowser.samplesBrowserCard.samples.vscode":"Open in VS Code","docsApp.components.samplesBrowser.samplesBrowserCard.samples.vscodeTooltip":"Clone locally \u0028prompts to install the Stripe VS Code extension if not already available\u0029","docsShell.bankAccount.usCallout":"Documents must be less than 1 year old in order to be considered valid for bank account verification.","docsShell.payoutSettlementCurrencies.domesticUsAcpCallout":"Payouts in these currencies to bank accounts in the US are currently in beta. \u003Ca\u003EPlease contact us\u003C\u002Fa\u003E if you are interested in this feature.","docsApp.tax_id_types.hr_oib.description":"Croatian Personal Identification Number","docsShell.AccountPicker.failedToLoadAccountPicker":"Could not load account data. Click to retry, or refresh the page.","docsShell.navigation.relatedProducts":"Related Products","docsApp.components.IssuingRegulatoryReportingTable.description":"Description","docsApp.components.IssuingRegulatoryReportingTable.example":"Example","docsApp.components.IssuingRegulatoryReportingTable.status":"Status","docsApp.components.IssuingRegulatoryReportingTable.type":"Type","docsApp.components.narrative.productGrid.crypto":"Crypto","docsApp.components.changelogBrowser.noResultsFound":"No results found","docsApp.components.IssuingRegulatoryReportingTable.reportingField":"Reporting Field","docsApp.compontents.IssuingRegulatoryReportingTable.noFields":"Looks like your platform is not configured to require additional regulatory reporting. If this is a mistake, please contact support.","docsShell.sepaTestAccountTable.chargeExceedsTransactionLimit":"The payment fails with a \u003CInlineCode\u003Echarge_exceeds_weekly_limit\u003C\u002FInlineCode\u003E failure code due to payment amount exceeding account's transaction volume limit.","docsShell.sepaTestAccountTable.chargeExceedsWeeklyLimit":"The payment fails with a \u003CInlineCode\u003Echarge_exceeds_source_limit\u003C\u002FInlineCode\u003E failure code due to payment amount causing account to exceed its weekly payment volume limit.","docsApp.components.narrative.productGrid.cryptoDescription":"Integrate a fiat-to-crypto onramp or pay out in crypto","docsShell.verificationDocuments.registrationStatusTab.CA":"Charity Documents","docsApp.components.changesetBenefit.benefit.description":"{description}","docsApp.components.changesetBenefit.benefit.title":"Benefit","docsApp.components.changesetBenefit.userImpact.description":"{description}","docsApp.components.changesetUpgradeStep.freeForm.description":"{description}","docsApp.components.changesetUpgradeStep.testConnect.title":"Test Connect","docsApp.components.changelogBrowser.filter.breakingChanges":"Breaking changes","docsApp.components.changelogBrowser.filter.breakingChanges.breaking":"Breaking changes only","docsApp.components.changelogBrowser.filter.breakingChanges.nonBreaking":"Non-breaking","docsApp.components.changelogBrowser.filter.sdkOnly":"SDK only","docsApp.components.changelogBrowser.filter.sdkOnly.sdkOnly":"SDK only","docsApp.components.changelogChangeset.breakingChanges":"Breaking changes","docsApp.components.changelogChangeset.sdkOnly":"SDK only","docsApp.components.changelogRelease.category":"Category","docsApp.components.changelogRelease.updates":"Updates","docsApp.components.changelogReleaseTrain.learnWhatsChangingIn":"Learn what's changing in {ReleaseTrainTitle}","docsApp.components.changesetChangeTable.change":"Change","docsApp.components.changelogBrowser.changesetFieldChange.added":"Added","docsApp.components.changelogBrowser.changesetFieldChange.new":"New","docsApp.components.changelogBrowser.changesetFieldChange.removed":"Removed","docsApp.components.changesetStandardUpgradeInfo.collapseAll":"Collapse all","docsApp.components.changesetStandardUpgradeInfo.expandAll":"Expand all","docsApp.components.changelogBrowser.searchbar.placeholder.overview":"Search...","docsApp.components.changelogBrowser.changes":"Changes","docsApp.components.changelogRelease.additionalUpdates":"Additional updates","docsApp.components.changesetBenefit.apiFeatureUnlocked.title":"New API feature","docsApp.components.changesetBenefit.cleanup.description":"Stripe is adjusting this feature to maintain a clean API.","docsApp.components.changesetBenefit.cleanup.title":"Cleaning up","docsApp.components.changesetBenefit.userImpact.title":"User impact","docsApp.components.changesetBenefitFeatureUnlocked.description":"A new feature has shipped for this API.","docsApp.components.changesetChangeTableHeader.field-from-to.right":"From -\u003E to","docsApp.components.changesetChangeTableHeader.field-to.right":"To be","docsApp.components.changesetUpgradeStep.accountsRequirementUpdate.description":"Update your integration to meet new requirements for accounts.","docsApp.components.changesetUpgradeStep.accountsRequirementUpdate.title":"Accounts requirement update","docsApp.components.changesetUpgradeStep.apiRedesign.description":"{resource} has been substantially refactored. Make sure to update any code that relies on {resource}.","docsApp.components.changesetUpgradeStep.apiRedesign.title":"API redesign","docsApp.components.changesetUpgradeStep.behaviorChanged.description":"Update your code to handle changed behaviour.","docsApp.components.changesetUpgradeStep.behaviorChanged.title":"Behaviour changed","docsApp.components.changesetUpgradeStep.considerNoCode.description":"Migrate to a no-code solution, plugin, or platform","docsApp.components.changesetUpgradeStep.considerNoCode.title":"Consider no-code","docsApp.components.changesetUpgradeStep.dashboardDevToolingChanged.description":"The Stripe Dashboard or developer tooling has changed.","docsApp.components.changesetUpgradeStep.dashboardDevToolingChanged.title":"Dashboard and tooling changed","docsApp.components.changesetUpgradeStep.defaultChanged.description":"Identify new defaults in behaviour and opt out, or change your code accordingly.","docsApp.components.changesetUpgradeStep.defaultChanged.title":"Default changed","docsApp.components.changesetUpgradeStep.eliminateRequestsStaleVersion.description":"Eliminate API requests that are sent using the older API version.","docsApp.components.changesetUpgradeStep.eliminateRequestsStaleVersion.title":"Eliminate requests with older version","docsApp.components.changesetUpgradeStep.errorCodeChanged.description":"Update code that relies on {oldErrorCode} to use {newErrorCode}.","docsApp.components.changesetUpgradeStep.errorCodeChanged.title":"Error code changed","docsApp.components.changesetUpgradeStep.eventPayloadChanged.description":"Handle changes to the payload of {changedEventType}.","docsApp.components.changesetUpgradeStep.eventPayloadChanged.title":"Event payload changed","docsApp.components.changesetUpgradeStep.eventTypeChanged.description":"Subscribe to {newEventType} and update code that relies on {oldEventType}.","docsApp.components.changesetUpgradeStep.eventTypeChanged.title":"Event type changed","docsApp.components.changesetUpgradeStep.eventTypeRemoved.description":"Update code that relies on {removedEventType}.","docsApp.components.changesetUpgradeStep.eventTypeRemoved.title":"Event type removed","docsApp.components.changesetUpgradeStep.explicitExpansion.description":"Update your code to explicitly expand {property} when needed.","docsApp.components.changesetUpgradeStep.explicitExpansion.title":"Explicit expansion","docsApp.components.changesetUpgradeStep.featureChanged.description":"Handle changes to {feature}.","docsApp.components.changesetUpgradeStep.featureChanged.title":"Feature changed","docsApp.components.changesetUpgradeStep.freeForm.title":"{title}","docsApp.components.changesetUpgradeStep.hostedSurfaceChanged.description":"Handle Stripe-owned surfaces behaviour changes.","docsApp.components.changesetUpgradeStep.hostedSurfaceChanged.title":"Hosted surface changed","docsApp.components.changesetUpgradeStep.httpStatusChanged.description":"Update code that relies on {oldHttpStatus} to use {newHttpStatus}.","docsApp.components.changesetUpgradeStep.httpStatusChanged.title":"HTTP status changed","docsApp.components.changesetUpgradeStep.idForObjectsChanged.description":"The identifier for {object} has changed. Update any databases or code that depend on this ID.","docsApp.components.changesetUpgradeStep.idForObjectsChanged.title":"ID for objects changed","docsApp.components.changesetUpgradeStep.migration.description":"Perform a database migration for changed property names, values, or types.","docsApp.components.changesetUpgradeStep.migration.title":"Data migration","docsApp.components.changesetUpgradeStep.movedToSublist.description":"{property} has been moved to a paginated sublist. Update your code to handle this change.","docsApp.components.changesetUpgradeStep.movedToSublist.title":"Moved to sublist","docsApp.components.changesetUpgradeStep.outdatedDeprecated.description":"Move to a newer integration path.","docsApp.components.changesetUpgradeStep.outdatedDeprecated.title":"Outdated integration","docsApp.components.changesetUpgradeStep.parameterEnumAdded.description":"Update code to handle the new enum value {addedEnumValue} for {parameter} on {method}.","docsApp.components.changesetUpgradeStep.parameterEnumAdded.title":"Parameter enum added","docsApp.components.changesetUpgradeStep.parameterEnumChanged.description":"Update code that relies on {oldEnumValue} for {parameter} on {method} to use {newEnumValue}.","docsApp.components.changesetUpgradeStep.parameterEnumChanged.title":"Parameter enum changed","docsApp.components.changesetUpgradeStep.parameterEnumRemoved.description":"Update code that relies on the removed enum value {removedEnumValue} for {parameter} on {method}.","docsApp.components.changesetUpgradeStep.parameterEnumRemoved.title":"Parameter enum removed","docsApp.components.changesetUpgradeStep.parameterNameChanged.description":"Update code that relies on {oldParameterName} on {method} to use {newParameterName}.","docsApp.components.changesetUpgradeStep.parameterNameChanged.title":"Parameter name changed","docsApp.components.changesetUpgradeStep.parameterRemoved.description":"Update code that relies on {removedParameter}.","docsApp.components.changesetUpgradeStep.parameterRemoved.title":"Parameter removed","docsApp.components.changesetUpgradeStep.parameterTypeChanged.description":"Update code that relies on {parameter} to use {newParameterType}.","docsApp.components.changesetUpgradeStep.parameterTypeChanged.title":"Parameter type changed","docsApp.components.changesetUpgradeStep.parameterValueChanged.description":"Update code that relies on {oldParameterValue} for {parameter} to use {newParameterValue}.","docsApp.components.changesetUpgradeStep.parameterValueChanged.title":"Parameter value changed","docsApp.components.changesetUpgradeStep.propertyEnumAdded.description":"Update code to handle the new enum value {addedEnumValue} on {property}.","docsApp.components.changesetUpgradeStep.propertyEnumAdded.title":"Property enum added","docsApp.components.changesetUpgradeStep.propertyEnumChanged.description":"Update code that relies on {oldEnumValue} on {property} to use {newEnumValue}.","docsApp.components.changesetUpgradeStep.propertyEnumChanged.title":"Property enum changed","docsApp.components.changesetUpgradeStep.propertyEnumRemoved.description":"Update code that relies on the removed enum value {removedEnumValue} on {property}.","docsApp.components.changesetUpgradeStep.propertyEnumRemoved.title":"Property enum removed","docsApp.components.changesetUpgradeStep.propertyNameChanged.description":"Update code that relies on {oldPropertyName} to use {newPropertyName}.","docsApp.components.changesetUpgradeStep.propertyNameChanged.title":"Property name changed","docsApp.components.changesetUpgradeStep.propertyRemoved.description":"Update code that relies on {removedProperty}.","docsApp.components.changesetUpgradeStep.propertyRemoved.title":"Property removed","docsApp.components.changesetUpgradeStep.propertyTypeChanged.description":"Update code that relies on {property} to use {newPropertyType}.","docsApp.components.changesetUpgradeStep.propertyTypeChanged.title":"Property type changed","docsApp.components.changesetUpgradeStep.propertyValueChanged.description":"Update code that relies on {oldPropertyValue} for {property} to use {newPropertyValue}.","docsApp.components.changesetUpgradeStep.propertyValueChanged.title":"Property value changed","docsApp.components.changesetUpgradeStep.requirementsChanged.description":"Handle new requirements for additional information.","docsApp.components.changesetUpgradeStep.requirementsChanged.title":"Requirements changed","docsApp.components.changesetUpgradeStep.resourceRemoved.description":"Update code that relies on {removedResource}.","docsApp.components.changesetUpgradeStep.resourceRemoved.title":"Resource removed","docsApp.components.changesetUpgradeStep.resourceRenamed.description":"Update code that relies on {oldResource} to use {newResource}.","docsApp.components.changesetUpgradeStep.resourceRenamed.title":"Resource renamed","docsApp.components.changesetUpgradeStep.sdkDefaultChanged.description":"Adapt to new defaults for patterns in the SDK.","docsApp.components.changesetUpgradeStep.sdkDefaultChanged.title":"SDK default changed","docsApp.components.changesetUpgradeStep.sdkPatternChanged.description":"Adapt to changed or removed patterns in the SDK.","docsApp.components.changesetUpgradeStep.sdkPatternChanged.title":"SDK pattern changed","docsApp.components.changesetUpgradeStep.sdkRequirementsChanged.description":"Handle new requirements for SDKs.","docsApp.components.changesetUpgradeStep.sdkRequirementsChanged.title":"SDK requirements changed","docsApp.components.changesetUpgradeStep.stripeLibraryVersionChanged.description":"Handle API version changes in {stripeLibrary}.","docsApp.components.changesetUpgradeStep.stripeLibraryVersionChanged.title":"Stripe library version changed","docsApp.components.changesetUpgradeStep.stripeProcessVersionChanged.description":"Ensure that you can handle objects returned by Stripe's automated operations that rely on the default API version.","docsApp.components.changesetUpgradeStep.stripeProcessVersionChanged.title":"Stripe process version changed","docsApp.components.changesetUpgradeStep.testConnect.description":"Test the API version with Connect.","docsApp.components.changesetUpgradeStep.testNewVersion.description":"Test the updated API version to ensure it is working.","docsApp.components.changesetUpgradeStep.testNewVersion.title":"Test updated API","docsApp.components.changesetUpgradeStep.updateVersionHeader.description":"Update the version header or SDK header in your code.","docsApp.components.changesetUpgradeStep.updateVersionHeader.title":"Update your version header","docsApp.components.changesetUpgradeStep.upgradeDefaultVersion.description":"Click the Upgrade API version button to upgrade the default version on your account.","docsApp.components.changesetUpgradeStep.upgradeDefaultVersion.title":"Upgrade your default version","docsApp.components.changesetUpgradeStep.upgradeGuide.description":"Follow the {upgradeGuideLink} to update your integration.","docsApp.components.changesetUpgradeStep.upgradeGuide.title":"Upgrade guide","docsApp.components.changesetUpgradeStep.upgradeWebhookEndpoint.description":"Upgrade your webhook endpoint's version to handle the new API version.","docsApp.components.changesetUpgradeStep.upgradeWebhookEndpoint.title":"Upgrade webhook endpoint version","docsApp.components.changesetUpgradeStep.validationChanged.description":"Update your validation logic to handle new requirements.","docsApp.components.changesetUpgradeStep.validationChanged.title":"Validation changed","docsApp.glossary.term.link":"link","docsApp.components.changesetChangeTableHeader.method-resource.left":"{language, select,\n rest {\n {changedCount, plural,\n one {Endpoint}\n other {Endpoints}\n }\n }\n other {\n {changedCount, plural,\n one {Method}\n other {Methods}\n }\n }\n }","docsApp.components.changesetChangeTableHeader.parameter-resource-or-method.right":"Resources or {language, select, rest {endpoints} other {methods}}","docsApp.changelog.narrowScreenWarning.title":"This page is optimised for wider screens.","docsApp.components.changelogChangeset.andMore":"\u002B {count} more","docsApp.components.changelogBrowser.changesetFieldCard.hideChildObjects":"Hide child objects","docsApp.components.changelogBrowser.changesetFieldCard.showChildObjects":"Show child objects","docsApp.components.changelogBrowser.changesetFieldChange.currentApiVersion":"Current API version","docsApp.components.changesetChanges.andMore":"\u002B {count} more","docsApp.components.changesetChanges.expandAffectedObjects":"Expand {count} affected objects","docsApp.components.changelogChangeset.breakingChange":"Breaking change","docsApp.components.section.previewBadge":"Preview","docsApp.components.changelogBrowser.filter.sdk":"SDK","docsApp.components.changelogBrowser.searchbar.placeholder.release":"Search {numReleases, plural, one {this release} other {these releases}}...","docsApp.components.changesetStandardUpgradeInfo.delete-old.description":"Lorem ipsum I don't know how to elaborate on this","docsApp.components.changesetStandardUpgradeInfo.delete-old.title":"Delete any API requests that use removed methods","docsApp.components.changesetStandardUpgradeInfo.header":"Before starting any upgrade, follow these steps","docsApp.components.changesetStandardUpgradeInfo.test.description":"Use test mode to test the new API version and ensure it is working as expected.","docsApp.components.changesetStandardUpgradeInfo.test.title":"Test your integration against the new, upgraded version","docsApp.components.changesetStandardUpgradeInfo.update-header.description":"Update the Stripe-Version header being sent in your requests or upgrade to the latest SDK version.","docsApp.components.changesetStandardUpgradeInfo.update-header.title":"Update your Stripe-Version header or SDK version","docsApp.components.changesetStandardUpgradeInfo.upgrade-default.description":"You can find the upgrade API button by loreming the ipsum and navigating to","docsApp.components.changesetStandardUpgradeInfo.upgrade-default.title":"In the Dashboard, click Upgrade API to upgrade the default API version for your account","docsApp.components.changesetStandardUpgradeInfo.upgrade-webhook.description":"Update your webhook endpoint to handle the new API version, and ensure it is working as expected.","docsApp.components.changesetStandardUpgradeInfo.upgrade-webhook.title":"Upgrade the API version for your webhook endpoints","docsApp.components.changelogRelease.breaking":"Breaking changes","docsApp.glossary.definition.link":"Stripe’s fast-checkout solution. It securely saves and autofills customer address and payment details, with support for credit cards, debit cards, US bank accounts, and other payment methods.\n","docsShell.codeBlock.keyToken.promptV2":"\u003Cb\u003ESign in\u003C\u002Fb\u003E and \u003Cs\u003Ecreate a sandbox\u003C\u002Fs\u003E to see examples prefilled with your test keys.","docsShell.codeBlock.keyToken.v2PromptSandbox":"\u003Cs\u003ECreate a sandbox\u003C\u002Fs\u003E to see examples prefilled with your test keys.","docsShell.markdocContent.privatePreview":"Private preview","docsShell.markdocContent.publicPreview":"Public preview","docsApp.components.callout.privatePreview":"Private preview","docsApp.components.callout.publicPreview":"Public preview","docsApp.changelog.narrowScreenWarning.body":"Please switch to a larger screen for a better view of our changelog.","docsApp.components.changelogBrowser.filter.breakingChanges.dropdown":"Filter by change","docsApp.components.changelogBrowser.filter.products":"{productCount, plural, =0 {Product} one {Product} other {Products}}","docsApp.components.changelogBrowser.filter.products.dropdown":"Filter by Product","docsApp.components.changelogBrowser.releases":"{version} releases","docsApp.components.changesetChangeTableHeader.field-from-to.left":"{changedCount, plural, one {Field} other {Fields}}","docsApp.components.changesetChangeTableHeader.field-to.left":"{changedCount, plural, one {Field} other {Fields}}","docsApp.components.changesetChangeTableHeader.method-resource.right":"{affectedCount, plural, one {Resource} other {Resources}}","docsApp.components.changesetChangeTableHeader.parameter-resource-or-method.left":"{changedCount, plural, one {Parameter} other {Parameters}}","docsApp.components.changesetChangeTableHeader.resource.right":"{affectedCount, plural, one {Resource} other {Resources}}","docsApp.components.changesetChangeTableHeader.value-enum.left":"{changedCount, plural, one {Value} other {Values}}","docsApp.components.changesetChangeTableHeader.value-enum.right":"{affectedCount, plural, one {Enum} other {Enums}}","docsApp.glossary.definition.debounce":"A programming technique that limits the rate at which events are processed, by ignoring all but the first \u0028or the last\u0029 event that occurred in close succession.\n","docsApp.glossary.definition.taxBehavior":"Tax behaviour determines whether you want to include taxes in the price \u0028\"inclusive\"\u0029 or add them on top \u0028\"exclusive\"\u0029.\n","docsApp.glossary.definition.taxCode":"A tax code is the category of your product for tax purposes.\n","docsApp.glossary.term.debounce":"debounce","docsApp.glossary.term.taxBehavior":"tax behaviour","docsApp.glossary.term.taxCode":"tax code","docsApp.tax_id_types.by_tin.description":"Belarus TIN Number","docsApp.tax_id_types.ma_vat.description":"Morocco VAT Number","docsApp.tax_id_types.md_vat.description":"Moldova VAT Number","docsApp.tax_id_types.tz_vat.description":"Tanzania VAT Number","docsApp.tax_id_types.uz_tin.description":"Uzbekistan TIN Number","docsApp.tax_id_types.uz_vat.description":"Uzbekistan VAT Number","docsShell.verificationDocuments.sgAddressUtilityBillExtraMessage":"mobile phone bills are not accepted","docsShell.Terminal.countryNames.PL":"Poland","docsApp.components.callout.developerPreview":"Developer preview","docsApp.components.callout.privateDeveloperPreview":"Private developer preview","docsApp.components.changelogBrowser.filter.sdk.dropdown":"Filter by SDK","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.reportingChart":"Reporting chart","docsApp.integrationBuilder.settings.llmProvider":"LLM:","docsShell.markdocContent.developerPreview":"Developer preview","docsShell.markdocContent.developerPrivatePreview":"Private developer preview","docsApp.components.changelogBrowser.filter.channel.preview":"Preview","docsApp.components.changelogBrowser.filter.channel.public":"Public","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.capitalFinancing":"Capital financing","docsApp.components.changelogBrowser.filter.channel":"Release channel","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.recipients":"Recipients","docsApp.components.ClimateProductTable.kilogram":"1 kilogram","docsApp.components.ClimateProductTable.minimumOrderHeader":"Minimum order","docsApp.components.ClimateProductTable.ton":"1 ton","docsApp.glossary.definition.minorCurrencyUnit":"The Stripe API expects currency values using the given denomination's smallest unit represented without decimals. For example, enter 1099 to charge 10.99 USD \u0028or any other two-decimal currency\u0029. Enter 10 to charge 10 JPY \u0028or any other zero-decimal currency\u0029.\n","docsApp.glossary.term.minorCurrencyUnit":"minor currency unit","docsApp.tax_id_types.li_vat.description":"Liechtenstein VAT number","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.capitalFinancingApplication":"Capital financing application","docsApp.integrationBuilder.demo.ConnectEmbeddedComponents.config.experience.capitalFinancingPromotion":"Capital financing promotion","docsApp.glossary.definition.eventDestination":"A tool to send events to your application via webhook or directly to your cloud infrastructure\n","docsApp.glossary.term.eventDestination":"event destination"},"navigation":{"topics":[{"text":"Get started","href":"\u002Fget-started","hidden":false,"loaded":true,"active":false,"sections":["Explore all products","Plan your integration","Create an account","Accept a payment","Products and prices","Use Stripe without code","Regulation support","Web Dashboard","Mobile Dashboard","Start developing","Sample projects","About the APIs","Migrate customer data","Migrate payment data","Migrate subscriptions","Understand fraud","Radar fraud protection","Manage disputes","Verify identities"],"translated":null},{"text":"Payments","href":"\u002Fpayments","hidden":false,"loaded":false,"active":false,"sections":[],"translated":null},{"text":"Finance automation","href":"\u002Ffinance-automation","hidden":false,"loaded":false,"active":false,"sections":[],"translated":null},{"text":"Platforms and marketplaces","href":"\u002Fconnect","hidden":false,"loaded":false,"active":false,"sections":[],"translated":null},{"text":"Banking as a service","href":"\u002Ffinancial-services","hidden":false,"loaded":false,"active":false,"sections":[],"translated":null},{"text":"Developer tools","href":"\u002Fdevelopment","hidden":false,"loaded":false,"active":false,"sections":[],"translated":null},{"text":"API Reference","href":"\u002Fapi","hidden":true,"loaded":false,"active":false,"sections":[],"translated":null}],"products":[{"type":"area","text":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"sections":["Explore all products","Plan your integration"],"translated":null},{"type":"section","text":"Explore all products","icon":null,"href":"\u002Fproducts","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Explore all products","href":"\u002Fproducts","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":null,"xray":{}}],"description":"See all of Stripe's available products","active":false,"hidden":false,"translated":null,"showDropdown":false,"xray":{},"expanded":false},{"type":"section","text":"Plan your integration","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Project timeline","href":"\u002Fplan-integration\u002Fget-started\u002Fproject-timeline","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Planning considerations","href":"\u002Fplan-integration\u002Fget-started\u002Fplanning-considerations","description":null,"children":[{"type":"link","text":"Server-side integration","href":"\u002Fplan-integration\u002Fget-started\u002Fserver-side-integration","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Reporting and reconciliation","href":"\u002Fplan-integration\u002Fget-started\u002Freporting-reconciliation","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Website checklist","href":"\u002Fget-started\u002Fchecklist\u002Fwebsite","description":"Make sure your website aligns with card network standards and e-commerce best practices","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Use our resources to plan your Stripe integration","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"area","text":"Set up Stripe","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"sections":["Create an account","Accept a payment","Products and prices","Use Stripe without code","Regulation support"],"translated":null},{"type":"section","text":"Create an account","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Overview","href":"\u002Fget-started\u002Faccount","description":"Activate and manage your Stripe account","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Activate your account","href":"\u002Fget-started\u002Faccount\u002Factivate","description":"Activate your Stripe account and keep it safe","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Add funds to your balance","href":"\u002Fget-started\u002Faccount\u002Fadd-funds","description":"Add funds to your Stripe balance","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Account checklist","href":"\u002Fget-started\u002Faccount\u002Fchecklist","description":"Complete this checklist before taking your Stripe account live","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Acceptable verification documents","href":"\u002Facceptable-verification-documents","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"heading","text":"Account structure","translated":null,"xray":{}},{"type":"link","text":"Start a team","href":"\u002Fget-started\u002Faccount\u002Fteams","description":"Control access to your Stripe account","children":[{"type":"link","text":"User roles","href":"\u002Fget-started\u002Faccount\u002Fteams\u002Froles","description":"Give team members controlled access to your Stripe account","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Organisations","href":"\u002Fget-started\u002Faccount\u002Forgs","description":"Manage multiple accounts belonging to an organisation","children":[{"type":"link","text":"Supported setups","href":"\u002Fget-started\u002Faccount\u002Forgs\u002Fsetup","description":"Learn about supported accounts structures with organisations","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Build an organisation","href":"\u002Fget-started\u002Faccount\u002Forgs\u002Fbuild","description":"Select accounts which will be combined into an organisation","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Manage your team","href":"\u002Fget-started\u002Faccount\u002Forgs\u002Fteam","description":"Learn how to invite and interact with team members in your organisation","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Manage SSO","href":"\u002Fget-started\u002Faccount\u002Forgs\u002Fsso","description":"Manage Single Sign-On \u0028SSO\u0029 for all accounts within an organisation","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Multiple separate accounts","href":"\u002Fget-started\u002Faccount\u002Fmultiple-accounts","description":"Learn how to create and manage multiple Stripe accounts","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Linked external accounts","href":"\u002Fget-started\u002Faccount\u002Flinked-external-accounts","description":"Manage the external accounts you've linked to Stripe","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"heading","text":"Settings","translated":null,"xray":{}},{"type":"link","text":"Branding","href":"\u002Fget-started\u002Faccount\u002Fbranding","description":"Customise the appearance of your emails, checkout, payment links, customer portal, and invoices","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Statement descriptors","href":"\u002Fget-started\u002Faccount\u002Fstatement-descriptors","description":"Learn how statement descriptors work","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Custom email domain","href":"\u002Fget-started\u002Faccount\u002Femail-domain","description":"Configure your sending domain for customer emails","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Custom domain","href":"\u002Fpayments\u002Fcheckout\u002Fcustom-domains","description":"Use your own domain for Stripe Checkout, Payment Links, and customer portal","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Single sign-on","href":"\u002Fget-started\u002Faccount\u002Fsso","description":"Single sign-on","children":[{"type":"link","text":"Set up SSO","href":"","description":"Set up SSO with specific identity providers","children":[{"type":"link","text":"Auth0","href":"\u002Fget-started\u002Faccount\u002Fsso\u002Fv2\u002Fauth0","description":"Single sign-on Auth0","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Azure AD","href":"\u002Fget-started\u002Faccount\u002Fsso\u002Fazure-ad","description":"Single sign-on Azure AD","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Google Workspace","href":"\u002Fget-started\u002Faccount\u002Fsso\u002Fgoogle-workspace","description":"Single sign-on Google Workspace","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Okta","href":"\u002Fget-started\u002Faccount\u002Fsso\u002Fokta","description":"Single sign-on Okta","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"OneLogin","href":"\u002Fget-started\u002Faccount\u002Fsso\u002Fonelogin","description":"Single sign-on OneLogin","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Other","href":"\u002Fget-started\u002Faccount\u002Fsso\u002Fother","description":"Single sign-on other","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Consolidate SSO","href":"\u002Fget-started\u002Faccount\u002Forgs\u002Fsso-consolidation","description":"Consolidate your SSO integrations","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Troubleshoot SSO","href":"\u002Fget-started\u002Faccount\u002Fsso\u002Ftroubleshooting","description":"Troubleshoot your SSO integration","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Activate and manage your Stripe account","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"Accept a payment","icon":null,"href":"\u002Fpayments\u002Faccept-a-payment","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Accept a payment","href":"\u002Fpayments\u002Faccept-a-payment","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":null,"xray":{}}],"active":false,"hidden":false,"translated":null,"showDropdown":false,"xray":{},"expanded":false},{"type":"section","text":"Products and prices","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Overview","href":"\u002Fproducts-prices\u002Foverview","description":"Learn about products and prices","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"How products and prices work","href":"\u002Fproducts-prices\u002Fhow-products-and-prices-work","description":"Learn how products and prices work within Stripe","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Get started with products and prices","href":"\u002Fproducts-prices\u002Fgetting-started","description":"Learn how to use products and prices","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Manage products and prices","href":"\u002Fproducts-prices\u002Fmanage-prices","description":"Manage products and prices","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Use products and prices to build your Stripe integration","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"Use Stripe without code","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Overview","href":"\u002Fno-code","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Find your use case","href":"\u002Fno-code\u002Fget-started","description":"Learn how to use Stripe for your business","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Create Payment Links","href":"\u002Fno-code\u002Fpayment-links","description":"Sell and get paid online with Payment Links","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Create a buy button","href":"\u002Fno-code\u002Fbuy-button","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Send invoices","href":"\u002Fno-code\u002Finvoices","description":"Let your customers pay and manage their invoices online","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Create subscriptions","href":"\u002Fno-code\u002Fsubscriptions","description":"Set up recurring payments by offering subscriptions to your service","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Send quotes","href":"\u002Fno-code\u002Fquotes","description":"Create, share, and automatically convert quotes to invoices and subscriptions","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Accept in-person payments","href":"\u002Fno-code\u002Ftap-to-pay","description":"Accept Tap to Pay payments using only your iPhone","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Pay out money","href":"\u002Fno-code\u002Fpayout","description":"Send payouts from a platform to connected accounts such as sellers, service providers, and third-party vendors","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Create a pricing table","href":"\u002Fno-code\u002Fpricing-table","description":"Design a custom table you can embed in your site","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Set up customer portal","href":"\u002Fno-code\u002Fcustomer-portal","description":"Create a hosted portal for self-serve customer and billing management","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Get started quickly, without writing any code","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"Regulation support","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Co-badged cards compliance","href":"\u002Fco-badged-cards-compliance","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"SCA readiness","href":"\u002Fstrong-customer-authentication","description":null,"children":[{"type":"link","text":"Update your integration","href":"\u002Fstrong-customer-authentication\u002Fmigration","description":"Update your integration to prepare for SCA","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Plugins","href":"\u002Fstrong-customer-authentication\u002Fplugins","description":"Update your Stripe plugin to prepare for SCA","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Previous authorisation agreements","href":"\u002Fstrong-customer-authentication\u002Fprevious-authorization-agreements","description":"Learn how to use previous authentication agreements","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"SCA enforcement","href":"\u002Fstrong-customer-authentication\u002Fsca-enforcement","description":"Learn how European regulators enforce Strong Customer Authentication","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"India recurring payments","href":"\u002Findia-recurring-payments","description":"Learn how to accept recurring payments on Indian issued cards","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Learn how Stripe handles regulatory requirements","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"area","text":"Stripe Dashboard","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"sections":["Web Dashboard","Mobile Dashboard"],"translated":null},{"type":"section","text":"Web Dashboard","icon":null,"href":"\u002Fdashboard\u002Fbasics","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Web Dashboard","href":"\u002Fdashboard\u002Fbasics","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":null,"xray":{}}],"active":false,"hidden":false,"translated":null,"showDropdown":false,"xray":{},"expanded":false},{"type":"section","text":"Mobile Dashboard","icon":null,"href":"\u002Fdashboard\u002Fmobile","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Mobile Dashboard","href":"\u002Fdashboard\u002Fmobile","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":null,"xray":{}}],"active":false,"hidden":false,"translated":null,"showDropdown":false,"xray":{},"expanded":false},{"type":"area","text":"For developers","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"sections":["Start developing","Sample projects","About the APIs"],"translated":null},{"type":"section","text":"Start developing","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Set up your development environment","href":"\u002Fget-started\u002Fdevelopment-environment","description":"Get familiar with Stripe's essential development tools","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Send your first API request","href":"\u002Fget-started\u002Fapi-request","description":"Learn how to interact with Stripe's APIs","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Go-live checklist","href":"\u002Fget-started\u002Fchecklist\u002Fgo-live","description":"Ensure a smooth transition when taking your integration live","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Set up your development environment and send an API request","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"Sample projects","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Browse sample projects","href":"\u002Fsamples","description":"Browse sample Stripe projects","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"GitHub","href":"https:\u002F\u002Fgithub.com\u002Fstripe-samples","description":"Sample integrations built by Stripe","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Identity verification","href":"\u002Fsamples\u002Fidentity\u002Fmodal","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Identity verification","href":"\u002Fsamples\u002Fidentity\u002Fredirect","description":null,"children":[],"hidden":true,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Browse a few of Stripe's sample projects","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"About the APIs","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"API tour","href":"\u002Fpayments-api\u002Ftour","description":"Tour of the API and its core concepts","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Payment Intents API","href":"\u002Fpayments\u002Fpayment-intents","description":"About the Payment Intents API","children":[{"type":"link","text":"How PaymentIntents work","href":"\u002Fpayments\u002Fpaymentintents\u002Flifecycle","description":"The lifecycle of a PaymentIntent","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Payment status updates","href":"\u002Fpayments\u002Fpayment-intents\u002Fverifying-status","description":"Verify the status of a PaymentIntent","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Asynchronous Capture","href":"\u002Fpayments\u002Fpayment-intents\u002Fasynchronous-capture","description":"Faster PaymentIntent confirmations with asynchronous capture","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Compare to Charges","href":"\u002Fpayments\u002Fpayment-intents\u002Fmigration\u002Fcharges","description":"Understanding how Charges compares to PaymentIntents","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Setup Intents API","href":"\u002Fpayments\u002Fsetup-intents","description":"About the Setup Intents API","children":[{"type":"link","text":"How SetupIntents work","href":"\u002Fpayments\u002Fsetupintents\u002Flifecycle","description":"The lifecycle of a SetupIntent","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Payment Methods","href":"\u002Fpayments\u002Fpayment-methods","description":"About the Payment Methods API","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Older APIs","href":"\u002Fpayments\u002Folder-apis","description":"Our older APIs","children":[{"type":"link","text":"Charges","href":"\u002Fpayments\u002Fcharges-api","description":"Use the Charges API","children":[{"type":"link","text":"Migrate to the new APIs","href":"\u002Fpayments\u002Fpayment-intents\u002Fmigration","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Accept a card payment","href":"\u002Fpayments\u002Faccept-a-payment-charges","description":"Collect payments with Stripe","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Save a card","href":"\u002Fsaving-cards","description":"Save cards to charge later","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Place a hold on a card","href":"\u002Fcharges\u002Fplacing-a-hold","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Charges with Connect","href":"\u002Fpayments\u002Fcharges-api\u002Fconnect","description":"Stripe Connect and the Charges API","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Sources","href":"\u002Fsources","description":"About the Sources API","children":[{"type":"link","text":"Transition to the new APIs","href":"\u002Fpayments\u002Fpayment-methods\u002Ftransitioning","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Card Sources","href":"\u002Fsources\u002Fcards","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Sources and customers","href":"\u002Fsources\u002Fcustomers","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"ACH Direct Debit","href":"\u002Fach-deprecated","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Connect platforms","href":"\u002Fsources\u002Fconnect","description":"Connect platforms using the Sources API","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Best practices","href":"\u002Fsources\u002Fbest-practices","description":"Best practices using Sources","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"iOS","href":"\u002Fmobile\u002Fios\u002Fsources","description":"Getting started with Sources in the iOS SDK","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Android","href":"\u002Fmobile\u002Fandroid\u002Fsources","description":"Getting started with Sources in the Android SDK","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Learn about Stripe's core APIs","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"area","text":"Migrate to Stripe","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"sections":["Migrate customer data","Migrate payment data","Migrate subscriptions"],"translated":null},{"type":"section","text":"Migrate customer data","icon":null,"href":"\u002Fget-started\u002Fdata-migrations","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Migrate customer data","href":"\u002Fget-started\u002Fdata-migrations","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":null,"xray":{}}],"description":"Migrate your sensitive payments data","active":false,"hidden":false,"translated":null,"showDropdown":false,"xray":{},"expanded":false},{"type":"section","text":"Migrate payment data","icon":null,"href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Overview","href":"\u002Fget-started\u002Fdata-migrations\u002Foverview","description":"Review the steps involved in payment data migration","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Import payment data","href":"\u002Fget-started\u002Fdata-migrations\u002Fpan-import","description":"Import payment data from another processor into Stripe","children":[{"type":"link","text":"Card data imports","href":"\u002Fget-started\u002Fdata-migrations\u002Fcard-imports","description":"Review the elements of cards data migration","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"ACH data imports","href":"\u002Fget-started\u002Fdata-migrations\u002Fach-imports","description":"Review the elements of ACH data migration","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"SEPA data imports","href":"\u002Fget-started\u002Fdata-migrations\u002Fsepa-imports","description":"Review the elements of SEPA data migration","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"PADs\u002FACSS data imports","href":"\u002Fget-started\u002Fdata-migrations\u002Fpads-imports","description":"Review the elements of PADs\u002FACSS data migration","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Map payment data","href":"\u002Fget-started\u002Fdata-migrations\u002Fmap-payment-data","description":"Map payment data to existing Stripe customers.","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Upload supplementary data","href":"\u002Fget-started\u002Fdata-migrations\u002Fsupplementary-data","description":"Provide additional information to Stripe during migration","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Export payment data","href":"\u002Fget-started\u002Fdata-migrations\u002Fpan-export","description":"Export Stripe payment data to another provider","children":[{"type":"link","text":"Export file formats","href":"\u002Fget-started\u002Fdata-migrations\u002Fexport-file-formats","description":"Review the exported data for different payment types","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Copy payment data","href":"\u002Fget-started\u002Fdata-migrations\u002Fpan-copy-self-serve","description":"Learn how to copy payment data between Stripe accounts","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Learn how to migrate sensitive payment data to Stripe","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"Migrate subscriptions","icon":null,"href":"\u002Fget-started\u002Fsubscription-migrations","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Migrate subscriptions","href":"\u002Fget-started\u002Fsubscription-migrations","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":null,"xray":{}}],"description":"Migrate your existing subscriptions to Stripe","active":false,"hidden":false,"translated":null,"showDropdown":false,"xray":{},"expanded":false},{"type":"area","text":"Manage fraud risk","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"sections":["Understand fraud","Radar fraud protection","Manage disputes","Verify identities"],"translated":null},{"type":"section","text":"Understand fraud","icon":"radar","href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Overview","href":"\u002Fdisputes\u002Fprevention","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Types of fraud","href":"\u002Fdisputes\u002Fprevention\u002Ffraud-types","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Card testing","href":"\u002Fdisputes\u002Fprevention\u002Fcard-testing","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Identify fraud","href":"\u002Fdisputes\u002Fprevention\u002Fidentifying-fraud","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Verification checks","href":"\u002Fdisputes\u002Fprevention\u002Fverification","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Best practices","href":"\u002Fdisputes\u002Fprevention\u002Fbest-practices","description":null,"children":[{"type":"link","text":"Advanced fraud detection","href":"\u002Fdisputes\u002Fprevention\u002Fadvanced-fraud-detection","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Learn how to identify and guard against fraud.","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"Radar fraud protection","icon":"radar","href":"\u002Fradar","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Overview","href":"\u002Fradar","description":"Stripe Radar overview","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Integration","href":"\u002Fradar\u002Fintegration","description":"Radar integration checklist","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Radar Session","href":"\u002Fradar\u002Fradar-session","description":"Create a Radar Session to collect fraud data","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Risk evaluation","href":"\u002Fradar\u002Frisk-evaluation","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Multi-processor Radar scores","href":"\u002Fradar\u002Fmultiprocessor","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Risk settings","href":"\u002Fradar\u002Frisk-settings","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Reviews","href":"\u002Fradar\u002Freviews","description":null,"children":[{"type":"link","text":"Risk insights","href":"\u002Fradar\u002Freviews\u002Frisk-insights","description":"View transaction risk scores for insight into manual reviews","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Uncaptured payments","href":"\u002Fradar\u002Freviews\u002Fauth-and-capture","description":"Reviewing uncaptured payments","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Lists","href":"\u002Fradar\u002Flists","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Rules","href":"\u002Fradar\u002Frules","description":null,"children":[{"type":"link","text":"Reference","href":"\u002Fradar\u002Frules\u002Freference","description":"Rules Reference","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Supported attributes","href":"\u002Fradar\u002Frules\u002Fsupported-attributes","description":"Supported rule attributes","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Test rules","href":"\u002Fradar\u002Ftesting","description":"Testing Stripe Radar","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Radar analytics","href":"\u002Fradar\u002Fanalytics","description":"Stripe Radar analytics","children":[{"type":"link","text":"Fraud insights","href":"\u002Fradar\u002Fanalytics\u002Ffraud-insights","description":"See your business fraud trends","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Use Stripe Radar to fight fraud with machine learning","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"Manage disputes","icon":"payments","href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Overview","href":"\u002Fdisputes","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"How disputes work","href":"\u002Fdisputes\u002Fhow-disputes-work","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Responding to disputes","href":"\u002Fdisputes\u002Fresponding","description":null,"children":[{"type":"link","text":"Best practices","href":"\u002Fdisputes\u002Fbest-practices","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Using the API","href":"\u002Fdisputes\u002Fapi","description":null,"children":[{"type":"link","text":"Visa Compelling Evidence 3.0","href":"\u002Fdisputes\u002Fapi\u002Fvisa-ce3","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Categories","href":"\u002Fdisputes\u002Fcategories","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Dispute withdrawals","href":"\u002Fdisputes\u002Fwithdrawing","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Measuring disputes","href":"\u002Fdisputes\u002Fmeasuring","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Disputes on Connect","href":"\u002Fdisputes\u002Fconnect","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Monitoring programs","href":"\u002Fdisputes\u002Fmonitoring-programs","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"High risk merchant lists","href":"\u002Fdisputes\u002Fmatch","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Dispute prevention with Verifi","href":"\u002Fdisputes\u002Fverifi-beta","description":null,"children":[{"type":"link","text":"Get started with Verifi","href":"\u002Fdisputes\u002Fget-started\u002Fverifi","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Learn how to avoid and respond to disputed payments.","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false},{"type":"section","text":"Verify identities","icon":"identity","href":"","topic":{"text":"Get started","href":"\u002Fget-started","translated":null},"children":[{"type":"link","text":"Overview","href":"\u002Fidentity","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"heading","text":"Get started","translated":null,"xray":{}},{"type":"link","text":"Verify identity documents","href":"\u002Fidentity\u002Fverify-identity-documents","description":"Verify your users' identity documents","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Handle verification outcomes","href":"\u002Fidentity\u002Fhandle-verification-outcomes","description":"Handle verification outcomes","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Access verification results","href":"\u002Fidentity\u002Faccess-verification-results","description":"Access verification results","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Review verification results","href":"\u002Fidentity\u002Freview-tools","description":"Review verification results","children":[{"type":"link","text":"Insights","href":"\u002Fidentity\u002Finsights","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Verification Flows","href":"\u002Fidentity\u002Fverification-flows","description":"Create re-usable configuration","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"heading","text":"More verification checks","translated":null,"xray":{}},{"type":"link","text":"Verification checks","href":"\u002Fidentity\u002Fverification-checks","description":"Verification checks","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Adding selfie checks","href":"\u002Fidentity\u002Fselfie","description":"Adding selfie checks","children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"heading","text":"About the APIs","translated":null,"xray":{}},{"type":"link","text":"Verification Sessions","href":"\u002Fidentity\u002Fverification-sessions","description":"The Verification Sessions API","children":[{"type":"link","text":"How sessions work","href":"\u002Fidentity\u002Fhow-sessions-work","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"heading","text":"Go live","translated":null,"xray":{}},{"type":"link","text":"Before going live","href":"\u002Fidentity\u002Fbefore-going-live","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Supported use cases","href":"\u002Fidentity\u002Fuse-cases","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}},{"type":"link","text":"Explaining Identity","href":"\u002Fidentity\u002Fexplaining-identity","description":null,"children":[],"hidden":false,"active":false,"expanded":false,"selected":false,"translated":true,"xray":{}}],"description":"Use Stripe Identity to confirm the identity of global users","active":false,"hidden":false,"translated":null,"showDropdown":true,"xray":{},"expanded":false}],"open":true},"prefs":{"connect-account-creation-pattern":"typeless","platform":"ios","architecture-style":"resources"},"analyticsId":"3f086e2b-1b6e-4aa5-b16a-7a3102b15409","routeMap":{"accept_session_handoff":"\u002Fhandoff","begin_streaming_ask_summary":"\u002F_endpoint\u002Fbegin-streaming-ask-summary","get_streaming_ask_summary_state":"\u002F_endpoint\u002Fget-streaming-ask-summary-state","record_completed_ask_summary":"\u002F_endpoint\u002Frecord-completed-ask-summary","create_account_session":"\u002F_endpoint\u002Fcreate-account-session","create_checkout_session":"\u002F_endpoint\u002Fcreate-checkout-session","create_feature_and_attach_to_product":"\u002F_endpoint\u002Fcreate-feature-and-attach-to-product","create_financial_connections_session":"\u002F_endpoint\u002Fcreate-financial-connections-session","create_kyc_api_application":"\u002F_endpoint\u002Fcreate-kyc-api-application","create_payment_intent":"\u002F_endpoint\u002Fcreate-payment-intent","create_payment_link":"\u002F_endpoint\u002Fcreate-payment-link","create_product_and_price":"\u002F_endpoint\u002Fcreate-product-and-price","create_setup_intent":"\u002F_endpoint\u002Fcreate-setup-intent","email_signup":"\u002F_endpoint\u002Femail-signup","fetch_account_merchants":"\u002F_endpoint\u002Ffetch-account-merchants","generate_editor_preview":"\u002F_endpoint\u002Fgenerate-editor-preview","generate_example_snippet":"\u002F_endpoint\u002Fgenerate-example-snippet","get_all_videos":"\u002F_endpoint\u002Fget-all-videos","get_alternative_currency_settlement_fees":"\u002F_endpoint\u002Fget-alternative-currency-settlement-fees","get_api_reference_search_index":"\u002F_endpoint\u002Fget-api-reference-search-index","get_connect_payout_currencies":"\u002F_endpoint\u002Fget-connect-payout-currencies","get_entitlement_features_for_product":"\u002F_endpoint\u002Fget-entitlement-features-for-product","get_file":"\u002F_endpoint\u002Fget-file","get_financial_connections_institutions":"\u002F_endpoint\u002Fget-financial-connections-institutions","get_hcaptcha_sitekey":"\u002F_endpoint\u002Fget-hcaptcha-sitekey","get_intellisense_patterns":"\u002F_endpoint\u002Fget-intellisense-patterns","get_kyc_api_application":"\u002F_endpoint\u002Fget-kyc-api-application","get_manifest_builder_errors":"\u002F_endpoint\u002Fget-manifest-builder-errors","get_navigation":"\u002F_endpoint\u002Fget-navigation","get_non_local_payouts":"\u002F_endpoint\u002Fget-non-local-payouts","get_platform_countries":"\u002F_endpoint\u002Fget-platform-countries","get_prices":"\u002F_endpoint\u002Fget-prices","get_projects":"\u002F_endpoint\u002Fget-projects","get_requirement_selections_for_platform_country":"\u002F_endpoint\u002Fget-requirement-selections-for-platform-country","get_requirements_for_selections":"\u002F_endpoint\u002Fget-requirements-for-selections","handoff_healthcheck":"\u002Fhandoff-healthcheck","load_x_ray":"\u002F_endpoint\u002Fload-x-ray","publish_commit":"\u002F_endpoint\u002Fpublish-commit","render_api_section_groups":"\u002F_endpoint\u002Frender-api-section-groups","render_saved_draft":"\u002F_endpoint\u002Frender-saved-draft","report_code_snippet":"\u002F_endpoint\u002Freport-code-snippet","save_account_settings":"\u002F_endpoint\u002Fsave-account-settings","save_prefs":"\u002F_endpoint\u002Fsave-prefs","send_ask_feedback":"\u002F_endpoint\u002Fsend-ask-feedback","send_csat_feedback":"\u002F_endpoint\u002Fsend-csat-feedback","serve_api_changelog_rss_feed":"\u002Fchangelog\u002Fapi\u002Ffeed.xml","serve_api_reference_worker_script":"\u002FfuseWorker.js","serve_apple_developer_domain_association":"\u002F.well-known\u002Fapple-developer-merchantid-domain-association","serve_favicon":"\u002Ffavicon.ico","serve_legacy_reference_fuse_worker_script":"\u002FapiRefFuseWebWorker.js","serve_sitemap":"\u002Fsitemap.xml","sandbox":"\u002F_endpoint\u002Fsandbox","event_permissions":"\u002F_endpoint\u002Fevent-permissions","upload_static_asset":"\u002F_endpoint\u002Fupload-static-asset"},"release":"155164f11b00ec70881747765a5f7bf55ec4ee2e","sentryUrl":"https:\u002F\u002F051ef4a8994d4b57ae3ca07bd9502949@errors.stripe.com\u002F436","timestamp":"2024-11-24T01:36:54.468Z"}; window.__CSP_NONCE__ = "7GWNEaN1gUgdwjiIYfJOqQ=="; </script> <script src=https://b.stripecdn.com/docs-statics-srv/assets/common.ef0fb0ef38050ae62cca.js></script> <script src=https://b.stripecdn.com/docs-statics-srv/assets/sail.b257b63a56d294ba26f9.js></script> <script src=https://b.stripecdn.com/docs-statics-srv/assets/stripeshell.f43a7049554de1f6aab0.js></script> <script src=https://b.stripecdn.com/docs-statics-srv/assets/react.f166edcd512990346292.js></script> <script src=https://b.stripecdn.com/docs-statics-srv/assets/runtime.887a5ee630851e98b839.js></script> <script src=https://b.stripecdn.com/docs-statics-srv/assets/docs.6cb08a13ca30de60cea3.js></script> <script src=https://b.stripecdn.com/docs-statics-srv/assets/frontend.eae471820da6c32c2a8b.js></script> </html>

Pages: 1 2 3 4 5 6 7 8 9 10