From d846e94ffbbe56062d32a09679b194eac3c51e1a Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Thu, 16 Oct 2025 08:51:46 -0400 Subject: [PATCH 01/11] add Stripe OCS to available payments --- docs/store-operations/payments/index.mdx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index 2502c21d7..6f7e2ea44 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -82,6 +82,7 @@ The following table lists the payment gateways that are compatible with our publ | Stripe | ✓ | ✓ | | StripeV3 | ✓ | ✓ | | StripeV4 | ✓ | ✓ | +| Stripe OCS | ✓ | ✓ | | TD Online Mart | ✓ | ✓ | | USA ePay | | ✓ | | Vantiv | | ✓ | @@ -131,6 +132,10 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites * Have stored ACH accounts enabled. * Have this method enabled in the API. (contact support) +### Using Stripe OCS ACH stored bank accounts + + + ### Charging stored instruments There are three steps to using a stored card or PayPal account to make a payment. From 5815cf850f74398c1e4a299ced32b31057d8c531 Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Thu, 16 Oct 2025 11:54:11 -0400 Subject: [PATCH 02/11] Added info for Stripe OCS Payment Integration --- assets/images/stripe-ocs-ach.png | Bin 0 -> 110642 bytes docs/store-operations/payments/index.mdx | 496 ++++++++++++----------- 2 files changed, 265 insertions(+), 231 deletions(-) create mode 100644 assets/images/stripe-ocs-ach.png diff --git a/assets/images/stripe-ocs-ach.png b/assets/images/stripe-ocs-ach.png new file mode 100644 index 0000000000000000000000000000000000000000..156eb7ad7f9ea749d8aea2904c6fdb895947020b GIT binary patch literal 110642 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≶PK2eyaZ%%I2LUxe(!AaZefm)qXF4ZJ{~B&_WUCWs|*M zYHwxu`rcm z-oVA^=j()${!Z@5hsG=`)7vmjV+AZ{ytg`7CYN1Y$U8&#K>^#77w77ZcCwf1c#+?b z_KV;cX{uo@DR;|8zgA!HXR!=>A^-(&&wgX>D`V=g0spDgHycfo|mZMPO2b? z?PRE49iFRlX3%ZWHc8yEs!`*=dP(EIPty{{0-bemQ@is>^AjD|Dh@5nqQgrfe19|S ztm`<^dGS_Bq(Re%u^kE@jpyrp;U{A-TjvS?z%<#xa-rw7$m}@iEnN$8mxt4||m zP~4v(y#4l8{>N=GZn&cNq66o}!Nrk>Tl+r{2P>G~JdB5t8iJu8WWqI~KE@Il()8y= zy19{0*jrVjR#h`RIj_7fQ87LJPL2CH&B-W|9JwRdwZDw+&E!x|97d;9s zDk)q9XGtCaa6f&XTeKs=ul-;m>4-?G7a{=vu=6YDmG{?9xP?7=xE3gqIq{FY4#v_>O z4Hk*~*#t9G9mbw8Isk9}7#^^#^W~!gHht`NY6f7;!2f{Y5qXp?mf8wM-RF0jgOC!U z1KZWU*CBRM`LXrMUQ=s|;#|BF!O2MZ3CqrE=|LFnx;Fp1<224W&&-UA{08y{z(;;O z*z9t0fb;au68#p{kraVzmEbInGS&x&b6lrLZw#HF$^JcLK_%l}P@Y=an@7;&Qwq0M z5zBUc_uX9C!LF`FA$fA|6t3kM0JmN_f^at!xs!Pixyx~8f##@v7bw_X0#+>&X*IxNRnZ?$e;F>p|!{k0hT9_ZbZ8@FlV9LEh*(!EfGj zX^sILf;cg0?QnMM{A`{wa3@(a3d?qTB(hF$)~NH8IM3o)4g57V@`Qd!PTg(3i_RfC}v;OU^MJH^G9H7$%gjn%Ph0b)NbID?9D zSyj$Xh1VN;fIAYg2jc{1dExKXt|*ajweEqGltub0CG-}k7&qE-ER#CjOY9@x3C>!T zCyS5Ks#>?(*C^U92@Kf#@`M4vwGp8I1Dxcs%wO3k+GTyKL=qge_mJ_leIrbv1ZORA z>MVtJs9D&x{r>=O`d zaG&G_j=@JjDv4JGVg+ZX)$|PAF-7-fx_yHffSDbPZ+hI9cDa5qMp$GW^@!OcijhX@ zal#S6@!}V6_wG!x^`=ptM1Xc9uLvDmgdaehCJ4{_lF-ITJV6+ul#y6!zSo?yH#iLY z8!-``yIRL1vyT^@yLis$1!p_THqNs9+U<3Sy?nF$2_L_uoI>k*ErK75+5EbkePm zc#t3p7T|&}04$v!{6J&r-CAI>!wz`*#?&J2ymw02n^0ZC0f?w`{avK}QjcCyW7ERk zjSy55f>JVy@}*F_33Y?a4l%)D(933&8U8wkz3Z*x_j-dKc*4RfMWO;S`r470Za@H- zfcK*CQc>+!Me$Nfcx9=uM9g}a0ZQcy(x={;YZ0%vuFP?_+g%jijVUg8F(rH8%-cA4 zTx(pTbuVC?Ys8IYl(t}Bvs~91O%|Jc$~!{5Yuy79=YZr)hU!AR`?J7@hS2!2o=@44 zNIk6a-O6t*xO!oQ#4>E|Nv>kH7sdO|ivzdJ*c=@|09H5%lR#Ag!O7}6RrAZ?!RF~9 zU+q@=wyXOoQLsbQgy?iZuc^wd`@Tds9f5AyBz zZAq=!2wukT3{>W<~g)R&VCz6+}qZspJ<<|~DL7Ad*SqbWdBN&S)(DjCVc+QRNOOL3r zNS({)6iP2vgc4^|UZqcG>KhKbIz*l*glnE-@57Tfi|&n);sBW6v_fA$EgP`Lu`Z=B zGMHKgbPP@?ED`|eBHSsTt@lr(cashXZ-Y#RYFYr`5;-kQD{M<&;YLgt7SU+34qrD6 zV?|E8lV}4@nxo(zzSh!)?1G8|eIli>&_G8@7s?OQ}Q zgmIv?ub8?eGAAz7y#l-4Dh3AI{vp8p%8Y~zuu$ZiF2E8&Y?);4-r&0+i9EifRB)1g z0eWRkJ4t?~vJen|a63f@DhtDF&BI;hU9t5^y6_73UE)zcwp!$OaFQ4WEzcx{GnTp= zn*N4{&AiA-dpEwdGz)X{*j~!A2PW%!rs<$)!0@kd!wJFl%majoaMrTrd(vbtQoW6I z@lxm+H|t=kbem@66~2KU+tFqAz|HBS&^xe8po@b6Jr_ocfXmHB$UeGO9l9ds0DkP> zs>9aMFpQr|at6VbAklC~UKBg_-ROSUaNhm=+ViS?crkFxGDT0U;t@h*ia8F`x_qiB z=yZ$R3t?~Q@8h3=NuemPkZGP(^Fyn9vndCdF2-59Q?0Hd(P#}Bu}*`^R7Chak-rx9 zWYU3xDu_1epXi}YJpo`g!OGQyi^0#Z0f!Z0>#0b2?tQH9EJZQ@I$%V&WkrS4j_I4Da{L z`hZ+Oy5>u2Pcx$aH}TJq>z*U_)RPC9l$0b8t?YCzaMy2+JrA)`)Kadx-01G%Me=kH zkcmYq+s7qLF_WTW5@g$8g}7Ah|BBZQ3D+Zg9>;;vsMK<8B_1Fk;sn+(r}IEhk?6{5-(^kY zk4NWc?~i@y4sr0j_)Ik&Omc44VdV**DsE_RpIpAAv`>tXLY&dKLidz?WT&Lgsxp_u zL&-KMIoGbe<37f7uL=!vRk6T()3m`S@SCt`aAk{vby$}?b7QsD_y>#wqLV)cjW;|Y z;4`>CE*I{IvGUjV^gem~b;B0uCQ2mwU0D2U-Yk*ZYY-f|0-bK@J8Rag4{zvn0XgXd zq@8?nrVr4LftO)6V>O7opXZ*~mm=(4bzt7Q1MFnPmOXE$TE9wFJ_q;-oNZ~-7RjoN zjC|E3BNl~%D=(+^WB=aQJXH|t;r2sA_7rO@O_uM3X7$PedhM>78YO^y^I$x|RW@zG zf3wDGz`%ejE`{oKG897lGne2P^x5)MbuTk3p=t=)as=G4p#ip5(@dW8Ddf-54KT`2 zm0wQ4pT6|i)|6ydkD%{C?ico?^xy4kF3mBw6_tg4hm`@dB5eg$V1!Lz@2M#0pm_ayhk)_g(V^STER^KAxb z85vc`u>%ORd!QuiPZ=2{H_|*tthuhG_6glnxYc{vmzuuwr#e7B8dEznZsY75df3c04a~^9=TEkL@9C=kwYtieiVs}<3O#pIy1BAa3tr1SAYD&x{0+Fon@a6J%_)> z%AsvlxwUL9@}i*+tQ^>%Ky*K38alNUYF3&JHm(~wqJ3~X4jd3DhME^jzT8*;{@See z(rQlaAD>2g{lDn&=}j%m*i86U^VK!xyEZ|YP1$p(UD3;ryrw&E)Xm~RQx-DYLo-lx z@;0cM7#N%U_2W~S0QG+ZUEVTwBRvA_#$v^lv?vE~K+6;e!I6@Y{hn|{>;W5()7>HT zSfoHri8&fzt`H)$$x_Ctg;`^c`)t186ZS8FpA($x^E=ar=7{&erI0n4mnsh&QJ5N4 zHzOsVJA%Yj(m<>B6NoNB=#Ie&U!FM(x|%}&m)xGe9ZtVfYbQC%x1Oj{1opNM@h@KkNZD&3Sjv<4L!Fp%32sd%OcXf9jgg;yRUEEvSS zkn4lQ#ghd!7Z1&c2EbrIt`z9Ik~jqZ{5n4w2ouORI==kKmn$0)ak+g8JWTqb1pm3z zpn$MAjfZP4&vJ^|E*-b}Dht_X%hYL#e@FHaO#w#iiqLs6J6%1}tga862PcV(`Jv5* zKG5c9KKWuh-m-;49QKUr4uf+;Ztx#fo)D19mS0 zp}$^g>Dz9>MyD4=KBz)i@9cf}FSDVE*3V;kf`52nDa@Q1;5o0Ok?lG_w*VB8<^~u? zYqB>|Bh^F&Q*d>As^S^7<7IU{^iB0qVI-q?9}Cu4<@yBnRhZtYO1Pneg}qUt!9(+4x(0qso(*E}5k+^j z@=oNZ!y6^&>_O!`p6_{HJWYi(85^rHcG zSjpJy{I%S`qk52nZDU`74)=)3zD(@dBQ4KSOvC#}ICyOrwC$ocz%rk;c_&NQ*L3Zf z^vy_f+#~ki^@+h6N|6ORBo@3wAW#GzjrdX{2mVzCdmLj_|8**uVVKJfrpgdJgz&(A zQ0Q}T`%0NBYj&N!(oya!{6?!aEMrAPUdGOc_z8ha)b=?j>gcL(wFdTXp0kJ7ltgzJ zXKY6*sJKT9`&O2P9OH&)9V2(~{d**pk%)>Va-e1k`{y z_&{jx)YP)mJv~#>!feIzBR>0jZ?YGdu{cmrov5~*C<)e#0Di>2K050Cm!4O-Pr`7q zIEa`xyd}rCjms{uc{AzA3fv)caN$O-EDfbx?y5NrH-|&r!x8I6;8wyZD<_&V247?s z;}gJj(715e!NGyG`AVtz?oG(BBT|&7a?G+=W)$Rr;q)te(#!0uSu!xp*k;SFt&Xb) zbTTFR>J*(D03*>z6w{6>1IG@=ahKrQDu}EsJ?iE9?9c3&>4lri^sBRK;wl+{p9Vy& z5wq~0M_9lH3|sLT5@|?~aF6KGA-WA`VMLQtmn!-bU|a0tW6%hqDYLbv(-lAvVx#l( z^9B81rIrsp7dLt~I-#V^XMY#M(ON^YcOBqE>n%Gvr%nlFPLGRoeOsO!wJBdX^87nl zS*{RLe2dhsXOUF8h4*d(WR^SkHFv?AezNW zSAKCJZt+Z{t{W;nbF*|;ZazxemOu3BD?OrD-ooKwHeCDqR#5(31~sX8RZV&}Oj@#S zrU_Y|21d!C!IIkpdkWs%wMuOd3Uo|6ya`(C_sX@L0)jIwZKI;5fZg4lPjH3RZ8 zPFI1RhmjXh#K;_+%_ANZzvO!#+FokCSKD>69e8KCXJ?Nn8^iBp1KrM6 z>3;IRPA=pH9zaTL=VhbO%3OsJSh>J+<=vHyb#Z||z#NH9|E_9n&x{YrTSQqWh}bVFHCwbUY8 z8Q54UpniNqSJ_I}KlPz0@S$;@U|t{Q%%mh^Xa(pHJ0vwb0JTF#$9$M~8&WfOl#9am zUK_TPqQcTx=#*@5_CCoj|FoOh*Su7X>cqVQA8_)nU7XC`hYGyDa={K{7QvJJ^ zQ3u5IjP#Z>Yggkz1nrswM|Ga-?;HRzxJNSUFA&fG$^_RzULFO10#<`$}iS@ z+o;mk)hz@LQwGNYL!)gVQY%x#tQtf43_?vGaL;FV;Zs-qu=L{ZpO69{;DsZ5*eCz{ zvbkYH%d(UW!v};Lb^~i<`?l__uinJ{79w;}*~pzs)WUicxIVTO#n4H%$^x9Q?MUpZ z1zzC77aaU!ZChhvQ2;t|0#`Y><)X>d_aekt9EQB~o)p(YA+)}T6ap*@PWDXU${e!~ zJhx%@KTRa*4*)~4_`b$nVvu}9cOydp<7$O?=sd>on`-UsNj0ezLmB93pzobUmmw{( zA9Wo#Ec-$dxLMH$1Y+3ug0mnQ;5qIEsR9Qm+4>n`*Nf`5>=jTp`&ZP&44uDk6OaAg z4(D6bQ>8=#3JSDtuI*HH6}x`R_xB1!gzU_6LyvNBB?{TW9AJk}fb1IiGYVy%E-?U~ z%(oGL7!^jX3*%oYswHEuK)H`sJZ-wc1 z3JkA;aU4>(Xq6>e7@t~_=t7jokMGv1+}28HIurw-u!6~%sx_?dZKXFMJ=ihFokKk^~F)$W}q7*Iim`Qu~?-9Ye2=!;f`z-gIKTu_($A# zA-JN1U<1*Na^G#6li}OsRi&Co*O)h3t)PmXI;M1h^tY4G{$Q}Ave)?jzXLHCi$!m6 zhd6jIQaZz=I?{xI>WO2=vEC!q55p;#AlJ*Df2Ig~o9;$cZw3xFO%k{}Z>}My2a~nD z3yOaQQuK*9luVQf$77*zPzm|LWM3^DUFyf2&(V8I=>5oH6=>hyFD>nqFX8}O$^W_7 z_jDOBT1)#^==-aE`_$nV%Zx)cwoE8tBI8W!-HSOycE^m&W}4xw5TO`O-5WA%9^;NA zz+m=(0Q4ULWKfBn%ftpEAU%kkVoq+Owr8c;KfG;XnHt&beHh;eA42bH6{+E(8{NZ< zQ%QOoq7oR|g*BwPHN0BHCG;yH6fF4WGbB8yyIGGN^&rN~XGID9M2Xs6Rb|4C=Zxr6+Mc z&>3Xpvb~DJoB@3Wmlo6|t)JVK>oF;kbWn!f!Ny$kAQOc%n?m z#XEb57ygy7w@$c;=#9j)68y-HAhaqBKV(!(Dn5z(f&>OPRx7G%{4JnIjPrutcL90p zk5dEpq+k6!{XpyhwsEucSEm6%Jv4QUd5gQ4=X%~=2l0vGxsRz^)NH*t%5j7Vofix| zUD$^bxgni-#rUs5w89UcDs(PDmcig+^W;t3K&^M6iy5BoCubluOTRNn1R{-8Uv-sw z4X`6AsNc=JUZno!rNe}GYiju8!hS3zJ_~>s#=ZK{A^n6+o${{EzT={yA`rSlF)(a) z*8E;`0n0ehio2%)=@#4u^su!G)c#B2zN#AYkp6BUHS%g_Co&igBRuzF##Q=8<=S1y z_CfAvrtU(CYk>%ug0;;+8aYU0x_5~^o=_K)yfgZQvtb%(1kC-V%+77ye!rtI^a64a z%F=Q_FSfMOBW_;@aM*=I$LVdj-eJnpNxctwdL1pdRTcBYE{z4r;7`=XV>U0+phyTc7(@cwEg{e`&GiO9;!>hl9t%mF*z1Ox z3d462T^(_1L7t6!tD3#nq;T)hJ*740PJ_eC)Dl7R0^|fBb;s5kn2THOAk-C{#p!ucjm7AA(jMCQ!cB%X_q>#DpJcvu(x*15EY`^Nbd}G{hJ+ln(iCYM^^ZOgO`jTht2C3JNgxoSjBt}>P%Ym zm4iX|0zxi>^EX6jqTF{;+q}f?o2zS0qM`P2!$jV{9quOtMjjvrD^^{xI?F+@uDFn) zn&RyOu3ET36TS`0dcO>^@vk5S+>eP20EQfe#O6gx1etj=L8a)7RvGk;cL29LPiINe z%`q521zr z|4zcDb08XtKFU$#YX|(G7iQl@lF%KSNZE)*iZ|)T5^)rvdWik!nI@Fs#SP*gt6eYi z>L5H9xHXV7t}g^X_zl0lQ*l0)XjzfAc{^^t#wbF)QG-29BOo8G*+GP%guRD^w`}SJ z?}>pJx;sHe5ljy$iQ~Fg3j+%YrU!KWA5RSxOjPYe?L`K4A=Whp<;>EDVx*|r`2^;3?#hBMpgAFlGx!R|`KL>t!x@!I)yyBC0d6r!)?b8s#BbHS}k*bGmtd?4MNZ zCc@eBvfZgZbR{S=f<`|YJSCj%u$O25zl`TrE7H0Z=Q|ZsNk#NO(>98aEtlCKS@`(Bld0bFzc*lW2^+K>dRsg)XUCAml=Hvm;RrUPLUI--L$>`&@Vd zaZ*(%Uez8$_M?L z6KL1nkERcBf#EF+(?2?&+cx&$z&bFjsd{7G*azoyZQ$}e->d(J{ZDRRova64s^BtB za=Q|xd(Vg?@Rm^kBIxINjnG(56<$do1_2m+%Z!+1oTGL}I)IVk*@j_Yb`l=pVsI=F zh{l%U`p3cl0l%p*@R7$}2F^2D-M||j_XQ-rxljh9X~d_%iB|Ndsb+G9R&`_9Myk?x z$1Zv7FQKF2ju;_O>*|tfxP(oXT@3}C;$$o}K|Ok}8rn$f#w$O>!LOsb&W+e0*AKKk zV#b7-2_$Tsre70~$jjCilKRjvjIv=u@-2*9Om&B_bIn)v#k+QZfeA96$TLT#bGKW_ zF7j)?X~REuZL~YeLQvA(Vi<<%O@R(CNRe#?A0w0f2eWYOs=r^3MLBsYgo;=V&P_S; zLT+CM7-j(z6m2)O=-iMY@PW64G@jdtcs&27Gu7@!EaccN} zto#kbc!dRe-z=Hd>s#rW4NQ;+M=SWi{4letibt9A|dhpA556uG58_1UP zwnPoL2Uqv!BhJlZ&)_sBdfC3Qmn*&Ipby#mdMx&$a}iJ{fihn4Lk2p5+=b==;FZLJ zAp{Y59i{^-(toFMUe#PbZse%R<#OQiqoxlCjkqGa3KjF%-MAQdJH&0nN_K~|M61lf z4HLU5CYDcVjHLKQ=H!nD<>CM!Cg{lKHrs=rk^;}V5e0X9#GXk+B;YMgZggk=)H$hS zK<;aIPqvQ;ubcSbvz#FI-KDskp%5OK6L~oH$@IQkQl)obK8}8F>=}-&&DUTAmqZ8i zbpXdk69y-2W$p;dM$E&>qHX=_>)pp8r~KQcDl@LHy1vOS49)q82=;2Ymmj{*E8kkI zy7%sa`KXJ!l>iJ#g)hUtD1I$n3=gS$Pr9?;$8@8g44NB}>H*Mu&|V=^SPt{8+G>3; z+JVu-+BlbCqeLynnmV})O=SdHR11U|b|w@OG(VPaTQ4#y5Dt)dC)=Azt!Kipk3vYt zPJ2j?(Ios#kp#^wY8dZAQt*sz*;zF7A7{C&)RrXQX?^qhK_L9=j&s+~#Fo05WyX1n zukSx3pW*2!;mJUuowIO|7D-FmnCs)VGc7E zN8l0jn@*k__hZzgR9#;jkv7L`5lm)~BHE`d~z zamiNW6;d{6Ey+^l0e4({Ao%7Z1VSg87_3pOqxh7)N|tNIaiG5wUDM!?iLBcY`a8dm zbo*lk3lYbV^H3)elv(HQM3oPwXw}-Lm~WPAu19%KZgK!=p+6d?qp4_BH(x{BG-RFEG`D5 zGaX6#Nti7;wFq1||Dp-J0w*C@t!fIJd)t_aAW4nU56N{?5TWU9?pYh$pX4~v4{}Dn2=IT+X_zRLpzeg3W0>+QC5V0Cxi*k%jUU@1fy?9eJ35{P`IskB0rOZsOkekFZm!+eQBEd}AlHtj9F3LC3Y~x2@#Dwa!dWMr zxi&AJmBQeAsa6UaM9nFq?tIBQs7=cpr{mofV()A?3n11B4T0ekJzf%dOLE%n{uX47 z&~3&?tp(nFzn{dpZF#{q*BgOlVl-z|tcm2hTkAIk5*isj)o;k91qUueJvnQ@M<)T31<7-M1$!65)EH17Nc zaj0MH&ZI|IaIgy_4g+XoBF#eeVY4KB!9EVn#iEtnayKf?N4=AMm(;f+CRV0;YXe$=Dob;iJbeN2P6>G&A#^>Uz4_AV=(+8l(Yc?-Bf`TC+eKQQD zEHKl*m4Q)nEtW!)(%Fjb6VpFI+rxgJbG4vnd+Gq1w2dQv1PE%6NgD@$-nl9u$~BB< zRb&r>i(~jcAdG()FLXYpK${{gITEGe&PQf|fDVo7O6Y!YN+KxaUo@jFAOF^eK^Cnt zIh*)?FiM3Hc0ck%qzA=;ezEniJ}|9{foUaJnfRxHx>E2-hG}CGQO_a#xiHT4z|QH$ z9#Jbl40=Cwz2yiHzuzFX&iVb5X}W7@<`YC=9rzkiT;$*g2cwu0R4#l&=Ztv`p(PET zir1lO1Ma_y4|bsscdpEtjrB>3Jpw*PXj@Z_YNYuFgNAJY_s>MYX?n!24Py>tQ#PS; z7d?tB{pq8hBeQ_^fRM((hWMz`K`X5Bn~D|NV=Y}~&-9DXtbt!nan;ybECBE2VE8n6 z5i@}`0Q-~KG4{EClFJJSTLhsX4soa;7C@5VUd{7&7)Y2w2Z7r#o`8dyVkr#2i1XRc zj{-67e{*`AAwb)yWDY7wfcek~qfqL0?1LM~ZbrP2h|jcgqqe(B*#pkQv}Xk!T?_gK z5`#$g7zODsJk$xb#+t4bfWIe_VQ$#d z>H4e^=58{=X+n+;aHGZncGjLrTt+z|aG#tEj%G8ZSz2@8Hk)_9#`$r zOrxDcL|1?VM<6^UK>HV>u4jG}bNheb`|mF^B0lO~CJyf~*-;)c+Z@^3fW5S;x_u)+ZqL-q2bD>236yj2Z&3NCF?iFY3TRl2pRDP21UP%kkA;1zi20+Bo zaaezIL*0N>YjY1LuFlLJV;Y1~q>PtJM1~9%%!wd#CT0^^z#bS>d*xvDdQ0SZ=-;LA zpBHz)r2=Ydv}YVgbat9B*rOrm1MN8xIh%y*uLf~&V`})c7fA;l`O4GrYe_oTDDmzE zLDCLL2VHNd!WA6T#^7`U{&>-gayrvlmpd?xV|p=ngHhbJ?mP-~_Ibn^i?WX%wbvs3 z4Th(Mtk2*(Y6n)OzHbq|A5F=v=s`;1Vzh>dvl%f`>fx#$MOa+~9Z)L)EHK3Z#VePv zGym})xs%cP6*f1z984f_Y~)bfxCJkajfkc4>VeMK|kBA$OB zwBqP&L%K&Kp1qP&#P|Tq8F)VxI?1*Ik=vUn@QExj68!^dPYn&m$Y_ z%tJFO8K_bi_*H;oA+SFp2?YS^Qbuu5x7LpC0ms2FCL5Gy>>8Ul7i5GcJJO~69`eGQ z;y@L-46huVB$pB-R}B*N&oZ(@)}2(4apH%efU8zIZu2eymNY1uS4a?sloX6(tk zZX%X`GIW9&UC-!jnclh^oZ1FkB_xwl*(Pp>#jY(%ciJ z$^On0=)Ml#?hr#!X_ujFh(87vnv~r)SyG2WVJEQXF1&CPyDKtS82K1x2^q>e_@3ST z_At>CYE?$;|x zBnlmT-^A0T!yzY+F9Q<8n>Z2OCq^MVDIlfI#fqnKzVM;d`X8KyVmNT&C@<083WMOn z7bI9ViBZHXkhn(v%nkBnx~U&v#>15il%|>R9S+Wy-+AYWN(LrpMywE5>(H|em^*v1 zt#IJBCk~5Kz>NlMcqaT9hkSZ_z_1<%D6R_<&lkE! zf%?E~#vOT6H$jU_@bnl#qKM!(mqfIE#j=+p4--?9Fy83);@sv~XwXpdY@~-*K;L+- zc`AqG0UXaC0O2I6hi~qN?4Y>TsJLg0yL?#_yxZpepO-wYmPkjjlTn;$RH9!e!TO2s z4C%3n7&zSqW~)#R@c#rP3dCIp7wPv0m5%5duAQaq+aKbPIqqRFhI70oaUbO<>Jq6W ztSc6QG3NtZ$}yW<1nM9$vydFl3qH+jD7cFI(EnZ`JMoprIJ&U0=3#YECT>9wQ&Kc1 z>AH;i3I9<*b4k!K;C~O570B@|4%V~}>A*o4O=fLy8XdC$GS%_Gb*nr%e6Pv=#WV?! zhsj74>hmL^MPQTf*OEi5WUO6P5E!^2U;^w5}%8sSiaa67cnUU_4VbQY?H8)^Q6vq+!+Kd}X4>w`LP^*D!|W*c!z zhBPQ$ESj{kyUd=I=D1C7?;op*&3!w>YOU0rI6x!tK2C}pYvHwpj2bGHC*P=SN+U+Z zlF<7a0vT5_#AN`T98v>)hVk7-{jl7pGlZXw%oc__gn6VzqX_JgNnbeZT*Y(V!ol_( zY=2oHxqHA6c1%jo z-_}i$mN`r+QT8_4U9GCc8CWHQA9)PwrzkMvuTVgyea0Kau?#U(8S9BC;wK!n5-2e^ zH08ipLN@^%LdLu+@`y)Yum+78*xg0&bQ+*SGugFN&@0Wt$b`KVhww$ARr!O>JJ!l! zPR4>~ahXxB1HC>phkrBKOZ5FoevM-e7&edxY$vaSjk%ID=QQyZc^w-zbm6!}wh{^CVe@t`bUz-L|jI&@c9 zOCx6UV1n#;i9gftFZ2QfhX- zx&`Z%sF!=A%yw|80c=I$KBX8*QBEYuF*`{W8Sj;Y32}S&iYEqi{*sz0kh;Ge`+H&m zJ*02XbeYH(|Bx!5B8)xatZK3&vTaxc_c|aMeF+O|{GuAtJL&Ci8>ux7!^EEA+G^gU zT11=yH=r<^7|RmcPuEVKj4)!-ami_jD3e}^nBID=-a3K#O-{Rdmg++ z0Hho@b{2+5lcZT#3p9ky*A_D$fvMiF-$E81vUeiCDKirHp);%Fn(6a67bcINQ0qcK zt%JA+M_T+oDYz*ya4{FYZ((=%1jxmp`yQ`oxtlrh(vu zO61@?78$bO(2Q&wg)3h9EciMM4#Ss)jCtVx`y;@{iQRj|O~m)~ZaOrJJ{eB;Kxhh< z0znwZcbsl4^NG9IC>WpKWXq}B(dp(P+ZSk3ygqQwi1yp;k>~ZnYSl;o>LvJX)nUw# z)(+9I1^r6Oj4-+W6$yjEWXpF+;28zz9L%OBZo+sig98h-p7db-AKUS!zeZG?sA(`n zAxvylwwD8Z)SU;@N4r;VKM9O)ZxH!vSa?fEpgF((OyRq0Lah$`788>lhIg4wzm6oJ zVg>33<*Y*4nVD!ss~_`ar!f35GyeH068-R>JjBCgod|WoWMy<5P;Z8RJj7VQ$neWH z%8Zz%onYW`-zIVBbMc{y2Kqvx%97?nlw6=C989dvsu<#iEbhtFyJE;!B2|UWz!M-Y zUSZ;if+iu+yHBsE=`V48(kR#++t&akRJ7i{LWcVgtQ6ggb@(k+-Xv&%48u@3`Sa|- z*NBxO?8q6Lz36pMq2H_QpxX*PC@5We1X_3yScXoSA~=iehM$ULldzmwPe+4B1b|Gz zZ(aara_{m3&&mEp4vNMcL=7iW{||fb9@u1=c6+B(tb$q*wJOl4pr{N6MFgQVIO?Fo zU!FRanSeszW?4o_Uyeu+T=Oh_jO;_TE7J+5J@<(rx8`K91|2xdjRhM`660U zjc)WB5sEU3pdpX60tM|8;u$wXL07giU16>COwq(NMF}G0A=3H?p(&@n7K5TGJhaXG zwXWj|RQoL(?U;+4wgv%A!gtCmu?x?da7~%d+Ub9C&n;sPmRD>?;mzgYR^@J8=U?;c z?XCCen?g%>W>9&CChb+yIF@_mr$ai3hXrq% z0^ecOXA!|aHZv95oBFKi{Y+Xo)gH8agUJ{g@Zb>0h4=3=KH~bX4QdryBv=JA$D;jA zjvyg3 z`Nq=x3+o7&(d}U`8+G%v0!y56)7T6})(5I#_WmKfndvm_?}TdoYin1=HF1A0wNnG^ zc|U7YobfJifD4OMAP11rLI)aSkkER&SN7rnsWbu6Z3c4bH~`Voe&Uzjm6SgLxp@L= zIff{yBdwU|c`{4veJXI&)cr3m7^(WC>w7#ucN_KJOsiTnhs#|uY{BTEb64Ov2y+V&!?ZjT)u*l({=B1Pe z`bnO-Lco$`Nu9XBg;QyVHW#S+@T@lGKT~6xNy6|7~#3L3I z&yo^2SkP!dlFIY9+MHj&i8v?ahh6d9Kd?nn`Uz7o8y4Zwa;lq_vb1_uRdOTO{^&Y3 zJ-wnzsW$H@X1>}vu@et4FYpSG3#H|5(s{nt?Tzlpt(2n(yD%EeufsP;1H}BHxSX9& z8(P+7Jtbv4Q~F{=I})gJWQaQ5uCm>WHzciW`=GMlXv{$IN694nM+6%LBmN!wu1DeF zuI&X)((Q2a9qX}`PYYOLbq~0Zow5Av6jREEOj}yq@MAAVd)e$9e74z1;JwUj**fg$ z{;RI@*|tm!eqdTWicyAs|Df`Q{h(@NvPr>Yf!OBSGJiOFw-ok0|M}#n8Y&$w+3}z~ zGvOq1BTUw;-KP@t#rCv;-YsY+`m3`x56``?!U6v)mQ$7~bkppSa3VBYo{>E$*ACj| zhXY5y6&Rd6DBP5!!guloG&Lsv9Niv%FIVtyH%AsT&U>=H|HiV-li@6fRC<*2%Z1d! z)}$&c0z6bp2e$vyH;YP_rzOJz^?4_XlgKDVsI6rH#_cjz1V(|O?W)#@STi;FQL0tSk(H^gn@NcqvD{a@?+<*5 zxwD{q*8Mx2Td~4@1=VioCJlU~)AbTVF?P-j`tFbbr($@e%u{)2zHT<< zF!j*Mp2{Y4zScds_7%2^#$KT=yK@DlMK%r}r)!(BH8qfq{I|YiVfQ_=ILwu_LKE~N zgV(p6c15J z$$mCByKyDD!ZtGm&)~JzlC{Lrk1rci^f=QnpuMf^Mzwt1=TOgz0K z@r}4$&lkP#97PTWD!6SZ;1mYY(KODnOS%H5stAMwqusq?9R^{!Gk?kl|JjrDjA&$P z!j2-ddc3B>%z8>2=+2%b5)Ch^G2g{^#17F;|p{9>I83$l!$(GI%Z$4 zeuYQpH?c1sgMr9!iVaKwfh4LuE8gL;O{BFJx~N#~%+nvw&Dt?MtKR@u;Y-ePIM>(; z+Rmx#nRP(vxK=DB>UGR2+Gs6V5-Ij#L!ad}K7g$m0aE5Ah-VO%WdKT>NbjDKOwpiF zs)-k6*3d-XyxN7+;A7Q)P3M#N^s=6Mej|UMOc(>5mXPubCf89;7~w0XD*7pkPE82nD4NMDA}SJw&e9 zr(4iZyHYOJ$ZR*bp;g0=?TNezrzcsqVZb)XW540Xtg9E9H&EFqt{Umw$`G9%PkEZC z)sdUQsU)NpugKH67Ix0K7H}P#5M{25%Iex^m415ZN&Uh9xMAut*+Y2HJq8+wz222) zz7ZwNM}7QO^n(`f^ke`V9CxKOqv>`Mn=1BCjU2v- zWfDuFeE8jYuSY?XCta2(5GpLdo(lwZTk zeW7Me;P6C$-ZKZ#gj9COJWakD5An;hp8EZ* zwp8TFjG~DhK%rG}yINWWOB~4O!QYE&LcL`5 zUgg8qk!{rz8y{e~2;z%jk0p4*&h(0c9~Sdjc38?S-zFArupjF*?OSutXLMh8)_QY_g$d_#UTKLty0Z8pv7~ox}43L@IdNYaI6}ld#$SK z((oYqvjsUVdw5R|YMoJMRsdu+wU1JEJk7;3n0m)0(X^Z$q-;A~VWXfJ&EuAvaB@vJ z4JeAk9L^W{bitZCVh1dWo6r9>_k5^q$hs@rhL7*9#t9cnW*tevCaW9v_06J|Z9hhwbyZHt#^N!=(-ohz`{t=gvUOAW`c}i8yc-P~zAsf|H>*TumgjbZ>cW65=k3UWs+gZgo9js718-mStl-AJHMAz}m zSz?y~s=Ny>=yFLbld*t-ft6*hK1!lI9Gr%u!0Zi{t~oOC2}$-V`pvuhl-P-z>A7Mx zM{G7HvBGd`sC}3ZWOGU)!#66n)GyV4 zb?SCGgMl!;TJkAm9?fHA&h~-1Hw(RAIYM2id~r)?wPh!J=i#C6+>?P;9?0~wz<)W6 z9#e^(NUyv|;)UN6$Igg)^%s8c2qXwfb66xfmAEgWX2phL?zxo>XZJ>X=P|I@6s>w4 z6p?SokR8Oa$GxPzw0RL64(1vGAy^xevz`#szuH3{QXVSO-~kIB0I)xztWJckY%Q&! zbr1mr$CjM?x|x?GgVE4PfeztPXVwA)7@Fh-N>aa#orw`H4(Gd~b77YyTjeB{hDbk_ z43fbwcq}K72!^2AcBBIc$IDVrJ2k~4+^8jng2Q}dIPFdi->xAWM93)05q>``>9I1m zCb!G61qK{ZwP;LUZ+Izvt1b5>`a-^Hu=J23($;npNe?~KE1Ad%l=3!IhJ@(Irt+P| z|Bz^P%^&ocQSwHhoc#;Pe=Sz^ei_1tB&(@1p=()!9*zXrNHwBt7@NB@rdKZwEZpO5 zPO*f{_L`FjPx&Sny5s9PT#)J`>3|EH5}arlc{A&3cqQsHz9np&{~;$U}2iO>0+E1%Wg^G@-5E> zTWs7XD*ONs1ag0_Du$)Lb4h_>Had$kRu;Py8qbv>Kt?w|Oo=!ry{jn_y6 z(wTWso(XbV@=wlPQe2G;%Wp#U(5*(&BPEPDFK{&0!B_x4q5VJoBN02bdBM$U4UU~f z1bhfEgm`ODPbNcCy+rXjIwM`lhmvOX;B2D%Rwgfq*mu*EQ3;)!@-D1nkn)HTBZ&3C zYIbsVbMm`yZdZ=fR8&oZA~#fI|JyYeMugsSfWqs9L@$u(yhfZSp9aY(u8EcwNuQ-F z-IR-NHUm%Xb)?le@TD4jXi=Ba=Mx@=@5iWBlUeoV zISf9d{&`)NBTDdFWuu2Zl5{jK8gk)QIFR=vlp!av3Vo~YvNAH2DJL;1-; zu2Ya+$O`KPX+JPMT=e@}Ww9{Pcbj!D{H5#$l-eUXgRy4ceWiALDAee;pZv+49N0zO zTbuU|ZRkCKE=?mOKe{sahlQRrZJ_>Ne>By!dmu;eg5t1;Pw8hWc)s!-CVpL*eeP8I z1l_O-c_9w)brT)jt91`dnAS{Mk2gSluARMFT6?K5{z3VUD~34r>#e$PD9{_A=GTw z{Bc^dz!UgVHQT36nX*kfb>Hayp-8Y&fK&E!uN;>#>5I1%ZDqdhWkU+X&lm2DJRdku zwQHLxX7&a^RCov%D9gmy&ogE(>Iod3XqxokdlpU$e#N>3LBxeyqsw^(HGDdJjmT4L z6M=AW5*#391K7ku1q>N4X_RTo@a)EFN9m~_UdRBxsKlNJFPm#_juX~!uW=C)0b*a| z+L~E2J@e4S#!~JI!%dBuJ`3q@KfVIT^Fnv26X{g!xm6m}SX^HU66dOTM=3j<;Z9vU zpJM5OQnMgSG?C80HTqJ4^2ahi}6|_Jt1`psktS~R3 zBR)E`T^H`5+q15GG=l%|pQl6Pd&GI;(Ci6}!uD=yZ8K(>Xr!EP-r&u4W;UA$DnLgm zQ1#5vvt4@3Kmx1ArYX)Kz)Icyj31Q4B}FLaqA8Ux6M-w|%MbLO-vl#DXpkd%5~ecb zO2q9#?vRO@tpyfnQKiWgSf&l!nzGaxg6q%(^A!i2O#NeeXNi4HJ8RXr9 z;l>jiAGf96y(SF{`R)IN2HNAHh$)bZLRh2QBRO_>a^a3cI_co}5Dg5eev~SJ@Ts>T z%muF7najWt4sY%|>Wdv`*GFw=lcmM{HsdRJ7?QAW)*@wyIOeo3L$T8gD$(Lv^yPMi zDmp;5l#bgf0X%`s^+7Om^+${7=ns@Pfzm*RUR)EyWW9lw)X?onR@^luKJ;Llx60l% z`ENJtUaL%OnP78{f<7YaUJ(m(4wCuJ_~A2^M|!YgH+gMFt#xD3ZfgiJ>4vB7#yU&b zoO-nr67GE=9s5%GGE;gfw2G>*rsWJn<()g4XF~H?PCcWnKWoIPLiR+if3x z>`G0eyN5&>n{#hcE{x&-dhq4ecyle8jix+fus4ZX>bc<4X%(TdyVl??9AJMtPz%aQ+%8S-lM zibR$_2=3DMF;XyxXjGd`30nDG>eb7$9GSBw$##JbPW8-)$G{J{cleLIpTV_3zacox zdWtGeKidXv-Z|QKM6zR2Q^F8ac7k_`-YwP#BrPiwbwv)fPu_sL&^J=-*p8{CPa<|Q zac#^<)IIbVYjE;KCw|NoYKm~c*qqypa?|lL9`nc+!xl-*m*Fqr7{FF$_XNwfL4d%$ zDT+QI149tu>GpFHPspzQWUf7Mti;Y9g@-P>qb-;SA*?jdF$djy_H|3_#W~3P{T8G5 zjKEjgz;hMAs;n?C#snCv4HJ|7CksQ*0F$|N`oCJXb3QF^yROYkJ3Cz8?`qkU@hEls z*$YYverSa_%@KoF#L?+B!(pF^4H#v-qzKKC0?|WX!tFLE<>vkhs8$MUSn^c3H&iSO z4~N`lfXF=-#rwTLdXw<1za(oPy+q;#1*b?qy_SIADYh5$&|l z5ca`N3OGYN)6iufoG^c{qdtVC*Mw# zQVGTX?c$qXky%M3MA4fI0EJBoM36t0*qpr+!~H=VwX@=yso1+V+8ciWFy;_dwDRO( z$Ig0+6Znt_V&j_r%YW$0Yp-yIX4pWThgEu;wkz!gj}1*&;s;YZ%I$$2R7fFS5CO}> zGmtunc2c&ZxN#1f2qF9?AO0K6Cbt8evlV=7dCT+Kc>_f+;QU74=pif8(K#G4n;epz zzVPS$2`+d+rDU)!;itYOW$DkqhmereI(LWAxH1Vcq4I8$rWTsB5@KJ(V6ZljtAA5y z^nO34&wbi5F{#7xnNHbhy z`4mHGArMmS=#yTpp>H-5ODM}D^heY?sUsU=frFH5HKokl3t-%i8dLpJPS<)<0&zr_ zZKbg;qk6KpoiM$3?#X=(8iO@j-!^R{4WlND&!yewp+R3zj?~;FAay-m0h4k9_>N`1 zDJ61@6M>>=Dj!dEeU!LR5^SRCR7o@mlN;RKR@J05x;9!Q9X6_2xBl!$b#AN+Y(Mr$a}YSBo+Pz-drU%rVcanYCqAOtj+cU zP~CIg)y g%O;r=REv_ME5*tON0lrG)%;wE#Z`Oq2>*HZMx;0QJ=5%`L^mTeo_WB;w~^}*?MC?$Q_ImzyH>x=7_1E^8m4_skf(| zUQoDS)UdPkvLl*aU zq$Xs}%J(+2@W?8q6|ie*Oh%wzrn^S*1f)yuHJ(7yWXhFH9gID_%iumNeTBvmkOt}B zBJ%ITI*#`QtPpwhW4r3|K=*+k0A=R*SFpILQ>2Xw^(68OjD@b!f3bKI+nmAQ$?ze>FUAt*Q%QK%=-a_DB4V&MSXH|UbIN6tK;bs1OYHT$ z$5Cvu|0dRmIxdT%@`_N65;t2Ab34c8ULm?MbX`q2%D&3(l|%pa|L&FE8v@9>)Q-We zr5#S&bnD?9`m{xuxu7orX0 z4zL9J)90;(0TQ<0os4cref;Nm#0X?i`Gzfb4j38cK^j8{+X4BkWnoZoiykiszPa9A zWp|@5&OVZ}y)$)Jh7kzMmneIP!NORVw<-R@l=|kB1?v+}Jj_R%^7Ex zsn^8t1mYoXo5ci@(fvzgzG~hmk0@V9-tjmQ^B{&m^w1IepY)Nb7JL^+0qI=HGR+*5 zk#aqjK*2;$}vK%-TB!y4wWc;Av zqUL%$)&CKqNOtbf?u!)Nw5`K%Tyfonab zLuq^%9(|KV7BrJC^tEoAG;{uUJN6531cx3Ftyo^bm(*C4(t0?19z2`z{yhsfCrot5 z0Kz1!IInSC@~rH(%)qHk_h5V1F^yPj^HSN?layEeZPw!sR&gOQm(FW2iyW?`}r@9uTwvW`@e*s(j*}~1QG}+d> zK>vP13O}h}(-KcTs((Z0+g_*<1ZSQR+wlxMlgQ4^y_(n>%J5GPa9?A{7_S8d*=(`e63VG*@S$LzX>2rD&GDYzb&a3C>4yUr+Zg!|5mJ z#f%3b+>5q3FP!4ZVT1U;S z4|Zo!**Bt+xMX_9Sb%P?6tMy7>_EgSfm1L~dF;)^ z<+_sHFi2$2rMs@B6gfs^L$!#5irLCGh=jNYCTE@+CQg2hGYnwIu}u4pq~K0#w{{|^ zgd$-*#f6qJ3geN&@vx=iTFaiPxzKdUdLJZYLvGR;9wg%f)QLJTP{zDJ(I`rMQ>4hX zTF08dT{x2`u=kIC|9uk+H0&n9J2a7I2^vdajKH;1wWxPxl<$DmcYmV)(Zq!j5i^hV z*{0e$SVd#~b>8L&I=KG{_XL&CJpFF2{6Gz{1y*d!=^cBz&DnL?lOxRd4ex1V>UeVm z1z%vXbU{bMJdlJ#bb8H%*wcm6VQb_i<*0st1~e&uaef`ow!IsPM_*UzvRkzjidsFWJD<2Q|Ef~QitQ;=jbMhxl(qM297Z_djiZ~7y2oz z8VTFR<~GH6Y_*=zwX5?23_z2*{`5Aq{YB&k;eEf^d==^-W2hf!YM2`3D>4KI3j)*8 z$w7$D|GpI{HlpLogkZ^XzqHE#>{y$ymn|XU9UF87(R+X%EhjGX&4(a8jYS zhR_(JmU5HJwhGynXUK$NyeORj>7tKn_tq7_v%*tflt>a}i*bAbX=^Qn)m}bFB=7}y zCIx?^A>v^d{H3Wbo9yj38BTwPVciU(kq%bphHy9+cyuKqx)>^dp&jww2T2uoTc#sW zP>uwI?`eD-qR68kC})e6HASR6aIxP<{74ggUG59C9m})_%pd-uTWZe7$|vldVi3_a z)YDVMcxU`^GO0w4Ap*-tO8wa-vd30_a`#I-g2*Hm&&y$$yZ_ui1798l6?3cr*{teZ zUE>_06jv=A{lg789cbF9y=p_C`yn};gp9_B2A`n9?H6Dh6pxsk}Te5`rIvs~oknr}DAfIAp?Sfng34=UR%n@OS zxsZam`Z>%+S{6rS1*o9@=Mzu%*RR6!Ur+-jlW(q7y+n+h{1b}|8pkP38QClg#71xL zsxs{AukD!GHhfJ-Lh-~w-ZfRv1SdVXE%XdEd?-jf9frWVoP7h$zhNiG4~yxn?1~T& zMFMr2gU@J~6L%Qe{6Y^_IIT4(?@+&d=BD=f%w0U!2w3)H&7kD#g0>ei}OH!}EQm4c}fc3G?mLBi^zh zkj~1e9(cP;<#TUIhH4z0q|#25QC&1G~&k}mtMjy z3(kS9qwVv1Lv$XLD~sNU{UG%z#S-l!QJf~I+fUgFaUktjpfbnJD#I z%x&vtDyZH)8K~eYnieOn5mhLqDp@9`DS}?A&zI`l(6~d7ETb*O#&KsIS=58n6z2?+ zH3_Sm^%N;H+Z^T#4Z-;q#ME7=dyS!8To!XY!%a8IQPd-+I>B6V-L`JT*K3=ied1k4c#a+9+{~iIzwqXfDg@N42yfOc0V1WCZQza=M^@Ky7*m6 ze#GKfVy7mN^DT7JFH7}4POR05W`>xl*QNR{EZm_B2lJ3>;J-a`ai`l`21_24SfR>0 zrF(^csDzOdtYJhi62Rx7!JftMy%hMvi_Du;0(Lys-=NMbV{naJby z^`PsPU$t}zY0eA0jUc(j4Xj8@?WrN~z-{q<@F$|}-i_E} zmENM_!|)%`Cn8C$#Ge6{0|oPAvc~8bPD&14arLZ?$&U3VcfgNk@gF0L1vVoCto4YY zbvb52Fp*^vv8KUSs;%c*R*D^RuFhAMD4G61 zADk>Mu3}jd0*ZH%aQJxHHJ&G|8G|AZzEVk>KKl0Fl@Sk`oR1WrN59Wl?$|<%ZGlBX zxfYu1YG@FOJN&}kji${N4&Ew(s!XdmxtNV6IXsm)17)Ky1GOJu2i}?#S$u+%s-79` zZT%A5W@w;BXRDAI7Syn+ll_cE*OSIm!)%3?j)dV4p{bp7vAio8TO0)ejL2-x^Zv7? zS3L_jx5X`Ut!6Ax1M5?5IRwxq^y5}T*^i+u;3zFD$wOI@?xw6D@t3gW?m zXNLZYHGiC}U)rv1&Pe&J7r0|m@Tk{K>aeZw&Fvv7DX;Fejk!La3vnck97{L^YZ|45 zTC;a0=RCo;v&4=n-@jbf^+JWek0RuUI=}Sp{;3N+Nx$hb$B~!%iR7x-w7*&e0S-hx z<_-~<+xpynmEA7yB`!LBXoY@jAIzyq#`Sn6X#LxAPQ;n-UJlP8Sy&dyu6KBWXk)=lTDpK{wXE%IXJr=Ygl!AWJE4eL}}`FBZ93 zhd;XhVfXtJ3#$Pz9#wJ*{|9MaS-u_dzrDX**#)*8=FXObpn>r~!)7(?<~A80Cpx|L zG;{PQZ2u=Wvc5*6@edoLmJTiry)jCr)jSTRDRS}~ZEsxbum1Cy0WiPDfnn=QLG-xi zB{!IzNH(LF@dWyKh@>X}3iE{D!lHlIco~hg;xB2%XB;75(BYwdVZ&#akRCY_Sn$;M zoHS`o*)2#v%tHF%zOT~v!ofXd1bjB?SNuazZw{^-m!Ea?KJ9i!3*O(poxKbaw_e|| zXB-y!O_*^hM?k_#XudURidr|DqZ78W*ap1`AzZ>oz(|k+YsnLYOe3xd8n%MdAFiL7 z^*Q1vbBEwnhjdx}Q{3%OHr)yy02EQ|KC|<8I@fA`^UPPJ8@aRd>f!bm`vV-c;MF?& zNsK9(WjYmSKBf;se0dSm1odB(;%&qL$MU;m5yy>q>Er-41!(Qp@iSl$TZ@>|85Jjf z2VBo345UO(iU1hkXq2bs^t+RI)_tG|=`M&oeew3mUm~rs>vE#`pe1kNfEEqezx4fG ziu)$R>(EAp2Qk+45Hpb3XRUIjBq0VI~-@sMV50+!B6 zlO_>=v7o}~cc!DMS>XP5{pQT)@>pB8FVw$+=d7USXP&=75?G69%**mt^24AaD;#*E z&+-gZ!Rzf^moONWa2bZghKpXv03C~?zTdC8j$AU-o%elQ;E|>B76`%VjlqF!8()Gikf@W7dwMsjZ>}k#XrJ=-&0;QxHIJlHdgBmx4?En1 zpL^Mdd{G)GFmfGu<8u1_;aC_A7he$JuN(?yK%IpE;Nj=&bQ(_VO)8I@JvQNoiQzss z)U@cgt+33}Y4Wm;79m&JJfNn`9+NX5(n1`b3o6ZPSmvJW(6;h?@Bi2m&elLVWTNCF zWho%N76<<#isYy%!h(!Y$HLAnkiIi11@NGYX4|`#Sf+r#^dpi?Iry(@tPLO(^gSr; z&z+Rqp-0l{nU5G8{yy9_m~(^r79aVL!Xv?eA7N8v_V6*ihB>@Lcz_zRV@SG!;Nxxh zV$h&qvT_UU-r{_4A3_$38 zad}a9u>>aNp8O{JUKqNkws&A8OOs6a=`+Vs^`ip=hCa8^g;3B8Y1(;>`I#o;IhD5J z{X6qNX2i2j?$F!pkTv4~qSm8*6N&HRAyja0pQwEc!8+dUHQ8gM0mTeFg~n0E(8AE$ zg}cE&Mru7*8#~b5^^w#8#s|8{3OaM2QoHz%D%x6=w;Y|w8@+=IcI1M|RXg|psAK+w zPj4A?xtQ;hVN8z6yfO0rFWrPLU^cm`h`h_6ca8_URNEU$4+Xhu^-|wOT;_Nfg zVRuL`hae{i?7CV%Z9G?5gFl-Uzvl~oQhU?-+MZkc$G<$7Usk;oei*K27)*{DRde2} zeCD^7U!P<;S*`)Mq1tVKb)Wp{;%AM<#n}JO`wX4=c;S55&(3~}bKldS{B4K1_gg={ ztUvP=e|k^W@SgnSXZ+XyZ^#aN{;&BB>dkl={_BtY>EEiuC!F^|`uE@8r7VhE+F$w| z)bV@=e))F@r*iH3<=^4|ZoyA)=sB+3|J{P~Jy8Gm7M$;m`@eSF53SsMF0OR zMCOm5T6MG>d8O%p>Dx!W>dQ|*+jRUM(+l$|3V+2;s`e%(BBL#s7?+vnE4=%SCF2?) z_Z;_dUwhr@kEj2N9ZHS5Ejg555~v;5x9>l|rO#P$YU4edpJ-OL&lXo+YR^? z*Q{^qnwEEN;?7T=nzLKAT8VvFf2`CKz>hut<@S#1_^Eeq2qwQ>b=&6euCAGs(N>X} zKX2Yuj^}4~eS7!$p2f326?L)s8c-xZUhot?ST9Yr!T8R1|8U!%zI(%y=2K~!+uP#r zxTN>5{%J4k5Tf1SyP03R=7q=aNz3Uy``Ea#zvg~CCB~MCmuX%|t@2y`YMgf2*00j* zenpuO`vE`!pQOE@Iq=L|>aEXg?y+^m-Ji}%@z!RpOuHtkr1SfsXd5e!Ka&pavgX~( z8FiZ+vcBAA%YJ;rFou_nUe0~_Wwsd2k&lx(XOFyi>VCX`EGl~D2_8&7Kc+Jh_u%ybM{gEDp z9d8#RGY0b zMhxuC`Wp!otQUwDfvM0r`vnWp>Fr!}g&+#oU750qN2tosj@}VUH5<)%{OoW{bUq3* z4d`s5F_dn+d0yq{@S-4agVEq?ZDhwqy7)Lv?EN6V<049y2e=H)MAi7~Vna|OPtkWB zOQ2%!e9uVOB8T57=|WO(8=MwAofOuvlYl1xR8SZMMl;f?Vi{U18HbfxbT}lV*Tmsq zvdLA6$;$g(ocRl4!_gUmihKi3FHw*g1vTU#x}^1?^;M)cQzE20z>}NjgvI5Lgr!*m zaGO4+8resL8?E>3IO7i=5FnL$_xRpCmBa1~DJzWBsW7sx{%H5!-j&&Kga|pEfQJ%2 zn=4??E;*?d(q`Wx|9)$1*DVJNMqAaFiyjx8LIAp+ilJ6(pu)Zopau?KuC7J9 z2@qHRH6r_nYvIk#UYI#cDeUSJHr>Rqn#x?A6Nfr%aS$BwW0u~L3l^P?FI?tw> zE$Xwd4h&ZOt@<4p{8h0zee3*xKa!p6bk${k9mlj#%qaAtb*?M&z<8UCx3%=7-BDM! zlq&kDx{b9bt3*vgQ>D0TIigwr=JuYDMnYOeF_+g^=*@`}p8q2~yr9_P`m{Z5cuj`z zeJW0j^0{?^1mLEVLuwK9`s!j%cYD&Ps$KvRs3A~fZveCWQo}aLDq#hokX}?N6a(h8 zBKRf=s}1H5!M_yLgliMkYtb;^jN*LX@XH?3^?C9cbV(D};@M=of)-b0cWrGVc!@** zKDn7WZkUg!{OPy0R2U5bO`H#a53z8}wt8gRlJ)w~wLhG4%Hqvtv-7DnK!_6Q(W?i0 zCGdaj?fFmRb9v?s2*M%uifNOGOT78_w+1J@Gb*zHiG4AnY9Dm_}Df-h9#IT8~|xV^Xe5rV`!T;e6iPf7#NC&`|5X7h?tI> zPf$%eyNL;UJUbF{18-M~bKlq;WYy0_h>6lo2!qsWw3Rg8P7=)U+83j%CmSyX6K?mA z*GbJBkuU=D2IEC&pp@OR;Hf5Z*Xp<30DRJYG(J3#hFxJsdB@#sm7_O!KZSFvWiUYe zE)u(DqJghF(6(+|aN5xp%pOSkcx5j7g!fX=t?b1`RONikqv0Aj?ofoCh)J^Fd<;F}-X_?AA1e32TZF+d!}sQBX)pZY#e3XP!C+nk5V zSw3ayjr5~sze`B~+lX!&r-IY|cC$#y1@;BWQ}(;;c#CdrdTm$LE$cMxcW472^VUJ< zp5P7qfb_tM)B7t{2FjTk%XosV(HntH@2II*Xz`aC8n7}a93uY3wMeTj6YaR(%#6=U zQ*eEBdxychE};c!ktFYma=FbbS}6wZcqeUqJg0GZZj8R;8-;*tFA-OR?e6iuJuoKV zj_LN`4oj{(D;GYQ!T~+2%n6r^<~jgFars@9NqrquKSudF?7rzKuB%d3IvhgVf*sdu zWE51m_^4f9$4@3OC%O^daCA~dUses#XRmENJ&?&(=6q9}Gf*HHm{pdp=Jjcafd4WA zAsAXJPE4v;K}Sf!A$GKl6_ul0MCU%(FbCnybj|Is25q`D7&zjOQ=9JFnWsL;QC5LP zf!m_7f8xm%8pO7mpRQ={nYhB?2vn$JeMeFQ@tVYz5A?6dRDDh&3?0j;>U8`FapLg7 z&wjee3j`H?>t0%)EZE&Ck6Pi`9-zU{;(i6++I&Nj3^owM_7Jt0qV|5}9C&Xx*zQm7NbJkIuq zojXLcXX9#aXrFJ`wmx^a;~OCJItZG~*|*+w8S`cxFXPFAWIp&-S&cF0`qdY2wTE^9 z;_*cdS2dv1-yotKlZFqPm&eSaC!Fu4pc-j)aC9<+xeQB4AAM-3vd1&@;og`#U{0SF z4t7VGQnB3PhxB+(yoV?a>VIn+%M(|L-xEI-w`ODme?(TH*Z)TpdCevdZLB z@D3!pRwS;FpJktd86=(KF%d#LV*omq>vrR?qd}~(au7p&z0f{GLSz9X!)LFf%N%|w z^Vo{|KFV52iS>(1FVX9%cr&gEAI2Ig(>2qwK{LV548k%ZMQK~_#Ch^bGxW}JB5@E4 zvQ3zI1h2v+YOR|ix0%)-F{jb`T}mhI#Uy?0PErr(+#D6+&f^OGpzZ6P`;Q~jA{Y3t zJsU;GO$VO2veNhk(N*vvq4-Z}i0CFD22 zu;1wnCZ4&S@a1JF;NC@k%|EKA!RawQQ|z7iqu3XJ`~)1s_jCivapr0FjZ=2>zc`Jp zazyQ^(fU{MQx>1(;L$q@cOUzo(O>P`0s}K4EckT^ha$g(pXKu>-7mE8@x%HEfdQ+^ z)jAbHeRIeW@2eSd=HsFID3FH*|1GQ0X4b#HlZF19siMe!7yq7VfGfS~*1U!wHafl0 z7=VK;_hy6d0mC*b;Lf~C;eNG?g&%O#t5j zB@>mk5#BaLK&QOJ3Mk)%fSkWzvR{wvF{+^>;o^wkm=|*_eQ4&f+*neDc97sCj{60v z!Ixzu9y2l_p=n2=yEjvLy~aSXc@Q6(ci1FRW5cV&-(_$0s&#p#_SW*YY26OJ)UOb^ z+y~E6aF{!Qu)AQ7gkmTb5F375p}R*g)wL6KKW>sn4jv?qCAgQxt}ogx3VgbAG=kp~ zQ92JO1vLcyf`J}b91&M$)4s=2xiMb7fRPE8&(6<2k&n$iI7pcz_-2#9Y8iDv2@;Ru z5uhy;xXK0INw+6s6Ue*Rkl)Aj?gC1fq$NQbVbKpxc2v zZI7)0_td{+@D9t~Gf%rytM0Y9*prY1cCj~|s_h)C8IjR-mz)(wydi!TuaSBK@w$#5 zo)WvYAI>FIv8O9?qJ@Nh*od@-Ym#yr9+mK0J^{410AREINn_QuGA)Koq{mkDqwZ(Q z_uQDS&HBK&_~YWqW)?;Kvzgv2cq5|_C#^leG~s;86>q16=3?}a2)nyf@=&Igbq&f; zsQ#QQF5+L7xBb8-$UUUY<;J7Q@f7F8CFOkmsPD7bY%`B?E?xF{AMyeVNgT4PLVN1HkwrbS{<=jPOfifEuYXhihjd8bdi*ikfp#zYKpGU(6+3SKW7 zdh^~jL;u7mMo}-elULf2f@f~R z(>EJV-(;u?2{YVlR=oFLp^+2RV=0Jd*-)IFtdV_sc+R})bWtB>Kr0-7m z!>RiRRW$5J_?O<;*1N__=7L7>CK6t$lYDtukr(D34?wMGBwfG4w>WXJybval z))bp7y{_?iEi{77rE03G2+5 zBtT5;hO&-H<+q;qtYdhcXPtS+fGn1^R9xW0&HFQ5G_C)~ACYVw9G8fm%F?9phk0=1 zMVEuhaFusU;~QJDO!D|9sh{ULpa#mGA;EEkv9x(#M`X=>|H{;^+ekGB*O1$?7*o7~ zMF_nP4`c89)rfOaoE@a^f_y}!9$9Y}ZUvcKh7jsZ#A!%hlbxroWTiU){7&DSm z+zDd7Bs!sK%lU!<`7?nlqYdh31L$TL!npAv@tJzF3o{?MBKE}{9o4QxU^X6XF#Wf` z?N$dduh5>ofzOltBLvSe29Q8&_(0NMr%Z{Kb>9*yH9#dR{YFULzJhn~-C{E!6ecDo zsgFCXhB}jg7-k?dl6aRJp~6JkWI5Vaq=gGoDU!)W?}?;l5&sr@nig@J6STOeeTD5m z6V9mYreZr*tt*CxUB5i03w@vd+?D1O8y9*TrkdOGq1RKNE%aYkxGxfCh-T`Z*xZ3U zRvyeSlFW||?K5p&cD@o0Ny|;Ks_!Hr0!2+WTYiI3-LK} zXS_y;zz>GFWu|t1l!^$N$ipmV)9C5w+5+f&n-DOkg7KAb2p%F%ysp2|r~KvLg27hq zzl!x-X~gXJK2`a&_nNfyz%OoKiXBbD+5?d|Jb1+P;O4&~`#>j@n z3#pjgo`C4u@M}^DgUMM{)j5w9Sk}xan-k!=6`aP-S&rSCGt}S%1DnpQ_~Q&Q$Vl{# z%Yqp+NlyIQGr@OCHJT0RgeT~i<1e!T!opd2CNd3glERgq2Edk0-3u%}7X#%)h}#*H^87H9=^Fk2i}c=C&=4x^G^EoaR@@g-K|!R4MHSDfUNS1g0Ae1A148zBCzr0S@)*2tTQYR zjD}65zI*mAq%NVaYqb*3+BUpswCK=Jc07B2UYZi9n4anjPM`XOb2;v zDUKq;yvSlF(@2RWC(2O3tLVC7{ZKD5c#91CDEUrVWe)=DCfP9Fk>>gv1qWcqtk(no z@^ImKjA6574*QKIb{=e~9FNSpn2SCGD+R<{3i|s z(NEuuVaE~j#nAbjb#Vl5lN9>g$_~9TdttG8n#`NoPO8S#Rd#I!bGr-BGCS6oMRL6+ zeA*iBHk%Y;8F}m|CuzS-_Pgq#Wq`a`aM#v{Lj!E!`CnMGjv>K*eVDK_B}On zmu@n29nRUCZyJ``@p$TPiA09C5|H~4@I0pBPn!Gb4q(EyLkQ4cO$6Io+09cuH+bI@ z(!McsOoTX{BU5K0{o>0x>Lt9O5j!@g&WKrT6^13!u z??hTkxR@>?FPqGz_H(B^oo_(erK5B>9DD78ImnMmazw5=-F*xMLjqstHSt}aEyRFJ z-Ji1q)DJZU1KXJIZMHgl10Am(|LbP3<#KxJUgJyjNn!A}=!B_rwf?Ux4V-b6+6m)B zo5a&ojI@H0RTfT9S@lSd*uSkY=dr;CSxvpc4FvS^z|(IB4nKk<8#WuyHVw;$NPHqo z{BGATk~guQVV+-1wQUJG{q_VmD3&=yupuc8mC-0o8EpU5U6yqf<(|l7N%(YOkxKAF;M3GlTA_b=$jZx z0dyY@%djW<-q-p5AXB1O>-66i35w+SRpjnE6XZM%V46`Hbr5L94O82!#(^}&0WlOG ze0NfbWCndb@#oAeKMHZe3vYzBQ0)&iF^f`@4ld$@9!&G>gNFJKI=iAcI}ZOjJnTPs z?JrR2<2?OFD)!Xix9eRznlTB!CfgL>`PssmiW1mTiFPW=DE*Eh?&)?Hp0){jvzU2e zW<~^gMslakOXy6E@P1k2;_cX6tXLHcun%eh^Ugk%ydHfz3_g5UN6t!PL4%PT&|!iL zZ1Xk)Xa;|$d%Lu!WfeB(|0m;o?mLK;!{KD6;`Ae`{sG3ekN||C7E*5Gc1cDPo>uP& z@O;$;j;YuDPNva;(O{a^&3U*0|0%|DmjSF@eC*gb^e2OtsaHL-xgc;12#(;i$>vaz z%p<%;_oJ5Gi%;_WT_RZ+z7GT=>VGR`PRuM8r5dUE`L0Hq_Wt5kRrpGD4V&|28L6r% zk6{UT0Fh17*X1#`f7ZK*qzw^j5ll*_F_Jr?&3Q-OtO4Fp@YZ7&i>5?E-!(=53#@Pt z&B z*&KL!tgqq=vpF{>1{RkD+Kkzzwo!-=M^yBjlm_rwISgs@-el+;_JdQ~K4!;|cEQVi z2QaugQNirvU`U#+=Dn>-?KA{?kP&EFj%CA-MT)2WGH<|ijn|f;vrg|jmU@;2R^I_# zU4Q+_6+oAF^$Cyqb|OfeL6A6Ybm}Go(eqkd3l99zC3XR3u}zs!3|*~gF5z0wYV-Dj zzQE?BRnNy0WkC%VpjM^6#>b!%sGQA%!IMqh6_S`uPNia=-{`u^(9wY*c(2(!Otb6# z-&yrneX6ugZ1dv$=EZ!Py90jTSPykd4o8yugRaz0l;Gl%%_*JhSPK21OXmd!*wL^c zW){yEZQjXPx!Le&Tjwtxk$dvWNQyQdCiO5qvd}|RvL^~4fM>7FL{Neu>{Y5lE>AY+ zS9rZ+U&K*Aay^5|9K!OOqX`m2&EaOfV{xgSDPU3z#B?3c>$*Jh`U=v|YE3VdL;HC< zgZ5WMGZ-NEO^Q+T-kOSzHJ%1t_?qwsXah07K$OV>sLycR-v0Noqu&wy`PYbxmy@2d zn^(d;O$paXhy~v;N{AJ*AGMN$7aLmYZ9IMA(S$?ja!3LVxOq`@i|?Q)04LBBmQEL# z6}cmT&qc0@;K3P!#Z~y0qM2kCqTxA6A~S^ZVuTRLv;Ei8ZL{75ZTUUst+b_y44|+J zp|-i+f~ViUnNN1V*|CA8UI(9K3M;spAG5d4%PxeZNg~M62(+m44fWhMOYKBHFuPbe zywH3+rhS}px)mEBOwPylfg?Q1C0sDy;?WDxZ_J%)bz!2lK6o@wy-R*=b#7JuOy$)G zC1_P%=uaB3o5Cx-InLPn$+iAdCCx2;vKv+uY!~<`30&rld{=>(NiDTAbJwHGuBy&@ ztirRULOYv1`-Y+VQ19=K{#nz`1WgPE?29C^S7O$O8y9CbP$ZSLI^T5h7hinA*Qc-9 z2evPgG$ZLP3{`X)PW6%mcryF)bAi79zR>^tHNFi>*Q5&IkKe>>HD#5I6e;>*Zn$Qv zsDz2$#KF7#PSQ`Pl!X=AARII>*^5a+dKfeg8T#a@JFVnJN6nT)JWngx9m&S0xof+? zkrbgCtAxTZ$Yvm^tVQDq{pVT>*S$uJ+*na$nhU{nt!-S36LxAn*b5ONc3`st-aop; z`|*JNa%8xnnW#o3z(7+dkdoQ~KYg8%>SVmq+`oz^oL|RN&YFN^9?y@o#K=pIUxWNI z)CAYaG4*0uqUfkqV05?diOywos1ybx9+r^le)jr}e(T+rMB~DepcVxkSXUZJkMAVY zAiy=L1QjTijFRs}t%f)7VN&o}jDxe!^VF|}XTkrNeXBJT)Ojdh#5sIPLg+}19Bm?- z7NAv65mZTBzD&;})J$wud7=raE)r;4@D>hq`!0~ zI#*_01~<$Vui_=FY}cM3@X2>5HZVeSR?ma!f_w@N;{-EBwm)SB1r~{+JZ3-DFMCF> zZCoQGQie@h?{mOsnXVRIQY7Qv+I1kQf&D{G2@q*M>Msi{62d5SlKe76r(CH(fODxJ zd|jkQCg^3dz=LWuf>V@B&V#Fi^0rm!9Oo}d3SL4=GF~&(0T8`dVgrY~4y3RT^LeSy z1$TJA|8uJ^hia7wnB3uj2PBD~jald=kx|#f&eLCD>J%KH;SH9+-3;Sd9R8behly3s zkn9%5SVvmV1d)+8Kqh8AnBGO0a!?n~jzFRV>MBYl!k}ipBL9VOy_yZ3+34_B^i}&o znqYV%pHXpKccMU+3SVpjOmA+?EJCgzi;^8Jc>e_kpWm{Lx;)575-y%CCnk!-vS-xP zOhQ31#A01^ktl4F!cad6Emmf+^4!@FyK&U6|4X8U=>h@_OSAZ{rHqZoHUf=t`8(fp zTHynj23{GtPkadXg~-)@D`wVdxJd+9$K5qJ)ky0`Me`)34`XzN$r~uI*-|0nrrrC? ze;DV2sHR3E(g^`}MnI0zgqp?-v$LLn5T?f!&a8JUoY{v_c*?a3lpmZ{K2m+0m>K?1 z{(uX&QkmlJi9`{b^U@TxNHU36Gus4tD#~gq&02VS}Ven{9h7PFUkxVI4289RZ^CNIl;=@3v_`yb-O&^0E2VOQ8{&01 z?aNQ2>qL9I+R_yz*xPd;oqj?ObPuk51!1OIhI>DjWny>ZP;9o|bb6t(*u3}r7^a&S z0p*~BLkWbq8K^e3%myp}c3k-gy?=^*zXZ4i1xXwLa|?2j?92iS3=M1G#u+C}Jj|Oi z+qrJ>m>(>wnxxz#%qI5B5S`pxAMWobhft_(BK1ikR4Rq}2-A>@ruOn;2A?}V<;q^$ z)|BmS%~15gMtx&xIUdEk^}%`egMAcNYle`!L}xPA{A+>`2kHa>^`zGEW9h&hF9njwO<%jc!juF>iuP>+MD8UT@-UO!PU~J(KNw zV$6pE9CBuiBB4`F({A&cyu&#)YV%_MX$Usu{&H=Flno-Uv4h zayDY_UTEhQkkdNcd{th~w>!?>W5JEtPm)~c$jli{>r|NUB2mdXLyElk8(t6l`(}r07B=QiZ_I!)?M=CigR15+gDq{7eClg`cT6(rDdEPV+(4K&|CR@QMWNY zfP1rMJ@sLoX|wz)Cj7h%G2%3noB*hUeBc19=~JUL4;U62{NZhtvyy%C%4} zXo+~cp@5jYUmfr-P=)y`oLp$XDi7s;@x|TQ-}cu&yzwpb2I1)Vz|kq&(?32u1kgip zbaWs+8Cd}ScG{B4gsus4)Vu!QNKbUIAdm9E$Bz#57r*^4E)v33(mdmbr=KdC`szjS zH`y3U2eA6rAMGxxPT7G|-XD>6q2D-+5G5PJtr3y7oP{x82FtFyDcWP9g8klfs0zRK zB_tfZ#&Z=UOD70-gqz~&M2koN9ob4?Y3)XP1uc8T;a1FFyS86=U@1?RfOtWzOUmGO;gd8Uz9SK5HXSK#xJ1-01Ned-%j-BF{x}?*^xCr znn1gK25S`c-WoAv-~~ZvggX*De97?(><2De{qWRXpx)&#HkOVe`JgT zUi{M^@gZF*i{$F8jl;WB*!2If_w8{})@k22B9f7^YDu1$(#*_oGE-DwrXDl4NZE3W zLS-~J$xsnVhr=-AAtfawHAO`kH#4>fCsPCj=0;Hv5vL+Wpu?rHh}-K&I5VPW#c zq!6Qab!j&K^S-hxeY}zJ=fC=U|790L0K@&&oLG6{uoolM7FW}cdIvws(X@ow+5Oah zP0;`9Q^60OQ`~uZXxk67=8P`v-f2EGOI_7>jf~ckWu@8I#c#&NS^fm;Uv|uuyFaB( zxwwTfm5vfiu?GRS|NTH|``5R9{7kF*Wb)#hi%ivHvHGQ13xbhb{I1K zs~5+wNIl%`mFx)HxzDrhx>fb<`mO2nGK{`|DuN*dq(g{@?{NdI5I(k}=s zckTaAq51vS_W$!Ye)ClM#Y6jN{)QqQ^urt5mi;Y0ehY>Xzv!NH=@s`~4VMja*c&m8 z3zVWNBvys3ZOqRh`HwsHM(HUHq|u&bhzOjJh0!=M=&=i)d4T>KW8DL>qz|)P>Lky# z&g(OwPa8)cg}sa1zK+%lAvDR#|19@xab{mp+sNd|r@1z)KO&)tPl%m)F$V z`;UBsU^RluHw)b>))c$e_`jPUY2F#jRS;jr6@YmX?b185l}z&pQJ*W}M5XAEB3pf=o&O}Gi9Xe z+N+j3qwNQjj`@UNkKCxYpBBC_oZItTzbV(<_0=^`u{oYS3o=uO?1UM((FErer!PMS zg5^o3{?Dyn`rZA$$)o?bXO(;xgApr+#~1gmk~oHFE6<)CMz4!zJYV2eXyKx-LM(9_ z;!jV<+84X?p4szZGkfX15K!2bF^~!;Hd%*AwxIBNesQlJV?8ZdG~OwI(e|#EdmT3F7{<)P)!@MYEJ4%pw7@Aifm@@TOtCaI5g^(hZmXF!YTI-!L&`+u# z^;KNoQh0}bafRu1i6aCyBMDbCqVRS_7qwR}xsSp|>h>>alm}XpzYPdn+jrM1s_z~D z>i+ANlad>L2J0$T3@R)4PnxbrRPg1rI~Y+Di>Yvm@vu~{Ziv@Y_S!Pv(gT>f+fvdK z!wz4xXbfg8x*JEp)!|;kV6sP3_VgUc@tr+-*K7j*yvn>wxgbnV85)7axg}cjo?!Rj zaId9fC&9$mv>pE10((8141Y{DTOB`T;w-r=bZdQq328DidizWh#pNbQ2}5uP*N8sv%0!f|BK4 zK>B5Up{^+&x+waJ87Y^`6C3N~6Hz4>-qGseJ@>vLp4DE22;)iN{%t>0wSj772i8T! z@5psq9JOLcki4T#o&hC$27Xz^+gIia@MC1>=O&Z~Cd}wOnaw@L8nYDV0jBB)Ab~D; zi^_E=yiM_Cto3uj-?-+Fy>B+%Z2vs#c*o~sRBfGEDwL;_{#`G~Jx>}Ow!Fyf2OpZU zg1v^J*X1ZgAHhynI<{(CHC(HnzUXGD%n{fr-u>8$lRM+adhFLEgW7EoxE``Nb_<;e zFe*OC9aaM%%JA{qkZ2A}Sxr;|DjT~Be)@}W);aLy_=|@3T86Km}BbVHwH_ z5YBp2oWLvs^IEW$Jqc7FZ19kcaHwhy)J{rxeob-P8al!}zK&EC-C--WF4rC_7T`lO zXO5J8U&)HOw@w!X7D*`^G(zlW8@EmanOIBLG7ikK+r!v>NHeqw{>-5JT zcRXnU?M=GNHX*swzcRPP6lUHG`NROy0at#v&g;3!XOH^Z{^D;mc%O*!rSqTz2i}G6 z)?M&Z+$b>DNVvB?d9Cn{B8P4*#3A?{8^|4?i5r_C*xY%aagM5Yhf{Jod8Ly6N2aT{ z>~*e)3{Jbdj)$bLMs&cTAhue|mG5~s09P^Ys+K_G1&QIrSg{(449KpwT^p^tB59uy z)!l)S8gs=aA1F?smkNrvKZcp>bK&8y1w0)DUw+E?wppfPmeV1*d}Y(!`B7=PZv7ek zT`v*FitaqxasS5GHiw3o{!T3<**KjevM8^Fm&LkIK7k3f-SkB0T*s<@ zV@%p?QX4bR%_(~SHoq~@S$b|nSnwzrh`}*R%UgnZd0P=C1a==o5anIt8uZBMxsP&l zn$K-rl5K6ziMKRH&yGB9Z529ZsynBM_Aal)48p_G#%lWguWeRjL?mC$M4mUDBCfCvVzvB{#_ zZQ_l4CS_oXF>aI#QdwPwd78i$#V-<7Y3W?|l)I~9jr(HVbDWB`Yu8?Uom(H(H6v;h z@^Q)&kE}dsJ*eVD?jF7J{ClOH{OO5VW3OX&L<<1&y*MjQSAy8KEK|boldhhbwofxX%Ucxoqpg>kV)I)Exd) z)^h2Dz$!kxn$-MKxO#6;PhslicDDN289gOkQU2TqIVTFFWogI;52Jm#JeJ$2NW&V5 z`s<^{=cEmZLaGE%L-8LQ_3tFimYn`(p0_)1{CTz=C+Uc6>$9NzH~H;d4W+x&wL&%~5pK<3mOLwYuXV)y7af z`$xui@YsO7TKYCqJr}$C}^0{%R(b>fLCntMTmA^s)gNO$=%0t-U^R02#F^o+A>q(7iYRNy4Ocu`e zE&#h2{dJ_TGkQ_pHU633ElRuIseO4ka~k3KggC`U9~{k%PIh?HTW@pPmbfP-J5rr7 z@PA-^(nC5FA{|!mjEFga;QnHy!^bXv_(gZ_;UMWQ-_~57TcK7PehUK2hU?c{XMU{I-aj4=1z*$}o$k@7m)^_hiAj9QpU&uZ~YxMhl02 z7fuPNN!~xzipa1zxp>;O&m?}oC$^&}`O4c_iu7xv!;?&TccX6Vyoy|X#nin3NfUlq z4*5OSTOkf-cmB?uZ_rm=uHZh_RnA0;TQ>ib{R0RP+!>_rz`)8u_}T0=x+v%d8&rns z#OBo4-i3;&BA$YDMnSD0%0RihtmJ9@-96c|DX^^g9;jk5FQt>7b+l&5`I*9tKqtA8 zc{8%DpXJ2&HO!0p*l{HaL&{{My}d&L`N>yhWpMi~9dZD*tAoY0KP2EY6C}9>`%v3T zA7^rSX*&LodFy|%uoR~o8$;;*u0zvvy^|~=A+!)qpn6Mt4@(Nr?UfKqcKJ+Zx3!L5 zN}F88ol%|ZtiaHqmsN({vbH+;<0>vmbtygwxTE&d{0hXWzkemW_#%sV`W^I478fRL zSET>);T>HfZ5#z2O|*@w4bP=xL*@4>6$cbmJw5(ddkc&3gjbn`Cu)k~{SxWIONkaP z%~EWC3<~~Me}2#7CYbl=V5Yu7UI}FQb^%Hu1#QruR_kaQGjNiBMX~ygioByoANuD% zw7r$*%|A&TXkQQ6_}I^I5dUB9jK5QjQ$zczB}m;>S+v$T-1pw~%HTu3GEUlVJ+V6K zLAZJAwJ`VG7{S{<>eF0>nX*_JVD%-hNuJgWDxl^ z2}c8EGcYzJDm8KnG{+L_F>MP9h=RBB>KbB2S;lO=@r{x@Q`iT%-5IVAgh(5?@LuVl zW`V!u!6y9{QMx1LTL(Lxn258UdtaM1C(@WAHcUrV?e>IqlZ{C1$n11AIl8~dH$0~` zyTmor@Oc=zwN4v08|Jp{q(5k-wd4D~^ZHP|b3rT=g{@)6bF$kJGH<}<-3@vb*Etx8 z@hPL3Sm!p?*`SifG4T-dp*|g_?Hz%w(I!7OQ02I(x?EgRn*~eZUsmu%48|LBkK&i? zySCf0di83_tt7Bb_OKuHS>=HP(OFHF}-glJeu3Q-@wzsjD z>5lX;T$Q-L00Uq`l7YxDS3F{4T|$1Qu2gGYU8p@4=8)Z;B%j7etcil^3u&3wY(2M< zE^Du$g_EhE+Xmle* zmXjh-HUI}QY##_8KS@fF9bjflA41}gw;GbIZ3tRmQC`SVRFR_LQcP*Z6hi}l*hZvu zOFa!|1%@kpFQ@4?s|{m{dPhkyR(r6z-A9ZGL_d9EB{y48)6%jVzEWl9>3V&q-1kh! zAki(CcKet$h1;-r)m_Q*9sQN?fWN$K_`BfVaU$^__B|Ep3pc((bRfM>mLAbu+T_Yh zTq8CvWG_M4kCeu}5_=V*#A;mos%MBz%h`*uT#wT997-P;J|fxzn(nUuN4^RA*-$4y zj5*aEI~*x}x|DI2pp-iUC8n(c4SRkj3;9pEhC3H~GE!BfmCbB}j35tlt>vS#>nAC0 zMy%~?@S-XiS!!D|+mqG$9Q4%k;9sx0hMrP=u-JyrCJuH_rla;bmHkO!xkFu7|7uK& z*RJ!J%ob}xhmwo}tU=$teYxzGH#-FgLx6J;Cc%og>#fI?ODz}`Ib~u3TIhE`ay5N~ z*%N#V1+9=`vyY$9_#C*Mbn3H)z@C!MU|Gnfg@#UfqiY6(oWUFe()?HAI%wh!V?s{C z;GP0JL@4wgAi@0nm@3!Ik@1vj@JU?~9%&K$O`1x1tDmP~tI~2}aY@2v1<(UMT&i>XnG3r^Uo%iIu5X^qQ+h|2d;8P*A}c;;WTo={pJLQJ50f81F9 zjl%hJH35U$LdGK(0l-=cO;#mngX{=1B(9FcOli{e_X1$G3xVCyW&7Jq3gFyiNwO4l z7P-!cyPhN<#j`9zetQyCjTQ%OKZ=w2h>mjIT#@0h4G`3Nd6(1;;izYi6rxR&QD9ad znsuVwg*Ytvhjfl0c*O(HrT-n_H$Q}co`e{N9udJ_7pRQ!zhyl!4l})*K8cWD$ZVBB zZs3-p<#s*I(BwW1f;XWX{OJz?e#*Kdx#;yz~(h^i7ur1S{#bI6Y2x?IGtqYWMFqf&N(%gWF(Kmo>h;6m(rADc;Lypadm{m(B+N!68mw~a= z;FH#Q8V0E>@0FN?)RQ$Z*Y&nR_ha{9L{?8N1em~;N+uc2%w6fmvThRjyqg8#T5=*jrh@}{HVutIya8R?4Siig| z!8n}13GlJJFlEZQOV$v|`f~m_&@AQVSAu>vWqc;##BS zJ%QF^65Eo#C$|4o_sz9%@AZ#j(WaAA5AWE;`@esuoyB zxvk;ugLDHt)k#|D$*SJbsKb2XmJ4yw6sg|p4*x+bv&_7?$&=2I552^dQKv5=5 z(S#cd6qbQN7G54Ky0@iiFAq!P3yzq#qH_1a7hWr732Vk6e)v0~Vp*e|%q)DlP z9S=!bCcb;Xc`L&;oV5U#LGSOPFPBx2oE7*2?5aE_^xHRt|E)dZ?kTg9dj{xjYhr77 zi1@VLISmmhISdk9w0-lH)vmt2p}1k(gXtc40jJ4ML46Cx?*>53mK+CE+8+TWwwEaW zU?-l$;n^v>eYtO?ZS+OcS{(`lR%UUDIqSRid;LCp0e~h(ou8x5GrpyDqW>*qcg_-6 z-TI5h<@Lb@VoaKE%VN7zZ@}vm!5yU7g4)bbP0;ft?YV6Z5sE zx%@Fo;K8-s7RQlrlx>i0l_i%}F7h;l;HeXSI!efWBfR1*FAFka?)gIJS%GU}-b6-X zC=%2_DC|>)Gk~ux2)oUj$S;)~sca$N`f@LWEkDvVry{QX+9G{3M6pu<8rPo2nrS#Xdyo_)QB&l%B7Mfw(oJ(e65Aj z4=wfe;&!jwXD)fB)D}4Zq_9}RTi-1ja3sIoCAw7$Ih)!(#Q-_YHAbefaL=+3T~<`H zche9UYgm9kazCgrgeqQ&8C>Qk>j^!XUv#$rdg+X{&w*U06gETDl}baEBc~rE27PdhXJ+5CE~L^7@v!olxG0_mH-7AHSDb7gAbcS zwB32uE;cbZZz74ME-fm((6!EVewzQS-+fwv_0Bsg&Vve^OS5)j)?71Wm=_WYr1E&E zSjnaa*?273-=g`F@0ZW6zNHKS3@f?v;2x#I~nwu8cou} z?*@2$UE^A1-YYRL!N@F4b5Y*47&*}3J&Tla2sqlMzu-bfX&BpD4>d?^8~xA7xm0{Y zJ+(B+5!kYong&fC9?QZkD7>1IcZNHE5E2Qc>%$>lw+criRhho;Clr2`-(EBhb7H5ZvWQG5N6gLvheNLAvIYr{A8V)_w+KP9c1@(yX@8ocqoF^Y@S zIx1bG1UnyNs7*g9(svOqVk4NrhizYE{VJSW>u+ivf%cv%>7&&|+u6P8;ib6HHU z3f$SUmQ1-1n&9BS#8lO#v{^8R*7a(Gtag2a>VNq{(R=>*b6op!XK=fhJ#714W!*qn z4^okP4j^y_nR8kYG!X`SwHkmky1$UM~d{{d$Cdb>5;3QxoV_a0EO$X&r??BDD_nJJt_1l0~%oaROou+isX6+zadfR?IEs);9&;I zgqbp1fe}{DEAeA0cWJG8;#QU09w)Qs$nGP`O`bOcYmo;Bua!R+GkD`_|67K&FU3?L z+UNnbAxyoM0P660C>xw?lAGq|rbnnQib*J{xPIHOx#XIe>&PO$?@o2V6OaZdSh?F_?^;yms zS;HjRU@R_OAARgeDR&|avz5KW2$lAK7uK`(YBn9AmK(C`k&spq>l&u$t;=Yu6?e?V zB*=%E;^Jh!!NTpl=s2=A#P=q!WpppYiK?1}e^v`k2V?x3t(-#(LJA zgSxC_FueCkrXzYtMzeq_TGkxD*oA3fX zw`?UHL`lt?KEHn#`=F3$@dZDVi_Jb0cn5gO)u0KH2%E4z zyFSBtU1$sgs}@{vZMVdcE^a3XRpb81H*~lqXjbs2`R#PNrLoQ+f>X(a3HLEy$&jpJ z`pyZO)#zxohWX+$?-Fg0;XRe<8wO!|Z(-rFd(kOn*WZZuvwo#<%@NrrXwx#~RiWl{ zr(WTk#^?pgc8q#Hf&SQ#;U3RAb6EtLLL9L*!*O2Nxm;u_O(f-o@2SPdR|Zg><51kv zQMmD3Sj|d1`5WMj%KkpSkOz^}=)CE~bfH?U~^43HbJpkH_1lDr>O5}Qx?PsFR$=iIJ)r!$ zr`T?)?9bZOZJUM;&3HG!hF&*F-kKxdio+wjo?hI^6Z_5n`o1@U3x4n5bBEC8+>6ui zHZ-3TwcHkQ^|SNAny3f;czsR=)+(`1)Se>-Kf9hdDx&&u&{~Zsp8+j(E>gQf5j8Q9 zUo`ABM08KEIOqXEg6)5S&~#fS@h7;J&{DO_u_+zn{HLNv1Q@Ay0GQD_wup785sCZ6 z+5IWD`NJ>zUz|xbGsGlSThlW6i-Np?I!HpzJ$gH~(eHk<3543f4lu>s#Tru?q-h7u zPHcVH;=ta01H?oQUCc6sNj?RIXhp1bbnv$t*ST1X9CX2edTlqgqaE-}Y?sy6DMn&H zE4g{v^9z+5f;2oKn8w~+1TU{MA?jmfb_$o_0BXp#pQ^Wg7Vf%Vq&q3vO!TYgkpF&m zLe67+OKDk8Cz_KE9sVG@mZO+O=u7aoXIqB#vwjk1hqk53fskcPHXYPsp=w7~UBKN( z)eu_Xz+Xuc>|&aI=L)p(G7YS3Z}7JOPU;QFO?!9f(4BBhIy{j{#eH&Zw~DI}G!yx> zUlZ+&CgCpTT$&zW;IkV;p^8Ckifl<#0O=IQ0vl}TBbqt@@p#*zf|)^AIRj6i{}sZb zpy(Y;P?f}zt|c{9Iq51);C^2wxq|RwrQ)*V?JSk`j($Khi8c7nI+;)eI+B=?6J^e*)w7!N_(w!aH(UPwXZb`ytAl+{^8-Bp`ojr8x)_qjY7wih&I zacT7;ps6_4MsGacMS`udOuft%=w?ujF~nHu#x?b%V+6(?8Xv7gSWe|ETnQu#AuE4% z7JDPcEa}K_TU8zj#JhrkkJ`5^#4ulLFQ>KzYtj6L()K!20wW_5aJEEX_VPH&zR9i> zw|v2n-RyCae_T?0z!v~0_?hOjzGrq>QuGCF`yiwNF9KhlA`4O^F`SLY`5rv%@85ed z)sT!@r(bo&tD5*XW^6+Uo!pe8NC$Z}lks=#Pc^Icy{92l-%QskRjToo<19G(oy8^a z;S8@kG`lL^fjKW;8$(5{kCrrbsh=TunCH$3DIe4fI3zr=vOqC{cbl&>_d<@`S%L^X z5s5tTfEHrVvj*AfM(;QC>Ucn*8_SyRJ)duI&|+Ts3jPsV z;g=zi=fxv*&GFI7MN8kG12LcOj{v^(kDjk=hvWIZ;nE|Ao}{( zVmjh76!-HW9szU+haJs`+{>H%>fskw_%S&P{C~vq39dlvfkW662a1P*7#5_126i5d zSztm0?%`N&r+`W?{Msrq^-qm;uTa&P;T3W0VTe{}NpEVtdc9#WX%(6NC2?;Ggj^U* zWBu4S$Y^&(ItCSHL7_J1OYO0X*3n~`sysgon(Dg)4fBfL;s&vuVN6tDHQS8C5I zxel=b<$KJjeYkPqmGNS5$jx81>aqvI%aW(@>zb&or!r$krj4=$@i+d(P|<#FI~_m_ zLCf~MC}pVl&fgKBI2p;^G(XnriS~}Cm8g$^q_It&ni~3J$vXh&UGKY1rW#2mvNyNU z!l9t;gO}SMlDH=pY57hUwF>_LQ<}O~C*GR7rt@x*j}x~2(F)Etyfr}UTwkQk;C@gU zP)-glBRrUMs6%{HF4n+8k-}dj1){bEuxXqRRMck}zEIxV*Z)?f;!Xr% zrryo;HMkUQHbIrJ=!T4|`1er!pXXhccSi0du4TNy}GTE3Mht0PGT)HV=wxQ-(Hv87{LSjwDE`{ zKwMm?k&?LWvHregnA|=A7ZyWzXMc6g@YM@1wfIWUlK^TiRX%j1fI}~d%#VlZl{rHl zzj^FB7X@U-@R+;6wOuk`X-v!(EVM^U{vmG*;&7t{T+bE78B6m>-e&*0$cVz?3fElK}1L?c~TiBl-ovO}BHW%0eEY#9*U$tZnpM$2dLD;~j& zLlD@!rqd$lgjUEw$1$WFOykem90)JxG)e@K7^EKW7@&x@JID zQUI9LQv0{ZRTv>u1sBnErXyNaVqUMU#M%UGHpzNN$UTUm z^zC<3bVb?;0^3q|fV)qh%>z*$;P|5S?wKX`!o&wr6GQ&#-l(-Tih-ulDUNt~>w}%< zQ5p@so7Y}8jEwC&gLv+cZC}in)#IIjXdSu{@@R2$cT?vOj|9C%wrJ?kp*EaYqd>tk zWtA!S928_$0($8lU|I+Tp9iba(#1Y0w0tA1SXcDo@Y6Q*rXHxX`b#5z2h_}%#BX>6 zy=H)^;dwW?F;kvN-?NkD%WS|#m}DYSjwwK8Dx#DwxX1*NL{*KAo+v?*RU)l{Q( zPoTYzLr>mSz8g&$1U_WT_Dz7yxfD8X4A7dBk<>o7 zpM7>nT@PDeSx#DsH!s03#rY(bGnZm*psRAmkY0^Wa%_F13Pi|yrAExJez(aUAW@RM zKk8!y8y9q7sudBzE!dO{&&ODbjTJG8YrvBaB|RQw#ADR%T+=$C<853s7)pNzr!+%n zYUPv?XV_n2TEZcpwxY6G&&XZa_{b58=-k$&LJTi$RDuURkVN+|#bBNz`UqYE`K?g- zCe)KGNx(1Yxw8_`MsAZcG_k#0aG93bfVG+sUBZzu$HnD)vYqdfysqhPx+D#=?nllH z>~wyobPk~o%%=N-Pe6fXamtdv8k<5JNzYt zfui>xD?VM0wBZ;t-S>!{&4_iM7AzYZO2s(x5^Kp*c+Lz4E)hy{!yB=-q~N=c2F3#( zrwzD}+G|`3Je(VvVof$YCw4Dn&r#2Vy0_cl);szzcP}s=$v8%yQ$o=UAwE$?Hdl1-3*pGqMs^C*Kt6@L>t%HK3Sh3u30hkrj z%fgzh5@XCarTJAOl+O2YG0G1@p7|?{Be$H-KHReMJz1C3`Gm!BFB}?GLS(PsXlfV$=`T-i&;uI=n{H2L zf}P6>4BG`3d4v9D%mQSRIM2$iho(%WrWck32dfW4dbG-TN2p;hP#FWdZW-_xA_vbF ztIb&xwmb6Ph@p<#)9|F~-fJ%mWFW*)RN#vA;qPxm1jz-Dc^JMCy53aZGK=?N_PlU8 zluLJ_73mQvS2J7C0XZX{nAi{J;v6h@fw$Cd6*_mvw#Z}c6{-tCYG^Il4Eu)`8XFP+ zZUD`#Y!hGl{Wr`|KT7?NKnnQHWKXQ8D{PIiKD zuHCn@Ty!UXWq=Kw!VoHkHtG89C^^!E5%?A>Voj0!m4;et7JyA`y@CcA5IeAD)B5Sw zlmnHo#k9zIMX;y1c^tqTPQ(Y0B0l=ePMz+8zhkZF?iOu&dirdJ@YM;TdyO`e%D#ZV zjX}8*?2WhFx6TG)C&)Ao+vnJu%C| z_QcG338=`$k>nqGlLTN{WoHz*+RrsuAd;fcs5W`Ti1!0!eiDC!riaA z^XXZFpk`<=!!ZQvl|owOP*^h==M5z{4zg^a#zkdpkJObPZME3HQ8|aYk76vD`eA|n zdHp2>*ew4de=X~$I1y?9m$*~bU8fK*RG(sS=8{Szm7(y4A0y##UDCv+u8^jKj#Apx zLif3h<@u4d>mS;vb-2VjT=pLPGmK8Lr+#M{$MABaPGF0W8f`dTz!Y}%IILFzt}yVZ zST}1N@6xyDPmxhd`=hcZKlupi7I+*AA#T3B7>WCix+<$RBT<6d1ld*6ZPG-Dnv)gH z(F`wIcr`tkf`4)Gfk2)c{4DZFqHfT z3&pp$6t>u73bmn%_GDv~vhN`T8?P)dtB~kwJcDLeE!xe@+OR51WBV$jeYx13Mp!^D zD<4bZ*?YG~Fx2OuHg|b2Fb~Pj>QbJi0T#Ix20xYnCzUXah% z4z~I;?y1YScq%~wMKCJ-2pr@YJqW(`30*s4y_?D7V*6fbPk78I=*9@V*Apz# zlrVRI+TNwkyz!Oi(jpLHfYkvC0AEpK@LU>dO1qJc*B=Xf^y-QI*X~J?rR&{**~xta z`0@_x%q)U_0x#QIX9pTKomANU{y!=WF^GXDW#%cl6PN_27zN^Gq1X|FC>-?zlfuWg z7401^JD;i!61rZ?Xpsx-XZ7d&aYe}S+W0YI>XCw*L zxB7v2`24t?yyD2K$b8&UsO_ah*qDR-C3DFoaxD~nLWLZI$C{wD$i~c^+37@_*i=Bq zbmFy>QZYeJdkTH#BLt-PSiXaw0CSX5yqNy06gdOKHo_f)G97SdKm3e0>L+iiT-$kX zu>UQfJ(@!Ead_eh*cVv7({Fi9h9fxuDdGZmn!=+yO_b+1wL!KRX&zEN}VW`lF8rEDUZ7%T2hFsCXN&@xt2`7@(MI zAfFOK?wSoN-^`_I? z;H9*DN0)ViwR}y>bW!hIYl+bLI8{^>>!l;yo0K-wn8%E-3XIva_E2r;okUPPFR>;C zBSE#NcbzxK*Uqnl$ick~;kQQ!|IWdwz{3X?X`)Y$h0r(j!XewjUH4S&)R_ItVB`pw z;D0EpatMAqWEJFy7+^q0+%CRJRR-B;#&7pdBB6;TNa`Lh+yOrj6wl7CN@D|Vr{oaVwIJ|n zO!Hx_aXy?ch6d{UX^MRED+}A?fsF~s)RKj0G`POg;@HN<6n8Pfvm|)YK%d@(U~vyd z@7x*NFP?uq_TE7T==5^hjv^LyzxP2+63WCRW@>l0S-YLf4hU?8W$G6462$ zT7W??q46vk5WEs=1LXlY{(=h%WahdKc}B8xArf(a_gQVdaieKqGmI~VUB?{>kG%9} z*kAxBYoLb%74XP*?>V^Msi-2U74;#(Vh9yU{sqqjYz^NONSQKvVP6-WXf7(nEY8On zSlRb~KB$cD5`tuCLnPeJls&8IzI=NGAY7PMCt8xB%p2TeLD%`wYXeXs;lXYqDS9dw%uzo$!S)_LL#(BpJg>`R?C(jc`uAsW&5$`aqG`Qe! zcR-INN6{y3(683s8A6NWxnmEKQhK+;1!!?LH%ip8NAw}qohJ%4G1P!!wwk?GwWqR3 zOA^q8HHh<_kOE!*2;vrf--prv#+#QtW+~j`xyV@8K2-*iU_@PsTj~_A_gKzP5+8QB zAhI22Nv72nF8z{6qli^i1v!4=x_jru@Y_73^&=4cIrU7N(rVA}AZE1MQ+(V}mUv1prSi%4^!|(>21mp&1b3$Aj{NIJClc`^{2=Bv< zr(#Jiz^=yx0FsMA6c-640Ds}=bboA7Z|0A5nA3;(KAY7WY<(Uf&Ea;d?@~OeBh)d( zv2bo-C@5@XFkdkx5Zw+&F_>LXzWV_rE?oH@64~sV^#7B$7rD2@TzaDN(38qPe#$VM zdxcs8X*|CMeFE@pPH+L?#kgx9*oXlXd;B_~bnKDd`5_Lm)c@sB5`r9qQT^ZEiN2S5 zZ|Gy-r~y2MDB#AXj)0HPdyWG$oW!mfzi46>Mci#Ua}G zW+x?wKMcyF2R|xD_Psa85hWZ!)M4m4)~u7lYy8hG<6f=(P&ZTAOI8k5J}POQtRmG+ zViFWO)B;7RJL(l5fVdO3(mi6$;9&@Q6pCEl$3kFM5n}4t;l~Ct846ghv_Rzd@TjY8 zoc040Ae!#^O}A!vT!#(!*%|JmyvQ6iRhj4NRhMbP@U#Csk-=0D?jtSKYMqTE-h@#N zd&aMGq3HG&K=agBS|=1~ZRX;VNB$2x&a?6TwtQ-6g2h6|Gr|hj2B{_SdC@(nx+AA( zy7Be&;8J%MDCz@Si)x}nApZHc%WW1SmytVOZSF8Uj=g1g7k%Yo&j60AHp6oNFL9^={g-!3AnP!+X|_PR1R4_xebT zMU6Dl%(0ZWh(&l{W32m{pcB)DeEIX7FkB2&6twh_M+N=e5OTNa9?d2KVX>kSb`Uyf zi5Vb!6~&$Hf$gzK+jA_1z$vyom$g@8UVRZFv7zlIvjf37!RJqsw6#kWRL)*NUtev8 z+BJ-EUeh}V^C*K{0rq)F8BQNw$Sl7 zFB}5U_7?~e#Ofg$+=|>287X(m4`@~phNky*A3`^_2j40&fHzs-2v&Udn-3>jur)yr z(Q7LynWH`?x0YXyr5aq90R$mxQ={^n)4)A0(Dt(Fge`7eb#0%cnw+K7c_6wVw)Il}d( z3|N{a=F$`luSESJ(gX5-jBG_o^U}*S?5gxmwGpzfL1o04udmDQ6o3EYBG%qnqP5i| zBB5c>(uW_Py5wdXkn(LD>}6nZV#95v=~0w2q`C%|f*jCxNEAIS^*3*} zZ{qVaW(P-_Vlij^Kd;KqpTM>S9cfAXlcpOLV2||u zQ|)qU^(@8iGco)g_ccC6rU-l272Nm|#WpgO={EfO#X)f}U@aULz+~oO^VE0|Axg5f zb4Z*h)Hb<2xJY_&mSj2`vXyw-h&kDXxMH^_np`RIzdip5ZjdY0}^k9C+l0pke53tAx3zytMtkg^Hlx46}(NA1UzII z<$DF#br7fET?TuN*Q+1ubk|P=(06V9&)-$h0xPk<<%1l^1w;@^x;9)nT;Cxt_Om2B z|BJQPBgLzNObbUdQvbSa8Gn7b1@lAmq3x5c$3z_NkdnKg<<*Ep(XQ88T|Cr87eOUk z*;R6Fib?r*ebAaS#yO-k#9vy=VzNLM%I(G(gpy~cChWrvvld_8n(;L(?k+kBy=E)q znUx_eU(n8K`y!mh@Oe5Xv8l)%M!SVizCk-EYF)18#r_@ZCAz({*PCW>yFX4?Q@P=E zp%y|PMIQ1Kmyw$IaRw|pUOykTL&rvc_YB1W_6?2;|EP~ial;cSFdbjPkg7>K;oWs? zW0-?($M|BmeL4w-g9~tIuLMwaBQx2w$U5bl12S0v+3CQ$(u@+Kl(XiCMi`g=oTFTugmpvP4*2<7}9QEzqPG8~EQ z%K=+)l!{u<^7>vPJ)b8XZqgV&2MOlGbnUGf3CNTQcrVYH+_0e%d!OX?woK&kuES$4 z)Y7fRM-&l%=XZXAyZDnQg2e@mae)>GDYxAdDFy=fl{|syrF#dpSA; zBPobuU?{R4oH zWZ&ZD1$@17xT$6SYw; zKQQZXC<0o!fq4^YbC5blKt@*i(Yodu?Y(>$S(O1V8wCAFA<$(E$Ab&^FE4-n=H-Ov z5tha;S({Js-!O1Z@!1n+*^02z^GExy3u~U%Jp!TCl3|oKbo-;W`^x$m29o4CmO!c# z^)V?TX~xG?lFuFD{yg!1&Yzqw@VCGii6q!C^Uzq!i@chNH=2@kTMtvU8Jg?+5zmWw zwJO>+BnX9jy<)k)3&SPI@Jge0N)LFSai2j>814*3 zU4`iszp05xLY>A`OS;7lmQobyYmv(sDb@q&&EXkR#+l zWFTAg3!>!iCp5I=k(Fi@tiiS-GngPPfBlBly&h#*A9a8ywN+f-U<^;>9>761z<|xu z#fQl7VR?C2JWo|-=nasi4Ooga22>Cf0M%nTCNXw9!}=_~MR?rKP%43Yq||>kkdu$t zrYStPu=%qZ&y>5NrM?p5Rc#gV$bi9p*n2^kjqDnlkzn1D0IJo8fF@fV^5^uFzC;bs z02+5z?D53JH=kNj@(BEJbk|W!NHJ}477m`v2!n|wM;|sjcH`t=G3M+EY3tSgy8IXa z50(E}+x@=Uch2?99$>lPOu$hZrT~yb_3W`xOk!rTW!X-JyO&}hYL>@8mbA$E zoUmmxXRg2)Ba)Vb+zr_+v0v4;70A27Axoly7!=ZBt^2UJ!$)K}O7xrdaxkVl%SM2e zJ4Xnz!_}PO3})>yiZU0~dx$!N5|pHnth;`apUNRxF&D*{MOi#o$hcqoM;wStapJ}T<*8CAJU zk$ZVinXJh?ewqez*0nfXOP(ekLt=u;d>>NR)dR#FT<&z;gH<8rzcWvK8RO|Cm}uh8 zMgdnnQ~2jUHwdTOBL4Mfc$UqyOgUx}boja^T(9;QvgF;v+0_n{`Ixq_$-oZ;`I zx)PaBviq(k4dL}gm{LBE!l>fF-x*#NShnKC_q@?5&wtQ8ai#_&>%3Qs&!vqYU#PTc z+pb1+ypy=yFZnU{9z_1Ju4_u9nBi>Tjr;V}E|HxO75!OmCi(aSM#lF<{PUmdC;co% zOMoPpa$5-9%5b-7aBj z`st;29f(du#N?-4b1-!l(R-hMQ{#GXvNPtB;WRp{b!+0~qk?ljs2f4CQR%|@w|eCs zTgzTt5FYzVJ*e#Ei-AOflikxVn9h^GqaIZ2{3e+nl7|{}YH?EsNZs02r zxa_g{{@Xg`?bgI%_gKD8ZMvMxqUgu0tbt`Z8H`kd$^lNV~ZqaVzwnJ0a5DUvg*}rZb?g?m17xW)6&nawh>0qJ^$RjeCtK44-D>0aG z1fw+DBpTHC({zNT+mN3ymZlPENNU4Sj1KHSTyIHN5IZ~8YFAY#_IALzjPur#yQF2_ zuwf0F;Cf&8MU9yNdVWsN1quP0M*4SK7n?GGm&LI2R;*(qeSU3(%;1fXgK(D(!SUrD z-w#;R#m`^X!Y^@Tr$zekaW0e|Wun+BEO!lN2sOPJQ3H&UIr*M?wy?$xSUleElzS)#pnbdxSyhxv_&n96E|RfiEB94#k7Ln~%pb|KusoBr5@k7W*`S1+ zYr833uzd{MbJA*=gS0jjKKowV9Bw=B``mEu#ws(t9vr0%2_N>-0LEtVCG<^bE-1KD zxT8xY23OS9*tDDP^C$2mH}ST)z4fLsECM*dN<5i2k(O1nR1TkVcb#lr)PukMiQO}f zv+f5h$r;k*FgofJUp+Jnr}UDB((`i*cX9WTfzFEn6O26?V{nq&;86l=NCVo>sQ&H5 zevA#pg+`{P5X+&CGiVXTTS5Pr*=#zXQd11Yru&85aD?-f_5t|r%0B4~gQ|H+-L#z( z=TZ(NJ7|rlIKT~{`ZxSgjlED${_Toiv)MYaUgbodVVIUe` zG%#MOUOi6<@-P&`!Cu5%E)1GSN}q1;5NUsH1%Pl5EzkT|2OBOzGKNGr!?O?P%M^^e41@idkLI*Ws0m5wHvfjuk#0KJDi^q- zY#M}^tsE0uIA|lu0nlDy#vCj$c%wydsm!3?MFZa;68Z-Qx<6=fP;x0ZjP!RnfCrZG z2@iIaV?D5p*QoFW9L=?Kd!EL7g|=iLPOIA9hFHkO<&=n5(3{lG zV(bS3D5&Na?jWIy(pID$*i4DnK#t`rsi!>4mt>TvC38nB9<0n*jalct@H!puV!*lB zz4=_k6=Nsy<(Nk^F!y*=xEc*ryO@{`RW{fC^LuiJq7AKW&=WVYG7qylTI|zFY^7;N z%pzMihHc4>XO+$a65ZCSS0W$Bu}up^>9T2!PEg)tIwTEJU*F^0tK-irKKPGoqnKDd z|Bd+H_fh)g#PL?mhMzZ(xR$E5A}!h4)>3z-1ZTUaL5~Eh?at5>HDvFL+D|VHr?dBt zKXD^SmIvnC6Nq;>eJyo%|KsIeheTbGO3FCm@p+{MnA+e2jubMc5w*&_K{~}0EzC3h zk^|q2kx!Q+?&VVogOK0Y?LB(iE+{4^nKl!G%Yq+xBU@QZc*CUNmX(No%J1}1 zTeEBy3Wa}Ll;vTdMwl+EsK1iLhyMmkq}oa-uu40j%!Gto2^B08<+>WRQ`ffxnSc#? zG!wAGQX~u-wk?iQ(sVcuL!{;iLHuJ!QA!=sQLt4_;(3#|V)c^b_~<*P=O~$rht^Hb zuil7pQw$8RMp(yEXdGC~LM=Tl;g@7k)XB*)bP25A$!;g9%}pBMtDk-VY&r0K54V+qgm9ks)SrqRoioEDfojy?>p>!h$IvvV;b z$f9L^b+9e>b)R|#sk6WOUfGK#^R^a-T(QTn90_(mlgSVCo@H?~!S=Dr+(3@;fDs$1 zb=S$o?h)*{r#}k*cr`DdqQA-xL?er9ks)~P)GPkzz1vl`!&=uu_en^81|Wu+qG)Kk z>Ax*4?r+7#j^F~K)D;eC_`sz�U&hFxcnRR4@J2rCLHO` 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 literal 0 HcmV?d00001 diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index 6f7e2ea44..5cf6e0962 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -8,20 +8,32 @@ keywords: payments, bigpay, currencies, currency, rest, v3, payment access token The Payments API lets you process payments through the store’s connected payment gateways. Merchants can receive a payment for an order that was created using either the [Store Management Checkouts API](/docs/rest-storefront/checkouts) endpoint or the [Orders API](/docs/rest-management/orders#create-an-order). Process payments by making a sequence of requests to the following two API endpoints: -* Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` -* Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` - -#### Required OAuth scopes -Add the [Create Payments scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the [store-level or app-level API account](/docs/start/authentication/api-accounts) you use when you [Create Payment Access Tokens](/docs/rest-payments/tokens#create-payment-access-token). -Learn more about BigCommerce API [OAuth scopes](/docs/start/authentication/api-accounts#oauth-scopes). +- Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` +- Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` + + + #### Required OAuth scopes Add the [Create Payments + scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the + [store-level or app-level API + account](/docs/start/authentication/api-accounts) you use when you [Create + Payment Access + Tokens](/docs/rest-payments/tokens#create-payment-access-token). Learn more + about BigCommerce API [OAuth + scopes](/docs/start/authentication/api-accounts#oauth-scopes). [![Run in Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/38daa68bda00ba9d4734) - -#### Implementation note -3D Secure is a storefront-based experience that requires the shopper's interaction to authenticate the transaction. Because requests to our Payments API must be initiated in a server-to-server context rather than from the storefront, any 3D Secure-enabled card must first be saved during a shopper-initiated transaction and then charged as a stored payment instrument. Attempts to process any payment that requires 3D Secure verification using a card that has not been previously saved will be unsuccessful. + + #### Implementation note 3D Secure is a storefront-based experience that + requires the shopper's interaction to authenticate the transaction. Because + requests to our Payments API must be initiated in a server-to-server context + rather than from the storefront, any 3D Secure-enabled card must first be + saved during a shopper-initiated transaction and then charged as a stored + payment instrument. Attempts to process any payment that requires 3D Secure + verification using a card that has not been previously saved will be + unsuccessful. You can process payments charged to either of two main forms of payment: [stored payment instruments](#stored-cards-paypal-and-bank-accounts) or [new cards](#credit-cards) which still need to be saved. The API flow does not support hosted, offsite, or wallet-type providers like Amazon Pay. One exception is that one provider, PayPal powered by Braintree, supports existing [stored PayPal accounts](https://support.bigcommerce.com/s/article/Enabling-Stored-Payment-Methods?language=en_US#paypal). No providers support using non-stored/new PayPal accounts through this API. @@ -32,68 +44,70 @@ BigCommerce is only responsible for the security of payment methods while the pa Each recurring billing app that uses the BigCommerce Payments API and collects merchants or shoppers' personally identifiable information (PII) must have its own Privacy Policy sufficient to the requirements of the European Union General Data Protection Requirements (GDPR). The GDPR must be available and displayed to the general public. - -#### PCI compliance -If your application handles credit card data, you will need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). + + #### PCI compliance If your application handles credit card data, you will + need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to + [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). ## Compatible payment gateways The following table lists the payment gateways that are compatible with our public Payments API. Note that not all gateways support processing a payment using both stored payment instruments and raw card data. -| Payment Gateway | Stored instruments | Raw card data | -|:------------------|:------------------:|:---------------:| -| Access Worldpay | ✓ | ✓ | -| Adyen | | ✓ | -| AdyenV2 | ✓ | | -| Adyen V3 OAuth | ✓ | ✓ | -| Authorize.net | ✓ | ✓ | -| Barclaycard Fuse | ✓ | ✓ | -| BlueSnap Direct | ✓ | ✓ | -| BNZ | ✓ | ✓ | -| Bolt | ✓ | ✓ | -| CardConnect | | ✓ | -| Chase Integrated Payments | | ✓ | -| Chase Merchant Services | ✓ | ✓ | -| Checkout.com | ✓ | ✓ | -| Commonwealth Bank | ✓ | ✓ | -| Cybersource | ✓ | ✓ | -| Cybersource V2 | ✓ | ✓ | -| Eway Rapid | | ✓ | -| First Data Payeezy Gateway | | ✓ | -| Heartland Payment Systems | | ✓ | -| Mercado Pago | | ✓ | -| MIGS | | ✓ | -| Mollie | ✓ | | -| Moneris | ✓ | ✓ | -| MyVirtualMerchant | ✓ | ✓ | -| Nexi | | ✓ | -| NMI | | ✓ | -| Opayo by Elavon | ✓ | ✓ | -| Paymetric | ✓ | ✓ | -| PayPal (Commerce Platform) | ✓ | ✓ | -| PayPal Powered by Braintree | ✓ | ✓ | -| PayPal Payments Pro (Payflow Edition) UK | | ✓ | -| PayPal Payments Pro (Payflow Edition) US | | ✓ | -| QuickBooks Payments | | ✓ | -| Sage Pay/Protx VSP Direct | | ✓ | -| SecureNet | | ✓ | -| Square v2 | ✓ | | -| Stripe | ✓ | ✓ | -| StripeV3 | ✓ | ✓ | -| StripeV4 | ✓ | ✓ | -| Stripe OCS | ✓ | ✓ | -| TD Online Mart | ✓ | ✓ | -| USA ePay | | ✓ | -| Vantiv | | ✓ | -| Vantiv Core | | ✓ | -| Windcave | | ✓ | -| Worldpay | | ✓ | -| Worldpay Core | | ✓ | - - -#### Test payment gateway -The Payments API does not support the [BigCommerce Test Payment Gateway (Help Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). +| Payment Gateway | Stored instruments | Raw card data | +| :--------------------------------------- | :----------------: | :-----------: | +| Access Worldpay | ✓ | ✓ | +| Adyen | | ✓ | +| AdyenV2 | ✓ | | +| Adyen V3 OAuth | ✓ | ✓ | +| Authorize.net | ✓ | ✓ | +| Barclaycard Fuse | ✓ | ✓ | +| BlueSnap Direct | ✓ | ✓ | +| BNZ | ✓ | ✓ | +| Bolt | ✓ | ✓ | +| CardConnect | | ✓ | +| Chase Integrated Payments | | ✓ | +| Chase Merchant Services | ✓ | ✓ | +| Checkout.com | ✓ | ✓ | +| Commonwealth Bank | ✓ | ✓ | +| Cybersource | ✓ | ✓ | +| Cybersource V2 | ✓ | ✓ | +| Eway Rapid | | ✓ | +| First Data Payeezy Gateway | | ✓ | +| Heartland Payment Systems | | ✓ | +| Mercado Pago | | ✓ | +| MIGS | | ✓ | +| Mollie | ✓ | | +| Moneris | ✓ | ✓ | +| MyVirtualMerchant | ✓ | ✓ | +| Nexi | | ✓ | +| NMI | | ✓ | +| Opayo by Elavon | ✓ | ✓ | +| Paymetric | ✓ | ✓ | +| PayPal (Commerce Platform) | ✓ | ✓ | +| PayPal Powered by Braintree | ✓ | ✓ | +| PayPal Payments Pro (Payflow Edition) UK | | ✓ | +| PayPal Payments Pro (Payflow Edition) US | | ✓ | +| QuickBooks Payments | | ✓ | +| Sage Pay/Protx VSP Direct | | ✓ | +| SecureNet | | ✓ | +| Square v2 | ✓ | | +| Stripe | ✓ | ✓ | +| StripeV3 | ✓ | ✓ | +| StripeV4 | ✓ | ✓ | +| Stripe OCS | ✓ | ✓ | +| TD Online Mart | ✓ | ✓ | +| USA ePay | | ✓ | +| Vantiv | | ✓ | +| Vantiv Core | | ✓ | +| Windcave | | ✓ | +| Worldpay | | ✓ | +| Worldpay Core | | ✓ | + + + #### Test payment gateway The Payments API does not support the [BigCommerce + Test Payment Gateway (Help + Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). To learn more about the BigCommerce-compatible features of these gateways, see [All Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways#all-available). @@ -115,9 +129,10 @@ To use stored payment instruments with the Payments API or the Checkout SDK, bot The payment gateway must support making charges to **stored payment instruments**. Consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. The store must: -* be on a BigCommerce Plus plan or higher; -* use Optimized One-Page Checkout; -* have stored credit cards and/or stored PayPal accounts enabled. + +- be on a BigCommerce Plus plan or higher; +- use Optimized One-Page Checkout; +- have stored credit cards and/or stored PayPal accounts enabled. **Enabling Stored Credit Cards**\ Use the store control panel to enable stored credit cards. Navigate to **[Settings > Setup > Payments](https://login.bigcommerce.com/deep-links/manage/settings/payment)** and click the tab for your payment gateway. Toggle the switch to enable Stored Credit Cards and click **Save**. @@ -125,16 +140,24 @@ Use the store control panel to enable stored credit cards. Navigate to **[Settin **Enabling Stored PayPal Accounts**\ PayPal Powered By Braintree and PayPal (Commerce Platform) are the providers that support the ability to store PayPal accounts, which you can use as payment instruments with this API. For more information on enabling stored payment methods, see [Enabling Stored Payment Methods (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards). - ### Using Braintree ACH stored bank accounts In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Braintree ACH in payments API, your store needs to: -* Have stored ACH accounts enabled. -* Have this method enabled in the API. (contact support) + +- Have stored ACH accounts enabled. +- Have this method enabled in the API. (contact support) ### Using Stripe OCS ACH stored bank accounts +In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Stripe OCS ACH in payments API, your store needs to: + +- Enable ACH stored credentials in BigCommerce **Control Panel** > **Settings** > **Payments** > **Stripe**. See image below for reference: + +![enable-stripe-ocs-ach](/assets/images/stripe-ocs-ach.png) +- Activate ACH as a payment method on Stripe Dashboard. + +Once the ACH checkbox is enabled and ACH is activated as a payment method on Stripe Dashboard, shoppers will be able to store their bank account details from both the "My Account" page and checkout page. ### Charging stored instruments @@ -158,92 +181,92 @@ Accept: application/json ```json filename="Example response: Get payment methods" showLineNumbers copy { - "data": [ - { - "id": "bigcommerce.gift_certificate", - "name": "Gift Certificate", - "test_mode": false, - "type": "gift_certificate", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "bigcommerce.store_credit", - "name": "Store Credit", - "test_mode": false, - "type": "store_credit", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "stripe.card", - "name": "Stripe", - "test_mode": true, - "type": "card", - "supported_instruments": [ - { - "instrument_type": "VISA", - "verification_value_required": true - }, - { - "instrument_type": "MASTERCARD", - "verification_value_required": true - }, - { - "instrument_type": "AMEX", - "verification_value_required": true - }, - { - "instrument_type": "DISCOVER", - "verification_value_required": true - }, - { - "instrument_type": "JCB", - "verification_value_required": true - }, - { - "instrument_type": "DINERS_CLUB", - "verification_value_required": true - }, - { - "instrument_type": "STORED_CARD", - "verification_value_required": true - } - ], - "stored_instruments": [ - { - "type": "stored_card", - "brand": "VISA", - "expiry_month": 9, - "expiry_year": 2020, - "issuer_identification_number": "424242", - "last_4": "4242", - "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", - "is_default": true - } - ] - }, - { - "id": "braintree.paypal", - "name": "Braintree (PayPal)", - "test_mode": true, - "type": "paypal", - "supported_instruments": [ - { - "instrument_type": "STORED_PAYPAL_ACCOUNT" - } - ], - "stored_instruments": [ - { - "email": "bc@example.com", - "type": "stored_paypal_account", - "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", - "is_default": true - } - ] - } - ], - "meta": {} + "data": [ + { + "id": "bigcommerce.gift_certificate", + "name": "Gift Certificate", + "test_mode": false, + "type": "gift_certificate", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "bigcommerce.store_credit", + "name": "Store Credit", + "test_mode": false, + "type": "store_credit", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "stripe.card", + "name": "Stripe", + "test_mode": true, + "type": "card", + "supported_instruments": [ + { + "instrument_type": "VISA", + "verification_value_required": true + }, + { + "instrument_type": "MASTERCARD", + "verification_value_required": true + }, + { + "instrument_type": "AMEX", + "verification_value_required": true + }, + { + "instrument_type": "DISCOVER", + "verification_value_required": true + }, + { + "instrument_type": "JCB", + "verification_value_required": true + }, + { + "instrument_type": "DINERS_CLUB", + "verification_value_required": true + }, + { + "instrument_type": "STORED_CARD", + "verification_value_required": true + } + ], + "stored_instruments": [ + { + "type": "stored_card", + "brand": "VISA", + "expiry_month": 9, + "expiry_year": 2020, + "issuer_identification_number": "424242", + "last_4": "4242", + "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", + "is_default": true + } + ] + }, + { + "id": "braintree.paypal", + "name": "Braintree (PayPal)", + "test_mode": true, + "type": "paypal", + "supported_instruments": [ + { + "instrument_type": "STORED_PAYPAL_ACCOUNT" + } + ], + "stored_instruments": [ + { + "email": "bc@example.com", + "type": "stored_paypal_account", + "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", + "is_default": true + } + ] + } + ], + "meta": {} } ``` @@ -252,7 +275,6 @@ Accept: application/json Make a note of the `token` for the target payment method to use as part of processing the payment in the request body. - 2. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -276,10 +298,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -288,10 +310,10 @@ Accept: application/json 3. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values retrieved with the [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) request you made in a preceding step. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - -#### Authorization header -The `PAT_TOKEN` is the `data.id` value returned in preceding step. The token expires after one hour. -To be valid, the header value string must contain a space between "PAT" and the `{{PAT_TOKEN}}`. + + #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in + preceding step. The token expires after one hour. To be valid, the header + value string must contain a space between "PAT" and the `{{ PAT_TOKEN }}`. To process a payment using a stored card, set the `type` to `stored_card`. @@ -340,11 +362,11 @@ Content-Type: application/json ```json filename="Example response: Process payment with a stored card or PayPal account" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -354,12 +376,14 @@ Content-Type: application/json If the purchase was successful, the response returns a status of success. The order is then automatically moved to an **Awaiting Fulfillment** status. If you get a different response, see [Error codes](#error-codes) for troubleshooting. In the case of store credit and gift certificates: -* If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. -* The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. - -#### List stored instruments -Use the [Get Stored Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) endpoint to list all available stored instruments for a customer. +- If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. +- The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. + + + #### List stored instruments Use the [Get Stored + Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) + endpoint to list all available stored instruments for a customer. ## Credit cards @@ -372,6 +396,7 @@ There are two steps to using a credit card to make a payment. The payment gateway your application uses must be able to send raw card data through our API. Before beginning development, consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. ### Create an access token + 1. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -395,10 +420,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -407,12 +432,12 @@ Accept: application/json ### Process the payment -2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: +2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - -#### Authorization header -The `PAT_TOKEN` is the `data.id` value returned in preceding step. -To be valid, the header value string should contain a space between "PAT" and the `{{PAT_TOKEN}}`. + + #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in + preceding step. To be valid, the header value string should contain a space + between "PAT" and the `{{ PAT_TOKEN }}`. @@ -442,14 +467,13 @@ Content-Type: application/json - ```json filename="Example response: Process payment with a credit card" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -490,7 +514,6 @@ Content-Type: application/json It is possible to take payment for an order created using the [Orders API](/docs/store-operations/orders). When creating the order using the Orders API, make sure to set `status_id:0`. If you do not create an order with order status set to `0` or `Incomplete`, the Payments API will return an [error](#error-codes). Ensure customers enter their billing address and line items when creating the order. The customer can create the order as a guest by either setting the `customer_id:0` or leaving it blank. After the order is created, follow the steps to pay with a [credit card](#credit-cards), a [stored card, or a PayPal account](#stored-cards-paypal-and-bank-accounts). - ```http filename="Example request: Create an order" showLineNumbers copy POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v2/orders X-Auth-Token: {{ACCESS_TOKEN}} @@ -545,11 +568,13 @@ Accept: application/json ] } ``` + ## Theme considerations + The following is a list of considerations when using the Payments API on a headless storefront. -* Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. -* Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. +- Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. +- Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. ## Technical details @@ -557,28 +582,34 @@ The following is a list of considerations when using the Payments API on a headl The following is a list of links to the test credit card numbers for our supported gateways. These can be useful during the development process. Check your credit card setup in both [BigCommerce (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) and the payment gateway to make sure it is configured properly. If the credit cards do not work or stop working, please reach out to the payment provider as these are not maintained by BigCommerce. -* [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) -* [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) -* [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) -* [Stripe](https://stripe.com/docs/testing#cards) +- [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) +- [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) +- [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) +- [Stripe](https://stripe.com/docs/testing#cards) ### Token + The `payment_access_token` is not from the payment provider. It is created by BigCommerce. ### Decline payments + A declined payment will return a 4XX error with details if available. ### Authorization + If you configure a payment gateway for authorization only, authorization happens at the time of processing. You will need to capture the order later using the control panel or the Capture API. If you configure a payment gateway for authorization and capture, the payment will be authorized and captured at the time of processing. ### Control panel + Orders created and captured via the API will look the same as other orders created via the storefront or other apps. The order source will be "Checkout API". ### Data access + The card data is not accessible via the API once the payment is processed. ### Rate limits -The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. + +The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. ## Sample app diagram @@ -586,29 +617,29 @@ The following diagram shows how the `payment_access_token` interacts with BigCom You can create orders using the [Server to Server API Endpoints](/docs/rest-management/checkouts/checkout-orders#create-an-order) or [Orders API](/docs/rest-management/orders). -![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png "Sample App Diagram") +![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png 'Sample App Diagram') ## Error codes -| Code | Description | Possible Causes | Possible Solutions | -|-|-| - | - | -| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | -| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | -| `30000` | Merchant payment configuration could not be found. | * The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | -| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | -| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | -| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | -| `30004` | The validation on line item and grand total does not match. | N/A| Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly| -| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
* `expiry_month` is two digits
* `expiry_year` is four digits | -| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper.| Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | -| `30100` | Payment access token could not be created. | N/A|N/A| -| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | -| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | -| `30103` | Your card has expired. Please try again with a valid card. |N/A | N/A| -| `30104` | There was a problem processing your card. Please contact your card issuer. |N/A |N/A| -| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. |N/A |N/A | -| `30106` | The payment was declined due to insufficient funds. |N/A |N/A| -| `30107` | The authorization for this transaction has been revoked. |Shopper revoked payment authorization associated with the stored PayPal account.|N/A| +| Code | Description | Possible Causes | Possible Solutions | +| ------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | +| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | +| `30000` | Merchant payment configuration could not be found. | \* The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | +| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | +| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | +| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | +| `30004` | The validation on line item and grand total does not match. | N/A | Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly | +| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
_ `expiry_month` is two digits
_ `expiry_year` is four digits | +| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper. | Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | +| `30100` | Payment access token could not be created. | N/A | N/A | +| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | +| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | +| `30103` | Your card has expired. Please try again with a valid card. | N/A | N/A | +| `30104` | There was a problem processing your card. Please contact your card issuer. | N/A | N/A | +| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. | N/A | N/A | +| `30106` | The payment was declined due to insufficient funds. | N/A | N/A | +| `30107` | The authorization for this transaction has been revoked. | Shopper revoked payment authorization associated with the stored PayPal account. | N/A | ## FAQ @@ -634,6 +665,7 @@ Yes, checkouts and orders with more than one consignment can use the Payments AP **Is store credit supported?** Yes, the Payments API supports the store credit payment method under the following conditions: + - The shopper is transacting in the store's default currency. - The shopper has a positive store credit balance. @@ -654,20 +686,22 @@ Payment gateways that use 3D Secure meet the EU's Strong Customer Authentication ## Related resources ### Articles -* [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) -* [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) -* [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) -* [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) -* [Guide to the Stored Instruments API](/beta/stored-instruments) +- [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) +- [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) +- [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) +- [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) +- [Guide to the Stored Instruments API](/beta/stored-instruments) ### Endpoints and mutations -* [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) -* `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) -* [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) -* [Process Payment](/docs/rest-payments/processing#process-payment) + +- [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) +- `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) +- [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) +- [Process Payment](/docs/rest-payments/processing#process-payment) ### Webhooks -* [Carts](/docs/integrations/webhooks/events#carts) -* [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) -* [Orders](/docs/integrations/webhooks/events#orders) + +- [Carts](/docs/integrations/webhooks/events#carts) +- [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) +- [Orders](/docs/integrations/webhooks/events#orders) From 87c505ce8fdaaeeb65e12aff17578b2ccf58e925 Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Thu, 16 Oct 2025 12:01:18 -0400 Subject: [PATCH 03/11] formatting changes --- docs/store-operations/payments/index.mdx | 489 +++++++++++------------ 1 file changed, 232 insertions(+), 257 deletions(-) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index f230f8508..819f08da6 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -8,32 +8,20 @@ keywords: payments, bigpay, currencies, currency, rest, v3, payment access token The Payments API lets you process payments through the store’s connected payment gateways. Merchants can receive a payment for an order that was created using either the [Store Management Checkouts API](/docs/rest-storefront/checkouts) endpoint or the [Orders API](/docs/rest-management/orders#create-an-order). Process payments by making a sequence of requests to the following two API endpoints: +* Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` +* Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` -- Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` -- Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` - - - #### Required OAuth scopes Add the [Create Payments - scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the - [store-level or app-level API - account](/docs/start/authentication/api-accounts) you use when you [Create - Payment Access - Tokens](/docs/rest-payments/tokens#create-payment-access-token). Learn more - about BigCommerce API [OAuth - scopes](/docs/start/authentication/api-accounts#oauth-scopes). + +#### Required OAuth scopes +Add the [Create Payments scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the [store-level or app-level API account](/docs/start/authentication/api-accounts) you use when you [Create Payment Access Tokens](/docs/rest-payments/tokens#create-payment-access-token). +Learn more about BigCommerce API [OAuth scopes](/docs/start/authentication/api-accounts#oauth-scopes). [![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/40447133-f8876e25-33c0-4174-ba8f-7857f336200d) - - #### Implementation note 3D Secure is a storefront-based experience that - requires the shopper's interaction to authenticate the transaction. Because - requests to our Payments API must be initiated in a server-to-server context - rather than from the storefront, any 3D Secure-enabled card must first be - saved during a shopper-initiated transaction and then charged as a stored - payment instrument. Attempts to process any payment that requires 3D Secure - verification using a card that has not been previously saved will be - unsuccessful. + +#### Implementation note +3D Secure is a storefront-based experience that requires the shopper's interaction to authenticate the transaction. Because requests to our Payments API must be initiated in a server-to-server context rather than from the storefront, any 3D Secure-enabled card must first be saved during a shopper-initiated transaction and then charged as a stored payment instrument. Attempts to process any payment that requires 3D Secure verification using a card that has not been previously saved will be unsuccessful. You can process payments charged to either of two main forms of payment: [stored payment instruments](#stored-cards-paypal-and-bank-accounts) or [new cards](#credit-cards) which still need to be saved. The API flow does not support hosted, offsite, or wallet-type providers like Amazon Pay. One exception is that one provider, PayPal powered by Braintree, supports existing [stored PayPal accounts](https://support.bigcommerce.com/s/article/Enabling-Stored-Payment-Methods?language=en_US#paypal). No providers support using non-stored/new PayPal accounts through this API. @@ -44,70 +32,68 @@ BigCommerce is only responsible for the security of payment methods while the pa Each recurring billing app that uses the BigCommerce Payments API and collects merchants or shoppers' personally identifiable information (PII) must have its own Privacy Policy sufficient to the requirements of the European Union General Data Protection Requirements (GDPR). The GDPR must be available and displayed to the general public. - - #### PCI compliance If your application handles credit card data, you will - need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to - [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). + +#### PCI compliance +If your application handles credit card data, you will need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). ## Compatible payment gateways The following table lists the payment gateways that are compatible with our public Payments API. Note that not all gateways support processing a payment using both stored payment instruments and raw card data. -| Payment Gateway | Stored instruments | Raw card data | -| :--------------------------------------- | :----------------: | :-----------: | -| Access Worldpay | ✓ | ✓ | -| Adyen | | ✓ | -| AdyenV2 | ✓ | | -| Adyen V3 OAuth | ✓ | ✓ | -| Authorize.net | ✓ | ✓ | -| Barclaycard Fuse | ✓ | ✓ | -| BlueSnap Direct | ✓ | ✓ | -| BNZ | ✓ | ✓ | -| Bolt | ✓ | ✓ | -| CardConnect | | ✓ | -| Chase Integrated Payments | | ✓ | -| Chase Merchant Services | ✓ | ✓ | -| Checkout.com | ✓ | ✓ | -| Commonwealth Bank | ✓ | ✓ | -| Cybersource | ✓ | ✓ | -| Cybersource V2 | ✓ | ✓ | -| Eway Rapid | | ✓ | -| First Data Payeezy Gateway | | ✓ | -| Heartland Payment Systems | | ✓ | -| Mercado Pago | | ✓ | -| MIGS | | ✓ | -| Mollie | ✓ | | -| Moneris | ✓ | ✓ | -| MyVirtualMerchant | ✓ | ✓ | -| Nexi | | ✓ | -| NMI | | ✓ | -| Opayo by Elavon | ✓ | ✓ | -| Paymetric | ✓ | ✓ | -| PayPal (Commerce Platform) | ✓ | ✓ | -| PayPal Powered by Braintree | ✓ | ✓ | -| PayPal Payments Pro (Payflow Edition) UK | | ✓ | -| PayPal Payments Pro (Payflow Edition) US | | ✓ | -| QuickBooks Payments | | ✓ | -| Sage Pay/Protx VSP Direct | | ✓ | -| SecureNet | | ✓ | -| Square v2 | ✓ | | -| Stripe | ✓ | ✓ | -| StripeV3 | ✓ | ✓ | -| StripeV4 | ✓ | ✓ | -| Stripe OCS | ✓ | ✓ | -| TD Online Mart | ✓ | ✓ | -| USA ePay | | ✓ | -| Vantiv | | ✓ | -| Vantiv Core | | ✓ | -| Windcave | | ✓ | -| Worldpay | | ✓ | -| Worldpay Core | | ✓ | - - - #### Test payment gateway The Payments API does not support the [BigCommerce - Test Payment Gateway (Help - Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). +| Payment Gateway | Stored instruments | Raw card data | +|:------------------|:------------------:|:---------------:| +| Access Worldpay | ✓ | ✓ | +| Adyen | | ✓ | +| AdyenV2 | ✓ | | +| Adyen V3 OAuth | ✓ | ✓ | +| Authorize.net | ✓ | ✓ | +| Barclaycard Fuse | ✓ | ✓ | +| BlueSnap Direct | ✓ | ✓ | +| BNZ | ✓ | ✓ | +| Bolt | ✓ | ✓ | +| CardConnect | | ✓ | +| Chase Integrated Payments | | ✓ | +| Chase Merchant Services | ✓ | ✓ | +| Checkout.com | ✓ | ✓ | +| Commonwealth Bank | ✓ | ✓ | +| Cybersource | ✓ | ✓ | +| Cybersource V2 | ✓ | ✓ | +| Eway Rapid | | ✓ | +| First Data Payeezy Gateway | | ✓ | +| Heartland Payment Systems | | ✓ | +| Mercado Pago | | ✓ | +| MIGS | | ✓ | +| Mollie | ✓ | | +| Moneris | ✓ | ✓ | +| MyVirtualMerchant | ✓ | ✓ | +| Nexi | | ✓ | +| NMI | | ✓ | +| Opayo by Elavon | ✓ | ✓ | +| Paymetric | ✓ | ✓ | +| PayPal (Commerce Platform) | ✓ | ✓ | +| PayPal Powered by Braintree | ✓ | ✓ | +| PayPal Payments Pro (Payflow Edition) UK | | ✓ | +| PayPal Payments Pro (Payflow Edition) US | | ✓ | +| QuickBooks Payments | | ✓ | +| Sage Pay/Protx VSP Direct | | ✓ | +| SecureNet | | ✓ | +| Square v2 | ✓ | | +| Stripe | ✓ | ✓ | +| StripeV3 | ✓ | ✓ | +| StripeV4 | ✓ | ✓ | +| Stripe OCS | ✓ | ✓ | +| TD Online Mart | ✓ | ✓ | +| USA ePay | | ✓ | +| Vantiv | | ✓ | +| Vantiv Core | | ✓ | +| Windcave | | ✓ | +| Worldpay | | ✓ | +| Worldpay Core | | ✓ | + + +#### Test payment gateway +The Payments API does not support the [BigCommerce Test Payment Gateway (Help Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). To learn more about the BigCommerce-compatible features of these gateways, see [All Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways#all-available). @@ -129,10 +115,9 @@ To use stored payment instruments with the Payments API or the Checkout SDK, bot The payment gateway must support making charges to **stored payment instruments**. Consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. The store must: - -- be on a BigCommerce Plus plan or higher; -- use Optimized One-Page Checkout; -- have stored credit cards and/or stored PayPal accounts enabled. +* be on a BigCommerce Plus plan or higher; +* use Optimized One-Page Checkout; +* have stored credit cards and/or stored PayPal accounts enabled. **Enabling Stored Credit Cards**\ Use the store control panel to enable stored credit cards. Navigate to **[Settings > Setup > Payments](https://login.bigcommerce.com/deep-links/manage/settings/payment)** and click the tab for your payment gateway. Toggle the switch to enable Stored Credit Cards and click **Save**. @@ -140,12 +125,12 @@ Use the store control panel to enable stored credit cards. Navigate to **[Settin **Enabling Stored PayPal Accounts**\ PayPal Powered By Braintree and PayPal (Commerce Platform) are the providers that support the ability to store PayPal accounts, which you can use as payment instruments with this API. For more information on enabling stored payment methods, see [Enabling Stored Payment Methods (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards). + ### Using Braintree ACH stored bank accounts In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Braintree ACH in payments API, your store needs to: - -- Have stored ACH accounts enabled. -- Have this method enabled in the API. (contact support) +* Have stored ACH accounts enabled. +* Have this method enabled in the API. (contact support) ### Using Stripe OCS ACH stored bank accounts @@ -159,6 +144,7 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites Once the ACH checkbox is enabled and ACH is activated as a payment method on Stripe Dashboard, shoppers will be able to store their bank account details from both the "My Account" page and checkout page. + ### Charging stored instruments There are three steps to using a stored card or PayPal account to make a payment. @@ -181,92 +167,92 @@ Accept: application/json ```json filename="Example response: Get payment methods" showLineNumbers copy { - "data": [ - { - "id": "bigcommerce.gift_certificate", - "name": "Gift Certificate", - "test_mode": false, - "type": "gift_certificate", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "bigcommerce.store_credit", - "name": "Store Credit", - "test_mode": false, - "type": "store_credit", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "stripe.card", - "name": "Stripe", - "test_mode": true, - "type": "card", - "supported_instruments": [ - { - "instrument_type": "VISA", - "verification_value_required": true - }, - { - "instrument_type": "MASTERCARD", - "verification_value_required": true - }, - { - "instrument_type": "AMEX", - "verification_value_required": true - }, - { - "instrument_type": "DISCOVER", - "verification_value_required": true - }, - { - "instrument_type": "JCB", - "verification_value_required": true - }, - { - "instrument_type": "DINERS_CLUB", - "verification_value_required": true - }, - { - "instrument_type": "STORED_CARD", - "verification_value_required": true - } - ], - "stored_instruments": [ - { - "type": "stored_card", - "brand": "VISA", - "expiry_month": 9, - "expiry_year": 2020, - "issuer_identification_number": "424242", - "last_4": "4242", - "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", - "is_default": true - } - ] - }, - { - "id": "braintree.paypal", - "name": "Braintree (PayPal)", - "test_mode": true, - "type": "paypal", - "supported_instruments": [ - { - "instrument_type": "STORED_PAYPAL_ACCOUNT" - } - ], - "stored_instruments": [ - { - "email": "bc@example.com", - "type": "stored_paypal_account", - "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", - "is_default": true - } - ] - } - ], - "meta": {} + "data": [ + { + "id": "bigcommerce.gift_certificate", + "name": "Gift Certificate", + "test_mode": false, + "type": "gift_certificate", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "bigcommerce.store_credit", + "name": "Store Credit", + "test_mode": false, + "type": "store_credit", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "stripe.card", + "name": "Stripe", + "test_mode": true, + "type": "card", + "supported_instruments": [ + { + "instrument_type": "VISA", + "verification_value_required": true + }, + { + "instrument_type": "MASTERCARD", + "verification_value_required": true + }, + { + "instrument_type": "AMEX", + "verification_value_required": true + }, + { + "instrument_type": "DISCOVER", + "verification_value_required": true + }, + { + "instrument_type": "JCB", + "verification_value_required": true + }, + { + "instrument_type": "DINERS_CLUB", + "verification_value_required": true + }, + { + "instrument_type": "STORED_CARD", + "verification_value_required": true + } + ], + "stored_instruments": [ + { + "type": "stored_card", + "brand": "VISA", + "expiry_month": 9, + "expiry_year": 2020, + "issuer_identification_number": "424242", + "last_4": "4242", + "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", + "is_default": true + } + ] + }, + { + "id": "braintree.paypal", + "name": "Braintree (PayPal)", + "test_mode": true, + "type": "paypal", + "supported_instruments": [ + { + "instrument_type": "STORED_PAYPAL_ACCOUNT" + } + ], + "stored_instruments": [ + { + "email": "bc@example.com", + "type": "stored_paypal_account", + "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", + "is_default": true + } + ] + } + ], + "meta": {} } ``` @@ -275,6 +261,7 @@ Accept: application/json Make a note of the `token` for the target payment method to use as part of processing the payment in the request body. + 2. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -298,10 +285,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -310,10 +297,10 @@ Accept: application/json 3. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values retrieved with the [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) request you made in a preceding step. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - - #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in - preceding step. The token expires after one hour. To be valid, the header - value string must contain a space between "PAT" and the `{{ PAT_TOKEN }}`. + +#### Authorization header +The `PAT_TOKEN` is the `data.id` value returned in preceding step. The token expires after one hour. +To be valid, the header value string must contain a space between "PAT" and the `{{PAT_TOKEN}}`. To process a payment using a stored card, set the `type` to `stored_card`. @@ -362,11 +349,11 @@ Content-Type: application/json ```json filename="Example response: Process payment with a stored card or PayPal account" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -376,14 +363,12 @@ Content-Type: application/json If the purchase was successful, the response returns a status of success. The order is then automatically moved to an **Awaiting Fulfillment** status. If you get a different response, see [Error codes](#error-codes) for troubleshooting. In the case of store credit and gift certificates: +* If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. +* The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. -- If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. -- The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. - - - #### List stored instruments Use the [Get Stored - Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) - endpoint to list all available stored instruments for a customer. + +#### List stored instruments +Use the [Get Stored Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) endpoint to list all available stored instruments for a customer. ## Credit cards @@ -396,7 +381,6 @@ There are two steps to using a credit card to make a payment. The payment gateway your application uses must be able to send raw card data through our API. Before beginning development, consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. ### Create an access token - 1. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -420,10 +404,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -432,12 +416,12 @@ Accept: application/json ### Process the payment -2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: +2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - - #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in - preceding step. To be valid, the header value string should contain a space - between "PAT" and the `{{ PAT_TOKEN }}`. + +#### Authorization header +The `PAT_TOKEN` is the `data.id` value returned in preceding step. +To be valid, the header value string should contain a space between "PAT" and the `{{PAT_TOKEN}}`. @@ -467,13 +451,14 @@ Content-Type: application/json
+ ```json filename="Example response: Process payment with a credit card" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -514,6 +499,7 @@ Content-Type: application/json It is possible to take payment for an order created using the [Orders API](/docs/store-operations/orders). When creating the order using the Orders API, make sure to set `status_id:0`. If you do not create an order with order status set to `0` or `Incomplete`, the Payments API will return an [error](#error-codes). Ensure customers enter their billing address and line items when creating the order. The customer can create the order as a guest by either setting the `customer_id:0` or leaving it blank. After the order is created, follow the steps to pay with a [credit card](#credit-cards), a [stored card, or a PayPal account](#stored-cards-paypal-and-bank-accounts). + ```http filename="Example request: Create an order" showLineNumbers copy POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v2/orders X-Auth-Token: {{ACCESS_TOKEN}} @@ -568,13 +554,11 @@ Accept: application/json ] } ``` - ## Theme considerations - The following is a list of considerations when using the Payments API on a headless storefront. -- Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. -- Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. +* Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. +* Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. ## Technical details @@ -582,34 +566,28 @@ The following is a list of considerations when using the Payments API on a headl The following is a list of links to the test credit card numbers for our supported gateways. These can be useful during the development process. Check your credit card setup in both [BigCommerce (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) and the payment gateway to make sure it is configured properly. If the credit cards do not work or stop working, please reach out to the payment provider as these are not maintained by BigCommerce. -- [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) -- [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) -- [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) -- [Stripe](https://stripe.com/docs/testing#cards) +* [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) +* [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) +* [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) +* [Stripe](https://stripe.com/docs/testing#cards) ### Token - The `payment_access_token` is not from the payment provider. It is created by BigCommerce. ### Decline payments - A declined payment will return a 4XX error with details if available. ### Authorization - If you configure a payment gateway for authorization only, authorization happens at the time of processing. You will need to capture the order later using the control panel or the Capture API. If you configure a payment gateway for authorization and capture, the payment will be authorized and captured at the time of processing. ### Control panel - Orders created and captured via the API will look the same as other orders created via the storefront or other apps. The order source will be "Checkout API". ### Data access - The card data is not accessible via the API once the payment is processed. ### Rate limits - -The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. +The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. ## Sample app diagram @@ -617,29 +595,29 @@ The following diagram shows how the `payment_access_token` interacts with BigCom You can create orders using the [Server to Server API Endpoints](/docs/rest-management/checkouts/checkout-orders#create-an-order) or [Orders API](/docs/rest-management/orders). -![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png 'Sample App Diagram') +![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png "Sample App Diagram") ## Error codes -| Code | Description | Possible Causes | Possible Solutions | -| ------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | -| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | -| `30000` | Merchant payment configuration could not be found. | \* The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | -| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | -| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | -| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | -| `30004` | The validation on line item and grand total does not match. | N/A | Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly | -| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
_ `expiry_month` is two digits
_ `expiry_year` is four digits | -| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper. | Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | -| `30100` | Payment access token could not be created. | N/A | N/A | -| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | -| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | -| `30103` | Your card has expired. Please try again with a valid card. | N/A | N/A | -| `30104` | There was a problem processing your card. Please contact your card issuer. | N/A | N/A | -| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. | N/A | N/A | -| `30106` | The payment was declined due to insufficient funds. | N/A | N/A | -| `30107` | The authorization for this transaction has been revoked. | Shopper revoked payment authorization associated with the stored PayPal account. | N/A | +| Code | Description | Possible Causes | Possible Solutions | +|-|-| - | - | +| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | +| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | +| `30000` | Merchant payment configuration could not be found. | * The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | +| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | +| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | +| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | +| `30004` | The validation on line item and grand total does not match. | N/A| Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly| +| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
* `expiry_month` is two digits
* `expiry_year` is four digits | +| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper.| Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | +| `30100` | Payment access token could not be created. | N/A|N/A| +| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | +| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | +| `30103` | Your card has expired. Please try again with a valid card. |N/A | N/A| +| `30104` | There was a problem processing your card. Please contact your card issuer. |N/A |N/A| +| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. |N/A |N/A | +| `30106` | The payment was declined due to insufficient funds. |N/A |N/A| +| `30107` | The authorization for this transaction has been revoked. |Shopper revoked payment authorization associated with the stored PayPal account.|N/A| ## FAQ @@ -665,7 +643,6 @@ Yes, checkouts and orders with more than one consignment can use the Payments AP **Is store credit supported?** Yes, the Payments API supports the store credit payment method under the following conditions: - - The shopper is transacting in the store's default currency. - The shopper has a positive store credit balance. @@ -686,22 +663,20 @@ Payment gateways that use 3D Secure meet the EU's Strong Customer Authentication ## Related resources ### Articles +* [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) +* [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) +* [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) +* [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) +* [Guide to the Stored Instruments API](/beta/stored-instruments) -- [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) -- [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) -- [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) -- [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) -- [Guide to the Stored Instruments API](/beta/stored-instruments) ### Endpoints and mutations - -- [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) -- `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) -- [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) -- [Process Payment](/docs/rest-payments/processing#process-payment) +* [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) +* `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) +* [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) +* [Process Payment](/docs/rest-payments/processing#process-payment) ### Webhooks - -- [Carts](/docs/integrations/webhooks/events#carts) -- [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) -- [Orders](/docs/integrations/webhooks/events#orders) +* [Carts](/docs/integrations/webhooks/events#carts) +* [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) +* [Orders](/docs/integrations/webhooks/events#orders) From 4cd3ba66d9b5aa6d9c1677125e46d03983863af1 Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Tue, 4 Nov 2025 14:22:44 -0500 Subject: [PATCH 04/11] add beta to the docs --- docs/store-operations/payments/index.mdx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index 819f08da6..69b90fe4c 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -82,7 +82,7 @@ The following table lists the payment gateways that are compatible with our publ | Stripe | ✓ | ✓ | | StripeV3 | ✓ | ✓ | | StripeV4 | ✓ | ✓ | -| Stripe OCS | ✓ | ✓ | +| Stripe OCS (beta)| ✓ | ✓ | | TD Online Mart | ✓ | ✓ | | USA ePay | | ✓ | | Vantiv | | ✓ | @@ -134,6 +134,10 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites ### Using Stripe OCS ACH stored bank accounts + + Stripe OCS ACH is currently in beta. Please read the following [Knowledge Base (KB) article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS?language=en_US#notifications). + + In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Stripe OCS ACH in payments API, your store needs to: - Enable ACH stored credentials in BigCommerce **Control Panel** > **Settings** > **Payments** > **Stripe**. See image below for reference: @@ -144,7 +148,6 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites Once the ACH checkbox is enabled and ACH is activated as a payment method on Stripe Dashboard, shoppers will be able to store their bank account details from both the "My Account" page and checkout page. - ### Charging stored instruments There are three steps to using a stored card or PayPal account to make a payment. From 693ed8ffe4b58d49ad7a7a7a87c7f75642f8dafe Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Tue, 4 Nov 2025 15:09:45 -0500 Subject: [PATCH 05/11] clarified beta callout for stripe OCS --- docs/store-operations/payments/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index 69b90fe4c..dfa0731c4 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -135,7 +135,7 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites ### Using Stripe OCS ACH stored bank accounts - Stripe OCS ACH is currently in beta. Please read the following [Knowledge Base (KB) article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS?language=en_US#notifications). + Stripe OCS ACH is currently in beta. Please read the following [Knowledge Base (KB) article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS?language=en_US#notifications) for more beta details. In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Stripe OCS ACH in payments API, your store needs to: From 3f8487cd9eea1c0f9c0adfb883f37cdb7e114426 Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Wed, 5 Nov 2025 14:35:19 -0500 Subject: [PATCH 06/11] add details for custom checkout --- docs/store-operations/payments/index.mdx | 506 ++++++++++++----------- 1 file changed, 271 insertions(+), 235 deletions(-) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index dfa0731c4..de5aca3a7 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -8,20 +8,32 @@ keywords: payments, bigpay, currencies, currency, rest, v3, payment access token The Payments API lets you process payments through the store’s connected payment gateways. Merchants can receive a payment for an order that was created using either the [Store Management Checkouts API](/docs/rest-storefront/checkouts) endpoint or the [Orders API](/docs/rest-management/orders#create-an-order). Process payments by making a sequence of requests to the following two API endpoints: -* Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` -* Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` - -#### Required OAuth scopes -Add the [Create Payments scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the [store-level or app-level API account](/docs/start/authentication/api-accounts) you use when you [Create Payment Access Tokens](/docs/rest-payments/tokens#create-payment-access-token). -Learn more about BigCommerce API [OAuth scopes](/docs/start/authentication/api-accounts#oauth-scopes). +- Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` +- Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` + + + #### Required OAuth scopes Add the [Create Payments + scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the + [store-level or app-level API + account](/docs/start/authentication/api-accounts) you use when you [Create + Payment Access + Tokens](/docs/rest-payments/tokens#create-payment-access-token). Learn more + about BigCommerce API [OAuth + scopes](/docs/start/authentication/api-accounts#oauth-scopes). [![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/40447133-f8876e25-33c0-4174-ba8f-7857f336200d) - -#### Implementation note -3D Secure is a storefront-based experience that requires the shopper's interaction to authenticate the transaction. Because requests to our Payments API must be initiated in a server-to-server context rather than from the storefront, any 3D Secure-enabled card must first be saved during a shopper-initiated transaction and then charged as a stored payment instrument. Attempts to process any payment that requires 3D Secure verification using a card that has not been previously saved will be unsuccessful. + + #### Implementation note 3D Secure is a storefront-based experience that + requires the shopper's interaction to authenticate the transaction. Because + requests to our Payments API must be initiated in a server-to-server context + rather than from the storefront, any 3D Secure-enabled card must first be + saved during a shopper-initiated transaction and then charged as a stored + payment instrument. Attempts to process any payment that requires 3D Secure + verification using a card that has not been previously saved will be + unsuccessful. You can process payments charged to either of two main forms of payment: [stored payment instruments](#stored-cards-paypal-and-bank-accounts) or [new cards](#credit-cards) which still need to be saved. The API flow does not support hosted, offsite, or wallet-type providers like Amazon Pay. One exception is that one provider, PayPal powered by Braintree, supports existing [stored PayPal accounts](https://support.bigcommerce.com/s/article/Enabling-Stored-Payment-Methods?language=en_US#paypal). No providers support using non-stored/new PayPal accounts through this API. @@ -32,68 +44,70 @@ BigCommerce is only responsible for the security of payment methods while the pa Each recurring billing app that uses the BigCommerce Payments API and collects merchants or shoppers' personally identifiable information (PII) must have its own Privacy Policy sufficient to the requirements of the European Union General Data Protection Requirements (GDPR). The GDPR must be available and displayed to the general public. - -#### PCI compliance -If your application handles credit card data, you will need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). + + #### PCI compliance If your application handles credit card data, you will + need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to + [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). ## Compatible payment gateways The following table lists the payment gateways that are compatible with our public Payments API. Note that not all gateways support processing a payment using both stored payment instruments and raw card data. -| Payment Gateway | Stored instruments | Raw card data | -|:------------------|:------------------:|:---------------:| -| Access Worldpay | ✓ | ✓ | -| Adyen | | ✓ | -| AdyenV2 | ✓ | | -| Adyen V3 OAuth | ✓ | ✓ | -| Authorize.net | ✓ | ✓ | -| Barclaycard Fuse | ✓ | ✓ | -| BlueSnap Direct | ✓ | ✓ | -| BNZ | ✓ | ✓ | -| Bolt | ✓ | ✓ | -| CardConnect | | ✓ | -| Chase Integrated Payments | | ✓ | -| Chase Merchant Services | ✓ | ✓ | -| Checkout.com | ✓ | ✓ | -| Commonwealth Bank | ✓ | ✓ | -| Cybersource | ✓ | ✓ | -| Cybersource V2 | ✓ | ✓ | -| Eway Rapid | | ✓ | -| First Data Payeezy Gateway | | ✓ | -| Heartland Payment Systems | | ✓ | -| Mercado Pago | | ✓ | -| MIGS | | ✓ | -| Mollie | ✓ | | -| Moneris | ✓ | ✓ | -| MyVirtualMerchant | ✓ | ✓ | -| Nexi | | ✓ | -| NMI | | ✓ | -| Opayo by Elavon | ✓ | ✓ | -| Paymetric | ✓ | ✓ | -| PayPal (Commerce Platform) | ✓ | ✓ | -| PayPal Powered by Braintree | ✓ | ✓ | -| PayPal Payments Pro (Payflow Edition) UK | | ✓ | -| PayPal Payments Pro (Payflow Edition) US | | ✓ | -| QuickBooks Payments | | ✓ | -| Sage Pay/Protx VSP Direct | | ✓ | -| SecureNet | | ✓ | -| Square v2 | ✓ | | -| Stripe | ✓ | ✓ | -| StripeV3 | ✓ | ✓ | -| StripeV4 | ✓ | ✓ | -| Stripe OCS (beta)| ✓ | ✓ | -| TD Online Mart | ✓ | ✓ | -| USA ePay | | ✓ | -| Vantiv | | ✓ | -| Vantiv Core | | ✓ | -| Windcave | | ✓ | -| Worldpay | | ✓ | -| Worldpay Core | | ✓ | - - -#### Test payment gateway -The Payments API does not support the [BigCommerce Test Payment Gateway (Help Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). +| Payment Gateway | Stored instruments | Raw card data | +| :--------------------------------------- | :----------------: | :-----------: | +| Access Worldpay | ✓ | ✓ | +| Adyen | | ✓ | +| AdyenV2 | ✓ | | +| Adyen V3 OAuth | ✓ | ✓ | +| Authorize.net | ✓ | ✓ | +| Barclaycard Fuse | ✓ | ✓ | +| BlueSnap Direct | ✓ | ✓ | +| BNZ | ✓ | ✓ | +| Bolt | ✓ | ✓ | +| CardConnect | | ✓ | +| Chase Integrated Payments | | ✓ | +| Chase Merchant Services | ✓ | ✓ | +| Checkout.com | ✓ | ✓ | +| Commonwealth Bank | ✓ | ✓ | +| Cybersource | ✓ | ✓ | +| Cybersource V2 | ✓ | ✓ | +| Eway Rapid | | ✓ | +| First Data Payeezy Gateway | | ✓ | +| Heartland Payment Systems | | ✓ | +| Mercado Pago | | ✓ | +| MIGS | | ✓ | +| Mollie | ✓ | | +| Moneris | ✓ | ✓ | +| MyVirtualMerchant | ✓ | ✓ | +| Nexi | | ✓ | +| NMI | | ✓ | +| Opayo by Elavon | ✓ | ✓ | +| Paymetric | ✓ | ✓ | +| PayPal (Commerce Platform) | ✓ | ✓ | +| PayPal Powered by Braintree | ✓ | ✓ | +| PayPal Payments Pro (Payflow Edition) UK | | ✓ | +| PayPal Payments Pro (Payflow Edition) US | | ✓ | +| QuickBooks Payments | | ✓ | +| Sage Pay/Protx VSP Direct | | ✓ | +| SecureNet | | ✓ | +| Square v2 | ✓ | | +| Stripe | ✓ | ✓ | +| StripeV3 | ✓ | ✓ | +| StripeV4 | ✓ | ✓ | +| Stripe OCS (beta) | ✓ | ✓ | +| TD Online Mart | ✓ | ✓ | +| USA ePay | | ✓ | +| Vantiv | | ✓ | +| Vantiv Core | | ✓ | +| Windcave | | ✓ | +| Worldpay | | ✓ | +| Worldpay Core | | ✓ | + + + #### Test payment gateway The Payments API does not support the [BigCommerce + Test Payment Gateway (Help + Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). To learn more about the BigCommerce-compatible features of these gateways, see [All Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways#all-available). @@ -115,9 +129,10 @@ To use stored payment instruments with the Payments API or the Checkout SDK, bot The payment gateway must support making charges to **stored payment instruments**. Consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. The store must: -* be on a BigCommerce Plus plan or higher; -* use Optimized One-Page Checkout; -* have stored credit cards and/or stored PayPal accounts enabled. + +- be on a BigCommerce Plus plan or higher; +- use Optimized One-Page Checkout; +- have stored credit cards and/or stored PayPal accounts enabled. **Enabling Stored Credit Cards**\ Use the store control panel to enable stored credit cards. Navigate to **[Settings > Setup > Payments](https://login.bigcommerce.com/deep-links/manage/settings/payment)** and click the tab for your payment gateway. Toggle the switch to enable Stored Credit Cards and click **Save**. @@ -125,26 +140,36 @@ Use the store control panel to enable stored credit cards. Navigate to **[Settin **Enabling Stored PayPal Accounts**\ PayPal Powered By Braintree and PayPal (Commerce Platform) are the providers that support the ability to store PayPal accounts, which you can use as payment instruments with this API. For more information on enabling stored payment methods, see [Enabling Stored Payment Methods (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards). - ### Using Braintree ACH stored bank accounts In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Braintree ACH in payments API, your store needs to: -* Have stored ACH accounts enabled. -* Have this method enabled in the API. (contact support) + +- Have stored ACH accounts enabled. +- Have this method enabled in the API. (contact support) ### Using Stripe OCS ACH stored bank accounts - - Stripe OCS ACH is currently in beta. Please read the following [Knowledge Base (KB) article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS?language=en_US#notifications) for more beta details. + + Stripe OCS ACH is currently in beta. Please read the following [Knowledge + Base(KB) + article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS?language=en_US#notifications) + for more beta details. + + + + If your store uses custom checkout, you must update to the latest version of + the [Checkout SDK](/docs/storefront/cart-checkout/checkout-sdk). -In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Stripe OCS ACH in payments API, your store needs to: +Stripe OCS supports both Optimized One Page Checkout (OOPC) and custom checkouts that use the [Checkout SDK](/docs/storefront/cart-checkout/checkout-sdk). + +In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Stripe OCS ACH in the payments API, your store needs to: - Enable ACH stored credentials in BigCommerce **Control Panel** > **Settings** > **Payments** > **Stripe**. See image below for reference: ![enable-stripe-ocs-ach](/assets/images/stripe-ocs-ach.png) -- Activate ACH as a payment method on Stripe Dashboard. +- Activate ACH as a payment method on your Stripe Dashboard. Once the ACH checkbox is enabled and ACH is activated as a payment method on Stripe Dashboard, shoppers will be able to store their bank account details from both the "My Account" page and checkout page. @@ -170,92 +195,92 @@ Accept: application/json ```json filename="Example response: Get payment methods" showLineNumbers copy { - "data": [ - { - "id": "bigcommerce.gift_certificate", - "name": "Gift Certificate", - "test_mode": false, - "type": "gift_certificate", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "bigcommerce.store_credit", - "name": "Store Credit", - "test_mode": false, - "type": "store_credit", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "stripe.card", - "name": "Stripe", - "test_mode": true, - "type": "card", - "supported_instruments": [ - { - "instrument_type": "VISA", - "verification_value_required": true - }, - { - "instrument_type": "MASTERCARD", - "verification_value_required": true - }, - { - "instrument_type": "AMEX", - "verification_value_required": true - }, - { - "instrument_type": "DISCOVER", - "verification_value_required": true - }, - { - "instrument_type": "JCB", - "verification_value_required": true - }, - { - "instrument_type": "DINERS_CLUB", - "verification_value_required": true - }, - { - "instrument_type": "STORED_CARD", - "verification_value_required": true - } - ], - "stored_instruments": [ - { - "type": "stored_card", - "brand": "VISA", - "expiry_month": 9, - "expiry_year": 2020, - "issuer_identification_number": "424242", - "last_4": "4242", - "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", - "is_default": true - } - ] - }, - { - "id": "braintree.paypal", - "name": "Braintree (PayPal)", - "test_mode": true, - "type": "paypal", - "supported_instruments": [ - { - "instrument_type": "STORED_PAYPAL_ACCOUNT" - } - ], - "stored_instruments": [ - { - "email": "bc@example.com", - "type": "stored_paypal_account", - "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", - "is_default": true - } - ] - } - ], - "meta": {} + "data": [ + { + "id": "bigcommerce.gift_certificate", + "name": "Gift Certificate", + "test_mode": false, + "type": "gift_certificate", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "bigcommerce.store_credit", + "name": "Store Credit", + "test_mode": false, + "type": "store_credit", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "stripe.card", + "name": "Stripe", + "test_mode": true, + "type": "card", + "supported_instruments": [ + { + "instrument_type": "VISA", + "verification_value_required": true + }, + { + "instrument_type": "MASTERCARD", + "verification_value_required": true + }, + { + "instrument_type": "AMEX", + "verification_value_required": true + }, + { + "instrument_type": "DISCOVER", + "verification_value_required": true + }, + { + "instrument_type": "JCB", + "verification_value_required": true + }, + { + "instrument_type": "DINERS_CLUB", + "verification_value_required": true + }, + { + "instrument_type": "STORED_CARD", + "verification_value_required": true + } + ], + "stored_instruments": [ + { + "type": "stored_card", + "brand": "VISA", + "expiry_month": 9, + "expiry_year": 2020, + "issuer_identification_number": "424242", + "last_4": "4242", + "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", + "is_default": true + } + ] + }, + { + "id": "braintree.paypal", + "name": "Braintree (PayPal)", + "test_mode": true, + "type": "paypal", + "supported_instruments": [ + { + "instrument_type": "STORED_PAYPAL_ACCOUNT" + } + ], + "stored_instruments": [ + { + "email": "bc@example.com", + "type": "stored_paypal_account", + "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", + "is_default": true + } + ] + } + ], + "meta": {} } ``` @@ -264,7 +289,6 @@ Accept: application/json Make a note of the `token` for the target payment method to use as part of processing the payment in the request body. - 2. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -288,10 +312,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -300,10 +324,10 @@ Accept: application/json 3. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values retrieved with the [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) request you made in a preceding step. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - -#### Authorization header -The `PAT_TOKEN` is the `data.id` value returned in preceding step. The token expires after one hour. -To be valid, the header value string must contain a space between "PAT" and the `{{PAT_TOKEN}}`. + + #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in + preceding step. The token expires after one hour. To be valid, the header + value string must contain a space between "PAT" and the `{{ PAT_TOKEN }}`. To process a payment using a stored card, set the `type` to `stored_card`. @@ -352,11 +376,11 @@ Content-Type: application/json ```json filename="Example response: Process payment with a stored card or PayPal account" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -366,12 +390,14 @@ Content-Type: application/json If the purchase was successful, the response returns a status of success. The order is then automatically moved to an **Awaiting Fulfillment** status. If you get a different response, see [Error codes](#error-codes) for troubleshooting. In the case of store credit and gift certificates: -* If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. -* The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. - -#### List stored instruments -Use the [Get Stored Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) endpoint to list all available stored instruments for a customer. +- If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. +- The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. + + + #### List stored instruments Use the [Get Stored + Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) + endpoint to list all available stored instruments for a customer. ## Credit cards @@ -384,6 +410,7 @@ There are two steps to using a credit card to make a payment. The payment gateway your application uses must be able to send raw card data through our API. Before beginning development, consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. ### Create an access token + 1. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -407,10 +434,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -419,12 +446,12 @@ Accept: application/json ### Process the payment -2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: +2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - -#### Authorization header -The `PAT_TOKEN` is the `data.id` value returned in preceding step. -To be valid, the header value string should contain a space between "PAT" and the `{{PAT_TOKEN}}`. + + #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in + preceding step. To be valid, the header value string should contain a space + between "PAT" and the `{{ PAT_TOKEN }}`. @@ -454,14 +481,13 @@ Content-Type: application/json
- ```json filename="Example response: Process payment with a credit card" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -502,7 +528,6 @@ Content-Type: application/json It is possible to take payment for an order created using the [Orders API](/docs/store-operations/orders). When creating the order using the Orders API, make sure to set `status_id:0`. If you do not create an order with order status set to `0` or `Incomplete`, the Payments API will return an [error](#error-codes). Ensure customers enter their billing address and line items when creating the order. The customer can create the order as a guest by either setting the `customer_id:0` or leaving it blank. After the order is created, follow the steps to pay with a [credit card](#credit-cards), a [stored card, or a PayPal account](#stored-cards-paypal-and-bank-accounts). - ```http filename="Example request: Create an order" showLineNumbers copy POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v2/orders X-Auth-Token: {{ACCESS_TOKEN}} @@ -557,11 +582,13 @@ Accept: application/json ] } ``` + ## Theme considerations + The following is a list of considerations when using the Payments API on a headless storefront. -* Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. -* Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. +- Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. +- Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. ## Technical details @@ -569,28 +596,34 @@ The following is a list of considerations when using the Payments API on a headl The following is a list of links to the test credit card numbers for our supported gateways. These can be useful during the development process. Check your credit card setup in both [BigCommerce (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) and the payment gateway to make sure it is configured properly. If the credit cards do not work or stop working, please reach out to the payment provider as these are not maintained by BigCommerce. -* [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) -* [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) -* [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) -* [Stripe](https://stripe.com/docs/testing#cards) +- [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) +- [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) +- [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) +- [Stripe](https://stripe.com/docs/testing#cards) ### Token + The `payment_access_token` is not from the payment provider. It is created by BigCommerce. ### Decline payments + A declined payment will return a 4XX error with details if available. ### Authorization + If you configure a payment gateway for authorization only, authorization happens at the time of processing. You will need to capture the order later using the control panel or the Capture API. If you configure a payment gateway for authorization and capture, the payment will be authorized and captured at the time of processing. ### Control panel + Orders created and captured via the API will look the same as other orders created via the storefront or other apps. The order source will be "Checkout API". ### Data access + The card data is not accessible via the API once the payment is processed. ### Rate limits -The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. + +The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. ## Sample app diagram @@ -598,29 +631,29 @@ The following diagram shows how the `payment_access_token` interacts with BigCom You can create orders using the [Server to Server API Endpoints](/docs/rest-management/checkouts/checkout-orders#create-an-order) or [Orders API](/docs/rest-management/orders). -![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png "Sample App Diagram") +![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png 'Sample App Diagram') ## Error codes -| Code | Description | Possible Causes | Possible Solutions | -|-|-| - | - | -| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | -| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | -| `30000` | Merchant payment configuration could not be found. | * The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | -| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | -| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | -| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | -| `30004` | The validation on line item and grand total does not match. | N/A| Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly| -| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
* `expiry_month` is two digits
* `expiry_year` is four digits | -| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper.| Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | -| `30100` | Payment access token could not be created. | N/A|N/A| -| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | -| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | -| `30103` | Your card has expired. Please try again with a valid card. |N/A | N/A| -| `30104` | There was a problem processing your card. Please contact your card issuer. |N/A |N/A| -| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. |N/A |N/A | -| `30106` | The payment was declined due to insufficient funds. |N/A |N/A| -| `30107` | The authorization for this transaction has been revoked. |Shopper revoked payment authorization associated with the stored PayPal account.|N/A| +| Code | Description | Possible Causes | Possible Solutions | +| ------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | +| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | +| `30000` | Merchant payment configuration could not be found. | \* The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | +| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | +| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | +| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | +| `30004` | The validation on line item and grand total does not match. | N/A | Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly | +| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
_ `expiry_month` is two digits
_ `expiry_year` is four digits | +| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper. | Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | +| `30100` | Payment access token could not be created. | N/A | N/A | +| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | +| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | +| `30103` | Your card has expired. Please try again with a valid card. | N/A | N/A | +| `30104` | There was a problem processing your card. Please contact your card issuer. | N/A | N/A | +| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. | N/A | N/A | +| `30106` | The payment was declined due to insufficient funds. | N/A | N/A | +| `30107` | The authorization for this transaction has been revoked. | Shopper revoked payment authorization associated with the stored PayPal account. | N/A | ## FAQ @@ -646,6 +679,7 @@ Yes, checkouts and orders with more than one consignment can use the Payments AP **Is store credit supported?** Yes, the Payments API supports the store credit payment method under the following conditions: + - The shopper is transacting in the store's default currency. - The shopper has a positive store credit balance. @@ -666,20 +700,22 @@ Payment gateways that use 3D Secure meet the EU's Strong Customer Authentication ## Related resources ### Articles -* [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) -* [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) -* [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) -* [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) -* [Guide to the Stored Instruments API](/beta/stored-instruments) +- [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) +- [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) +- [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) +- [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) +- [Guide to the Stored Instruments API](/beta/stored-instruments) ### Endpoints and mutations -* [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) -* `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) -* [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) -* [Process Payment](/docs/rest-payments/processing#process-payment) + +- [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) +- `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) +- [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) +- [Process Payment](/docs/rest-payments/processing#process-payment) ### Webhooks -* [Carts](/docs/integrations/webhooks/events#carts) -* [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) -* [Orders](/docs/integrations/webhooks/events#orders) + +- [Carts](/docs/integrations/webhooks/events#carts) +- [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) +- [Orders](/docs/integrations/webhooks/events#orders) From df2cd8ecc63d6c8c9caae42fd3adb38178aa6422 Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Wed, 5 Nov 2025 14:37:45 -0500 Subject: [PATCH 07/11] fix formatting --- docs/store-operations/payments/index.mdx | 488 +++++++++++------------ 1 file changed, 231 insertions(+), 257 deletions(-) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index de5aca3a7..637e3e0a1 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -8,32 +8,20 @@ keywords: payments, bigpay, currencies, currency, rest, v3, payment access token The Payments API lets you process payments through the store’s connected payment gateways. Merchants can receive a payment for an order that was created using either the [Store Management Checkouts API](/docs/rest-storefront/checkouts) endpoint or the [Orders API](/docs/rest-management/orders#create-an-order). Process payments by making a sequence of requests to the following two API endpoints: +* Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` +* Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` -- Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` -- Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` - - - #### Required OAuth scopes Add the [Create Payments - scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the - [store-level or app-level API - account](/docs/start/authentication/api-accounts) you use when you [Create - Payment Access - Tokens](/docs/rest-payments/tokens#create-payment-access-token). Learn more - about BigCommerce API [OAuth - scopes](/docs/start/authentication/api-accounts#oauth-scopes). + +#### Required OAuth scopes +Add the [Create Payments scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the [store-level or app-level API account](/docs/start/authentication/api-accounts) you use when you [Create Payment Access Tokens](/docs/rest-payments/tokens#create-payment-access-token). +Learn more about BigCommerce API [OAuth scopes](/docs/start/authentication/api-accounts#oauth-scopes). [![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/40447133-f8876e25-33c0-4174-ba8f-7857f336200d) - - #### Implementation note 3D Secure is a storefront-based experience that - requires the shopper's interaction to authenticate the transaction. Because - requests to our Payments API must be initiated in a server-to-server context - rather than from the storefront, any 3D Secure-enabled card must first be - saved during a shopper-initiated transaction and then charged as a stored - payment instrument. Attempts to process any payment that requires 3D Secure - verification using a card that has not been previously saved will be - unsuccessful. + +#### Implementation note +3D Secure is a storefront-based experience that requires the shopper's interaction to authenticate the transaction. Because requests to our Payments API must be initiated in a server-to-server context rather than from the storefront, any 3D Secure-enabled card must first be saved during a shopper-initiated transaction and then charged as a stored payment instrument. Attempts to process any payment that requires 3D Secure verification using a card that has not been previously saved will be unsuccessful. You can process payments charged to either of two main forms of payment: [stored payment instruments](#stored-cards-paypal-and-bank-accounts) or [new cards](#credit-cards) which still need to be saved. The API flow does not support hosted, offsite, or wallet-type providers like Amazon Pay. One exception is that one provider, PayPal powered by Braintree, supports existing [stored PayPal accounts](https://support.bigcommerce.com/s/article/Enabling-Stored-Payment-Methods?language=en_US#paypal). No providers support using non-stored/new PayPal accounts through this API. @@ -44,70 +32,68 @@ BigCommerce is only responsible for the security of payment methods while the pa Each recurring billing app that uses the BigCommerce Payments API and collects merchants or shoppers' personally identifiable information (PII) must have its own Privacy Policy sufficient to the requirements of the European Union General Data Protection Requirements (GDPR). The GDPR must be available and displayed to the general public. - - #### PCI compliance If your application handles credit card data, you will - need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to - [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). + +#### PCI compliance +If your application handles credit card data, you will need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). ## Compatible payment gateways The following table lists the payment gateways that are compatible with our public Payments API. Note that not all gateways support processing a payment using both stored payment instruments and raw card data. -| Payment Gateway | Stored instruments | Raw card data | -| :--------------------------------------- | :----------------: | :-----------: | -| Access Worldpay | ✓ | ✓ | -| Adyen | | ✓ | -| AdyenV2 | ✓ | | -| Adyen V3 OAuth | ✓ | ✓ | -| Authorize.net | ✓ | ✓ | -| Barclaycard Fuse | ✓ | ✓ | -| BlueSnap Direct | ✓ | ✓ | -| BNZ | ✓ | ✓ | -| Bolt | ✓ | ✓ | -| CardConnect | | ✓ | -| Chase Integrated Payments | | ✓ | -| Chase Merchant Services | ✓ | ✓ | -| Checkout.com | ✓ | ✓ | -| Commonwealth Bank | ✓ | ✓ | -| Cybersource | ✓ | ✓ | -| Cybersource V2 | ✓ | ✓ | -| Eway Rapid | | ✓ | -| First Data Payeezy Gateway | | ✓ | -| Heartland Payment Systems | | ✓ | -| Mercado Pago | | ✓ | -| MIGS | | ✓ | -| Mollie | ✓ | | -| Moneris | ✓ | ✓ | -| MyVirtualMerchant | ✓ | ✓ | -| Nexi | | ✓ | -| NMI | | ✓ | -| Opayo by Elavon | ✓ | ✓ | -| Paymetric | ✓ | ✓ | -| PayPal (Commerce Platform) | ✓ | ✓ | -| PayPal Powered by Braintree | ✓ | ✓ | -| PayPal Payments Pro (Payflow Edition) UK | | ✓ | -| PayPal Payments Pro (Payflow Edition) US | | ✓ | -| QuickBooks Payments | | ✓ | -| Sage Pay/Protx VSP Direct | | ✓ | -| SecureNet | | ✓ | -| Square v2 | ✓ | | -| Stripe | ✓ | ✓ | -| StripeV3 | ✓ | ✓ | -| StripeV4 | ✓ | ✓ | -| Stripe OCS (beta) | ✓ | ✓ | -| TD Online Mart | ✓ | ✓ | -| USA ePay | | ✓ | -| Vantiv | | ✓ | -| Vantiv Core | | ✓ | -| Windcave | | ✓ | -| Worldpay | | ✓ | -| Worldpay Core | | ✓ | - - - #### Test payment gateway The Payments API does not support the [BigCommerce - Test Payment Gateway (Help - Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). +| Payment Gateway | Stored instruments | Raw card data | +|:------------------|:------------------:|:---------------:| +| Access Worldpay | ✓ | ✓ | +| Adyen | | ✓ | +| AdyenV2 | ✓ | | +| Adyen V3 OAuth | ✓ | ✓ | +| Authorize.net | ✓ | ✓ | +| Barclaycard Fuse | ✓ | ✓ | +| BlueSnap Direct | ✓ | ✓ | +| BNZ | ✓ | ✓ | +| Bolt | ✓ | ✓ | +| CardConnect | | ✓ | +| Chase Integrated Payments | | ✓ | +| Chase Merchant Services | ✓ | ✓ | +| Checkout.com | ✓ | ✓ | +| Commonwealth Bank | ✓ | ✓ | +| Cybersource | ✓ | ✓ | +| Cybersource V2 | ✓ | ✓ | +| Eway Rapid | | ✓ | +| First Data Payeezy Gateway | | ✓ | +| Heartland Payment Systems | | ✓ | +| Mercado Pago | | ✓ | +| MIGS | | ✓ | +| Mollie | ✓ | | +| Moneris | ✓ | ✓ | +| MyVirtualMerchant | ✓ | ✓ | +| Nexi | | ✓ | +| NMI | | ✓ | +| Opayo by Elavon | ✓ | ✓ | +| Paymetric | ✓ | ✓ | +| PayPal (Commerce Platform) | ✓ | ✓ | +| PayPal Powered by Braintree | ✓ | ✓ | +| PayPal Payments Pro (Payflow Edition) UK | | ✓ | +| PayPal Payments Pro (Payflow Edition) US | | ✓ | +| QuickBooks Payments | | ✓ | +| Sage Pay/Protx VSP Direct | | ✓ | +| SecureNet | | ✓ | +| Square v2 | ✓ | | +| Stripe | ✓ | ✓ | +| StripeV3 | ✓ | ✓ | +| StripeV4 | ✓ | ✓ | +| Stripe OCS (beta) | ✓ | ✓ | +| TD Online Mart | ✓ | ✓ | +| USA ePay | | ✓ | +| Vantiv | | ✓ | +| Vantiv Core | | ✓ | +| Windcave | | ✓ | +| Worldpay | | ✓ | +| Worldpay Core | | ✓ | + + +#### Test payment gateway +The Payments API does not support the [BigCommerce Test Payment Gateway (Help Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). To learn more about the BigCommerce-compatible features of these gateways, see [All Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways#all-available). @@ -129,10 +115,9 @@ To use stored payment instruments with the Payments API or the Checkout SDK, bot The payment gateway must support making charges to **stored payment instruments**. Consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. The store must: - -- be on a BigCommerce Plus plan or higher; -- use Optimized One-Page Checkout; -- have stored credit cards and/or stored PayPal accounts enabled. +* be on a BigCommerce Plus plan or higher; +* use Optimized One-Page Checkout; +* have stored credit cards and/or stored PayPal accounts enabled. **Enabling Stored Credit Cards**\ Use the store control panel to enable stored credit cards. Navigate to **[Settings > Setup > Payments](https://login.bigcommerce.com/deep-links/manage/settings/payment)** and click the tab for your payment gateway. Toggle the switch to enable Stored Credit Cards and click **Save**. @@ -140,12 +125,12 @@ Use the store control panel to enable stored credit cards. Navigate to **[Settin **Enabling Stored PayPal Accounts**\ PayPal Powered By Braintree and PayPal (Commerce Platform) are the providers that support the ability to store PayPal accounts, which you can use as payment instruments with this API. For more information on enabling stored payment methods, see [Enabling Stored Payment Methods (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards). + ### Using Braintree ACH stored bank accounts In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Braintree ACH in payments API, your store needs to: - -- Have stored ACH accounts enabled. -- Have this method enabled in the API. (contact support) +* Have stored ACH accounts enabled. +* Have this method enabled in the API. (contact support) ### Using Stripe OCS ACH stored bank accounts @@ -195,92 +180,92 @@ Accept: application/json ```json filename="Example response: Get payment methods" showLineNumbers copy { - "data": [ - { - "id": "bigcommerce.gift_certificate", - "name": "Gift Certificate", - "test_mode": false, - "type": "gift_certificate", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "bigcommerce.store_credit", - "name": "Store Credit", - "test_mode": false, - "type": "store_credit", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "stripe.card", - "name": "Stripe", - "test_mode": true, - "type": "card", - "supported_instruments": [ - { - "instrument_type": "VISA", - "verification_value_required": true - }, - { - "instrument_type": "MASTERCARD", - "verification_value_required": true - }, - { - "instrument_type": "AMEX", - "verification_value_required": true - }, - { - "instrument_type": "DISCOVER", - "verification_value_required": true - }, - { - "instrument_type": "JCB", - "verification_value_required": true - }, - { - "instrument_type": "DINERS_CLUB", - "verification_value_required": true - }, - { - "instrument_type": "STORED_CARD", - "verification_value_required": true - } - ], - "stored_instruments": [ - { - "type": "stored_card", - "brand": "VISA", - "expiry_month": 9, - "expiry_year": 2020, - "issuer_identification_number": "424242", - "last_4": "4242", - "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", - "is_default": true - } - ] - }, - { - "id": "braintree.paypal", - "name": "Braintree (PayPal)", - "test_mode": true, - "type": "paypal", - "supported_instruments": [ - { - "instrument_type": "STORED_PAYPAL_ACCOUNT" - } - ], - "stored_instruments": [ - { - "email": "bc@example.com", - "type": "stored_paypal_account", - "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", - "is_default": true - } - ] - } - ], - "meta": {} + "data": [ + { + "id": "bigcommerce.gift_certificate", + "name": "Gift Certificate", + "test_mode": false, + "type": "gift_certificate", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "bigcommerce.store_credit", + "name": "Store Credit", + "test_mode": false, + "type": "store_credit", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "stripe.card", + "name": "Stripe", + "test_mode": true, + "type": "card", + "supported_instruments": [ + { + "instrument_type": "VISA", + "verification_value_required": true + }, + { + "instrument_type": "MASTERCARD", + "verification_value_required": true + }, + { + "instrument_type": "AMEX", + "verification_value_required": true + }, + { + "instrument_type": "DISCOVER", + "verification_value_required": true + }, + { + "instrument_type": "JCB", + "verification_value_required": true + }, + { + "instrument_type": "DINERS_CLUB", + "verification_value_required": true + }, + { + "instrument_type": "STORED_CARD", + "verification_value_required": true + } + ], + "stored_instruments": [ + { + "type": "stored_card", + "brand": "VISA", + "expiry_month": 9, + "expiry_year": 2020, + "issuer_identification_number": "424242", + "last_4": "4242", + "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", + "is_default": true + } + ] + }, + { + "id": "braintree.paypal", + "name": "Braintree (PayPal)", + "test_mode": true, + "type": "paypal", + "supported_instruments": [ + { + "instrument_type": "STORED_PAYPAL_ACCOUNT" + } + ], + "stored_instruments": [ + { + "email": "bc@example.com", + "type": "stored_paypal_account", + "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", + "is_default": true + } + ] + } + ], + "meta": {} } ``` @@ -289,6 +274,7 @@ Accept: application/json Make a note of the `token` for the target payment method to use as part of processing the payment in the request body. + 2. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -312,10 +298,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -324,10 +310,10 @@ Accept: application/json 3. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values retrieved with the [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) request you made in a preceding step. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - - #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in - preceding step. The token expires after one hour. To be valid, the header - value string must contain a space between "PAT" and the `{{ PAT_TOKEN }}`. + +#### Authorization header +The `PAT_TOKEN` is the `data.id` value returned in preceding step. The token expires after one hour. +To be valid, the header value string must contain a space between "PAT" and the `{{PAT_TOKEN}}`. To process a payment using a stored card, set the `type` to `stored_card`. @@ -376,11 +362,11 @@ Content-Type: application/json ```json filename="Example response: Process payment with a stored card or PayPal account" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -390,14 +376,12 @@ Content-Type: application/json If the purchase was successful, the response returns a status of success. The order is then automatically moved to an **Awaiting Fulfillment** status. If you get a different response, see [Error codes](#error-codes) for troubleshooting. In the case of store credit and gift certificates: +* If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. +* The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. -- If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. -- The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. - - - #### List stored instruments Use the [Get Stored - Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) - endpoint to list all available stored instruments for a customer. + +#### List stored instruments +Use the [Get Stored Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) endpoint to list all available stored instruments for a customer. ## Credit cards @@ -410,7 +394,6 @@ There are two steps to using a credit card to make a payment. The payment gateway your application uses must be able to send raw card data through our API. Before beginning development, consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. ### Create an access token - 1. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -434,10 +417,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -446,12 +429,12 @@ Accept: application/json ### Process the payment -2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: +2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - - #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in - preceding step. To be valid, the header value string should contain a space - between "PAT" and the `{{ PAT_TOKEN }}`. + +#### Authorization header +The `PAT_TOKEN` is the `data.id` value returned in preceding step. +To be valid, the header value string should contain a space between "PAT" and the `{{PAT_TOKEN}}`. @@ -481,13 +464,14 @@ Content-Type: application/json
+ ```json filename="Example response: Process payment with a credit card" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -528,6 +512,7 @@ Content-Type: application/json It is possible to take payment for an order created using the [Orders API](/docs/store-operations/orders). When creating the order using the Orders API, make sure to set `status_id:0`. If you do not create an order with order status set to `0` or `Incomplete`, the Payments API will return an [error](#error-codes). Ensure customers enter their billing address and line items when creating the order. The customer can create the order as a guest by either setting the `customer_id:0` or leaving it blank. After the order is created, follow the steps to pay with a [credit card](#credit-cards), a [stored card, or a PayPal account](#stored-cards-paypal-and-bank-accounts). + ```http filename="Example request: Create an order" showLineNumbers copy POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v2/orders X-Auth-Token: {{ACCESS_TOKEN}} @@ -582,13 +567,11 @@ Accept: application/json ] } ``` - ## Theme considerations - The following is a list of considerations when using the Payments API on a headless storefront. -- Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. -- Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. +* Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. +* Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. ## Technical details @@ -596,34 +579,28 @@ The following is a list of considerations when using the Payments API on a headl The following is a list of links to the test credit card numbers for our supported gateways. These can be useful during the development process. Check your credit card setup in both [BigCommerce (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) and the payment gateway to make sure it is configured properly. If the credit cards do not work or stop working, please reach out to the payment provider as these are not maintained by BigCommerce. -- [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) -- [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) -- [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) -- [Stripe](https://stripe.com/docs/testing#cards) +* [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) +* [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) +* [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) +* [Stripe](https://stripe.com/docs/testing#cards) ### Token - The `payment_access_token` is not from the payment provider. It is created by BigCommerce. ### Decline payments - A declined payment will return a 4XX error with details if available. ### Authorization - If you configure a payment gateway for authorization only, authorization happens at the time of processing. You will need to capture the order later using the control panel or the Capture API. If you configure a payment gateway for authorization and capture, the payment will be authorized and captured at the time of processing. ### Control panel - Orders created and captured via the API will look the same as other orders created via the storefront or other apps. The order source will be "Checkout API". ### Data access - The card data is not accessible via the API once the payment is processed. ### Rate limits - -The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. +The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. ## Sample app diagram @@ -631,29 +608,29 @@ The following diagram shows how the `payment_access_token` interacts with BigCom You can create orders using the [Server to Server API Endpoints](/docs/rest-management/checkouts/checkout-orders#create-an-order) or [Orders API](/docs/rest-management/orders). -![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png 'Sample App Diagram') +![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png "Sample App Diagram") ## Error codes -| Code | Description | Possible Causes | Possible Solutions | -| ------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | -| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | -| `30000` | Merchant payment configuration could not be found. | \* The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | -| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | -| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | -| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | -| `30004` | The validation on line item and grand total does not match. | N/A | Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly | -| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
_ `expiry_month` is two digits
_ `expiry_year` is four digits | -| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper. | Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | -| `30100` | Payment access token could not be created. | N/A | N/A | -| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | -| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | -| `30103` | Your card has expired. Please try again with a valid card. | N/A | N/A | -| `30104` | There was a problem processing your card. Please contact your card issuer. | N/A | N/A | -| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. | N/A | N/A | -| `30106` | The payment was declined due to insufficient funds. | N/A | N/A | -| `30107` | The authorization for this transaction has been revoked. | Shopper revoked payment authorization associated with the stored PayPal account. | N/A | +| Code | Description | Possible Causes | Possible Solutions | +|-|-| - | - | +| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | +| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | +| `30000` | Merchant payment configuration could not be found. | * The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | +| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | +| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | +| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | +| `30004` | The validation on line item and grand total does not match. | N/A| Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly| +| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
* `expiry_month` is two digits
* `expiry_year` is four digits | +| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper.| Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | +| `30100` | Payment access token could not be created. | N/A|N/A| +| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | +| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | +| `30103` | Your card has expired. Please try again with a valid card. |N/A | N/A| +| `30104` | There was a problem processing your card. Please contact your card issuer. |N/A |N/A| +| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. |N/A |N/A | +| `30106` | The payment was declined due to insufficient funds. |N/A |N/A| +| `30107` | The authorization for this transaction has been revoked. |Shopper revoked payment authorization associated with the stored PayPal account.|N/A| ## FAQ @@ -679,7 +656,6 @@ Yes, checkouts and orders with more than one consignment can use the Payments AP **Is store credit supported?** Yes, the Payments API supports the store credit payment method under the following conditions: - - The shopper is transacting in the store's default currency. - The shopper has a positive store credit balance. @@ -700,22 +676,20 @@ Payment gateways that use 3D Secure meet the EU's Strong Customer Authentication ## Related resources ### Articles +* [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) +* [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) +* [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) +* [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) +* [Guide to the Stored Instruments API](/beta/stored-instruments) -- [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) -- [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) -- [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) -- [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) -- [Guide to the Stored Instruments API](/beta/stored-instruments) ### Endpoints and mutations - -- [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) -- `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) -- [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) -- [Process Payment](/docs/rest-payments/processing#process-payment) +* [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) +* `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) +* [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) +* [Process Payment](/docs/rest-payments/processing#process-payment) ### Webhooks - -- [Carts](/docs/integrations/webhooks/events#carts) -- [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) -- [Orders](/docs/integrations/webhooks/events#orders) +* [Carts](/docs/integrations/webhooks/events#carts) +* [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) +* [Orders](/docs/integrations/webhooks/events#orders) From ff6528c6cb25c9b7cdc1367b5a05a724c4783123 Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Thu, 6 Nov 2025 12:15:37 -0500 Subject: [PATCH 08/11] added in information on upgrading checkout sdk --- docs/store-operations/payments/index.mdx | 528 +++++++++++++---------- 1 file changed, 295 insertions(+), 233 deletions(-) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index 637e3e0a1..284809476 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -8,20 +8,32 @@ keywords: payments, bigpay, currencies, currency, rest, v3, payment access token The Payments API lets you process payments through the store’s connected payment gateways. Merchants can receive a payment for an order that was created using either the [Store Management Checkouts API](/docs/rest-storefront/checkouts) endpoint or the [Orders API](/docs/rest-management/orders#create-an-order). Process payments by making a sequence of requests to the following two API endpoints: -* Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` -* Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` - -#### Required OAuth scopes -Add the [Create Payments scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the [store-level or app-level API account](/docs/start/authentication/api-accounts) you use when you [Create Payment Access Tokens](/docs/rest-payments/tokens#create-payment-access-token). -Learn more about BigCommerce API [OAuth scopes](/docs/start/authentication/api-accounts#oauth-scopes). +- Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` +- Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` + + + #### Required OAuth scopes Add the [Create Payments + scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the + [store-level or app-level API + account](/docs/start/authentication/api-accounts) you use when you [Create + Payment Access + Tokens](/docs/rest-payments/tokens#create-payment-access-token). Learn more + about BigCommerce API [OAuth + scopes](/docs/start/authentication/api-accounts#oauth-scopes). [![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/40447133-f8876e25-33c0-4174-ba8f-7857f336200d) - -#### Implementation note -3D Secure is a storefront-based experience that requires the shopper's interaction to authenticate the transaction. Because requests to our Payments API must be initiated in a server-to-server context rather than from the storefront, any 3D Secure-enabled card must first be saved during a shopper-initiated transaction and then charged as a stored payment instrument. Attempts to process any payment that requires 3D Secure verification using a card that has not been previously saved will be unsuccessful. + + #### Implementation note 3D Secure is a storefront-based experience that + requires the shopper's interaction to authenticate the transaction. Because + requests to our Payments API must be initiated in a server-to-server context + rather than from the storefront, any 3D Secure-enabled card must first be + saved during a shopper-initiated transaction and then charged as a stored + payment instrument. Attempts to process any payment that requires 3D Secure + verification using a card that has not been previously saved will be + unsuccessful. You can process payments charged to either of two main forms of payment: [stored payment instruments](#stored-cards-paypal-and-bank-accounts) or [new cards](#credit-cards) which still need to be saved. The API flow does not support hosted, offsite, or wallet-type providers like Amazon Pay. One exception is that one provider, PayPal powered by Braintree, supports existing [stored PayPal accounts](https://support.bigcommerce.com/s/article/Enabling-Stored-Payment-Methods?language=en_US#paypal). No providers support using non-stored/new PayPal accounts through this API. @@ -32,68 +44,70 @@ BigCommerce is only responsible for the security of payment methods while the pa Each recurring billing app that uses the BigCommerce Payments API and collects merchants or shoppers' personally identifiable information (PII) must have its own Privacy Policy sufficient to the requirements of the European Union General Data Protection Requirements (GDPR). The GDPR must be available and displayed to the general public. - -#### PCI compliance -If your application handles credit card data, you will need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). + + #### PCI compliance If your application handles credit card data, you will + need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to + [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). ## Compatible payment gateways The following table lists the payment gateways that are compatible with our public Payments API. Note that not all gateways support processing a payment using both stored payment instruments and raw card data. -| Payment Gateway | Stored instruments | Raw card data | -|:------------------|:------------------:|:---------------:| -| Access Worldpay | ✓ | ✓ | -| Adyen | | ✓ | -| AdyenV2 | ✓ | | -| Adyen V3 OAuth | ✓ | ✓ | -| Authorize.net | ✓ | ✓ | -| Barclaycard Fuse | ✓ | ✓ | -| BlueSnap Direct | ✓ | ✓ | -| BNZ | ✓ | ✓ | -| Bolt | ✓ | ✓ | -| CardConnect | | ✓ | -| Chase Integrated Payments | | ✓ | -| Chase Merchant Services | ✓ | ✓ | -| Checkout.com | ✓ | ✓ | -| Commonwealth Bank | ✓ | ✓ | -| Cybersource | ✓ | ✓ | -| Cybersource V2 | ✓ | ✓ | -| Eway Rapid | | ✓ | -| First Data Payeezy Gateway | | ✓ | -| Heartland Payment Systems | | ✓ | -| Mercado Pago | | ✓ | -| MIGS | | ✓ | -| Mollie | ✓ | | -| Moneris | ✓ | ✓ | -| MyVirtualMerchant | ✓ | ✓ | -| Nexi | | ✓ | -| NMI | | ✓ | -| Opayo by Elavon | ✓ | ✓ | -| Paymetric | ✓ | ✓ | -| PayPal (Commerce Platform) | ✓ | ✓ | -| PayPal Powered by Braintree | ✓ | ✓ | -| PayPal Payments Pro (Payflow Edition) UK | | ✓ | -| PayPal Payments Pro (Payflow Edition) US | | ✓ | -| QuickBooks Payments | | ✓ | -| Sage Pay/Protx VSP Direct | | ✓ | -| SecureNet | | ✓ | -| Square v2 | ✓ | | -| Stripe | ✓ | ✓ | -| StripeV3 | ✓ | ✓ | -| StripeV4 | ✓ | ✓ | -| Stripe OCS (beta) | ✓ | ✓ | -| TD Online Mart | ✓ | ✓ | -| USA ePay | | ✓ | -| Vantiv | | ✓ | -| Vantiv Core | | ✓ | -| Windcave | | ✓ | -| Worldpay | | ✓ | -| Worldpay Core | | ✓ | - - -#### Test payment gateway -The Payments API does not support the [BigCommerce Test Payment Gateway (Help Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). +| Payment Gateway | Stored instruments | Raw card data | +| :--------------------------------------- | :----------------: | :-----------: | +| Access Worldpay | ✓ | ✓ | +| Adyen | | ✓ | +| AdyenV2 | ✓ | | +| Adyen V3 OAuth | ✓ | ✓ | +| Authorize.net | ✓ | ✓ | +| Barclaycard Fuse | ✓ | ✓ | +| BlueSnap Direct | ✓ | ✓ | +| BNZ | ✓ | ✓ | +| Bolt | ✓ | ✓ | +| CardConnect | | ✓ | +| Chase Integrated Payments | | ✓ | +| Chase Merchant Services | ✓ | ✓ | +| Checkout.com | ✓ | ✓ | +| Commonwealth Bank | ✓ | ✓ | +| Cybersource | ✓ | ✓ | +| Cybersource V2 | ✓ | ✓ | +| Eway Rapid | | ✓ | +| First Data Payeezy Gateway | | ✓ | +| Heartland Payment Systems | | ✓ | +| Mercado Pago | | ✓ | +| MIGS | | ✓ | +| Mollie | ✓ | | +| Moneris | ✓ | ✓ | +| MyVirtualMerchant | ✓ | ✓ | +| Nexi | | ✓ | +| NMI | | ✓ | +| Opayo by Elavon | ✓ | ✓ | +| Paymetric | ✓ | ✓ | +| PayPal (Commerce Platform) | ✓ | ✓ | +| PayPal Powered by Braintree | ✓ | ✓ | +| PayPal Payments Pro (Payflow Edition) UK | | ✓ | +| PayPal Payments Pro (Payflow Edition) US | | ✓ | +| QuickBooks Payments | | ✓ | +| Sage Pay/Protx VSP Direct | | ✓ | +| SecureNet | | ✓ | +| Square v2 | ✓ | | +| Stripe | ✓ | ✓ | +| StripeV3 | ✓ | ✓ | +| StripeV4 | ✓ | ✓ | +| Stripe OCS (beta) | ✓ | ✓ | +| TD Online Mart | ✓ | ✓ | +| USA ePay | | ✓ | +| Vantiv | | ✓ | +| Vantiv Core | | ✓ | +| Windcave | | ✓ | +| Worldpay | | ✓ | +| Worldpay Core | | ✓ | + + + #### Test payment gateway The Payments API does not support the [BigCommerce + Test Payment Gateway (Help + Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). To learn more about the BigCommerce-compatible features of these gateways, see [All Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways#all-available). @@ -115,9 +129,10 @@ To use stored payment instruments with the Payments API or the Checkout SDK, bot The payment gateway must support making charges to **stored payment instruments**. Consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. The store must: -* be on a BigCommerce Plus plan or higher; -* use Optimized One-Page Checkout; -* have stored credit cards and/or stored PayPal accounts enabled. + +- be on a BigCommerce Plus plan or higher; +- use Optimized One-Page Checkout; +- have stored credit cards and/or stored PayPal accounts enabled. **Enabling Stored Credit Cards**\ Use the store control panel to enable stored credit cards. Navigate to **[Settings > Setup > Payments](https://login.bigcommerce.com/deep-links/manage/settings/payment)** and click the tab for your payment gateway. Toggle the switch to enable Stored Credit Cards and click **Save**. @@ -125,12 +140,43 @@ Use the store control panel to enable stored credit cards. Navigate to **[Settin **Enabling Stored PayPal Accounts**\ PayPal Powered By Braintree and PayPal (Commerce Platform) are the providers that support the ability to store PayPal accounts, which you can use as payment instruments with this API. For more information on enabling stored payment methods, see [Enabling Stored Payment Methods (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards). - ### Using Braintree ACH stored bank accounts In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Braintree ACH in payments API, your store needs to: -* Have stored ACH accounts enabled. -* Have this method enabled in the API. (contact support) + +- Have stored ACH accounts enabled. +- Have this method enabled in the API. (contact support) + +### Using Stripe OCS ACH stored bank accounts + + + Stripe OCS ACH is currently in beta. Please read the following [Knowledge + Base(KB) + article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS?language=en_US#notifications) + for more beta details. + + + + If your store uses custom checkout, and you installed the SDK via `npm` you must update to the latest version of + the [Checkout SDK](https://github.com/bigcommerce/checkout-sdk-js?tab=readme-ov-file#installation). + +If you installed via the loader script refer our [documentation](/docs/storefront/cart-checkout/checkout-sdk) to make sure you are using the latest version. + + + +Stripe OCS supports both Optimized One Page Checkout (OOPC) and custom checkouts that use the [Checkout SDK](/docs/storefront/cart-checkout/checkout-sdk). + +In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Stripe OCS ACH in the payments API, your store needs to: + +- Enable ACH stored credentials in BigCommerce **Control Panel** > **Settings** > **Payments** > **Stripe**. See image below for reference: + +![enable-stripe-ocs-ach](/assets/images/stripe-ocs-ach.png) + +- Activate ACH as a payment method on your Stripe Dashboard. + +Once the ACH checkbox is enabled and ACH is activated as a payment method on Stripe Dashboard, shoppers will be able to store their bank account details from both the "My Account" page and checkout page. + +#### Example implementation ### Using Stripe OCS ACH stored bank accounts @@ -142,8 +188,9 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites - If your store uses custom checkout, you must update to the latest version of - the [Checkout SDK](/docs/storefront/cart-checkout/checkout-sdk). + - If your store uses custom checkout, and you installed the SDK via `npm` you must update to the latest version of + the [Checkout SDK](https://github.com/bigcommerce/checkout-sdk-js?tab=readme-ov-file#installation). + - If you installed via the loader script refer our [documentation](/docs/storefront/cart-checkout/checkout-sdk) to make sure you are using the latest version. Stripe OCS supports both Optimized One Page Checkout (OOPC) and custom checkouts that use the [Checkout SDK](/docs/storefront/cart-checkout/checkout-sdk). @@ -158,6 +205,10 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites Once the ACH checkbox is enabled and ACH is activated as a payment method on Stripe Dashboard, shoppers will be able to store their bank account details from both the "My Account" page and checkout page. +#### Example implementation + +For a Checkout SDK example implementation of Stripe OCS, see our [checkout-js repository](https://github.com/bigcommerce/checkout-js/tree/master/packages/stripe-integration/src/stripe-ocs). + ### Charging stored instruments There are three steps to using a stored card or PayPal account to make a payment. @@ -180,92 +231,92 @@ Accept: application/json ```json filename="Example response: Get payment methods" showLineNumbers copy { - "data": [ - { - "id": "bigcommerce.gift_certificate", - "name": "Gift Certificate", - "test_mode": false, - "type": "gift_certificate", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "bigcommerce.store_credit", - "name": "Store Credit", - "test_mode": false, - "type": "store_credit", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "stripe.card", - "name": "Stripe", - "test_mode": true, - "type": "card", - "supported_instruments": [ - { - "instrument_type": "VISA", - "verification_value_required": true - }, - { - "instrument_type": "MASTERCARD", - "verification_value_required": true - }, - { - "instrument_type": "AMEX", - "verification_value_required": true - }, - { - "instrument_type": "DISCOVER", - "verification_value_required": true - }, - { - "instrument_type": "JCB", - "verification_value_required": true - }, - { - "instrument_type": "DINERS_CLUB", - "verification_value_required": true - }, - { - "instrument_type": "STORED_CARD", - "verification_value_required": true - } - ], - "stored_instruments": [ - { - "type": "stored_card", - "brand": "VISA", - "expiry_month": 9, - "expiry_year": 2020, - "issuer_identification_number": "424242", - "last_4": "4242", - "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", - "is_default": true - } - ] - }, - { - "id": "braintree.paypal", - "name": "Braintree (PayPal)", - "test_mode": true, - "type": "paypal", - "supported_instruments": [ - { - "instrument_type": "STORED_PAYPAL_ACCOUNT" - } - ], - "stored_instruments": [ - { - "email": "bc@example.com", - "type": "stored_paypal_account", - "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", - "is_default": true - } - ] - } - ], - "meta": {} + "data": [ + { + "id": "bigcommerce.gift_certificate", + "name": "Gift Certificate", + "test_mode": false, + "type": "gift_certificate", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "bigcommerce.store_credit", + "name": "Store Credit", + "test_mode": false, + "type": "store_credit", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "stripe.card", + "name": "Stripe", + "test_mode": true, + "type": "card", + "supported_instruments": [ + { + "instrument_type": "VISA", + "verification_value_required": true + }, + { + "instrument_type": "MASTERCARD", + "verification_value_required": true + }, + { + "instrument_type": "AMEX", + "verification_value_required": true + }, + { + "instrument_type": "DISCOVER", + "verification_value_required": true + }, + { + "instrument_type": "JCB", + "verification_value_required": true + }, + { + "instrument_type": "DINERS_CLUB", + "verification_value_required": true + }, + { + "instrument_type": "STORED_CARD", + "verification_value_required": true + } + ], + "stored_instruments": [ + { + "type": "stored_card", + "brand": "VISA", + "expiry_month": 9, + "expiry_year": 2020, + "issuer_identification_number": "424242", + "last_4": "4242", + "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", + "is_default": true + } + ] + }, + { + "id": "braintree.paypal", + "name": "Braintree (PayPal)", + "test_mode": true, + "type": "paypal", + "supported_instruments": [ + { + "instrument_type": "STORED_PAYPAL_ACCOUNT" + } + ], + "stored_instruments": [ + { + "email": "bc@example.com", + "type": "stored_paypal_account", + "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", + "is_default": true + } + ] + } + ], + "meta": {} } ``` @@ -274,7 +325,6 @@ Accept: application/json Make a note of the `token` for the target payment method to use as part of processing the payment in the request body. - 2. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -298,10 +348,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -310,10 +360,10 @@ Accept: application/json 3. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values retrieved with the [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) request you made in a preceding step. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - -#### Authorization header -The `PAT_TOKEN` is the `data.id` value returned in preceding step. The token expires after one hour. -To be valid, the header value string must contain a space between "PAT" and the `{{PAT_TOKEN}}`. + + #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in + preceding step. The token expires after one hour. To be valid, the header + value string must contain a space between "PAT" and the `{{ PAT_TOKEN }}`. To process a payment using a stored card, set the `type` to `stored_card`. @@ -362,11 +412,11 @@ Content-Type: application/json ```json filename="Example response: Process payment with a stored card or PayPal account" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -376,12 +426,14 @@ Content-Type: application/json If the purchase was successful, the response returns a status of success. The order is then automatically moved to an **Awaiting Fulfillment** status. If you get a different response, see [Error codes](#error-codes) for troubleshooting. In the case of store credit and gift certificates: -* If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. -* The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. - -#### List stored instruments -Use the [Get Stored Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) endpoint to list all available stored instruments for a customer. +- If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. +- The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. + + + #### List stored instruments Use the [Get Stored + Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) + endpoint to list all available stored instruments for a customer. ## Credit cards @@ -394,6 +446,7 @@ There are two steps to using a credit card to make a payment. The payment gateway your application uses must be able to send raw card data through our API. Before beginning development, consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. ### Create an access token + 1. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -417,10 +470,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -429,12 +482,12 @@ Accept: application/json ### Process the payment -2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: +2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - -#### Authorization header -The `PAT_TOKEN` is the `data.id` value returned in preceding step. -To be valid, the header value string should contain a space between "PAT" and the `{{PAT_TOKEN}}`. + + #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in + preceding step. To be valid, the header value string should contain a space + between "PAT" and the `{{ PAT_TOKEN }}`. @@ -464,14 +517,13 @@ Content-Type: application/json
- ```json filename="Example response: Process payment with a credit card" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -512,7 +564,6 @@ Content-Type: application/json It is possible to take payment for an order created using the [Orders API](/docs/store-operations/orders). When creating the order using the Orders API, make sure to set `status_id:0`. If you do not create an order with order status set to `0` or `Incomplete`, the Payments API will return an [error](#error-codes). Ensure customers enter their billing address and line items when creating the order. The customer can create the order as a guest by either setting the `customer_id:0` or leaving it blank. After the order is created, follow the steps to pay with a [credit card](#credit-cards), a [stored card, or a PayPal account](#stored-cards-paypal-and-bank-accounts). - ```http filename="Example request: Create an order" showLineNumbers copy POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v2/orders X-Auth-Token: {{ACCESS_TOKEN}} @@ -567,11 +618,13 @@ Accept: application/json ] } ``` + ## Theme considerations + The following is a list of considerations when using the Payments API on a headless storefront. -* Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. -* Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. +- Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. +- Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. ## Technical details @@ -579,28 +632,34 @@ The following is a list of considerations when using the Payments API on a headl The following is a list of links to the test credit card numbers for our supported gateways. These can be useful during the development process. Check your credit card setup in both [BigCommerce (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) and the payment gateway to make sure it is configured properly. If the credit cards do not work or stop working, please reach out to the payment provider as these are not maintained by BigCommerce. -* [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) -* [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) -* [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) -* [Stripe](https://stripe.com/docs/testing#cards) +- [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) +- [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) +- [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) +- [Stripe](https://stripe.com/docs/testing#cards) ### Token + The `payment_access_token` is not from the payment provider. It is created by BigCommerce. ### Decline payments + A declined payment will return a 4XX error with details if available. ### Authorization + If you configure a payment gateway for authorization only, authorization happens at the time of processing. You will need to capture the order later using the control panel or the Capture API. If you configure a payment gateway for authorization and capture, the payment will be authorized and captured at the time of processing. ### Control panel + Orders created and captured via the API will look the same as other orders created via the storefront or other apps. The order source will be "Checkout API". ### Data access + The card data is not accessible via the API once the payment is processed. ### Rate limits -The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. + +The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. ## Sample app diagram @@ -608,29 +667,29 @@ The following diagram shows how the `payment_access_token` interacts with BigCom You can create orders using the [Server to Server API Endpoints](/docs/rest-management/checkouts/checkout-orders#create-an-order) or [Orders API](/docs/rest-management/orders). -![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png "Sample App Diagram") +![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png 'Sample App Diagram') ## Error codes -| Code | Description | Possible Causes | Possible Solutions | -|-|-| - | - | -| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | -| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | -| `30000` | Merchant payment configuration could not be found. | * The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | -| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | -| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | -| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | -| `30004` | The validation on line item and grand total does not match. | N/A| Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly| -| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
* `expiry_month` is two digits
* `expiry_year` is four digits | -| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper.| Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | -| `30100` | Payment access token could not be created. | N/A|N/A| -| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | -| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | -| `30103` | Your card has expired. Please try again with a valid card. |N/A | N/A| -| `30104` | There was a problem processing your card. Please contact your card issuer. |N/A |N/A| -| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. |N/A |N/A | -| `30106` | The payment was declined due to insufficient funds. |N/A |N/A| -| `30107` | The authorization for this transaction has been revoked. |Shopper revoked payment authorization associated with the stored PayPal account.|N/A| +| Code | Description | Possible Causes | Possible Solutions | +| ------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | +| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | +| `30000` | Merchant payment configuration could not be found. | \* The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | +| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | +| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | +| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | +| `30004` | The validation on line item and grand total does not match. | N/A | Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly | +| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
_ `expiry_month` is two digits
_ `expiry_year` is four digits | +| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper. | Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | +| `30100` | Payment access token could not be created. | N/A | N/A | +| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | +| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | +| `30103` | Your card has expired. Please try again with a valid card. | N/A | N/A | +| `30104` | There was a problem processing your card. Please contact your card issuer. | N/A | N/A | +| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. | N/A | N/A | +| `30106` | The payment was declined due to insufficient funds. | N/A | N/A | +| `30107` | The authorization for this transaction has been revoked. | Shopper revoked payment authorization associated with the stored PayPal account. | N/A | ## FAQ @@ -656,6 +715,7 @@ Yes, checkouts and orders with more than one consignment can use the Payments AP **Is store credit supported?** Yes, the Payments API supports the store credit payment method under the following conditions: + - The shopper is transacting in the store's default currency. - The shopper has a positive store credit balance. @@ -676,20 +736,22 @@ Payment gateways that use 3D Secure meet the EU's Strong Customer Authentication ## Related resources ### Articles -* [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) -* [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) -* [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) -* [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) -* [Guide to the Stored Instruments API](/beta/stored-instruments) +- [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) +- [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) +- [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) +- [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) +- [Guide to the Stored Instruments API](/beta/stored-instruments) ### Endpoints and mutations -* [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) -* `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) -* [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) -* [Process Payment](/docs/rest-payments/processing#process-payment) + +- [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) +- `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) +- [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) +- [Process Payment](/docs/rest-payments/processing#process-payment) ### Webhooks -* [Carts](/docs/integrations/webhooks/events#carts) -* [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) -* [Orders](/docs/integrations/webhooks/events#orders) + +- [Carts](/docs/integrations/webhooks/events#carts) +- [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) +- [Orders](/docs/integrations/webhooks/events#orders) From 89aaa10cde940c2f9b7e214c235208675c1cce73 Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Thu, 6 Nov 2025 12:18:40 -0500 Subject: [PATCH 09/11] fix: formatting --- docs/store-operations/payments/index.mdx | 521 ++++++++++------------- 1 file changed, 230 insertions(+), 291 deletions(-) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index 284809476..6a91a6144 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -8,32 +8,20 @@ keywords: payments, bigpay, currencies, currency, rest, v3, payment access token The Payments API lets you process payments through the store’s connected payment gateways. Merchants can receive a payment for an order that was created using either the [Store Management Checkouts API](/docs/rest-storefront/checkouts) endpoint or the [Orders API](/docs/rest-management/orders#create-an-order). Process payments by making a sequence of requests to the following two API endpoints: +* Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` +* Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` -- Create a payment token: `https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/payments/access_tokens` -- Process the payment: `https://payments.bigcommerce.com/stores/{{STORE_HASH}}/payments` - - - #### Required OAuth scopes Add the [Create Payments - scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the - [store-level or app-level API - account](/docs/start/authentication/api-accounts) you use when you [Create - Payment Access - Tokens](/docs/rest-payments/tokens#create-payment-access-token). Learn more - about BigCommerce API [OAuth - scopes](/docs/start/authentication/api-accounts#oauth-scopes). + +#### Required OAuth scopes +Add the [Create Payments scope](/docs/start/authentication/api-accounts#token-creation-scopes) to the [store-level or app-level API account](/docs/start/authentication/api-accounts) you use when you [Create Payment Access Tokens](/docs/rest-payments/tokens#create-payment-access-token). +Learn more about BigCommerce API [OAuth scopes](/docs/start/authentication/api-accounts#oauth-scopes). [![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/40447133-f8876e25-33c0-4174-ba8f-7857f336200d) - - #### Implementation note 3D Secure is a storefront-based experience that - requires the shopper's interaction to authenticate the transaction. Because - requests to our Payments API must be initiated in a server-to-server context - rather than from the storefront, any 3D Secure-enabled card must first be - saved during a shopper-initiated transaction and then charged as a stored - payment instrument. Attempts to process any payment that requires 3D Secure - verification using a card that has not been previously saved will be - unsuccessful. + +#### Implementation note +3D Secure is a storefront-based experience that requires the shopper's interaction to authenticate the transaction. Because requests to our Payments API must be initiated in a server-to-server context rather than from the storefront, any 3D Secure-enabled card must first be saved during a shopper-initiated transaction and then charged as a stored payment instrument. Attempts to process any payment that requires 3D Secure verification using a card that has not been previously saved will be unsuccessful. You can process payments charged to either of two main forms of payment: [stored payment instruments](#stored-cards-paypal-and-bank-accounts) or [new cards](#credit-cards) which still need to be saved. The API flow does not support hosted, offsite, or wallet-type providers like Amazon Pay. One exception is that one provider, PayPal powered by Braintree, supports existing [stored PayPal accounts](https://support.bigcommerce.com/s/article/Enabling-Stored-Payment-Methods?language=en_US#paypal). No providers support using non-stored/new PayPal accounts through this API. @@ -44,70 +32,67 @@ BigCommerce is only responsible for the security of payment methods while the pa Each recurring billing app that uses the BigCommerce Payments API and collects merchants or shoppers' personally identifiable information (PII) must have its own Privacy Policy sufficient to the requirements of the European Union General Data Protection Requirements (GDPR). The GDPR must be available and displayed to the general public. - - #### PCI compliance If your application handles credit card data, you will - need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to - [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). + +#### PCI compliance +If your application handles credit card data, you will need to be PCI-compliant. Submit self-assessment questionnaires (**SAQs**) to [compliance@bigcommerce.com](mailto:compliance@bigcommerce.com). ## Compatible payment gateways The following table lists the payment gateways that are compatible with our public Payments API. Note that not all gateways support processing a payment using both stored payment instruments and raw card data. -| Payment Gateway | Stored instruments | Raw card data | -| :--------------------------------------- | :----------------: | :-----------: | -| Access Worldpay | ✓ | ✓ | -| Adyen | | ✓ | -| AdyenV2 | ✓ | | -| Adyen V3 OAuth | ✓ | ✓ | -| Authorize.net | ✓ | ✓ | -| Barclaycard Fuse | ✓ | ✓ | -| BlueSnap Direct | ✓ | ✓ | -| BNZ | ✓ | ✓ | -| Bolt | ✓ | ✓ | -| CardConnect | | ✓ | -| Chase Integrated Payments | | ✓ | -| Chase Merchant Services | ✓ | ✓ | -| Checkout.com | ✓ | ✓ | -| Commonwealth Bank | ✓ | ✓ | -| Cybersource | ✓ | ✓ | -| Cybersource V2 | ✓ | ✓ | -| Eway Rapid | | ✓ | -| First Data Payeezy Gateway | | ✓ | -| Heartland Payment Systems | | ✓ | -| Mercado Pago | | ✓ | -| MIGS | | ✓ | -| Mollie | ✓ | | -| Moneris | ✓ | ✓ | -| MyVirtualMerchant | ✓ | ✓ | -| Nexi | | ✓ | -| NMI | | ✓ | -| Opayo by Elavon | ✓ | ✓ | -| Paymetric | ✓ | ✓ | -| PayPal (Commerce Platform) | ✓ | ✓ | -| PayPal Powered by Braintree | ✓ | ✓ | -| PayPal Payments Pro (Payflow Edition) UK | | ✓ | -| PayPal Payments Pro (Payflow Edition) US | | ✓ | -| QuickBooks Payments | | ✓ | -| Sage Pay/Protx VSP Direct | | ✓ | -| SecureNet | | ✓ | -| Square v2 | ✓ | | -| Stripe | ✓ | ✓ | -| StripeV3 | ✓ | ✓ | -| StripeV4 | ✓ | ✓ | -| Stripe OCS (beta) | ✓ | ✓ | -| TD Online Mart | ✓ | ✓ | -| USA ePay | | ✓ | -| Vantiv | | ✓ | -| Vantiv Core | | ✓ | -| Windcave | | ✓ | -| Worldpay | | ✓ | -| Worldpay Core | | ✓ | - - - #### Test payment gateway The Payments API does not support the [BigCommerce - Test Payment Gateway (Help - Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). +| Payment Gateway | Stored instruments | Raw card data | +|:------------------|:------------------:|:---------------:| +| Access Worldpay | ✓ | ✓ | +| Adyen | | ✓ | +| AdyenV2 | ✓ | | +| Adyen V3 OAuth | ✓ | ✓ | +| Authorize.net | ✓ | ✓ | +| Barclaycard Fuse | ✓ | ✓ | +| BlueSnap Direct | ✓ | ✓ | +| BNZ | ✓ | ✓ | +| Bolt | ✓ | ✓ | +| CardConnect | | ✓ | +| Chase Integrated Payments | | ✓ | +| Chase Merchant Services | ✓ | ✓ | +| Checkout.com | ✓ | ✓ | +| Commonwealth Bank | ✓ | ✓ | +| Cybersource | ✓ | ✓ | +| Cybersource V2 | ✓ | ✓ | +| Eway Rapid | | ✓ | +| First Data Payeezy Gateway | | ✓ | +| Heartland Payment Systems | | ✓ | +| Mercado Pago | | ✓ | +| MIGS | | ✓ | +| Mollie | ✓ | | +| Moneris | ✓ | ✓ | +| MyVirtualMerchant | ✓ | ✓ | +| Nexi | | ✓ | +| NMI | | ✓ | +| Opayo by Elavon | ✓ | ✓ | +| Paymetric | ✓ | ✓ | +| PayPal (Commerce Platform) | ✓ | ✓ | +| PayPal Powered by Braintree | ✓ | ✓ | +| PayPal Payments Pro (Payflow Edition) UK | | ✓ | +| PayPal Payments Pro (Payflow Edition) US | | ✓ | +| QuickBooks Payments | | ✓ | +| Sage Pay/Protx VSP Direct | | ✓ | +| SecureNet | | ✓ | +| Square v2 | ✓ | | +| Stripe | ✓ | ✓ | +| StripeV3 | ✓ | ✓ | +| StripeV4 | ✓ | ✓ | +| TD Online Mart | ✓ | ✓ | +| USA ePay | | ✓ | +| Vantiv | | ✓ | +| Vantiv Core | | ✓ | +| Windcave | | ✓ | +| Worldpay | | ✓ | +| Worldpay Core | | ✓ | + + +#### Test payment gateway +The Payments API does not support the [BigCommerce Test Payment Gateway (Help Center)](https://support.bigcommerce.com/s/article/Testing-Shipping-Tax-and-Payment-Settings?language=en_US#test-gateway). To learn more about the BigCommerce-compatible features of these gateways, see [All Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways#all-available). @@ -129,10 +114,9 @@ To use stored payment instruments with the Payments API or the Checkout SDK, bot The payment gateway must support making charges to **stored payment instruments**. Consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. The store must: - -- be on a BigCommerce Plus plan or higher; -- use Optimized One-Page Checkout; -- have stored credit cards and/or stored PayPal accounts enabled. +* be on a BigCommerce Plus plan or higher; +* use Optimized One-Page Checkout; +* have stored credit cards and/or stored PayPal accounts enabled. **Enabling Stored Credit Cards**\ Use the store control panel to enable stored credit cards. Navigate to **[Settings > Setup > Payments](https://login.bigcommerce.com/deep-links/manage/settings/payment)** and click the tab for your payment gateway. Toggle the switch to enable Stored Credit Cards and click **Save**. @@ -140,43 +124,12 @@ Use the store control panel to enable stored credit cards. Navigate to **[Settin **Enabling Stored PayPal Accounts**\ PayPal Powered By Braintree and PayPal (Commerce Platform) are the providers that support the ability to store PayPal accounts, which you can use as payment instruments with this API. For more information on enabling stored payment methods, see [Enabling Stored Payment Methods (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards). + ### Using Braintree ACH stored bank accounts In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Braintree ACH in payments API, your store needs to: - -- Have stored ACH accounts enabled. -- Have this method enabled in the API. (contact support) - -### Using Stripe OCS ACH stored bank accounts - - - Stripe OCS ACH is currently in beta. Please read the following [Knowledge - Base(KB) - article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS?language=en_US#notifications) - for more beta details. - - - - If your store uses custom checkout, and you installed the SDK via `npm` you must update to the latest version of - the [Checkout SDK](https://github.com/bigcommerce/checkout-sdk-js?tab=readme-ov-file#installation). - -If you installed via the loader script refer our [documentation](/docs/storefront/cart-checkout/checkout-sdk) to make sure you are using the latest version. - - - -Stripe OCS supports both Optimized One Page Checkout (OOPC) and custom checkouts that use the [Checkout SDK](/docs/storefront/cart-checkout/checkout-sdk). - -In addition to the [prerequisites](/docs/store-operations/payments#prerequisites-for-charging-stored-payment-instruments) above, to use Stripe OCS ACH in the payments API, your store needs to: - -- Enable ACH stored credentials in BigCommerce **Control Panel** > **Settings** > **Payments** > **Stripe**. See image below for reference: - -![enable-stripe-ocs-ach](/assets/images/stripe-ocs-ach.png) - -- Activate ACH as a payment method on your Stripe Dashboard. - -Once the ACH checkbox is enabled and ACH is activated as a payment method on Stripe Dashboard, shoppers will be able to store their bank account details from both the "My Account" page and checkout page. - -#### Example implementation +* Have stored ACH accounts enabled. +* Have this method enabled in the API. (contact support) ### Using Stripe OCS ACH stored bank accounts @@ -205,9 +158,6 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites Once the ACH checkbox is enabled and ACH is activated as a payment method on Stripe Dashboard, shoppers will be able to store their bank account details from both the "My Account" page and checkout page. -#### Example implementation - -For a Checkout SDK example implementation of Stripe OCS, see our [checkout-js repository](https://github.com/bigcommerce/checkout-js/tree/master/packages/stripe-integration/src/stripe-ocs). ### Charging stored instruments @@ -231,92 +181,92 @@ Accept: application/json ```json filename="Example response: Get payment methods" showLineNumbers copy { - "data": [ - { - "id": "bigcommerce.gift_certificate", - "name": "Gift Certificate", - "test_mode": false, - "type": "gift_certificate", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "bigcommerce.store_credit", - "name": "Store Credit", - "test_mode": false, - "type": "store_credit", - "supported_instruments": [], - "stored_instruments": [] - }, - { - "id": "stripe.card", - "name": "Stripe", - "test_mode": true, - "type": "card", - "supported_instruments": [ - { - "instrument_type": "VISA", - "verification_value_required": true - }, - { - "instrument_type": "MASTERCARD", - "verification_value_required": true - }, - { - "instrument_type": "AMEX", - "verification_value_required": true - }, - { - "instrument_type": "DISCOVER", - "verification_value_required": true - }, - { - "instrument_type": "JCB", - "verification_value_required": true - }, - { - "instrument_type": "DINERS_CLUB", - "verification_value_required": true - }, - { - "instrument_type": "STORED_CARD", - "verification_value_required": true - } - ], - "stored_instruments": [ - { - "type": "stored_card", - "brand": "VISA", - "expiry_month": 9, - "expiry_year": 2020, - "issuer_identification_number": "424242", - "last_4": "4242", - "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", - "is_default": true - } - ] - }, - { - "id": "braintree.paypal", - "name": "Braintree (PayPal)", - "test_mode": true, - "type": "paypal", - "supported_instruments": [ - { - "instrument_type": "STORED_PAYPAL_ACCOUNT" - } - ], - "stored_instruments": [ - { - "email": "bc@example.com", - "type": "stored_paypal_account", - "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", - "is_default": true - } - ] - } - ], - "meta": {} + "data": [ + { + "id": "bigcommerce.gift_certificate", + "name": "Gift Certificate", + "test_mode": false, + "type": "gift_certificate", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "bigcommerce.store_credit", + "name": "Store Credit", + "test_mode": false, + "type": "store_credit", + "supported_instruments": [], + "stored_instruments": [] + }, + { + "id": "stripe.card", + "name": "Stripe", + "test_mode": true, + "type": "card", + "supported_instruments": [ + { + "instrument_type": "VISA", + "verification_value_required": true + }, + { + "instrument_type": "MASTERCARD", + "verification_value_required": true + }, + { + "instrument_type": "AMEX", + "verification_value_required": true + }, + { + "instrument_type": "DISCOVER", + "verification_value_required": true + }, + { + "instrument_type": "JCB", + "verification_value_required": true + }, + { + "instrument_type": "DINERS_CLUB", + "verification_value_required": true + }, + { + "instrument_type": "STORED_CARD", + "verification_value_required": true + } + ], + "stored_instruments": [ + { + "type": "stored_card", + "brand": "VISA", + "expiry_month": 9, + "expiry_year": 2020, + "issuer_identification_number": "424242", + "last_4": "4242", + "token": "050a1e5c982e5905288ec5ec33f292772762033a070a45g434qfb16bf1940b51ef", + "is_default": true + } + ] + }, + { + "id": "braintree.paypal", + "name": "Braintree (PayPal)", + "test_mode": true, + "type": "paypal", + "supported_instruments": [ + { + "instrument_type": "STORED_PAYPAL_ACCOUNT" + } + ], + "stored_instruments": [ + { + "email": "bc@example.com", + "type": "stored_paypal_account", + "token": "52fa5598d41ed987c76fef61f0adef2f2a90da024a3b50e71c2273419d24fd90", + "is_default": true + } + ] + } + ], + "meta": {} } ``` @@ -325,6 +275,7 @@ Accept: application/json Make a note of the `token` for the target payment method to use as part of processing the payment in the request body. + 2. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -348,10 +299,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -360,10 +311,10 @@ Accept: application/json 3. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values retrieved with the [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) request you made in a preceding step. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - - #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in - preceding step. The token expires after one hour. To be valid, the header - value string must contain a space between "PAT" and the `{{ PAT_TOKEN }}`. + +#### Authorization header +The `PAT_TOKEN` is the `data.id` value returned in preceding step. The token expires after one hour. +To be valid, the header value string must contain a space between "PAT" and the `{{PAT_TOKEN}}`. To process a payment using a stored card, set the `type` to `stored_card`. @@ -412,11 +363,11 @@ Content-Type: application/json ```json filename="Example response: Process payment with a stored card or PayPal account" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -426,14 +377,12 @@ Content-Type: application/json If the purchase was successful, the response returns a status of success. The order is then automatically moved to an **Awaiting Fulfillment** status. If you get a different response, see [Error codes](#error-codes) for troubleshooting. In the case of store credit and gift certificates: +* If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. +* The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. -- If store credit and/or gift certificate covers the entire order amount, the order will be moved to an **Awaiting Fulfillment** status. -- The order will stay in **Pending** status until it is fully paid. You can make the remaining order payment using other payment methods (credit card, stored card, or stored PayPal account) in the next payment request. - - - #### List stored instruments Use the [Get Stored - Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) - endpoint to list all available stored instruments for a customer. + +#### List stored instruments +Use the [Get Stored Instruments](/docs/rest-management/customers/customer-stored-instruments#get-stored-instruments) endpoint to list all available stored instruments for a customer. ## Credit cards @@ -446,7 +395,6 @@ There are two steps to using a credit card to make a payment. The payment gateway your application uses must be able to send raw card data through our API. Before beginning development, consult our table of [compatible payment gateways](#compatible-payment-gateways) to verify that your gateway is listed or select one that is. ### Create an access token - 1. Make a request to the [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) endpoint to get the authorization token that needs to be passed in the header when processing the payment. The ID of the order needs to be part of the request body. You can also request a payment access token when you use the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) to complete checkout. @@ -470,10 +418,10 @@ Accept: application/json ```json filename="Example response: Create payment access token" showLineNumbers copy { - "data": { - "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" - }, - "meta": {} + "data": { + "id": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTEzOTQxNDIsIm5iZiI6MTU1MTM5MDU0MiwiaXNzIjoicGF5bWVudHMuYmlnY29tbWVyY2UuY29tIiwic3ViIjoianJhaDZnbW4iLCJqdGkiOiI3Nzg3ZmU1Zi01OWJmLTQ3ZWMtYTFmZC00ZDQ3ZTkwNjFlNWMiLCJpYXd4gJ8uHDk3kDhhuyefsrtr45mRhdGEiOnsic3RvcmVfaWQiOjEwMjU2NDYsIm9yZGVyX2lkIjoyMTUsImFtb3VudCI6OTgwMCwiY3VycmVuY3kiOiJVU0QifX0.WbR90d8m4gn8wK7kPMDEoVq8B0hHC5Ul5H4Hpqq6Yvo" + }, + "meta": {} } ``` @@ -482,12 +430,12 @@ Accept: application/json ### Process the payment -2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: +2. To process the payment, send a POST request to [Process Payment](/docs/rest-payments/processing#process-payment). You will need several values from the customer's credit card. All the example request body values are required. If any of these values are incorrect, you may be unable to process the payment. Additionally, this request contains different headers than a typical BigCommerce API request. Consult the following for more information: - - #### Authorization header The `PAT_TOKEN` is the `data.id` value returned in - preceding step. To be valid, the header value string should contain a space - between "PAT" and the `{{ PAT_TOKEN }}`. + +#### Authorization header +The `PAT_TOKEN` is the `data.id` value returned in preceding step. +To be valid, the header value string should contain a space between "PAT" and the `{{PAT_TOKEN}}`. @@ -517,13 +465,14 @@ Content-Type: application/json
+ ```json filename="Example response: Process payment with a credit card" showLineNumbers copy { - "data": { - "id": "693bb4cd-3f20-444a-8315-6369f582c68a", - "status": "success", - "transaction_type": "purchase" - } + "data": { + "id": "693bb4cd-3f20-444a-8315-6369f582c68a", + "status": "success", + "transaction_type": "purchase" + } } ``` @@ -564,6 +513,7 @@ Content-Type: application/json It is possible to take payment for an order created using the [Orders API](/docs/store-operations/orders). When creating the order using the Orders API, make sure to set `status_id:0`. If you do not create an order with order status set to `0` or `Incomplete`, the Payments API will return an [error](#error-codes). Ensure customers enter their billing address and line items when creating the order. The customer can create the order as a guest by either setting the `customer_id:0` or leaving it blank. After the order is created, follow the steps to pay with a [credit card](#credit-cards), a [stored card, or a PayPal account](#stored-cards-paypal-and-bank-accounts). + ```http filename="Example request: Create an order" showLineNumbers copy POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v2/orders X-Auth-Token: {{ACCESS_TOKEN}} @@ -618,13 +568,11 @@ Accept: application/json ] } ``` - ## Theme considerations - The following is a list of considerations when using the Payments API on a headless storefront. -- Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. -- Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. +* Digital Wallets (PayPal, ApplePay, GooglePay, etc.) are supported in cart and mini cart pages. However, headless storefronts would require a custom integration with the payment provider for the same functionality. +* Headless storefronts maintain the same domain throughout checkout but require an embedded checkout (with limited payment options) to achieve the same domain. ## Technical details @@ -632,34 +580,28 @@ The following is a list of considerations when using the Payments API on a headl The following is a list of links to the test credit card numbers for our supported gateways. These can be useful during the development process. Check your credit card setup in both [BigCommerce (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) and the payment gateway to make sure it is configured properly. If the credit cards do not work or stop working, please reach out to the payment provider as these are not maintained by BigCommerce. -- [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) -- [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) -- [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) -- [Stripe](https://stripe.com/docs/testing#cards) +* [Authorize.Net](https://developer.authorize.net/hello_world/testing_guide/) +* [PayPal Powered by Braintree](https://developers.braintreepayments.com/guides/credit-cards/testing-go-live/php) +* [CyberSource](https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/) +* [Stripe](https://stripe.com/docs/testing#cards) ### Token - The `payment_access_token` is not from the payment provider. It is created by BigCommerce. ### Decline payments - A declined payment will return a 4XX error with details if available. ### Authorization - If you configure a payment gateway for authorization only, authorization happens at the time of processing. You will need to capture the order later using the control panel or the Capture API. If you configure a payment gateway for authorization and capture, the payment will be authorized and captured at the time of processing. ### Control panel - Orders created and captured via the API will look the same as other orders created via the storefront or other apps. The order source will be "Checkout API". ### Data access - The card data is not accessible via the API once the payment is processed. ### Rate limits - -The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. +The Payments API rate limit is 50 payment requests per 4 seconds. Some payment providers will provide checks on the incoming requests. ## Sample app diagram @@ -667,29 +609,29 @@ The following diagram shows how the `payment_access_token` interacts with BigCom You can create orders using the [Server to Server API Endpoints](/docs/rest-management/checkouts/checkout-orders#create-an-order) or [Orders API](/docs/rest-management/orders). -![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png 'Sample App Diagram') +![Sample App Diagram](https://storage.googleapis.com/bigcommerce-production-dev-center/images/Payments%20API%20sequence%20diagram.png "Sample App Diagram") ## Error codes -| Code | Description | Possible Causes | Possible Solutions | -| ------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | -| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | -| `30000` | Merchant payment configuration could not be found. | \* The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | -| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | -| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | -| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | -| `30004` | The validation on line item and grand total does not match. | N/A | Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly | -| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
_ `expiry_month` is two digits
_ `expiry_year` is four digits | -| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper. | Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | -| `30100` | Payment access token could not be created. | N/A | N/A | -| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | -| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | -| `30103` | Your card has expired. Please try again with a valid card. | N/A | N/A | -| `30104` | There was a problem processing your card. Please contact your card issuer. | N/A | N/A | -| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. | N/A | N/A | -| `30106` | The payment was declined due to insufficient funds. | N/A | N/A | -| `30107` | The authorization for this transaction has been revoked. | Shopper revoked payment authorization associated with the stored PayPal account. | N/A | +| Code | Description | Possible Causes | Possible Solutions | +|-|-| - | - | +| `10000` | We're experiencing difficulty processing your transaction. Please try again later. | Connection error | Try the request again | +| `10001` | Unable to process the payment because invalid data was supplied with the transaction. | Missing or incorrect Fields | Check the request for any data that is incorrect or is missing | +| `30000` | Merchant payment configuration could not be found. | * The payment provider has not been configured in the store. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store. | +| `30001` | Merchant payment configuration is not configured correctly. | The payment gateway rejects the payment configuration. | Check the [payment gateways (Help Center)](https://support.bigcommerce.com/s/article/Online-Payment-Methods#setup) settings in your BigCommerce store.
Reach out to the payment gateway to check that the information is correct. | +| `30002` | Vaulting service is currently not available. | The vaulting feature is not enabled on this store. | Reach out to the store owner to enable [Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) | +| `30003` | Order could not be found. | The order does not exist.
The order ID is not correct. | Check the current orders in the store using [Get All Orders](/docs/rest-management/orders#get-all-orders) | +| `30004` | The validation on line item and grand total does not match. | N/A| Recreate the payment access token
Recreate the order
Ensure the store settings for taxes and discounts are setup correctly| +| `30050` | Payment instrument could not be saved. | Credit card information is incorrect. | Check that the card information is correct.
* `expiry_month` is two digits
* `expiry_year` is four digits | +| `30051` | That stored payment instrument could not be found. Please try a different payment option. | The card requested for payment is not associated with the shopper.| Use [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) to see available vaulted cards | +| `30100` | Payment access token could not be created. | N/A|N/A| +| `30101` | Order is invalid. | The order is in the wrong status. | Orders must be in **Incomplete** Status with a `status_id:0`.
The order must be created by the Checkout SDK, Checkout API, or V2 Orders API. Orders created in the control panel and set to an **Incomplete** status will return this error. | +| `30102` | Your card details could not be verified. Please double check them and try again. | The card information provided was incorrect.
The token provided was incorrect. | Check that the shopper information provided is correct.
Make sure the token in the authorization header field is correct. | +| `30103` | Your card has expired. Please try again with a valid card. |N/A | N/A| +| `30104` | There was a problem processing your card. Please contact your card issuer. |N/A |N/A| +| `30105` | This is a duplicate transaction. Please contact us to confirm your order. Do not try to pay again. |N/A |N/A | +| `30106` | The payment was declined due to insufficient funds. |N/A |N/A| +| `30107` | The authorization for this transaction has been revoked. |Shopper revoked payment authorization associated with the stored PayPal account.|N/A| ## FAQ @@ -715,7 +657,6 @@ Yes, checkouts and orders with more than one consignment can use the Payments AP **Is store credit supported?** Yes, the Payments API supports the store credit payment method under the following conditions: - - The shopper is transacting in the store's default currency. - The shopper has a positive store credit balance. @@ -736,22 +677,20 @@ Payment gateways that use 3D Secure meet the EU's Strong Customer Authentication ## Related resources ### Articles +* [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) +* [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) +* [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) +* [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) +* [Guide to the Stored Instruments API](/beta/stored-instruments) -- [Available Payment Gateways (Help Center)](https://support.bigcommerce.com/s/article/Available-Payment-Gateways) -- [Enabling Stored Credit Cards (Help Center)](https://support.bigcommerce.com/s/article/Enabling-Stored-Credit-Cards) -- [Manually Capturing Transactions - Authorize Only (Help Center)](https://support.bigcommerce.com/s/article/How-can-I-set-my-payment-gateway-to-only-authorize-transactions-and-not-capture-the-funds-automatically) -- [Processing Refunds (Help Center)](https://support.bigcommerce.com/s/article/Processing-Refunds) -- [Guide to the Stored Instruments API](/beta/stored-instruments) ### Endpoints and mutations - -- [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) -- `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) -- [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) -- [Process Payment](/docs/rest-payments/processing#process-payment) +* [Create a Payment Access Token](/docs/rest-payments/tokens#create-payment-access-token) +* `completeCheckout` with the [GraphQL Storefront API](/docs/storefront/cart-checkout/guide/graphql-storefront#handling-payments) +* [Get Payment Methods](/docs/rest-payments/methods#get-accepted-payment-methods) +* [Process Payment](/docs/rest-payments/processing#process-payment) ### Webhooks - -- [Carts](/docs/integrations/webhooks/events#carts) -- [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) -- [Orders](/docs/integrations/webhooks/events#orders) +* [Carts](/docs/integrations/webhooks/events#carts) +* [Customer Payment Instrument](/docs/integrations/webhooks/events#customer) +* [Orders](/docs/integrations/webhooks/events#orders) From 0df9eebbe49ec6050eaec7dc665ad66961ed5e55 Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Thu, 6 Nov 2025 12:35:49 -0500 Subject: [PATCH 10/11] fix: implement nick's comment --- docs/store-operations/payments/index.mdx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index 6a91a6144..0b4d2235f 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -134,9 +134,7 @@ In addition to the [prerequisites](/docs/store-operations/payments#prerequisites ### Using Stripe OCS ACH stored bank accounts - Stripe OCS ACH is currently in beta. Please read the following [Knowledge - Base(KB) - article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS?language=en_US#notifications) + Stripe OCS ACH is currently in beta. Please read the following [Knowledge Base(KB) article](https://support.bigcommerce.com/s/article/Connecting-with-Stripe-OCS) for more beta details. From 403899fa12235d58ec7fc394774b1af0faf78b0a Mon Sep 17 00:00:00 2001 From: Chris Nowicki Date: Thu, 6 Nov 2025 12:37:41 -0500 Subject: [PATCH 11/11] fix: add stripe ocs to payment methods --- docs/store-operations/payments/index.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/store-operations/payments/index.mdx b/docs/store-operations/payments/index.mdx index 0b4d2235f..68b65e813 100644 --- a/docs/store-operations/payments/index.mdx +++ b/docs/store-operations/payments/index.mdx @@ -82,6 +82,7 @@ The following table lists the payment gateways that are compatible with our publ | Stripe | ✓ | ✓ | | StripeV3 | ✓ | ✓ | | StripeV4 | ✓ | ✓ | +| Stripe OCS (beta) | ✓ | ✓ | | TD Online Mart | ✓ | ✓ | | USA ePay | | ✓ | | Vantiv | | ✓ |