[{"data":1,"prerenderedAt":536},["ShallowReactive",2],{"bootstrap":3,"blog-payment-capture-strategies":277},{"navigation":4,"globalConfig":196,"forms":218},{"headerSections":5,"headerFooterLinks":67,"footer":76,"legalLinks":153,"socialLinks":176},[6,39,44,50,57,62],{"hasSubMenu":7,"title":8,"links":9,"columns":38},true,"Product",[10,20,26,32],{"showTag":11,"_modelApiKey":12,"text":13,"subtitle":14,"icon":15,"isExternal":11,"link":16,"openForm":11},false,"navigation_link","Universal checkout","Sell anywhere","globe-simple",{"_modelApiKey":17,"slug":18,"title":19},"page","universal-checkout","Universal Checkout",{"showTag":11,"_modelApiKey":12,"text":21,"subtitle":22,"icon":23,"isExternal":11,"link":24,"openForm":11},"Distributed OMS","Manage orders","package",{"_modelApiKey":17,"slug":25,"title":21},"distributed-oms",{"showTag":11,"_modelApiKey":12,"text":27,"subtitle":28,"icon":29,"isExternal":11,"link":30,"openForm":11},"Promotion engine","Automated discounts","seal-percent",{"_modelApiKey":17,"slug":31,"title":27},"promotion-engine",{"showTag":11,"_modelApiKey":12,"text":33,"subtitle":34,"icon":35,"isExternal":11,"link":36,"openForm":11},"POS system","Operate stores","devices",{"_modelApiKey":17,"slug":37,"title":33},"pos-system",2,{"hasSubMenu":11,"showTag":11,"_modelApiKey":12,"text":40,"isExternal":11,"link":41,"openForm":11,"title":40},"Pricing",{"_modelApiKey":42,"slug":43},"pricing_page","pricing",{"hasSubMenu":11,"showTag":11,"_modelApiKey":12,"text":45,"isExternal":11,"link":46,"openForm":11,"title":45},"Customers",{"_modelApiKey":47,"slug":48,"title":49},"customer_landing_page","customers","Customers page",{"hasSubMenu":11,"showTag":11,"_modelApiKey":12,"text":51,"isExternal":11,"link":52,"openForm":11,"form":54,"title":51},"Partners",{"_modelApiKey":17,"slug":53,"title":51},"partners",{"_modelApiKey":55,"slug":53,"name":56},"form","PartnersForm",{"hasSubMenu":11,"showTag":11,"_modelApiKey":12,"text":58,"label":59,"isExternal":7,"url":60,"openForm":11,"title":61},"Docs Hub","Learn more","https:\u002F\u002Fdocs.commercelayer.io\u002F","Docs",{"hasSubMenu":11,"showTag":11,"_modelApiKey":12,"text":63,"isExternal":11,"link":64,"openForm":11,"title":63},"Blog",{"_modelApiKey":65,"slug":66},"blog_landing_page","blog",[68,72],{"text":69,"link":70},"Sign in",{"_modelApiKey":12,"text":69,"isExternal":7,"url":71,"openForm":11},"https:\u002F\u002Fdashboard.commercelayer.io\u002Fsign_in",{"text":73,"link":74},"Sign up for free",{"_modelApiKey":12,"text":73,"isExternal":7,"url":75,"openForm":11},"https:\u002F\u002Fdashboard.commercelayer.io\u002Fsign_up",[77,89,109,132],{"hasSubMenu":7,"title":8,"links":78},[79,81,83,85,87],{"showTag":11,"_modelApiKey":12,"text":13,"subtitle":14,"icon":15,"isExternal":11,"link":80,"openForm":11},{"_modelApiKey":17,"slug":18,"title":19},{"showTag":11,"_modelApiKey":12,"text":21,"subtitle":22,"icon":23,"isExternal":11,"link":82,"openForm":11},{"_modelApiKey":17,"slug":25,"title":21},{"showTag":11,"_modelApiKey":12,"text":27,"subtitle":28,"icon":29,"isExternal":11,"link":84,"openForm":11},{"_modelApiKey":17,"slug":31,"title":27},{"showTag":11,"_modelApiKey":12,"text":33,"subtitle":34,"icon":35,"isExternal":11,"link":86,"openForm":11},{"_modelApiKey":17,"slug":37,"title":33},{"showTag":11,"_modelApiKey":12,"text":40,"isExternal":11,"link":88,"openForm":11},{"_modelApiKey":42,"slug":43},{"hasSubMenu":7,"title":90,"links":91},"Resources",[92,94,99,104,107],{"showTag":11,"_modelApiKey":12,"text":93,"isExternal":7,"url":60,"openForm":11},"Documentation",{"showTag":11,"_modelApiKey":12,"text":95,"label":95,"isExternal":11,"link":96,"openForm":11},"Agentic Commerce",{"_modelApiKey":17,"slug":97,"title":98},"agentic-commerce-whitepaper","Agentic Commerce Whitepaper",{"showTag":11,"_modelApiKey":12,"text":100,"isExternal":11,"link":101,"openForm":11},"Core concepts",{"_modelApiKey":17,"slug":102,"title":103},"headless-commerce","Headless commerce",{"showTag":11,"_modelApiKey":12,"text":105,"isExternal":7,"url":106,"openForm":11},"Changelog","https:\u002F\u002Fdocs.commercelayer.io\u002Fchangelog\u002F",{"showTag":11,"_modelApiKey":12,"text":63,"isExternal":11,"link":108,"openForm":11},{"_modelApiKey":65,"slug":66},{"hasSubMenu":7,"title":110,"links":111},"Company",[112,116,118,121,126],{"showTag":11,"_modelApiKey":12,"text":113,"isExternal":11,"link":114,"openForm":11},"Vision",{"_modelApiKey":17,"slug":115,"title":113},"vision",{"showTag":11,"_modelApiKey":12,"text":45,"isExternal":11,"link":117,"openForm":11},{"_modelApiKey":47,"slug":48,"title":49},{"showTag":11,"_modelApiKey":12,"text":51,"isExternal":11,"link":119,"openForm":11,"form":120},{"_modelApiKey":17,"slug":53,"title":51},{"_modelApiKey":55,"slug":53,"name":56},{"showTag":11,"_modelApiKey":12,"text":122,"isExternal":11,"link":123,"openForm":11},"Security",{"_modelApiKey":17,"slug":124,"title":125},"security","Security at Commerce Layer",{"showTag":11,"_modelApiKey":12,"text":127,"label":128,"isExternal":11,"openForm":7,"form":129},"Giveback","Giveback program",{"_modelApiKey":55,"slug":130,"name":131},"giveback","GivebackForm",{"hasSubMenu":7,"title":133,"links":134},"Get in touch",[135,140,145,149],{"showTag":11,"_modelApiKey":12,"text":136,"isExternal":11,"openForm":7,"form":137},"Contact",{"_modelApiKey":55,"slug":138,"name":139},"contact","ContactUsForm",{"showTag":11,"_modelApiKey":12,"text":141,"isExternal":11,"openForm":7,"form":142},"Book a demo",{"_modelApiKey":55,"slug":143,"name":144},"demo","RequestDemoForm",{"showTag":11,"_modelApiKey":12,"text":146,"label":147,"isExternal":7,"url":148,"openForm":11},"Support","Email support","mailto:support@commercelayer.io",{"showTag":11,"_modelApiKey":12,"text":150,"label":151,"isExternal":7,"url":152,"openForm":11},"Community","Discord community","https:\u002F\u002Fdiscord.gg\u002Fcommercelayer",{"hasSubMenu":7,"title":154,"links":155},"Legal",[156,161,165,169,173],{"showTag":11,"_modelApiKey":12,"text":157,"label":158,"isExternal":7,"url":159,"openForm":11,"htmlClassNames":160},"Terms","Terms and conditions","\u002Flegal-embed\u002Fterms-of-service","iubenda-nostyle no-brand iubenda-noiframe iubenda-embed",{"showTag":11,"_modelApiKey":12,"text":162,"label":163,"isExternal":7,"url":164,"openForm":11,"htmlClassNames":160},"Privacy","Privacy policy","\u002Flegal-embed\u002Fprivacy-policy",{"showTag":11,"_modelApiKey":12,"text":166,"label":167,"isExternal":7,"url":168,"openForm":11,"htmlClassNames":160},"Cookies","Cookie policy","\u002Flegal-embed\u002Fcookie-policy",{"showTag":11,"_modelApiKey":12,"text":170,"isExternal":7,"url":171,"openForm":11,"htmlClassNames":172},"Notice at collection","#","iubenda-cs-uspr-link",{"showTag":11,"_modelApiKey":12,"text":174,"isExternal":7,"url":171,"openForm":11,"htmlClassNames":175},"Privacy preferences","iubenda-cs-preferences-link",[177,180,184,188,192],{"title":178,"type":179,"url":152,"isExternal":7},"Discord","discord-logo",{"title":181,"type":182,"url":183,"isExternal":7},"Github","github","https:\u002F\u002Fgithub.com\u002Fcommercelayer",{"title":185,"type":186,"url":187,"isExternal":7},"Bluesky","bluesky-logo","https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcommercelayer.io",{"title":189,"type":190,"url":191,"isExternal":7},"X","x-logo","https:\u002F\u002Fx.com\u002Fcommercelayer",{"title":193,"type":194,"url":195,"isExternal":7},"LinkedIn","linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fcommerce-layer",{"pagesWithoutCtaPanel":197,"ctaPanel":198,"notification":208,"showApiResponseTime":11,"newsletterSignup":216},[],{"title":199,"subtitle":200,"ctas":201},"Ready to get started?","Discover how we can help your business.",[202,205],{"_modelApiKey":203,"text":204,"isExternal":7,"url":75,"openForm":11},"link","Get started for free",{"_modelApiKey":203,"text":206,"isExternal":11,"openForm":7,"form":207},"Contact us",{"_modelApiKey":55,"slug":138,"name":139},{"showNotification":7,"link":209,"linkText":210,"text":215},{"_modelApiKey":203,"text":210,"isExternal":11,"link":211,"openForm":11},"Read article",{"_modelApiKey":212,"slug":213,"title":214},"blog_post","the-new-payments-api-built-for-how-people-pay-now","The new Payments API. Built for how people pay now.","\u003Cp>The new Payments API. Built for how people pay now.\u003C\u002Fp>\n",{"ctaText":217},"Subscribe",[219,225,229,236,240,246,249,253,261,262,267,272,274],{"_modelApiKey":55,"slug":220,"pardotFormEmbedCode":221,"formEmbedMinHeight":222,"successTitle":223,"successCopy":224},"agentic-commerce","https:\u002F\u002Fcommercelayer.fillout.com\u002Ft\u002F5w4Khwgxr6us?whitepaper=agentic",520,"Thank you for your request!","We’ll be in touch soon to arrange a date and time for your personalized demo.",{"_modelApiKey":55,"slug":226,"pardotFormEmbedCode":227,"formEmbedMinHeight":228,"successTitle":223,"successCopy":224},"shopify","https:\u002F\u002Fform.fillout.com\u002Ft\u002FgVnLSmKZwRus",850,{"_modelApiKey":55,"slug":130,"pardotFormEmbedCode":230,"formEmbedMinHeight":231,"displayTitle":232,"copy":233,"successTitle":234,"successCopy":235},"https:\u002F\u002Fform.fillout.com\u002Ft\u002FmVDF8aAiofus",500,"We give back.","\u003Cp>Part of Commerce Layer&#39;s company ethos is to empathize and support one another: co-workers, customers, and community. We want to do our part to help nonprofit organizations and small businesses who may feel adversely affected by the current global economic climate, and as a result, need in-kind support to reach their customers.\u003C\u002Fp>\n\n\u003Cp>If this general description matches your organization’s needs, please tell us your story by completing the following form so we can consider helping your cause.\u003C\u002Fp>\n","Thank you!","We will contact you soon to learn more about your story.",{"_modelApiKey":55,"slug":237,"pardotFormEmbedCode":227,"formEmbedMinHeight":228,"displayTitle":238,"copy":239},"book-an-onboarding-session","Book an onboarding session","\u003Cp>Schedule some time and our devs will help you set up a Commerce Layer + Sanity store.\u003C\u002Fp>\n",{"_modelApiKey":55,"slug":241,"pardotFormEmbedCode":242,"formEmbedMinHeight":243,"displayTitle":244,"successTitle":234,"successCopy":245},"download-our-whitepaper","https:\u002F\u002Fform.fillout.com\u002Ft\u002F5YPWmy8oT7us?whitepaper=ComposableCommerce",450,"Download our whitepaper.","Check your inbox. You should receive a download link soon.",{"_modelApiKey":55,"slug":247,"pardotFormEmbedCode":248,"formEmbedMinHeight":243,"displayTitle":244,"successTitle":234,"successCopy":245},"download-the-content-and-commerce-whitepaper","https:\u002F\u002Fform.fillout.com\u002Ft\u002F5YPWmy8oT7us?whitepaper=ContentAndCommerce",{"_modelApiKey":55,"slug":250,"pardotFormEmbedCode":251,"formEmbedMinHeight":243,"displayTitle":244,"copy":252,"successTitle":234,"successCopy":245},"whitepaper","https:\u002F\u002Fform.fillout.com\u002Ft\u002F5YPWmy8oT7us?whitepaper=Jamstack","\u003Cp>Commerce Layer is the perfect platform for building commerce on the Jamstack. Convert any design into pixel perfect HTML pages. Connect a best-of-breed headless CMS. Go serverless and forget the hassle of managing complex infrastructures.\u003C\u002Fp>\n",{"_modelApiKey":55,"slug":254,"pardotFormEmbedCode":255,"formEmbedMinHeight":256,"displayTitle":257,"copy":258,"successTitle":259,"successCopy":260},"contact-links","https:\u002F\u002Fform.fillout.com\u002Ft\u002FeWPyhHGHT7us",750,"Contact us.","\u003Cp>Tell us about your project. Our team will reach out to you for a personalized offer.\u003C\u002Fp>\n","Thanks for your message!","We’ll be in touch soon to discuss your project details.",{"_modelApiKey":55,"slug":138,"pardotFormEmbedCode":255,"formEmbedMinHeight":256,"displayTitle":257,"copy":258,"successTitle":259,"successCopy":260},{"_modelApiKey":55,"slug":263,"pardotFormEmbedCode":227,"formEmbedMinHeight":228,"displayTitle":264,"successTitle":265,"successCopy":266},"demo-embed","Want to see it in action? Request a demo.","Thanks for your request!","We’ll be in touch soon to arrange a date and time for your free live demo.",{"_modelApiKey":55,"slug":53,"pardotFormEmbedCode":268,"formEmbedMinHeight":228,"displayTitle":269,"copy":270,"successTitle":234,"successCopy":271},"https:\u002F\u002Fform.fillout.com\u002Ft\u002F9MTkDWMUSqus","Become our partner.","\u003Cp>Join us and get our guidance in helping your clients succeed. Our partners are our ambassadors. We are committed to your success as much as you are.\u003C\u002Fp>\n","We will contact you soon to discuss the details of our partnership.",{"_modelApiKey":55,"slug":273,"pardotFormEmbedCode":268,"formEmbedMinHeight":228,"displayTitle":269,"copy":270,"successTitle":234,"successCopy":271},"partners-embed",{"_modelApiKey":55,"slug":143,"pardotFormEmbedCode":227,"formEmbedMinHeight":228,"displayTitle":275,"copy":276,"successTitle":265,"successCopy":266},"Get a free live demo.","\u003Cp>Get a personalized demo and learn more about what Commerce Layer can do for your company.\u003C\u002Fp>\n",{"_modelApiKey":212,"link":278,"subtitle":283,"date":283,"author":284,"additionalAuthors":294,"icon":295,"abstract":296,"tag":297,"displayTitle":279,"cardRatio":300,"featured":11,"seoMetaTags":301,"layout":365,"blogPostCarousel":303,"_seoMetaTags":497,"authors":531},{"text":279,"isExternal":11,"url":280,"link":281},"Advanced payment capture strategies with Commerce Layer.","",{"_modelApiKey":212,"slug":282},"payment-capture-strategies","April 1, 2026",{"name":285,"picture":286},"Fabrizio Picca",{"url":287,"alt":288,"title":288,"width":289,"height":289,"format":290,"focalPoint":291,"customData":293},"https:\u002F\u002Fwww.datocms-assets.com\u002F35053\u002F1614875259-commercelayeravatarsquare113f26.png","Fabrizio Picca —      Partnerships Manager at Commerce Layer",1280,"png",{"x":292,"y":292},0.5,{},[],"credit-card","Payment capture isn’t just a final step. Learn how authorization and capture work in Commerce Layer, explore capture strategies, and configure flows that match real-world fulfillment.",{"color":298,"name":299},"gray","Behind the Docs","portrait",[302,306,310,313,317,320,323,327,331,335,338,342,346,350,354,357,361],{"attributes":303,"tag":304,"content":305},null,"title","Advanced payment capture strategies with Commerce Layer",{"attributes":307,"tag":309,"content":303},{"property":308,"content":305},"og:title","meta",{"attributes":311,"tag":309,"content":303},{"name":312,"content":305},"twitter:title",{"attributes":314,"tag":309,"content":303},{"name":315,"content":316},"description","A practical guide to payment capture: how it works, why it matters, and how to configure it correctly in Commerce Layer.",{"attributes":318,"tag":309,"content":303},{"property":319,"content":316},"og:description",{"attributes":321,"tag":309,"content":303},{"name":322,"content":316},"twitter:description",{"attributes":324,"tag":309,"content":303},{"property":325,"content":326},"og:image","https:\u002F\u002Fwww.datocms-assets.com\u002F35053\u002F1774544694-payment-capture-blog.jpg?auto=format&fit=max&w=1200",{"attributes":328,"tag":309,"content":303},{"property":329,"content":330},"og:image:width","1200",{"attributes":332,"tag":309,"content":303},{"property":333,"content":334},"og:image:height","630",{"attributes":336,"tag":309,"content":303},{"name":337,"content":326},"twitter:image",{"attributes":339,"tag":309,"content":303},{"property":340,"content":341},"og:locale","en",{"attributes":343,"tag":309,"content":303},{"property":344,"content":345},"og:type","article",{"attributes":347,"tag":309,"content":303},{"property":348,"content":349},"og:site_name","Commerce Layer",{"attributes":351,"tag":309,"content":303},{"property":352,"content":353},"article:modified_time","2026-04-01T15:59:58Z",{"attributes":355,"tag":309,"content":303},{"property":356,"content":280},"article:publisher",{"attributes":358,"tag":309,"content":303},{"name":359,"content":360},"twitter:card","summary_large_image",{"attributes":362,"tag":309,"content":303},{"name":363,"content":364},"twitter:site","@commercelayer",[366,372,376,382,385,388,390,393,398,401,403,406,410,413,416,419,423,426,430,434,437,440,443,447,450,452,455,458,461,466,469,494],{"_modelApiKey":367,"copy":368,"listStyle":369,"darkTheme":11,"buttons":370,"color":371,"indent":7},"wysiwyg","\u003Cp>Payment capture is one of those topics that sounds simple, until it isn&#39;t. Most developers assume it&#39;s just the last step of a transaction — you authorize, then you capture. Done. But in practice, the moment you start dealing with real-world fulfillment workflows, multiple markets, mixed payment gateways, and operational edge cases, how and \u003Cem>when\u003C\u002Fem> you capture money becomes one of the most consequential decisions in your commerce architecture.\u003C\u002Fp>\n\n\u003Cp>This article explains what capture really is, why Commerce Layer treats it as a first-class concern, and how to configure it correctly for different business scenarios.\u003C\u002Fp>\n","directional",[],"pink",{"_modelApiKey":367,"copy":373,"listStyle":374,"darkTheme":11,"buttons":375,"color":371,"indent":11},"\u003Ch3>Authorization vs. capture: a quick primer\u003C\u002Fh3>\n\n\u003Cp>When a customer checks out, two distinct things happen at the payment level:\u003C\u002Fp>\n\n\u003Col>\n\u003Cli>\u003Cstrong>Authorization\u003C\u002Fstrong> — the payment gateway verifies the card and reserves the funds. The money hasn&#39;t moved yet, it&#39;s just been earmarked.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Capture\u003C\u002Fstrong> — the actual movement of money. This is when the funds are transferred from the customer&#39;s account to the merchant.\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Cp>Most platforms collapse these two steps into one. That makes things simple for basic use cases but creates serious problems the moment your operations get more complex. What if you need to ship in multiple shipments? What if you want to charge only when the goods leave the warehouse? What if an item goes out of stock after authorization?\u003C\u002Fp>\n\n\u003Cp>Commerce Layer keeps these two steps explicitly separate, giving you full control over when money moves.\u003C\u002Fp>\n\n\u003Ch3>Capture modes\u003C\u002Fh3>\n\n\u003Cp>In Commerce Layer, you configure capture behavior at the payment method level. There are three built-in patterns to know, plus a fourth — webhook-driven — for teams that need custom logic in between:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>Manual\u003C\u002Fstrong> (the default)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Automatic\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Delayed\u003C\u002Fstrong> (capture after fulfillment starts)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Webhook-driven\u003C\u002Fstrong> (custom logic before capture)\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Manual capture\u003C\u002Fh3>\n\n\u003Cp>By default, Commerce Layer requires payments to be captured before an order&#39;s fulfillment can begin. Once an order is approved, its payment status is \u003Ccode>authorized\u003C\u002Fcode>. The order stays in this state until you explicitly trigger the capture — via the Dashboard, the API, or an automated flow.\u003C\u002Fp>\n\n\u003Cp>This is the right approach for merchants who want strict control: you approve the order, confirm stock, then capture when you&#39;re ready to ship.\u003C\u002Fp>\n\n\u003Cp>To start a capture manually, you need to patch the related authorization and pass the \u003Ccode>_capture\u003C\u002Fcode> trigger attribute:\u003C\u002Fp>\n","checkbox",[],{"_modelApiKey":377,"code":378,"showLineNumbers":11,"highlightLines":379,"language":380,"size":381},"code_block","curl -g -X PATCH \\\n  'https:\u002F\u002Fyourdomain.commercelayer.io\u002Fapi\u002Fauthorizations\u002F:id' \\\n  -H 'Accept: application\u002Fvnd.api+json' \\\n  -H 'Content-Type: application\u002Fvnd.api+json' \\\n  -H 'Authorization: Bearer your-access-token' \\\n  -d '{\n    \"data\": {\n      \"type\": \"authorizations\",\n      \"id\": \"your-authorization-id\",\n      \"attributes\": {\n        \"_capture\": true\n      }\n    }\n  }'","1,2,11","shell","Wide",{"_modelApiKey":367,"copy":383,"listStyle":369,"darkTheme":11,"buttons":384,"color":371,"indent":11},"\u003Cp>On success, Commerce Layer creates a \u003Ca href=\"https:\u002F\u002Fdocs.commercelayer.io\u002Fcore-api-reference\u002Fcaptures\">capture\u003C\u002Fa> transaction and updates the order&#39;s payment status to \u003Ccode>paid\u003C\u002Fcode>. At that point, fulfillment can proceed.\u003C\u002Fp>\n",[],{"_modelApiKey":367,"copy":386,"listStyle":369,"darkTheme":11,"buttons":387,"color":371,"indent":11},"\u003Ch3>Auto-capture\u003C\u002Fh3>\n\n\u003Cp>Set \u003Ccode>auto_capture\u003C\u002Fcode> to \u003Ccode>true\u003C\u002Fcode> on the payment method and Commerce Layer will \u003Ca href=\"https:\u002F\u002Fdocs.commercelayer.io\u002Fhow-tos\u002Fplacing-orders\u002Fauto-capture\u002Fenabling-the-auto-capture\">automatically capture\u003C\u002Fa> the payment immediately after a successful authorization. The order&#39;s payment status moves straight to \u003Ccode>paid\u003C\u002Fcode> without any manual intervention.\u003C\u002Fp>\n",[],{"_modelApiKey":377,"code":389,"showLineNumbers":11,"highlightLines":379,"language":380,"size":381},"curl -g -X PATCH \\\n  'http:\u002F\u002Fyourdomain.commercelayer.io\u002Fapi\u002Fpayment_methods\u002F:id' \\\n  -H 'Accept: application\u002Fvnd.api+json' \\\n  -H 'Authorization: Bearer your-access-token' \\\n  -H 'Content-Type: application\u002Fvnd.api+json' \\\n  -d '{\n  \"data\": {\n    \"type\": \"payment_methods\",\n    \"id\": \"your-payment-method-id\",\n    \"attributes\": {\n      \"auto_capture\": true\n    }\n  }\n}'",{"_modelApiKey":367,"copy":391,"listStyle":374,"darkTheme":11,"buttons":392,"color":371,"indent":11},"\u003Cp>Auto-capture is particularly useful for:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>Digital products or instant-delivery use cases where fulfillment happens immediately.\u003C\u002Fli>\n\u003Cli>Payment gateways that don&#39;t support a separate authorization\u002Fcapture flow.\u003C\u002Fli>\n\u003Cli>High-volume, low-risk scenarios where operational simplicity is more valuable than granular control.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>You can also combine it with \u003Ccode>auto_capture_max_amount_cents\u003C\u002Fcode> to \u003Ca href=\"https:\u002F\u002Fdocs.commercelayer.io\u002Fhow-tos\u002Fplacing-orders\u002Fauto-capture\u002Flimiting-the-auto-capture-amount\">enable auto-capture only for smaller orders,\u003C\u002Fa> while routing higher-value orders through a manual approval workflow.\u003C\u002Fp>\n",[],{"_modelApiKey":394,"title":395,"preTitle":93,"linkText":59,"darkTheme":11,"link":396},"link_block","Auto-capture",{"_modelApiKey":203,"text":59,"label":280,"subtitle":280,"icon":280,"isExternal":7,"url":397,"link":303,"anchor":280,"openForm":11,"form":303,"htmlClassNames":280},"https:\u002F\u002Fdocs.commercelayer.io\u002Fhow-tos\u002Fplacing-orders\u002Fauto-capture",{"_modelApiKey":367,"copy":399,"listStyle":369,"darkTheme":11,"buttons":400,"color":371,"indent":11},"\u003Ch3>Delayed capture\u003C\u002Fh3>\n\n\u003Cp>The third option is almost the inverse of the default: set \u003Ccode>require_capture\u003C\u002Fcode> to \u003Ccode>false\u003C\u002Fcode> on the payment method, and Commerce Layer will allow fulfillment to begin even when the payment hasn&#39;t been captured yet.\u003C\u002Fp>\n",[],{"_modelApiKey":377,"code":402,"showLineNumbers":11,"highlightLines":379,"language":380,"size":381},"curl -g -X PATCH \\\n  'http:\u002F\u002Fyourdomain.commercelayer.io\u002Fapi\u002Fpayment_methods\u002F:id' \\\n  -H 'Accept: application\u002Fvnd.api+json' \\\n  -H 'Authorization: Bearer your-access-token' \\\n  -H 'Content-Type: application\u002Fvnd.api+json' \\\n  -d '{\n  \"data\": {\n    \"type\": \"payment_methods\",\n    \"id\": \"your-payment-method-id\",\n    \"attributes\": {\n      \"require_capture\": false\n    }\n  }\n}'",{"_modelApiKey":367,"copy":404,"listStyle":369,"darkTheme":11,"buttons":405,"color":371,"indent":11},"\u003Cp>This is useful when your warehouse operations kick off immediately upon order approval, but you want to capture funds only when items are actually being shipped. It decouples your operational flow from your financial flow — a common requirement in B2B or subscription scenarios.\u003C\u002Fp>\n",[],{"_modelApiKey":394,"title":407,"preTitle":93,"linkText":59,"darkTheme":11,"link":408},"Capture options",{"_modelApiKey":203,"text":59,"label":280,"subtitle":280,"icon":280,"isExternal":7,"url":409,"link":303,"anchor":280,"openForm":11,"form":303,"htmlClassNames":280},"https:\u002F\u002Fdocs.commercelayer.io\u002Fcore-api-reference\u002Fpayment_methods#capture-options",{"_modelApiKey":367,"copy":411,"listStyle":369,"darkTheme":11,"buttons":412,"color":371,"indent":11},"\u003Ch3>Webhook-driven capture\u003C\u002Fh3>\n\n\u003Cp>Sometimes none of the three built-in modes is enough. You want something in between: capture should happen automatically, but only \u003Cem>after\u003C\u002Fem> your own logic has run — fraud scoring, inventory checks, customer tier validation, ERP sync, you name it.\u003C\u002Fp>\n\n\u003Cp>This is where Commerce Layer&#39;s webhook system shines:\u003C\u002Fp>\n\n\u003Col>\n\u003Cli>Subscribe to the \u003Ccode>orders.place\u003C\u002Fcode> event.\u003C\u002Fli>\n\u003Cli>Receive a \u003Ccode>POST\u003C\u002Fcode> request at your callback URL the moment an order is placed and run whatever logic you need.\u003C\u002Fli>\n\u003Cli>Trigger the capture yourself via the API.\u003C\u002Fli>\n\u003C\u002Fol>\n",[],{"_modelApiKey":367,"copy":414,"listStyle":369,"darkTheme":11,"buttons":415,"color":371,"indent":11},"\u003Ch4>Step 1 • Register a webhook for order&#39;s placement\u003C\u002Fh4>\n\n\u003Cp>Create a webhook for the \u003Ccode>orders.place\u003C\u002Fcode> event and include the resources you may need:\u003C\u002Fp>\n",[],{"_modelApiKey":377,"code":417,"showLineNumbers":11,"highlightLines":418,"language":380,"size":381},"curl -g -X POST \\\n  'https:\u002F\u002Fyourdomain.commercelayer.io\u002Fapi\u002Fwebhooks' \\\n  -H 'Accept: application\u002Fvnd.api+json' \\\n  -H 'Content-Type: application\u002Fvnd.api+json' \\\n  -H 'Authorization: Bearer your-access-token' \\\n  -d '{\n    \"data\": {\n      \"type\": \"webhooks\",\n      \"attributes\": {\n        \"name\": \"capture-on-order-place\",\n        \"topic\": \"orders.place\",\n        \"callback_url\": \"https:\u002F\u002Fyourapp.com\u002Fwebhooks\u002Fcapture\",\n        \"include_resources\": [ \"payment_source\", \"billing_address\", \"customer\" ]\n      }\n    }\n  }'","1,2,11,12,13",{"_modelApiKey":420,"icon":421,"copy":422,"color":371},"banner","info","\u003Cp>The \u003Ccode>include_resources\u003C\u002Fcode> field lets you sideload related resources in the webhook payload — so your callback receives the full order context without extra API calls.\u003C\u002Fp>\n",{"_modelApiKey":367,"copy":424,"listStyle":369,"darkTheme":11,"buttons":425,"color":371,"indent":11},"\u003Ch4>Step 2 • Handle the callback and run your custom logic\u003C\u002Fh4>\n\n\u003Cp>Your endpoint receives a \u003Ccode>POST\u003C\u002Fcode> request from Commerce Layer with the order payload. Verify the request using the shared secret returned at webhook creation time (passed as the \u003Ccode>X-CommerceLayer-Signature\u003C\u002Fcode> header), then run your logic:\u003C\u002Fp>\n",[],{"_modelApiKey":377,"code":427,"showLineNumbers":11,"highlightLines":428,"language":429,"size":381},"app.post('\u002Fwebhooks\u002Fcapture', async (req, res) => {\n  \u002F\u002F Verify the webhook signature\n  const signature = req.headers['x-commercelayer-signature']\n  if (!verifySignature(signature, req.body, process.env.WEBHOOK_SECRET)) {\n    return res.status(401).send('Unauthorized')\n  }\n\n  const order = req.body.data\n  const authorizationId = order.relationships.payment_source?.data?.id\n\n  \u002F\u002F Run your custom logic before deciding to capture\n  const fraudScore = await checkFraudScore(order)\n  const stockOk = await confirmInventory(order)\n\n  if (fraudScore > 80 || !stockOk) {\n    \u002F\u002F Flag for manual review instead of capturing\n    await flagOrderForReview(order.id)\n    return res.sendStatus(200)\n  }\n\n  \u002F\u002F All checks passed — trigger the capture\n  await captureAuthorization(authorizationId)\n\n  res.sendStatus(200)\n})","4,5,6,15,16,17,18,19","javascript",{"_modelApiKey":394,"title":431,"preTitle":93,"linkText":59,"darkTheme":11,"link":432},"Callbacks security",{"_modelApiKey":203,"text":59,"label":280,"subtitle":280,"icon":280,"isExternal":7,"url":433,"link":303,"anchor":280,"openForm":11,"form":303,"htmlClassNames":280},"https:\u002F\u002Fdocs.commercelayer.io\u002Fcore\u002Fcallbacks-security",{"_modelApiKey":367,"copy":435,"listStyle":369,"darkTheme":11,"buttons":436,"color":371,"indent":11},"\u003Ch4>Step 3 • Trigger the capture via the API\u003C\u002Fh4>\n\n\u003Cp>Once your checks pass, call the Commerce Layer API to manually capture the authorization, as explained above.\u003C\u002Fp>\n",[],{"_modelApiKey":420,"icon":438,"copy":439,"color":371},"lock-key","\u003Cp>Note that, for security reasons, your callback server must use \u003Ca href=\"https:\u002F\u002Fdocs.commercelayer.io\u002Fcore\u002Fapi-credentials#integration\">integration\u003C\u002Fa> API credentials (not a \u003Ca href=\"https:\u002F\u002Fdocs.commercelayer.io\u002Fcore\u002Fapi-credentials#sales-channel\">sales channel\u003C\u002Fa> token) to make this call, since it&#39;s a server-to-server operation.\u003C\u002Fp>\n",{"_modelApiKey":367,"copy":441,"listStyle":374,"darkTheme":11,"buttons":442,"color":371,"indent":11},"\u003Ch4>Webhook implementation notes\u003C\u002Fh4>\n\n\u003Cp>This pattern gives you the best of both worlds: automated capture with full programmatic control over when and whether it happens. By the way, when following it, there are a few things to keep in mind:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>Your callback must respond with a \u003Ccode>2xx\u003C\u002Fcode> within Commerce Layer&#39;s timeout window. For heavy logic, respond immediately with \u003Ccode>200\u003C\u002Fcode> and process the capture asynchronously in a background job.\u003C\u002Fli>\n\u003Cli>Commerce Layer uses a circuit breaker on webhooks: too many consecutive failures will disable the webhook. Make sure your callback is resilient.\u003C\u002Fli>\n\u003Cli>If an \u003Ccode>orders.place\u003C\u002Fcode> event is missed or your server is briefly down, you can force it to re-fire by patching the event resource with \u003Ccode>_trigger: true\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n",[],{"_modelApiKey":394,"title":444,"preTitle":93,"linkText":59,"darkTheme":11,"link":445},"Real-time webhooks",{"_modelApiKey":203,"text":59,"label":280,"subtitle":280,"icon":280,"isExternal":7,"url":446,"link":303,"anchor":280,"openForm":11,"form":303,"htmlClassNames":280},"https:\u002F\u002Fdocs.commercelayer.io\u002Fdevelopers\u002Freal-time-webhooks",{"_modelApiKey":367,"copy":448,"listStyle":369,"darkTheme":11,"buttons":449,"color":371,"indent":11},"\u003Ch3>What happens when a capture gets stuck\u003C\u002Fh3>\n\n\u003Cp>Real-world payment infrastructure isn&#39;t perfectly reliable. A capture might succeed at the gateway level but fail to register on the Commerce Layer side — leaving the order in a limbo state.\u003C\u002Fp>\n\n\u003Cp>Commerce Layer handles this with the \u003Ccode>_forward\u003C\u002Fcode> trigger attribute on the capture resource. If you know the capture succeeded on the gateway but is stuck on your platform, you can unblock it as follows:\u003C\u002Fp>\n",[],{"_modelApiKey":377,"code":451,"showLineNumbers":11,"highlightLines":379,"language":380,"size":381},"curl -g -X PATCH \\\n  'https:\u002F\u002Fyourdomain.commercelayer.io\u002Fapi\u002Fcaptures\u002F:id' \\\n  -H 'Accept: application\u002Fvnd.api+json' \\\n  -H 'Content-Type: application\u002Fvnd.api+json' \\\n  -H 'Authorization: Bearer your-access-token' \\\n  -d '{\n    \"data\": {\n      \"type\": \"captures\",\n      \"id\": \"your-capture-id\",\n      \"attributes\": {\n        \"_forward\": true\n      }\n    }\n  }'",{"_modelApiKey":367,"copy":453,"listStyle":369,"darkTheme":11,"buttons":454,"color":371,"indent":11},"\u003Cp>There&#39;s also an amount mismatch scenario: if a capture succeeds while an order is still pending, and the order is later edited (changing the total), you can reset the transaction using the \u003Ccode>_cancel\u003C\u002Fcode> trigger on the capture.\u003C\u002Fp>\n",[],{"_modelApiKey":420,"icon":456,"copy":457,"color":371},"arrow-fat-line-right","\u003Cp>These escape hatches matter. They&#39;re the difference between a system that handles edge cases gracefully and one that requires manual intervention at the database level.\u003C\u002Fp>\n",{"_modelApiKey":367,"copy":459,"listStyle":369,"darkTheme":11,"buttons":460,"color":371,"indent":11},"\u003Ch3>Capture and refunds\u003C\u002Fh3>\n\n\u003Cp>Once a payment is captured, it can be refunded — either fully or partially. A partial refund changes the order&#39;s payment status to \u003Ccode>partially_refunded\u003C\u002Fcode>. A full refund eventually cancels the order and sets the status to \u003Ccode>refunded\u003C\u002Fcode>.\u003C\u002Fp>\n\n\u003Cp>The capture resource exposes \u003Ccode>refund_amount_cents\u003C\u002Fcode> and \u003Ccode>refund_balance_cents\u003C\u002Fcode>, giving you a precise view of how much has been refunded and how much refundable balance remains.\u003C\u002Fp>\n",[],{"_modelApiKey":394,"title":462,"preTitle":463,"linkText":59,"darkTheme":11,"link":464},"Captures","API reference",{"_modelApiKey":203,"text":59,"label":280,"subtitle":280,"icon":280,"isExternal":7,"url":465,"link":303,"anchor":280,"openForm":11,"form":303,"htmlClassNames":280},"https:\u002F\u002Fdocs.commercelayer.io\u002Fcore-api-reference\u002Fcaptures",{"_modelApiKey":367,"copy":467,"listStyle":369,"darkTheme":11,"buttons":468,"color":371,"indent":11},"\u003Ch3>Choosing the right capture strategy\u003C\u002Fh3>\n\n\u003Cp>Here&#39;s a quick decision guide:\u003C\u002Fp>\n",[],{"_modelApiKey":470,"darkTheme":11,"table":471,"size":381},"table_block",{"columns":472,"data":475},[473,474],"Scenario","Recommended approach",[476,479,482,485,488,491],{"Scenario":477,"Recommended approach":478},"Physical goods, warehouse-dependent fulfillment","Manual capture — hold authorization until ready to ship.",{"Scenario":480,"Recommended approach":481},"Digital goods or instant delivery","Auto-capture — simplify the flow.",{"Scenario":483,"Recommended approach":484},"Large orders needing financial review","Manual capture with approval workflow.",{"Scenario":486,"Recommended approach":487},"High volume, low-risk orders","Auto-capture with max amount threshold.",{"Scenario":489,"Recommended approach":490},"B2B or \"ship now, charge later\"","Delayed capture.",{"Scenario":492,"Recommended approach":493},"Custom fraud checks, inventory validation, ERP sync before capture","Webhook-driven capture on order's placement.",{"_modelApiKey":367,"copy":495,"listStyle":369,"darkTheme":11,"buttons":496,"color":371,"indent":11},"\u003Ch3>The bigger picture\u003C\u002Fh3>\n\n\u003Cp>Capture behavior is rarely just a developer concern. It affects cash flow, customer communication, fraud risk, and how operations teams interact with orders every day. Getting it right means understanding both the technical levers and the business context they operate in.\u003C\u002Fp>\n\n\u003Cp>\u003Cstrong>Commerce Layer&#39;s approach\u003C\u002Fstrong> — separating authorization and capture as distinct, configurable steps — \u003Cstrong>reflects how payments actually work in serious commerce operations.\u003C\u002Fstrong> The flexibility to configure this per payment method, per market, and per order type means you&#39;re not locked into a one-size-fits-all approach.\u003C\u002Fp>\n\n\u003Cp>If you&#39;re building on Commerce Layer, take the time to think through your capture strategy early. It&#39;s one of those decisions that&#39;s easy to overlook and expensive to fix once orders start flowing.\u003C\u002Fp>\n",[],[498,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529],{"attributes":303,"tag":304,"content":305},{"attributes":500,"tag":309,"content":303},{"property":308,"content":305},{"attributes":502,"tag":309,"content":303},{"name":312,"content":305},{"attributes":504,"tag":309,"content":303},{"name":315,"content":316},{"attributes":506,"tag":309,"content":303},{"property":319,"content":316},{"attributes":508,"tag":309,"content":303},{"name":322,"content":316},{"attributes":510,"tag":309,"content":303},{"property":325,"content":326},{"attributes":512,"tag":309,"content":303},{"property":329,"content":330},{"attributes":514,"tag":309,"content":303},{"property":333,"content":334},{"attributes":516,"tag":309,"content":303},{"name":337,"content":326},{"attributes":518,"tag":309,"content":303},{"property":340,"content":341},{"attributes":520,"tag":309,"content":303},{"property":344,"content":345},{"attributes":522,"tag":309,"content":303},{"property":348,"content":349},{"attributes":524,"tag":309,"content":303},{"property":352,"content":353},{"attributes":526,"tag":309,"content":303},{"property":356,"content":280},{"attributes":528,"tag":309,"content":303},{"name":359,"content":360},{"attributes":530,"tag":309,"content":303},{"name":363,"content":364},[532],{"name":285,"picture":533},{"url":287,"alt":288,"title":288,"width":289,"height":289,"format":290,"focalPoint":534,"customData":535},{"x":292,"y":292},{},1791534732191]