PageSourceSearch

https://stripe.dev/blog

html stripe.dev collected 2026-10-02 02:12:25 UTC 517,474 bytes, 1 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><title data-next-head="">Stripe | Dev Blog</title><meta property="og:title" content="Stripe Dot Dev Blog" data-next-head=""/><meta name="description" content="Learn how to build web and mobile applications to accept payments, send payouts, and manage your business online with Stripe." data-next-head=""/><meta property="og:description" content="Learn how to build web and mobile applications to accept payments, send payouts, and manage your business online with Stripe." data-next-head=""/><meta property="og:image" content="https://stripe.dev/dev_social.jpeg" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:site" content="@stripepress" data-next-head=""/><meta name="twitter:creator" content="@stripepress" data-next-head=""/><meta name="twitter:title" content="Stripe Dot Dev Blog" data-next-head=""/><meta name="twitter:description" content="Learn how to build web and mobile applications to accept payments, send payouts, and manage your business online with Stripe." data-next-head=""/><meta name="twitter:image" content="https://stripe.dev/dev_social.jpeg" data-next-head=""/><link rel="icon" href="../favicon.ico" sizes="16x16" type="image/x-icon" data-next-head=""/><link rel="alternate" type="application/rss+xml" title="Stripe Dot Dev Blog RSS Feed" href="/blog/feed" data-next-head=""/><link rel="preload" href="/_next/static/immutable/chunks/1q44a8jirctxu.css" as="style"/><link rel="preload" href="/_next/static/immutable/chunks/39yaqcxegdfb6.css" as="style"/><link rel="preload" href="/_next/static/immutable/chunks/2nsi7_x2is8pj.css" as="style"/><link rel="stylesheet" href="/_next/static/immutable/chunks/1q44a8jirctxu.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/immutable/chunks/39yaqcxegdfb6.css" data-n-p=""/><link rel="stylesheet" href="/_next/static/immutable/chunks/2nsi7_x2is8pj.css" data-n-p=""/><noscript data-n-css=""></noscript>
1<script src="/_next/static/immutable/chunks/1cob6x-fi4i-4.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/034r9rhvtr_b4.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/11p77a0vu4d4n.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/07-x4l-uykqvy.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/24yokreqzh33m.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/turbopack-3wq2wi9bjuwb2.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/3pgrmxwnwap-i.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/2n-yl_mdgxqqg.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/1ohutym-kn4k_.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/3ho-wsfe3w3qo.js" defer=""></script>
1<script src="/_next/static/immutable/chunks/turbopack-18geb3je5b6ea.js" defer=""></script>
1<script src="/_next/static/HMug0bjn9Z2F73FJyfLnU/_buildManifest.js" defer=""></script>
1<script src="/_next/static/HMug0bjn9Z2F73FJyfLnU/_ssgManifest.js" defer=""></script>
1<script src="/_next/static/HMug0bjn9Z2F73FJyfLnU/_clientMiddlewareManifest.js" defer=""></script>
1</head><body><div id="__next"><main><div class="GridLayout-module__h3nX9W__grid blog-module__R0QMoW__layout"><nav class="Nav-module__bLoQaq__nav"><div class="Nav-module__bLoQaq__nav__left"><a class="Nav-module__bLoQaq__nav__link" aria-label="Home" href="/"><svg class="Nav-module__bLoQaq__nav__logoIcon" width="13" height="15" viewBox="0 0 13 15" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M0 14.0578L12.6296 11.302V0.942383L0 3.64711V14.0578Z" fill="currentColor"></path></svg></a><a target="_self" class="text-smallcaps NavButton-module__Vo4Iva__navButton NavButton-module__Vo4Iva__active" href="/blog"><span class="NavButton-module__Vo4Iva__hotkey">[<!-- -->B<!-- -->] </span>Blog</a><a target="_self" class="text-smallcaps NavButton-module__Vo4Iva__navButton" href="/events"><span class="NavButton-module__Vo4Iva__hotkey">[<!-- -->E<!-- -->] </span>Events</a><a target="_blank" class="text-smallcaps NavButton-module__Vo4Iva__navButton" href="https://docs.stripe.com"><span class="NavButton-module__Vo4Iva__hotkey">[<!-- -->D<!-- -->] </span>Docs</a><a target="_blank" class="text-smallcaps NavButton-module__Vo4Iva__navButton" href="https://www.youtube.com/stripedevelopers"><span class="NavButton-module__Vo4Iva__hotkey">[<!-- -->Y<!-- -->] </span>Youtube</a><a target="_blank" class="text-smallcaps NavButton-module__Vo4Iva__navButton" href="https://github.com/stripe"><span class="NavButton-module__Vo4Iva__hotkey">[<!-- -->G<!-- -->] </span>Github</a><a target="_blank" class="text-smallcaps NavButton-module__Vo4Iva__navButton" href="https://www.meetup.com/pro/stripe"><span class="NavButton-module__Vo4Iva__hotkey">[<!-- -->M<!-- -->] </span>Meetups</a><a target="_blank" class="text-smallcaps NavButton-module__Vo4Iva__navButton" href="https://www.stripecommunity.com/home"><span class="NavButton-module__Vo4Iva__hotkey">[<!-- -->U<!-- -->] </span>Community</a></div></nav><section class="section-module__Yglhya__section PageFeedSection-module__pvIv2W__section"><div class="PageFeedSection-module__pvIv2W__titleRow"><h2 class="SectionTitle-module__Svbyca__title">Blog<sup class="SectionTitle-module__Svbyca__superText">(<!-- -->120<!-- -->)</sup></h2></div><div class="PageFeedSection-module__pvIv2W__sidebar"><div class="PageFeedSection-module__pvIv2W__filterSection"><div class="TableHeader-module__qdaoaq__container PageFeedSection-module__pvIv2W__filterHeader"><div class="TableHeader-module__qdaoaq__label text-smallcaps"><span>/</span>Filters</div></div><div class="Directory-module__caeC3G__directory PageFeedSection-module__pvIv2W__primaryFilter"><button class="Directory-module__caeC3G__toggle" aria-controls="collapsible" aria-expanded="true" id="toggle-collapsible"><svg class="Directory-module__caeC3G__chevronIcon Directory-module__caeC3G__chevronOpen" width="10" height="7" viewBox="0 0 10 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.83728 0.885375C9.62032 0.668417 9.26857 0.668417 9.05161 0.885375L5 4.93698L0.948392 0.885374C0.731435 0.668416 0.379676 0.668416 0.162719 0.885374C-0.0542402 1.10233 -0.0542403 1.45409 0.162719 1.67105L4.60716 6.11549C4.82412 6.33245 5.17588 6.33245 5.39284 6.11549L9.83728 1.67105C10.0542 1.45409 10.0542 1.10233 9.83728 0.885375Z" fill="currentColor"></path></svg><svg class="Directory-module__caeC3G__directoryIcon" width="12" height="10" viewBox="0 0 12 10" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Folder Icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 0H7V1H1V0ZM1 6V1H0V9H1V10H11V9H12V3H11V2H8V1H7V2H8V3H11V4H3V5H2V6H1ZM1 7V9H11V5H3V6H2V7H1Z" fill="currentColor"></path></svg> <span class="text-xs Directory-module__caeC3G__label">Topic</span></button><div class="Directory-module__caeC3G__content"><div class="Directory-module__caeC3G__collapse" aria-hidden="false" id="collapsible"><div class="Directory-module__caeC3G__inner"><ul class="Filter-module__oRyX_G__list"><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Agentic Commerce<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->3<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">AI<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->22<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Announcements<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->4<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">AWS<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->18<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Best Practices<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->
121<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Billing<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->16<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Connect<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->9<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Crypto<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->2<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Developer Productivity<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->10<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Engineering<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->26<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Enterprise<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->4<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Event Destinations<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->10<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Extensibility<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->1<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Fraud Detection<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->3<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Getting Started<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->4<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">
1Infrastructure<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->7<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Machine Learning<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->2<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Open Source<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->5<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Partners<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->13<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Payments<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->22<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Sandboxes<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->10<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Security<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->3<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Tax<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->2<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Terminal<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->2<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Testing<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->9<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Workbench<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->17<!-- -->)</span></span></button></li><li class="Filter-module__oRyX_G__listItem"><button class="text-xs Filter-module__oRyX_G__option"><svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg" class="Filter-module__oRyX_G__checkboxIcon"><title>Checkbox icon</title><path fill-rule="evenodd" clip-rule="evenodd" d="M1 1L-3.49691e-07 1L-4.37113e-08 8L1 8L1 9L9 9L9 8L10 8L10 1L9 1L9 -3.93402e-07L1 -4.37114e-08L1 1ZM1 1L9 1L9 8L1 8L1 1Z" fill="currentColor"></path></svg><span class="">Workflows<!-- --> <span class="Filter-module__oRyX_G__count">(<!-- -->7<!-- -->)</span></span></button></li></ul></div></div></div></div><div class="Art-module__QRr6PW__Art PageFeedSection-module__pvIv2W__Art" data-testid="artwork" draggable="false" style="-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:pan-y"><div class="Art-module__QRr6PW__Chrome"><div class="Art-module__QRr6PW__dragline"></div><div class="Art-module__QRr6PW__fig text-smallcaps">[ <!-- -->Fig. 3<!-- --> ]</div><div class="Art-module__QRr6PW__dragline"></div><a href="/art/index.html?config=%7B%22ampX%22:1.108349706120789,%22ampY%22:0.9809320110790432,%22aspectRatio%22:2.0819042240474372,%22axis%22:%22xy%22,%22lump%22:-0.5666931442916393,%22count%22:65,%22freq%22:1.233399
11674780846,%22isDial%22:false,%22isLineart%22:false,%22isRing%22:true,%22isSpiral%22:false,%22left%22:-50,%22mouseX%22:0.19688519865926357,%22mouseY%22:0.8625176729662344,%22noise%22:0.05828166402876377,%22scale%22:0.2046110295653345,%22shape%22:%22ellipse%22,%22top%22:-54,%22twirl%22:0.1334921052083373,%22twist%22:-2.35388991124928,%22velocity%22:1.1585699995607137,%22isBalls%22:false,%22isMatrix%22:false,%22kaleids%22:6.220365716852248%7D" target="_blank" aria-label="Open art controls"><svg class="Art-module__QRr6PW__propsIcon" width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M-8.74228e-08 10L8 10L8 9L11 9L11 10L12 10L12 11L11 11L11 12L8 12L8 11L-4.37113e-08 11L-8.74228e-08 10ZM-3.93402e-07 3L-4.37114e-07 2L8 2L8 1L11 1L11 2L12 2L12 3L11 3L11 4L8 4L8 3L-3.93402e-07 3ZM1 6L-2.62268e-07 6L-2.18557e-07 7L1 7L1 8L4 8L4 7L12 7L12 6L4 6L4 5L1 5L1 6ZM9 2L10 2L10 3L9 3L9 2ZM10 10L9 10L9 11L10 11L10 10ZM2 6L3 6L3 7L2 7L2 6Z"></path></svg></a></div><div class="Art-module__QRr6PW__row2"><div class="Art-module__QRr6PW__left"></div><div class="Art-module__QRr6PW__canvasContainer"><div class="Art-module__QRr6PW__background"><svg width="326" height="276" viewBox="0 0 326 276" xmlns="http://www.w3.org/2000/svg"><circle cx="13.5" cy="12" r="1"></circle><circle cx="13.5" cy="34.8182" r="1"></circle><circle cx="13.5" cy="57.6364" r="1"></circle><circle cx="13.5" cy="80.4545" r="1"></circle><circle cx="13.5" cy="103.273" r="1"></circle><circle cx="13.5" cy="126.091" r="1"></circle><circle cx="13.5" cy="148.909" r="1"></circle><circle cx="13.5" cy="171.727" r="1"></circle><circle cx="13.5" cy="194.545" r="1"></circle><circle cx="13.5" cy="217.364" r="1"></circle><circle cx="13.5" cy="240.182" r="1"></circle><circle cx="13.5" cy="263" r="1"></circle><circle cx="33.5" cy="12" r="1"></circle><circle cx="33.5" cy="34.8182" r="1"></circle><circle cx="33.5" cy="57.6364" r="1"></circle><circle cx="33.5" cy="80.4545" r="1"></circle><circle cx="33.5" cy="103.273" r="1"></circle><circle cx="33.5" cy="126.091" r="1"></circle><circle cx="33.5" cy="148.909" r="1"></circle><circle cx="33.5" cy="171.727" r="1"></circle><circle cx="33.5" cy="194.545" r="1"></circle><circle cx="33.5" cy="217.364" r="1"></circle><circle cx="33.5" cy="240.182" r="1"></circle><circle cx="33.5" cy="263" r="1"></circle><circle cx="53.5" cy="12" r="1"></circle><circle cx="53.5" cy="34.8182" r="1"></circle><circle cx="53.5" cy="57.6364" r="1"></circle><circle cx="53.5" cy="80.4545" r="1"></circle><circle cx="53.5" cy="103.273" r="1"></circle><circle cx="53.5" cy="126.091" r="1"></circle><circle cx="53.5" cy="148.909" r="1"></circle><circle cx="53.5" cy="171.727" r="1"></circle><circle cx="53.5" cy="194.545" r="1"></circle><circle cx="53.5" cy="217.364" r="1"></circle><circle cx="53.5" cy="240.182" r="1"></circle><circle cx="53.5" cy="263" r="1"></circle><circle cx="73.5" cy="12" r="1"></circle><circle cx="73.5" cy="34.8182" r="1"></circle><circle cx="73.5" cy="57.6364" r="1"></circle><circle cx="73.5" cy="80.4545" r="1"></circle><circle cx="73.5" cy="103.273" r="1"></circle><circle cx="73.5" cy="126.091" r="1"></circle><circle cx="73.5" cy="148.909" r="1"></circle><circle cx="73.5" cy="171.727" r="1"></circle><circle cx="73.5" cy="194.545" r="1"></circle><circle cx="73.5" cy="217.364" r="1"></circle><circle cx="73.5" cy="240.182" r="1"></circle><circle cx="73.5" cy="263" r="1"></circle><circle cx="93.5" cy="12" r="1"></circle><circle cx="93.5" cy="34.8182" r="1"></circle><circle cx="93.5" cy="57.6364" r="1"></circle><circle cx="93.5" cy="80.4545" r="1"></circle><circle cx="93.5" cy="103.273" r="1"></circle><circle cx="93.5" cy="126.091" r="1"></circle><circle cx="93.5" cy="148.909" r="1"></circle><circle cx="93.5" cy="171.727" r="1"></circle><circle cx="93.5" cy="194.545" r="1"></circle><circle cx="93.5" cy="217.364" r="1"></circle><circle cx="93.5" cy="240.182" r="1"></circle><circle cx="93.5" cy="263" r="1"></circle><circle cx="113.5" cy="12" r="1"></circle><circle cx="113.5" cy="34.8182" r="1"></circle><circle cx="113.5" cy="57.6364" r="1"></circle><circle cx="113.5" cy="80.4545" r="1"></circle><circle cx="113.5" cy="103.273" r="1"></circle><circle cx="113.5" cy="126.091" r="1"></circle><circle cx="113.5" cy="148.909" r="1"></circle><circle cx="113.5" cy="171.727" r="1"></circle><circle cx="113.5" cy="194.545" r="1"></circle><circle cx="113.5" cy="217.364" r="1"></circle><circle cx="113.5" cy="240.182" r="1"></circle><circle cx="113.5" cy="263" r="1"></circle><circle cx="133.5" cy="12" r="1"></circle><circle cx="133.5" cy="34.8182" r="1"></circle><circle cx="133.5" cy="57.6364" r="1"></circle><circle cx="133.5" cy="80.4545" r="1"></circle><circle cx="133.5" cy="103.273" r="1"></circle><circle cx="133.5" cy="126.091" r="1"></circle><circle cx="133.5" cy="148.909" r="1"></circle><circle cx="133.5" cy="171.727" r="1"></circle><circle cx="133.5" cy="194.545" r="1"></circle><circle cx="133.5" cy="217.364" r="1"></circle><circle cx="133.5" cy="240.182" r="1"></circle><circle cx="133.5" cy="263" r="1"></circle><circle cx="153.5" cy="12" r="1"></circle><circle cx="153.5" cy="34.8182" r="1"></circle><circle cx="153.5" cy="57.6364" r="1"></circle><circle cx="153.5" cy="80.4545" r="1"></circle><circle cx="153.5" cy="103.273" r="1"></circle><circle cx="153.5" cy="126.091" r="1"></circle><circle cx="153.5" cy="148.909" r="1"></circle><circle cx="153.5" cy="171.727" r="1"></circle><circle cx="153.5" cy="194.545" r="1"></circle><circle cx="153.5" cy="217.364" r="1"></circle><circle cx="153.5" cy="240.182" r="1"></circle><circle cx="153.5" cy="263" r="1"></circle><circle cx="173.5" cy="12" r="1"></circle><circle cx="173.5" cy="34.8182" r="1"></circle><circle cx="173.5" cy="57.6364" r="1"></circle><circle cx="173.5" cy="80.4545" r="1"></circle><circle cx="173.5" cy="103.273" r="1"></circle><circle cx="173.5" cy="126.091" r="1"></circle><circle cx="173.5" cy="148.909" r="1"></circle><circle cx="173.5" cy="171.727" r="1"></circle><circle cx="173.5" cy="194.545" r="1"></circle><circle cx="173.5" cy="217.364" r="1"></circle><circle cx="173.5" cy="240.182" r="1"></circle><circle cx="173.5" cy="263" r="1"></circle><circle cx="193.5" cy="12" r="1"></circle><circle cx="193.5" cy="34.8182" r="1"></circle><circle cx="193.5" cy="57.6364" r="1"></circle><circle cx="193.5" cy="80.4545" r="1"></circle><circle cx="193.5" cy="103.273" r="1"></circle><circle cx="193.5" cy="126.091" r="1"></circle><circle cx="193.5" cy="148.909" r="1"></circle><circle cx="193.5" cy="171.727" r="1"></circle><circle cx="193.5" cy="194.545" r="1"></circle><circle cx="193.5" cy="217.364" r="1"></circle><circle cx="193.5" cy="240.182" r="1"></circle><circle cx="193.5" cy="263" r="1"></circle><circle cx="213.5" cy="12" r="1"></circle><circle cx="213.5" cy="34.8182" r="1"></circle><circle cx="213.5" cy="57.6364" r="1"></circle><circle cx="213.5" cy="80.4545" r="1"></circle><circle cx="213.5" cy="103.273" r="1"></circle><circle cx="213.5" cy="126.091" r="1"></circle><circle cx="213.5" cy="148.909" r="1"></circle><circle cx="213.5" cy="171.727" r="1"></circle><circle cx="213.5" cy="194.545" r="1"></circle><circle cx="213.5" cy="217.364" r="1"></circle><circle cx="213.5" cy="240.182" r="1"></circle><circle cx="213.5" cy="263" r="1"></circle><circle cx="233.5" cy="12" r="1"></circle><circle cx="233.5" cy="34.8182" r="1"></circle><circle cx="233.5" cy="57.6364" r="1"></circle><circle cx="233.5" cy="80.4545" r="1"></circle><circle cx="233.5" cy="103.273" r="1"></circle><circle cx="233.5" cy="126.091" r="1"></circle><circle cx="233.5" cy="148.909" r="1"></circle><circle cx="233.5" cy="171.727" r="1"></circle><circle cx="233.5" cy="194.545" r="1"></circle><circle cx="233.5" cy="217.364" r="1"></circle><circle cx="233.5" cy="240.182" r="1"></circle><circle cx="233.5" cy="263" r="1"></circle><circle cx="253.5" cy="12" r="1"></circle><circle cx="253.5" cy="34.8182" r="1"></circle><circle cx="253.5" cy="57.6364" r="1"></circle><circle cx="253.5" cy="80.4545" r="1"></circle><circle cx="253.5" cy="103.273" r="1"></circle><circle cx="253.5" cy="126.091" r="1"></circle><circle cx="253.5" cy="148.909" r="1"></circle><circle cx="253.5" cy="171.727" r="1"></circle><circle cx="253.5" cy="194.545" r="1"></circle><circle cx="253.5" cy="217.364" r="1"></circle><circle cx="253.5" cy="240.182" r="1"></circle><circle cx="253.5" cy="263" r="1"></circle><circle cx="273.5" cy="12" r="1"></circle><circle cx="273.5" cy="34.8182" r="1"></circle><circle cx="273.5" cy="57.6364" r="1"></circle><circle cx="273.5" cy="80.4545" r="1"></circle><circle cx="273.5" cy="103.273" r="1"></circle><circle cx="273.5" cy="126.091" r="1"></circle><circle cx="273.5" cy="148.909" r="1"></circle><circle cx="273.5" cy="171.727" r="1"></circle><circle cx="273.5" cy="194.545" r="1"></circle><circle cx="273.5" cy="217.364" r="1"></circle><circle cx="273.5" cy="240.182" r="1"></circle><circle cx="273.5" cy="263" r="1"></circle><circle cx="293.5" cy="12" r="1"></circle><circle cx="293.5" cy="34.8182" r="1"></circle><circle cx="293.5" cy="57.6364" r="1"></circle><circle cx="293.5" cy="80.4545" r="1"></circle><circle cx="293.5" cy="103.273" r="1"></circle><circle cx="293.5" cy="126.091" r="1"></circle><circle cx="293.5" cy="148.909" r="1"></circle><circle cx="293.5" cy="171.727" r="1"></circle><circle cx="293.5" cy="194.545" r="1"></circle><circle cx="293.5" cy="217.364" r="1"></circle><circle cx="293.5" cy="240.182" r="1"></circle><circle cx="293.5" cy="263" r="1"></circle><circle cx="313.5" cy="12" r="1"></circle><circle cx="313.5" cy="34.8182" r="1"></circle><circle cx="313.5" cy="57.6364" r="1"></circle><circle cx="313.5" cy="80.4545" r="1"></circle><circle cx="313.5" cy="103.273" r="1"></circle><circle cx="313.5" cy="126.091" r="1"></circle><circle cx="313.5" cy="148.909" r="1"></circle><circle cx="313.5" cy="171.727" r="1"></circle><circle cx="313.5" cy="194.545" r="1"></circle><circle cx="313.5" cy="217.364" r="1"></circle><circle cx="313.5" cy="240.182" r="1"></circle><circle cx="313.5" cy="263" r="1"></circle></svg></div><canvas class="Art-module__QRr6PW__Canvas"></canvas><div class="Art-module__QRr6PW__tenX">
1<svg width="9" height="7" viewBox="0 0 9 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 7V0H1V1H2V2H3V3H4V4H3V5H2V6H1V7H0Z"></path><path d="M5 7V0H6V1H7V2H8V3H9V4H8V5H7V6H6V7H5Z"></path></svg><div class="text-smallcaps">10x</div></div></div><div class="Art-module__QRr6PW__right"></div></div><div class="Art-module__QRr6PW__bottom"></div></div></div></div><div class="PageFeedSection-module__pvIv2W__articleList"><div class="TableHeader-module__qdaoaq__container PageFeedSection-module__pvIv2W__articleListHeader"><div class="TableHeader-module__qdaoaq__label PageFeedSection-module__pvIv2W__dateLabel text-smallcaps"><span>/</span>Date</div><div class="TableHeader-module__qdaoaq__label PageFeedSection-module__pvIv2W__nameLabel text-smallcaps"><span>/</span>Name</div></div><ul class="PageFeedSection-module__pvIv2W__articleListItems" data-testid="page-feed-section-list"><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/stripes-payment-method-factory-orchestrating-agents-for-repeated-custom-integrations"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.9.30</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stripe’s Payment Method Factory: Orchestrating agents for repeated, custom integrations<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stripe’s Payment Method Factory: Orchestrating agents for repeated, custom integrations" title="Expand details for Stripe’s Payment Method Factory: Orchestrating agents for repeated, custom integrations" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe built an agentic payment method factory from over 100 reusable prompts, hardened by agents observing implementation runs, and kept them current by feeding back each run&#x27;s learnings.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">David Dunne<!-- -->, </span><span class="text-sm">Xenofon Vourliotis<!-- -->, </span><span class="text-sm">Sai Samant</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/stripes-payment-method-factory-orchestrating-agents-for-repeated-custom-integrations">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-stripe-is-designing-checkout-for-ai-agents"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.9.22</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How Stripe is designing Checkout for AI agents<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How Stripe is designing Checkout for AI agents" title="Expand details for How Stripe is designing Checkout for AI agents" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">How Stripe used WebMCP to accelerate agent purchases from the browser.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Cara Mecozzi<!-- -->, </span><span class="text-sm">Steve Kaliski</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-stripe-is-designing-checkout-for-ai-agents">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-custom-financial-reconciliation-workflows-with-stripe"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.9.18</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Building custom financial reconciliation workflows with Stripe<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Building custom financial reconciliation workflows with Stripe" title="Expand details for Building custom financial reconciliation workflows with Stripe" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe’s next generation of reporting APIs are focused on enterprise scalability, and this post shows you how to use them in your financial reporting infrastructure.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Maia Robinson</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Enterprise</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">
1Infrastructure</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workflows</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-custom-financial-reconciliation-workflows-with-stripe">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/harbor-stripes-ai-assisted-prototyping-tool"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.9.14</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Harbor: Stripe’s AI-assisted prototyping tool<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Harbor: Stripe’s AI-assisted prototyping tool" title="Expand details for Harbor: Stripe’s AI-assisted prototyping tool" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Harbor is the internal tool Stripe teams use to prototype with an AI agent. This post covers how it compiles prototypes in the browser, how the agent inspects its own work, and how comments stay anchored when the page is rewritten.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Cristian Rivera<!-- -->, </span><span class="text-sm">Sai Samant</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/harbor-stripes-ai-assisted-prototyping-tool">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/what-if-stripe-could-work-the-way-your-business-does"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.9.07</span></div><div class="text-md BlogListItem-module__QCnjCG__title">What if Stripe could work the way your business does<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for What if Stripe could work the way your business does" title="Expand details for What if Stripe could work the way your business does" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how Stripe Scripts, Workflows, Custom Objects, and UI extensions help businesses customize logic, data, and operations directly within Stripe.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workflows</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Extensibility</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/what-if-stripe-could-work-the-way-your-business-does">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/ai-didnt-write-our-sdk-it-changed-how-we-built-it"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.8.28</span></div><div class="text-md BlogListItem-module__QCnjCG__title">AI didn&#x27;t write our SDK. It changed how we built it.<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for AI didn&#x27;t write our SDK. It changed how we built it." title="Expand details for AI didn&#x27;t write our SDK. It changed how we built it." aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">AI was involved at every stage of building Stripe&#x27;s extensibility SDK, but the story isn&#x27;t that it wrote code faster. Here&#x27;s how prototypes, agent-drafted specs, and persistent guidance got ideas into reviewable shape sooner.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Mike North</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/ai-didnt-write-our-sdk-it-changed-how-we-built-it">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-a-data-plane-from-scratch-stripes-own-high-performance-distributed-proxy"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.8.26</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Building a data plane from scratch: Stripe’s own high-performance distributed proxy<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Building a data plane from scratch: Stripe’s own high-performance distributed proxy" title="Expand details for Building a data plane from scratch: Stripe’s own high-performance distributed proxy" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">To minimize failed payments for our users, Stripe targets 99.9995% reliability.  As traffic grew beyond 1.6% of global GDP, this put intense strain on the service mesh.  This is the story of the infrastructure team replacing Envoy, a popular solution, with an alternative architecture.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Jack Loughran<!-- -->, </span><span class="text-sm">Cara Mecozzi</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">
1Infrastructure</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-a-data-plane-from-scratch-stripes-own-high-performance-distributed-proxy">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/helping-ai-built-payment-integration-understand-business-intent"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.8.14</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Reading the signals: Helping your AI-built payment integration understand business intent<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Reading the signals: Helping your AI-built payment integration understand business intent" title="Expand details for Reading the signals: Helping your AI-built payment integration understand business intent" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">The low-level code that makes a payment go through is getting cheap, fast. What is becoming valuable is the judgment above it: knowing what the money is supposed to do and making sure the code obeys it.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">David Benchi</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/helping-ai-built-payment-integration-understand-business-intent">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/pass-network-costs-to-your-connected-accounts"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.8.10</span></div><div class="text-md BlogListItem-module__QCnjCG__title">From charging a blended rate to IC++: pass network costs to your connected accounts<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for From charging a blended rate to IC++: pass network costs to your connected accounts" title="Expand details for From charging a blended rate to IC++: pass network costs to your connected accounts" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">SaaS platforms don&#x27;t fit a single mold when it comes to payments pricing. An early-stage vertical software company needs simple, flexible tools to experiment and iterate. A platform moving upmarket needs granular cost control and the ability to offer sophisticated pricing to enterprise customers. And as AI features reshape how platforms monetize, that diversity is only going to increase.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Safia El Bayed</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/pass-network-costs-to-your-connected-accounts">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/agentic-payments-for-marketplaces"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.8.07</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Agentic payments for marketplaces: How a smart fridge can shop safely<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Agentic payments for marketplaces: How a smart fridge can shop safely" title="Expand details for Agentic payments for marketplaces: How a smart fridge can shop safely" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">While a smart fridge can detect when a household is running out of milk, the more interesting engineering problem begins after that.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ana Andres</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Agentic Commerce</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/agentic-payments-for-marketplaces">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/meet-stripes-knowledge-ai-platform"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.7.30</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Meet Stripe&#x27;
1s Knowledge AI Platform<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Meet Stripe&#x27;s Knowledge AI Platform" title="Expand details for Meet Stripe&#x27;s Knowledge AI Platform" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe&#x27;s Knowledge AI Platform is our versatile AI agent platform built to handle diverse non-coding knowledge work, from quick queries to complex, multi-day projects. By connecting employees to over 1,000 internal tools and skills, it enables secure, enterprise-scale productivity across the organization.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Anna Mason<!-- -->, </span><span class="text-sm">Sharadh Krishnamurthy<!-- -->, </span><span class="text-sm">Anupam Upadhyay</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/meet-stripes-knowledge-ai-platform">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-stripe-uses-graph-search-and-state-machines-to-auto-remediate-a-global-database-fleet"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.7.16</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How Stripe uses graph search and state machines to auto-remediate a global database fleet<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How Stripe uses graph search and state machines to auto-remediate a global database fleet" title="Expand details for How Stripe uses graph search and state machines to auto-remediate a global database fleet" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how we modeled our MongoDB infrastructure as a traversable graph and then use pathfinding algorithms to dynamically compute and execute recovery plans. This automated approach reduced pager volume by 30% (~200 pages/year), eliminated 12 days of unhealthy shard states annually, and supports new shard layouts with zero manual effort.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Pragya Mehta<!-- -->, </span><span class="text-sm">Sai Samant</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-stripe-uses-graph-search-and-state-machines-to-auto-remediate-a-global-database-fleet">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/fund-segregation-stripe-connect"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.7.02</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Keeping funds where they belong: Implementing fund segregation in Stripe Connect<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Keeping funds where they belong: Implementing fund segregation in Stripe Connect" title="Expand details for Keeping funds where they belong: Implementing fund segregation in Stripe Connect" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to implement fund segregation in Stripe Connect using allocated balances to ring-fence seller funds from your platform&#x27;s operational balance - covering payment creation, transfers, refunds, disputes, and preparing for upcoming PSD3 regulatory requirements.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Andrew Robinson</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/fund-segregation-stripe-connect">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/event-notification-handlers-thin-events"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.6.24</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Introducing a better way to process Stripe&#x27;s thin events<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Introducing a better way to process Stripe&#x27;s thin events" title="Expand details for Introducing a better way to process Stripe&#x27;s thin events" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Event destinations are central to Stripe integrations but hard to get right. Event notification handlers encapsulate the setup and wiring, letting you focus on business logic and surface errors at development time instead of in production.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">David Brownman</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/event-notification-handlers-thin-events">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/extending-stripes-network-with-stablecoins"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.6.22</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Extending Stripe’s network with stablecoins<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Extending Stripe’s network with stablecoins" title="Expand details for Extending Stripe’s network with stablecoins" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Most of the world&#x27;s money still moves in batches. A wire submitted at 2pm might settle by end of day, if you made the cutoff. ACH takes one to three business days. Cross-border payments touch correspondent banks, each adding lag and a fee. Stripe has spent over a decade building the Global Payments and Treasury Network (GPTN), a programmable infrastructure for global money movement that batches transfers to reduce cost, nets opposing flows to minimize actual cash moved, and routes through the optimal path between accounts. Under the hood, it&#x27;s a graph with accounts as nodes, and payment rails as edges.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Sai Samant<!-- -->, </span><span class="text-sm">Maciej Makowski</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Crypto</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/extending-stripes-network-with-stablecoins">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/integrating-services-with-agents-stripe-projects"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.6.16</span></div><div class="text-md BlogListItem-module__QCnjCG__title">From hobby to real world: integrating the hard stuff with agents<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for From hobby to real world: integrating the hard stuff with agents" title="Expand details for From hobby to real world: integrating the hard stuff with agents" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">When building with agents, most guides will give you the happy path - how to do something the best way, without friction. This post is all friction, and how to get through it when things go wrong.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Anna Spysz</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/integrating-services-with-agents-stripe-projects">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-api-changes-flow-into-stripes-developer-products"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.6.15</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How API changes flow into Stripe&#x27;s developer products<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How API changes flow into Stripe&#x27;s developer products" title="Expand details for How API changes flow into Stripe&#x27;s developer products" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">When a Stripe engineer makes changes to an API, merging the PR is just the beginning. Stripe maintains a vast developer product suite that needs to stay in sync with the API changes we frequently ship:</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Mikael Mello<!-- -->, </span><span class="text-sm">Anna Mason</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-api-changes-flow-into-stripes-developer-products">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/microservice-testing-with-apache-spark-part-2"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.6.08</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Scaling up your microservice testing with Apache Spark—Part 2<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Scaling up your microservice testing with Apache Spark—Part 2" title="Expand details for Scaling up your microservice testing with Apache Spark—Part 2" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Some microservices are difficult to test because their behavior depends on a long tail of inputs that are hard to model by hand. This post focuses on how to build a repeatable Apache Spark replay harness for testing without creating a second implementation of the service.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Vivek Yadav</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/microservice-testing-with-apache-spark-part-2">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/microservice-testing-with-apache-spark"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.6.01</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Scaling up your microservice testing with Apache Spark<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Scaling up your microservice testing with Apache Spark" title="Expand details for Scaling up your microservice testing with Apache Spark" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Some microservices are difficult to test because their behavior depends on a long tail of inputs that are hard to model by hand. For that class of problem, Apache Spark&#x27;s massive parallelism and linear scalability can be leveraged to build a regression test harness. That makes it possible to compare old and new implementations, model upcoming rule changes, and quantify impact before a change reaches production.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Vivek Yadav</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/microservice-testing-with-apache-spark">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/tax-id-validation-at-checkout"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.5.29</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Compliance versus conversion: Tax ID validation at checkout<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Compliance versus conversion: Tax ID validation at checkout" title="Expand details for Compliance versus conversion: Tax ID validation at checkout" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">For product-led businesses, conversion is paramount, so an important consideration is deciding whether to implement synchronous or asynchronous tax ID validation in a checkout flow. One is friendlier for conversion, but the other can keep your business compliant.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Jake Estes</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Tax</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/tax-id-validation-at-checkout">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/modern-java-at-stripe-language-upgrades-as-a-service"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.5.27</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Modern Java at Stripe: Language upgrades as a service<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Modern Java at Stripe: Language upgrades as a service" title="Expand details for Modern Java at Stripe: Language upgrades as a service" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">We all know the stereotypes of working at enterprise tech companies: endless bureaucracy and behemoth codebases running on a years-old language version. Most organizations know they should modernize quickly, but haven’t figured out how to build an upgrade path compatible with a large codebase. The recurring cost of upgrading keeps most large JVM codebases trailing behind the latest Java versions.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Mahib Hosain<!-- -->, </span><span class="text-sm">Cara Mecozzi</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/modern-java-at-stripe-language-upgrades-as-a-service">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/what-it-feels-like-building-with-stripe-projects"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.5.26</span></div><div class="text-md BlogListItem-module__QCnjCG__title">What it feels like building with Stripe Projects<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for What it feels like building with Stripe Projects" title="Expand details for What it feels like building with Stripe Projects" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Building a GitHub traffic dashboard with Stripe Projects revealed a surprising shift from “AI coding” into real infrastructure orchestration. In under an hour, Auth0, Supabase, Vercel, Prisma, deployments, environments, and scheduled jobs materialized around an idea with remarkable speed. The experience highlighted both the power and the emerging challenge of AI-assisted infrastructure: operational visibility, ownership clarity, environment management, and understanding rapidly orchestrated systems.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/what-it-feels-like-building-with-stripe-projects">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/ai-steering-experiments"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.5.14</span></div><div class="text-md BlogListItem-module__QCnjCG__title">You can&#x27;t whisper at an AI agent<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for You can&#x27;t whisper at an AI agent" title="Expand details for You can&#x27;t whisper at an AI agent" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">What a dozen steering experiments taught us about how LLM-based agents actually behave in the wild.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick<!-- -->, </span><span class="text-sm">Peter Epsteen</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/ai-steering-experiments">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/learnings-from-building-with-agents-stripe-projects"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.5.04</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Learnings from init to deploy<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Learnings from init to deploy" title="Expand details for Learnings from init to deploy" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This post is a follow-up to last week’s “From init to deploy: building with agents and Stripe Projects” and explores the learnings gained along the way.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Anna Spysz</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/learnings-from-building-with-agents-stripe-projects">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-with-agents-stripe-projects"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.4.29</span></div><div class="text-md BlogListItem-module__QCnjCG__title">From init to deploy: building with agents and Stripe Projects<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for From init to deploy: building with agents and Stripe Projects" title="Expand details for From init to deploy: building with agents and Stripe Projects" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe Projects makes it easy to spin up a useful, complex application that uses various SaaS providers. This post describes how one of our developer advocates built an internal transcript editing application using Stripe Projects, Vercel, and OpenRouter.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Anna Spysz</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-with-agents-stripe-projects">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/formatting-an-entire-25-million-line-codebase-overnight-the-rubyfmt-story"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.4.28</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Formatting an entire 25 million line codebase overnight: the rubyfmt story<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Formatting an entire 25 million line codebase overnight: the rubyfmt story" title="Expand details for Formatting an entire 25 million line codebase overnight: the rubyfmt story" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This is the story of how our Developer Productivity team extended and rolled out rubyfmt, our Rust-based zero-config, ultra-fast autoformatter across the world&#x27;s largest Ruby codebase.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Fable Tales<!-- -->, </span><span class="text-sm">Anna Mason</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/formatting-an-entire-25-million-line-codebase-overnight-the-rubyfmt-story">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-we-built-stripe-credits-a-programmable-auditable-way-to-pay-your-stripe-fees"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.4.16</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How we built Stripe Credits: A programmable, auditable way to pay your Stripe fees<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How we built Stripe Credits: A programmable, auditable way to pay your Stripe fees" title="Expand details for How we built Stripe Credits: A programmable, auditable way to pay your Stripe fees" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">In this post we’ll dive into how we built a virtual cashless payment method that works for prepaid and Stripe-issued credits, and cleanly integrates with our accounting, compliance, and other frameworks.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Pratik Gupta<!-- -->, </span><span class="text-sm">Sai Samant</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-we-built-stripe-credits-a-programmable-auditable-way-to-pay-your-stripe-fees">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/build-stripe-salesforce-integrations-faster-with-agents"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.4.13</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Using AI agents to build Stripe-Salesforce integrations faster<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Using AI agents to build Stripe-Salesforce integrations faster" title="Expand details for Using AI agents to build Stripe-Salesforce integrations faster" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Building payment and revenue integrations across Stripe and Salesforce has a steep learning curve spanning both platforms. CLI-based AI coding agents make this faster, but hallucinate on complex, evolving platform surfaces. Open-source grounding context files flatten the learning curve and reduce hallucination, letting developers ship working integrations sooner.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Vishnu Samavedula</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Open Source</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/build-stripe-salesforce-integrations-faster-with-agents">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/selective-test-execution-at-stripe-fast-ci-for-a-50m-line-ruby-monorepo"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.4.09</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Selective Test Execution at Stripe: Fast CI for a 50M-line Ruby monorepo<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Selective Test Execution at Stripe: Fast CI for a 50M-line Ruby monorepo" title="Expand details for Selective Test Execution at Stripe: Fast CI for a 50M-line Ruby monorepo" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe&#x27;s Selective Test Execution system employs some clever tricks to allow us to continue scaling our team and our codebase while only running around 5% of our tests on average. Find out how it works!</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Aditya Anchuri</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/selective-test-execution-at-stripe-fast-ci-for-a-50m-line-ruby-monorepo">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/production-ready-dev-stack-from-terminal"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.3.26</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Provision a production-ready dev stack from your terminal<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Provision a production-ready dev stack from your terminal" title="Expand details for Provision a production-ready dev stack from your terminal" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Provision hosting, databases, auth, analytics, AI and other dev tools from the Stripe CLI. Stripe Projects creates real resources in your own provider accounts, securely syncs agent-ready credentials, supports upgrades to paid tiers, and handles payments without leaving the terminal.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Rami Banna</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/production-ready-dev-stack-from-terminal">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/designing-flexible-payment-flows-with-checkoutsessions"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.3.06</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Designing flexible payment flows with Checkout Session<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Designing flexible payment flows with Checkout Session" title="Expand details for Designing flexible payment flows with Checkout Session" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to build a future-proof, global-ready checkout by implementing Stripe Checkout Session with embeddable Elements for flexible payments, tax calculation, and multi-currency support.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Allison Farris</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/designing-flexible-payment-flows-with-checkoutsessions">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/minions-stripes-one-shot-end-to-end-coding-agents-part-2"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.2.19</span></div><div class="text-md BlogListItem-module__QCnjCG__title">
1Minions: Stripe’s one-shot, end-to-end coding agents—Part 2<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Minions: Stripe’s one-shot, end-to-end coding agents—Part 2" title="Expand details for Minions: Stripe’s one-shot, end-to-end coding agents—Part 2" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Minions are Stripe’s homegrown coding agents, responsible for more than a thousand pull requests merged each week. Though humans review the code, minions write it from start to finish. Learn how they work, and how we built them.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Alistair Gray</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/minions-stripes-one-shot-end-to-end-coding-agents-part-2">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-a-mental-model-for-stripe-payments"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.2.19</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Building a mental model for Stripe payments<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Building a mental model for Stripe payments" title="Expand details for Building a mental model for Stripe payments" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span>
1<p class="text-sm PostDetails-module__6PpOaq__summary">Learn how Stripe payments work under the hood by understanding the PaymentIntent lifecycle as a state machine—from checkout and tokenization to authorization, capture, and settlement—and why webhooks are essential for keeping your systems in sync with asynchronous payment state changes. </p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Allison Farris</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Getting Started</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-a-mental-model-for-stripe-payments">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/minions-stripes-one-shot-end-to-end-coding-agents"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.2.09</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Minions: Stripe’s one-shot, end-to-end coding agents<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Minions: Stripe’s one-shot, end-to-end coding agents" title="Expand details for Minions: Stripe’s one-shot, end-to-end coding agents" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Minions are Stripe’s homegrown coding agents, responsible for more than a thousand pull requests merged each week. Though humans review the code, minions write it from start to finish. Learn how they work, and how we built them.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Alistair Gray</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/minions-stripes-one-shot-end-to-end-coding-agents">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/ai-agents-terraform-stripe-infrastru
1cture"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2026.1.27</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Configuring Stripe using Terraform and AI agents<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Configuring Stripe using Terraform and AI agents" title="Expand details for Configuring Stripe using Terraform and AI agents" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn why using AI agents to author Terraform code is safer than direct API calls for Stripe configuration. Get transparent, consistent, and auditable infrastructure with code review workflows.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Michael Selander</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/ai-agents-terraform-stripe-infrastructure">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/introducing-versioning-for-stripe-workflows"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.12.10</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Versioning in Stripe Workflows: Ship workflow changes with confidence<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Versioning in Stripe Workflows: Ship workflow changes with confidence" title="Expand details for Versioning in Stripe Workflows: Ship workflow changes with confidence" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span>
1<p class="text-sm PostDetails-module__6PpOaq__summary">Versioning in Stripe Workflows lets you edit automations safely with drafts, roll back changes instantly, and see exactly what ran. Update with confidence.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Tanya Boiteau</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workflows</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/introducing-versioning-for-stripe-workflows">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-production-ready-stripe-subscriptions-kiro-powers"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.12.04</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Building production-ready Stripe subscriptions using Kiro powers<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Building production-ready Stripe subscriptions using Kiro powers" title="Expand details for Building production-ready Stripe subscriptions using Kiro powers" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to build production-ready Stripe subscriptions faster using Kiro Powers. Implement secure payment flows, webhooks, and scalable architecture with AI assistance.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Kalyani Koppisetti<!-- -->, </span><span class="text-sm">Dan Kiuna</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-production-ready-stripe-subscriptions-kiro-powers">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/using-stripe-stablecoin-payments-no-crypto-knowledge"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.11.25</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stablecoin payments for Stripe developers: zero crypto knowledge required<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stablecoin payments for Stripe developers: zero crypto knowledge required" title="Expand details for Stablecoin payments for Stripe developers: zero crypto knowledge required" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to add stablecoin payments to your Stripe integration in under an hour. Accept USDC on Ethereum, Solana, Polygon, and Base with zero blockchain knowledge—just add &#x27;crypto&#x27; to your existing payment methods.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Robert Love</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Crypto</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/using-stripe-stablecoin-payments-no-crypto-knowledge">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/web-pos-mobile-terminal-integration"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.10.23</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Using a web-based POS with a mobile Terminal reader<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Using a web-based POS with a mobile Terminal reader" title="Expand details for Using a web-based POS with a mobile Terminal reader" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to integrate web-based POS systems with mobile Terminal readers using a React Native wrapper app. Connect M2 readers and Tap to Pay seamlessly.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Benjamin Nuttin</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Terminal</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/web-pos-mobile-terminal-integration">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-we-built-it-real-time-analytics-for-stripe-billing"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.9.16</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How we built it: Real-time analytics for Stripe Billing<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How we built it: Real-time analytics for Stripe Billing" title="Expand details for How we built it: Real-time analytics for Stripe Billing" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Among global business leaders surveyed, 84% agree that adapting pricing quickly will be a key competitive advantage. Our new real-time analytics system for Stripe Billing helps them spot customer trends just as they emerge.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Reed Trevelyan</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">
1Infrastructure</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-we-built-it-real-time-analytics-for-stripe-billing">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/workflows-automate-compliance-safeguards"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.9.11</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Workflows: Automate compliance safeguards by flagging transactions<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Workflows: Automate compliance safeguards by flagging transactions" title="Expand details for Workflows: Automate compliance safeguards by flagging transactions" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to automate compliance safeguards with Stripe Workflows by flagging high-value transactions and suspicious orders to enhance risk management.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ashley Ansari</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workflows</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/workflows-automate-compliance-safeguards">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/seamlessly-connect-stripe-events-to-your-frontend"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.9.11</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Seamlessly connect Stripe events to your frontend<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Seamlessly connect Stripe events to your frontend" title="Expand details for Seamlessly connect Stripe events to your frontend" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to connect Stripe events to your frontend applications using real-time subscriptions, webhooks, and AWS services. Build responsive payment UIs that react instantly to transaction updates, subscription changes, and account modifications with event-driven architecture.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Josh Kahn</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/seamlessly-connect-stripe-events-to-your-frontend">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/marketplace-monetization-with-stripe"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.9.04</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Marketplace monetization with Stripe<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Marketplace monetization with Stripe" title="Expand details for Marketplace monetization with Stripe" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Complete guide to monetizing online marketplaces with Stripe Connect. Configure transaction fees, usage-based billing, and automated invoicing with code examples.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ana Andres</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/marketplace-monetization-with-stripe">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/database-reconciliation-growing-businesses-part-3"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.8.23</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Real-time vs batch reconciliation: Practical patterns for keeping data in sync<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Real-time vs batch reconciliation: Practical patterns for keeping data in sync" title="Expand details for Real-time vs batch reconciliation: Practical patterns for keeping data in sync" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn effective data reconciliation strategies to keep product information synchronized between your internal systems and Stripe. Explore real-time vs batch processing tools, validation techniques, and best practices for maintaining consistent data across multiple platforms as your business scales.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/database-reconciliation-growing-businesses-part-3">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/database-reconciliation-growing-businesses-part-2"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.8.22</span></div><div class="text-md BlogListItem-module__QCnjCG__title">From naive webhooks to durable sync: Queue-based and event-driven data reconciliation patterns<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for From naive webhooks to durable sync: Queue-based and event-driven data reconciliation patterns" title="Expand details for From naive webhooks to durable sync: Queue-based and event-driven data reconciliation patterns" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn advanced database reconciliation patterns for Stripe integration. Explore queue-based architectures, event-driven sync, and robust error handling to maintain product data consistency at scale.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/database-reconciliation-growing-businesses-part-2">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/gating-entrances-with-stripe-and-nfc-passes"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.8.21</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Gating entrances with Stripe and NFC passes<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Gating entrances with Stripe and NFC passes" title="Expand details for Gating entrances with Stripe and NFC passes" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to gate physical entrances using Stripe subscriptions and NFC passes. This guide shows how to issue Apple/Google Wallet passes with PassNinja, integrate Stripe Checkout, and control door access with a Raspberry Pi and NFC reader.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Joshua Nussbaum</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/gating-entrances-with-stripe-and-nfc-passes">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/database-reconciliation-growing-businesses-part-1"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.8.21</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Keeping product data aligned with Stripe as your systems scale<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Keeping product data aligned with Stripe as your systems scale" title="Expand details for Keeping product data aligned with Stripe as your systems scale" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how product data synchronization between internal databases and payment providers like Stripe evolves from simple scripts to complex architectural challenges as your business scales from hundreds to millions of products.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/database-reconciliation-growing-businesses-part-1">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/guardrails-money-movement-integrating-stripe-mcp-portia-ai"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.8.13</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Guardrails for money movement: Integrating Stripe MCP with Portia AI<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Guardrails for money movement: Integrating Stripe MCP with Portia AI" title="Expand details for Guardrails for money movement: Integrating Stripe MCP with Portia AI" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to build secure AI agents for payment processing using Stripe MCP and Portia AI, with built-in guardrails and human approval workflows.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Mounir Mouawad<!-- -->, </span><span class="text-sm">Agentic</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/guardrails-money-movement-integrating-stripe-mcp-portia-ai">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-financial-operations-agents-hypermode-stripe"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.8.06</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Building financial operations agents with Hypermode and Stripe<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Building financial operations agents with Hypermode and Stripe" title="Expand details for Building financial operations agents with Hypermode and Stripe" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to build sophisticated financial operations agents using natural language with Hypermode and Stripe. Create AI agents that handle payments, process refunds, generate invoices, and automate complex financial workflows—no coding required.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">William Lyon</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Agentic Commerce</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-financial-operations-agents-hypermode-stripe">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/workflows-customize-objects-metadata"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.7.22</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Workflows: Automatically customize an object with metadata<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Workflows: Automatically customize an object with metadata" title="Expand details for Workflows: Automatically customize an object with metadata" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Workflow patterns provide repeatable solutions to common developer problems. This pattern helps automate customize a Stripe object with metadata.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ashley Ansari</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workflows</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/workflows-customize-objects-metadata">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/workflows-creating-early-fraud-alerts-for-streamlined-refunds"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.7.10</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Workflows: Creating early fraud alerts for streamlined refunds<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Workflows: Creating early fraud alerts for streamlined refunds" title="Expand details for Workflows: Creating early fraud alerts for streamlined refunds" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Workflow patterns provide repeatable solutions to common developer problems. This pattern helps automate creating early fraud alerts when streamlining refunds.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ashley Ansari</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workflows</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Fraud Detection</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/workflows-creating-early-fraud-alerts-for-streamlined-refunds">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-we-built-it-jurisdiction-resolution-for-stripe-tax"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.7.10</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How we built it: Jurisdiction resolution for Stripe Tax<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How we built it: Jurisdiction resolution for Stripe Tax" title="Expand details for How we built it: Jurisdiction resolution for Stripe Tax" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Our new jurisdiction resolution system (JRS) is a faster, less resource-intensive solution to the challenging problem of determining tax obligations in places with complicated, overlapping tax jurisdictions.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Erich Rentz<!-- -->, </span><span class="text-sm">Danko Komlen</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Tax</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-we-built-it-jurisdiction-resolution-for-stripe-tax">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/stripe-marketplaces-mapping-commercial-relationships-code"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.7.03</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stripe for marketplaces: Mapping commercial relationships in code<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stripe for marketplaces: Mapping commercial relationships in code" title="Expand details for Stripe for marketplaces: Mapping commercial relationships in code" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to use Stripe Connect to power your marketplace. Configure your fund flows, onboard merchants and manage payments in a few lines of code.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ana Andres</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/stripe-marketplaces-mapping-commercial-relationships-code">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/stay-within-limits-api-rate-limit-friendly-pattern-for-stripe-webhooks"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">
12025.7.03</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stay within limits: API rate-limit-friendly pattern for Stripe webhooks<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stay within limits: API rate-limit-friendly pattern for Stripe webhooks" title="Expand details for Stay within limits: API rate-limit-friendly pattern for Stripe webhooks" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to build a resilient, rate-limit-friendly system for handling Stripe webhooks at scale. This guide explains the fetch-before-process pattern, its risks under high volume, and how to use Hookdeck to queue and throttle webhooks—ensuring reliable processing without exceeding Stripe API limits.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Phil Leggetter</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/stay-within-limits-api-rate-limit-friendly-pattern-for-stripe-webhooks">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/connect-embedded-components-streamline-onboarding"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.7.02</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Using Connect embedded components to streamline your Connect onboarding flow<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Using Connect embedded components to streamline your Connect onboarding flow" title="Expand details for Using Connect embedded components to streamline your Connect onboarding flow" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Replace hosted onboarding with embedded Connect components. Keep users on your platform while collecting requirements and enabling payments..</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Jorge Aguirre Gonzalez<!-- -->, </span><span class="text-sm">Chris Streeter</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/connect-embedded-components-streamline-onboarding">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/implementing-scalable-metered-billing-with-stripe-how-edgee-handles-billions-of-events"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.6.24</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Implementing scalable metered billing with Stripe: How Edgee handles billions of events<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Implementing scalable metered billing with Stripe: How Edgee handles billions of events" title="Expand details for Implementing scalable metered billing with Stripe: How Edgee handles billions of events" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how Edgee built a scalable, usage-based billing system processing billions of requests across 100+ global edge locations. Learn how they leverage Stripe’s metering and billing APIs to ensure accurate, resilient invoicing in a complex distributed architecture, all while solving critical web analytics data loss challenges.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Alex Casalboni</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/implementing-scalable-metered-billing-with-stripe-how-edgee-handles-billions-of-events">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/stripe-terminal-on-screen-input-collection"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.6.12</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stop juggling multiple POS devices with Stripe Terminal<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stop juggling multiple POS devices with Stripe Terminal" title="Expand details for Stop juggling multiple POS devices with Stripe Terminal" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Eliminate separate devices and manual data entry. Stripe Terminal&#x27;s on-screen input collection consolidates customer interactions in one place.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Andrew Robinson</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Terminal</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/stripe-terminal-on-screen-input-collection">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/docusign-stripe-integration-automating-billing-workflows"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.6.02</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Extending Docusign with Stripe to automate complex billing workflows<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Extending Docusign with Stripe to automate complex billing workflows" title="Expand details for Extending Docusign with Stripe to automate complex billing workflows" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how to streamline your agreement process by connecting DocuSign with Stripe using extension apps. Learn to build automated billing workflows without complex coding.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Paige Rossi</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Partners</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/docusign-stripe-integration-automating-billing-workflows">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/sessions-2025-dev-track-resources"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.5.07</span></div><div class="text-md BlogListItem-module__QCnjCG__title">
1Sessions 2025 Developer Track resources<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Sessions 2025 Developer Track resources" title="Expand details for Sessions 2025 Developer Track resources" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover the latest from Stripe Sessions! Explore new products, APIs, and enhancements, including Stripe Workflows for no-code automation, MCP server for AI integration, and Accounts v2 for streamlined management.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ashley Ansari<!-- -->, </span><span class="text-sm">James Beswick<!-- -->, </span><span class="text-sm">Jon Byrum</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Announcements</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/sessions-2025-dev-track-resources">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/introducing-stripes-new-public-preview-release-channel"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.5.07</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Introducing Stripe&#x27;s new public preview release channel<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Introducing Stripe&#x27;s new public preview release channel" title="Expand details for Introducing Stripe&#x27;s new public preview release channel" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span>
1<p class="text-sm PostDetails-module__6PpOaq__summary">Discover the benefits of Stripe&#x27;s new public preview release channel, designed to provide early access to cutting-edge API features before their general availability. Start innovating faster with Stripe’s latest offerings while sharing your feedback to shape future developments!</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Paul Anderson</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Announcements</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/introducing-stripes-new-public-preview-release-channel">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/introducing-stripe-workflows"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.5.07</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Introducing Stripe Workflows: Tailoring Payments to Your Business Needs<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Introducing Stripe Workflows: Tailoring Payments to Your Business Needs" title="Expand details for Introducing Stripe Workflows: Tailoring Payments to Your Business Needs" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Today, Stripe launches Stripe Workflows, a powerful new way to automate your payment operations and orchestrate Stripe products with ease—right from the Dashboard. Whether you are looking to streamline invoicing, manage fraud detection, automate subscription logic, or build custom quote-to-cash flows, Stripe Workflows helps developers move faster with fewer lines of code. With built-in support for real-time triggers, conditional logic, and seamless integration across Stripe’s ecosystem, Workflows eliminates the need for managing infrastructure or writing boilerplate logic. Instead, you get a visual, event-driven automation engine designed for high-performance financial operations at scale. In this post, we’ll explore how Stripe Workflows can help you simplify complexity, boost developer productivity, and unlock new use cases—all with low latency and high reliability.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workflows</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/introducing-stripe-workflows">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-to-charge-customers-across-accounts"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.5.07</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How to easily charge customers across accounts in an organization<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How to easily charge customers across accounts in an organization" title="Expand details for How to easily charge customers across accounts in an organization" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to simplify customer charging across multiple accounts in your organization using Stripe&#x27;s new sharing feature.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Daniel Wood</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Enterprise</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-to-charge-customers-across-accounts">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/optimizing-stripe-api-performance-lambda-caching-elasticache-dynamodb"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.4.21</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Optimizing Stripe API performance in Lambda with caching strategies<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Optimizing Stripe API performance in Lambda with caching strategies" title="Expand details for Optimizing Stripe API performance in Lambda with caching strategies" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover advanced caching strategies to optimize Stripe API performance in AWS Lambda using Amazon ElastiCache and DynamoDB. Learn how to manage API rate limits, reduce latency, and minimize costs while ensuring data consistency and scalability in high-volume applications.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/optimizing-stripe-api-performance-lambda-caching-elasticache-dynamodb">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/because-nobody-likes-being-charged-twice"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.4.10</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Because nobody likes being charged twice<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Because nobody likes being charged twice" title="Expand details for Because nobody likes being charged twice" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">In complex, high-volume systems, even minor failures—like a dropped internet connection—can lead to major headaches, such as duplicate charges. This post explores advanced patterns for integrating Stripe into your enterprise applications with a focus on building fault-tolerant, user-friendly payment systems. Learn how strategies like idempotency and message queues can protect your users from double charges, reduce operational errors, and improve reliability as your system scales.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/because-nobody-likes-being-charged-twice">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/aws-microservice-architecture-subscription-management"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.4.08</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Using an AWS microservice architecture for subscription management<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Using an AWS microservice architecture for subscription management" title="Expand details for Using an AWS microservice architecture for subscription management" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Explore the complexities of enterprise subscription management and discover how an AWS microservice architecture can streamline subscription lifecycles. This guide uses AWS services to create a scalable, reliable, and auditable subscription management system, addressing challenges like mid-cycle plan changes and usage-based billing adjustments.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">
1James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/aws-microservice-architecture-subscription-management">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/unlock-powerful-analytics-stripe-data-pipeline-bigquery"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.3.21</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Unlocking powerful analytics with Stripe Data Pipeline and Google BigQuery<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Unlocking powerful analytics with Stripe Data Pipeline and Google BigQuery" title="Expand details for Unlocking powerful analytics with Stripe Data Pipeline and Google BigQuery" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how to integrate Stripe Data Pipeline with Google Cloud Storage and BigQuery for powerful analytics. This guide walks you through setting up automated data transfers, optimizing reporting, and unlocking valuable insights to enhance your business decisions.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Sushant Jain</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/unlock-powerful-analytics-stripe-data-pipeline-bigquery">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/stripes-ai-assistant-vs-code"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.3.18</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stripe’s new AI Assistant in VS Code<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stripe’s new AI Assistant in VS Code" title="Expand details for Stripe’s new AI Assistant in VS Code" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn about the Stripe AI assistant in VS Code and how we built it, including technical details on retrieval, evaluations, measurement, and more.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Mathew Varughese</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/stripes-ai-assistant-vs-code">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/real-time-payment-analytics-stripe-to-aws-data-pipeline"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.3.14</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Real-time payment analytics: Building a data pipeline from Stripe to AWS<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Real-time payment analytics: Building a data pipeline from Stripe to AWS" title="Expand details for Real-time payment analytics: Building a data pipeline from Stripe to AWS" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how to build a scalable real-time payment analytics pipeline from Stripe to AWS. This guide explores the challenges, architectural components, and implementation details to help businesses monitor transactions, enhance security, and gain insights into customer behavior.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/real-time-payment-analytics-stripe-to-aws-data-pipeline">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/load-balancing-stripe-api-calls-multiple-aws-regions"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.3.06</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Load balancing Stripe API calls from multiple AWS regions<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Load balancing Stripe API calls from multiple AWS regions" title="Expand details for Load balancing Stripe API calls from multiple AWS regions" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Implementing a resilient multi-region payment processing system using AWS and Stripe ensures reliable webhook handling, minimizes outages, and complies with regulations. This guide covers architecture design, challenges, and AWS service integration for optimal global performance and rate limit management.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/load-balancing-stripe-api-calls-multiple-aws-regions">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/importing-sales-data-from-stripe-into-aws"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.3.04</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Importing sales data from Stripe into AWS<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Importing sales data from Stripe into AWS" title="Expand details for Importing sales data from Stripe into AWS" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This article focuses on how to process Stripe&#x27;s data in your AWS account with minimal code. You&#x27;ll learn how to query your business and customer data using SQL, assisted by an LLM (Large Language Model) for query generation. Additionally, it demonstrates how to enhance the security of your data integration by using the native Stripe-AWS integration, specifically the Stripe Event Destination to Amazon EventBridge feature.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Hidetaka Okamoto</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/importing-sales-data-from-stripe-into-aws">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-serverless-usage-notification-with-aws"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.2.27</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Building serverless usage notification with AWS<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Building serverless usage notification with AWS" title="Expand details for Building serverless usage notification with AWS" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">In this article, we will guide you on how to set up usage threshold alerts based on consumption for customers with pay-as-you-go plans. By integrating AWS&#x27;s serverless tools with Stripe, you can create a streamlined and easy-to-manage notification system with minimal coding.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Hidetaka Okamoto</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-serverless-usage-notification-with-aws">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/securing-stripe-api-keys-aws-automatic-rotation"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.2.21</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Securing Stripe API Keys in AWS with automatic rotation<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Securing Stripe API Keys in AWS with automatic rotation" title="Expand details for Securing Stripe API Keys in AWS with automatic rotation" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn how to securely manage and automatically rotate your Stripe API keys in AWS for a production-grade approach. This guide covers best practices, tools, and strategies to enhance the security of your financial transactions.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Security</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/securing-stripe-api-keys-aws-automatic-rotation">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/tracking-customer-spend-omnich
1annel-multiprocessor-environment"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.2.19</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Tracking customer spend in an omnichannel or multiprocessor environment<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Tracking customer spend in an omnichannel or multiprocessor environment" title="Expand details for Tracking customer spend in an omnichannel or multiprocessor environment" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how to effectively track customer spending across multiple channels and payment processors. Learn about the challenges of fragmented payment systems and explore solutions like the Payment Account Reference (PAR) to gain a unified view.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Andrew Robinson</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Enterprise</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/tracking-customer-spend-omnich
1annel-multiprocessor-environment">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-solid-stripe-integrations-developers-guide-success"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.2.06</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Building rock-solid Stripe integrations: A developer&#x27;s guide to success<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Building rock-solid Stripe integrations: A developer&#x27;s guide to success" title="Expand details for Building rock-solid Stripe integrations: A developer&#x27;s guide to success" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Learn about Stripe integrations with essential tips for robust, secure payment systems and seamless user experiences. This guide prepares developers for real-world scenarios, from subscription management to dispute resolution, ensuring secure and seamless payments.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Getting Started</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-solid-stripe-integrations-developers-guide-success">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/building-resilient-webhook-handlers-aws-dlqs-stripe-events"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.1.30</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Building resilient webhook handlers in AWS: Implementing DLQs for Stripe events<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Building resilient webhook handlers in AWS: Implementing DLQs for Stripe events" title="Expand details for Building resilient webhook handlers in AWS: Implementing DLQs for Stripe events" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how to build reliable webhook handlers for Stripe events using AWS in this comprehensive guide. Learn about the challenges of processing webhook events at scale and how to address them with an enterprise-grade architecture.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/building-resilient-webhook-handlers-aws-dlqs-stripe-events">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/new-to-stripe-learn-key-concepts-software-developers"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2025.1.29</span></div><div class="text-md BlogListItem-module__QCnjCG__title">New to Stripe? Learn the key concepts for software developers.<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for New to Stripe? Learn the key concepts for software developers." title="Expand details for New to Stripe? Learn the key concepts for software developers." aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover the key concepts and terms for integrating Stripe in your applications. This guide covers Payment Intents Customer management, Subscription billing, Webhooks, Disputes, Refunds, and the benefits of expanded responses, providing developers with the tools they need to streamline payment processing efficiently.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Getting Started</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/new-to-stripe-learn-key-concepts-software-developers">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/testing-connect-onboarding-with-sandboxes"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.12.19</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Testing Connect onboarding with Sandboxes<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Testing Connect onboarding with Sandboxes" title="Expand details for Testing Connect onboarding with Sandboxes" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">As a platform, you can accelerate your Connect development with Sandboxes, by replicating your live settings to test out the merchant onboarding flow.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">David Edoh-Bedi</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/testing-connect-onboarding-with-sandboxes">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/crush-errors-with-sandbox-testing"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.12.19</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Crush errors with Sandbox testing<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Crush errors with Sandbox testing" title="Expand details for Crush errors with Sandbox testing" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">With Sandboxes, you can reproduce and troubleshoot errors in your integration without impacting live transactions.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">David Edoh-Bedi</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/crush-errors-with-sandbox-testing">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/developing-modern-architecture-energy-utilities-embedded-finance"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.12.17</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Developing a modern architecture for energy utilities with embedded finance<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Developing a modern architecture for energy utilities with embedded finance" title="Expand details for Developing a modern architecture for energy utilities with embedded finance" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This blog explores how utilities can enhance customer engagement and capture energy-related revenue by creating an online marketplace.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Rajan Patel</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/developing-modern-architecture-energy-utilities-embedded-finance">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-do-i-store-inventory-data-in-my-stripe-application"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.12.16</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How do I store inventory data in my Stripe application<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How do I store inventory data in my Stripe application" title="Expand details for How do I store inventory data in my Stripe application" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Explore the critical importance of managing real-time inventory updates for both online marketplaces and physical stores. This blog post details the development of an event-driven architecture designed to synchronize inventory levels with Stripe payment events using AWS cloud services. The demonstration centers around the DevRel Swag Store, showcasing a practical application used at the GOTO Chicago event, which integrates serverless technologies like Amazon DynamoDB, AWS Lambda, and IoT Core for efficient inventory management. Learn about the challenges of using Stripe metadata for inventory, and discover robust solutions for handling race conditions and implementing dynamic inventory checks. Additionally, understand the trade-offs between using Stripe Payment Links and custom payment processes for real-time stock validation.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-do-i-store-inventory-data-in-my-stripe-application">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/japan-community-highlights-2024-09"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.12.13</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Japan community highlights: Effective testing and security<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Japan community highlights: Effective testing and security" title="Expand details for Japan community highlights: Effective testing and security" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This article highlights development tips for efficiently developing and operating Stripe at a lower cost, as presented by the Japanese Stripe user community JP_Stripes. We&#x27;ll focus on content from two events held in September 2024 in Aizuwakamatsu, Fukushima Prefecture, and Sapporo, Hokkaido.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Hidetaka Okamoto</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Connect</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/japan-community-highlights-2024-09">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/enhance-your-monitoring-by-integrating-stripe-events-with-aws-cloudwatch-log-groups"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.12.09</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Enhance your monitoring by integrating Stripe events with AWS CloudWatch Log Groups<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Enhance your monitoring by integrating Stripe events with AWS CloudWatch Log Groups" title="Expand details for Enhance your monitoring by integrating Stripe events with AWS CloudWatch Log Groups" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Integrating Stripe events with AWS CloudWatch Log Groups enhances monitoring by enabling real-time tracking and analysis of Stripe transactions. This setup allows for seamless transfer of Stripe data to CloudWatch via Amazon EventBridge, streamlining payment operations. It provides the tools to visualize, monitor, and respond to events efficiently, optimizing strategic decisions.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Andrew Robinson</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/enhance-your-monitoring-by-integrating-stripe-events-with-aws-cloudwatch-log-groups">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/data-access-patterns-for-simple-stripe-Integrations"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.11.27</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Data access patterns for simple Stripe integrations<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Data access patterns for simple Stripe integrations" title="Expand details for Data access patterns for simple Stripe integrations" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Is your Stripe integration ready to scale with your application? In this blog post, explore smart data strategies to enhance performance and security. Learn how to leverage Stripe/&#x27;s features, secure web backends, and serverless functions for efficient data management. Discover when to integrate a global CDN and use a separate database for deeper data control, ensuring a seamless user experience.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/data-access-patterns-for-simple-stripe-Integrations">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/managing-multiple-stripe-test-environments-from-aws"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.11.26</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Managing multiple Stripe test environments from your AWS-hosted application<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Managing multiple Stripe test environments from your AWS-hosted application" title="Expand details for Managing multiple Stripe test environments from your AWS-hosted application" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe sandboxes enhance test environment management, offering improved functionality over test mode, allowing isolated accounts, multiple developers, and better access control while integrating seamlessly with AWS applications.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/managing-multiple-stripe-test-environments-from-aws">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/getting-started-with-stripe-in-the-uae"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.11.25</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Getting started with Stripe in the UAE: A comprehensive guide for developers<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Getting started with Stripe in the UAE: A comprehensive guide for developers" title="Expand details for Getting started with Stripe in the UAE: A comprehensive guide for developers" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe has emerged as a vital payment processing platform in the UAE, offering diverse features like automated billing, fraud protection, and multi-currency support, empowering developers to streamline e-commerce operations.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Soad Abuelnaga</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Getting Started</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/getting-started-with-stripe-in-the-uae">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/using-demo-data-for-testing-stripe-integrations-in-aws"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.11.22</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Using demo data for testing Stripe integrations in AWS-hosted applications<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Using demo data for testing Stripe integrations in AWS-hosted applications" title="Expand details for Using demo data for testing Stripe integrations in AWS-hosted applications" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This post discusses integrating the Stripe agent toolkit with large language models (LLMs) to enhance automation workflows, enabling financial services access, metered billing, and streamlined operations across agent frameworks.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/using-demo-data-for-testing-stripe-integrations-in-aws">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/avoiding-silent-errors"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.11.21</span></div><div class="text-md BlogListItem-module__QCnjCG__title">
1Avoiding silent errors in your Stripe integration<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Avoiding silent errors in your Stripe integration" title="Expand details for Avoiding silent errors in your Stripe integration" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Once your Stripe integration is live, it’s easy to set it and forget it. You can move on and focus on other elements of your application. However, trouble may be brewing behind the scenes. Unless you’ve set up robust logging and alerting in your application you may not be aware of increasing Stripe API error rates which could impact your bottom line</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Abe Haskins</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/avoiding-silent-errors">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/adding-payments-to-your-agentic-workflows"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.11.14</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Adding payments to your LLM agentic workflows<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Adding payments to your LLM agentic workflows" title="Expand details for Adding payments to your LLM agentic workflows" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span>
1<p class="text-sm PostDetails-module__6PpOaq__summary">This post discusses integrating the Stripe agent toolkit with large language models (LLMs) to enhance automation workflows, enabling financial services access, metered billing, and streamlined operations across agent frameworks.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Steve Kaliski</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Agentic Commerce</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AI</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/adding-payments-to-your-agentic-workflows">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/developing-and-investigating-subscription-data-flow"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.11.13</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Developing and investigating subscription data flow<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Developing and investigating subscription data flow" title="Expand details for Developing and investigating subscription data flow" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This article shows you how to use Stripe&#x27;s sandbox to simplify your development process. You&#x27;ll learn to create isolated test environments, simulate real-world scenarios, and debug your subscription logic efficiently. </p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Hidetaka Okamoto</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/developing-and-investigating-subscription-data-flow">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/managing-saas-access-control-with-stripe-entitlements-api"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.10.31</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Managing SaaS access control with Stripe’s Entitlements API<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Managing SaaS access control with Stripe’s Entitlements API" title="Expand details for Managing SaaS access control with Stripe’s Entitlements API" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This post introduces how to manage SaaS feature entitlements efficiently using the Stripe API. It explains why it&#x27;s important to provide multiple plans to your customers and how to differentiate each plan through entitlement management. With the Stripe API, managing entitlements can become more straightforward, allowing you to focus on building and improving your core services.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Hidetaka Okamoto</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/managing-saas-access-control-with-stripe-entitlements-api">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/growing-your-stripe-integration-with-event-destinations"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.10.31</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Growing your Stripe integration With Event Destinations<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Growing your Stripe integration With Event Destinations" title="Expand details for Growing your Stripe integration With Event Destinations" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Event Destinations has begun rolling out to general availability as of 10/30 and will soon be enabled for all accounts. This post explores how to use Stripe Event Destinations and Amazon EventBridge to achieve near infinite customization possibilities for your payment solutions without disrupting your existing integrations.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Event Destinations</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/growing-your-stripe-integration-with-event-destinations">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/prepare-for-api-upgrades"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">
12024.10.24</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Preparing for Stripe API upgrades<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Preparing for Stripe API upgrades" title="Expand details for Preparing for Stripe API upgrades" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">New Stripe API versions come with new, and sometimes breaking, changes which should be evaluated before upgrading. Stripe Sandboxes and Workbench provide tooling to create isolated workspaces to test applications against these new changes.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Cecil Phillip</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/prepare-for-api-upgrades">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/optimize-payment-flow-reduce-complexity-stripe-ab-testing"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.10.23</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Optimize payment flow while reducing code complexity with Stripe&#x27;s A/B Testing<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Optimize payment flow while reducing code complexity with Stripe&#x27;s A/B Testing" title="Expand details for Optimize payment flow while reducing code complexity with Stripe&#x27;s A/B Testing" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span>
1<p class="text-sm PostDetails-module__6PpOaq__summary">This post explores how to leverage Stripe&#x27;s A/B testing, its benefits, and how you can use it to boost online sales. You can learn how to improve the conversion rate by optimizing payment options without adding further code.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Hidetaka Okamoto</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/optimize-payment-flow-reduce-complexity-stripe-ab-testing">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/easily-debug-your-3ds-authentication-with-stripe-workbench"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.10.22</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Easily debug your 3DS authentication with Stripe Workbench<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Easily debug your 3DS authentication with Stripe Workbench" title="Expand details for Easily debug your 3DS authentication with Stripe Workbench" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">In this article, you&#x27;ll learn how to investigate the payment process with just a few clicks on the Stripe dashboard. You&#x27;ll also see how to obtain event data for testing code related to the 3DS authentication flow.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Hidetaka Okamoto</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/easily-debug-your-3ds-authentication-with-stripe-workbench">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/creating-reusable-dev-environments-with-sandboxes"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.10.20</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Creating reusable developer environments with Stripe Sandboxes<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Creating reusable developer environments with Stripe Sandboxes" title="Expand details for Creating reusable developer environments with Stripe Sandboxes" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">When onboarding new team members, getting their development environments setup can be very time consuming. Preprovisioned environments with Stripe sandboxes and development containers can speed up their time to productivity.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Cecil Phillip</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/creating-reusable-dev-environments-with-sandboxes">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/testing-subscriptions-with-stripe-test-clocks-and-workbench"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.10.14</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Testing subscriptions with Stripe Test Clocks and Workbench<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Testing subscriptions with Stripe Test Clocks and Workbench" title="Expand details for Testing subscriptions with Stripe Test Clocks and Workbench" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Validating payment logic that gets triggered over a period of time is challenging and sometimes results in inelegant solutions.The combination of test clocks and workbench will improve the ability for developers to build and debug recurring payments.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Cecil Phillip</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/testing-subscriptions-with-stripe-test-clocks-and-workbench">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/choosing-the-right-sandbox-strategy-for-your-organization"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.9.26</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Choosing the right sandbox strategy for your organization<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Choosing the right sandbox strategy for your organization" title="Expand details for Choosing the right sandbox strategy for your organization" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe Sandboxes offer a powerful solution for isolating testing environments, but how you implement them can make all the difference. Pick a sandbox strategy that best suits your organizations development approach and team size.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/choosing-the-right-sandbox-strategy-for-your-organization">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/upgrading-your-stripe-plugin-security"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.9.19</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Upgrading your Stripe plugin security<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Upgrading your Stripe plugin security" title="Expand details for Upgrading your Stripe plugin security" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Secure your Stripe integrations by ditching unrestricted secret keys—learn how to protect merchant accounts with restricted access API keys and OAuth 2.0, and avoid compliance fees.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Security</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/upgrading-your-stripe-plugin-security">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/avoiding-test-mode-tangles-with-stripe-sandboxes"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.9.16</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Avoiding test mode tangles with Stripe Sandboxes<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Avoiding test mode tangles with Stripe Sandboxes" title="Expand details for Avoiding test mode tangles with Stripe Sandboxes" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Discover how to create independent testing environments with Stripe Sandboxes, streamline your development through GitHub automation, and prioritize the security of your API keys to enhance your payment integration process.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Sandboxes</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/avoiding-test-mode-tangles-with-stripe-sandboxes">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/advanced-error-handling-patterns-for-Stripe-enterprise-developers"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.9.03</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Advanced error handling patterns for Stripe enterprise developers<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Advanced error handling patterns for Stripe enterprise developers" title="Expand details for Advanced error handling patterns for Stripe enterprise developers" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This post demonstrates some more advanced patterns to help you build resilient and robust payment systems to integrate Stripe with your enterprise applications. As your integration grows in complexity and volume, these patterns become crucial for maintaining system stability and providing a smooth user experience.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Enterprise</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/advanced-error-handling-patterns-for-Stripe-enterprise-developers">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/simple-error-handling-strategies-with-stripe-workbench"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.9.02</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Simple error handling strategies with Stripe Workbench<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Simple error handling strategies with Stripe Workbench" title="Expand details for Simple error handling strategies with Stripe Workbench" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">With Workbench, developers now have a bird’s-eye view of their integration which shows many potential issues in one place. This makes it easier to see the impact of each incident, see how often it’s happening, and receive actionable advice for resolving the issue.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/simple-error-handling-strategies-with-stripe-workbench">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/stripe-developer-digest-august-2024-workbench-is-now-available-to-everyone"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.8.30</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stripe Developer Digest (August 2024): Workbench is now available to everyone<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stripe Developer Digest (August 2024): Workbench is now available to everyone" title="Expand details for Stripe Developer Digest (August 2024): Workbench is now available to everyone" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Test Stripe functionality in an isolated environment</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Stripe Team</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Announcements</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/stripe-developer-digest-august-2024-workbench-is-now-available-to-everyone">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/debugging-your-stripe-invoicing-integration-with-wor
1kbench"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.8.29</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Debugging your Stripe Invoicing integration with Workbench<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Debugging your Stripe Invoicing integration with Workbench" title="Expand details for Debugging your Str
1ipe Invoicing integration with Workbench" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">With Stripe Invoicing, you can create and manage invoices for one-time and recurring payments. Whether caused by infrastructure issues or coding bugs, integration failures do sometimes happen, which can prevent invoices from being paid in a timely manner.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">David Edoh-Bedi</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/debugging-your-stripe-invoicing-integration-with-workbench">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/bringing-your-stripe-objects-to-life-with-wor
1kbench"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.8.29</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Bringing your Stripe objects to life with Workbench<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Bringing your Stripe objects to life with Workbench" title="Expand details for Bringing your Str
1ipe objects to life with Workbench" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This post shows how to use the Stripe Workbench Inspector to examine the lifecycle of a PaymentIntent object.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Smith</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/bringing-your-stripe-objects-to-life-with-wor
1kbench">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/peeking-under-the-hood-of-stripe-invoicing"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.8.26</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Peeking under the hood of Stripe Invoicing<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Peeking under the hood of Stripe Invoicing" title="Expand details for Peeking under the hood of Stripe Invoicing" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe Invoicing offers a no-code solution for sending invoices to customers. Because this option handles the complexity of all underlying API calls, developers sometimes struggle to understand the different phases a Stripe invoice goes through, which is problematic when attempting to debug payment failures. </p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">David Edoh-Bedi</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/peeking-under-the-hood-of-stripe-invoicing">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/observing-immediate-versus-delayed-payments-with-stripe-workbench"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.8.23</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Observing immediate versus delayed payments with Stripe Workbench<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Observing immediate versus delayed payments with Stripe Workbench" title="Expand details for Observing immediate versus delayed payments with Stripe Workbench" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Immediate and delayed payments need to be handled differently within an integration. It’s important to understand what events to listen for and properties to inspect for relevant changes.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Cecil Phillip</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/observing-immediate-versus-delayed-payments-with-stripe-workbench">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/resolving-production-issues-in-your-aws-stripe-integration-using-workbench"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.8.21</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Resolving production issues in your AWS/Stripe integration using Workbench<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Resolving production issues in your AWS/Stripe integration using Workbench" title="Expand details for Resolving production issues in your AWS/Stripe integration using Workbench" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This blog shows how to find when something is wrong in production, avoid jumping between tabs/docs to find information, and resolving issues quickly in the troubleshooting process, using an AWS integration as a starting point.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/resolving-production-issues-in-your-aws-stripe-integration-using-workbench">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/debugging-your-aws-stripe-integration-just-got-easier"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.8.21</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Debugging your AWS/Stripe integration just got easier<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Debugging your AWS/Stripe integration just got easier" title="Expand details for Debugging your AWS/Stripe integration just got easier" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">For developers building on AWS, you have various choices for processing payments within your application. Most developers choose a payment processing service to handle this part of their application flow, which involves integrating with a third-party vendor outside of the AWS environment.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">James Beswick</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">AWS</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/debugging-your-aws-stripe-integration-just-got-easier">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/doing-more-with-less-reducing-requests-to-the-stripe-api"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.8.19</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Doing more with less: Reducing requests to the Stripe API<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Doing more with less: Reducing requests to the Stripe API" title="Expand details for Doing more with less: Reducing requests to the Stripe API" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">The performance of an application can directly affect the customer experience. Using the expand feature along with caching techniques, developers can improve the performance of their application by reducing the number of API calls to Stripe.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Cecil Phillip</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Workbench</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Best Practices</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/doing-more-with-less-reducing-requests-to-the-stripe-api">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/stripe-developer-digest-june-2024-join-the-sandboxes-private-beta"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.6.30</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stripe Developer Digest (June 2024): Join the Sandboxes private beta<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stripe Developer Digest (June 2024): Join the Sandboxes private beta" title="Expand details for Stripe Developer Digest (June 2024): Join the Sandboxes private beta" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Test Stripe functionality in an isolated environment</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Stripe Team</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topic:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Announcements</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/stripe-developer-digest-june-2024-join-the-sandboxes-private-beta">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-stripes-document-databases-supported-99.999-uptime-with-zero-downtime-data-migrations"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.6.06</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How Stripe’s document databases supported 99.999% uptime with zero-downtime data migrations <span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How Stripe’s document databases supported 99.999% uptime with zero-downtime data migrations " title="Expand details for How Stripe’s document databases supported 99.999% uptime with zero-downtime data migrations " aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">In this blog post we’ll share an overview of Stripe’s database infrastructure and discuss the design and application of the Data Movement Platform.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Authors:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Jimmy Morzaria<!-- -->, </span><span class="text-sm">Suraj Narkhede</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">
1Infrastructure</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-stripes-document-databases-supported-99.999-uptime-with-zero-downtime-data-migrations">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/test-clocks-how-we-made-it-easier-to-test-stripe-billing-integrations"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.5.09</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Test clocks: How we made it easier to test Stripe Billing integrations<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Test clocks: How we made it easier to test Stripe Billing integrations" title="Expand details for Test clocks: How we made it easier to test Stripe Billing integrations" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe Billing allows businesses to manage customer relationships with recurring payments, usage triggers, and other customizable features.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ji Huang</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Billing</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Testing</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/test-clocks-how-we-made-it-easier-to-test-stripe-billing-integrations">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/shepherd-how-stripe-adapted-chronon-to-scale-ml-feature-development"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.4.15</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Shepherd: How Stripe adapted Chronon to scale ML feature development <span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Shepherd: How Stripe adapted Chronon to scale ML feature development " title="Expand details for Shepherd: How Stripe adapted Chronon to scale ML feature development " aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">This blog discusses the technical details of how we built Shepherd and how we are expanding the capabilities of Chronon to meet Stripe’s scale.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ben Mears</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Machine Learning</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">
1Infrastructure</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Open Source</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Fraud Detection</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/shepherd-how-stripe-adapted-chronon-to-scale-ml-feature-development">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/ledger-stripe-system-for-tracking-and-validating-money-movement"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2024.2.16</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Ledger: Stripe’s system for tracking and validating money movement <span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Ledger: Stripe’s system for tracking and validating money movement " title="Expand details for Ledger: Stripe’s system for tracking and validating money movement " aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Technical details on how Stripe built Ledger, a state-of-the-art money movement tracking system, including how teams at Stripe interact with the data quality metrics that underlie our payment processing network.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ilya Ganelin</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">
1Infrastructure</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/ledger-stripe-system-for-tracking-and-validating-money-movement">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/how-we-built-it-stripe-radar"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2023.3.29</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How we built it: Stripe Radar<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How we built it: Stripe Radar" title="Expand details for How we built it: Stripe Radar" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">What makes Radar, Stripe’s fraud prevention solution, so powerful? Here are some of the key decisions made—and lessons learned—in the years it has taken to build it.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ryan Drapeau</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Machine Learning</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Fraud Detection</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Security</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/how-we-built-it-stripe-radar">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/markdoc"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2022.9.13</span></div><div class="text-md BlogListItem-module__QCnjCG__title">How Stripe builds interactive docs with Markdoc<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for How Stripe builds interactive docs with Markdoc" title="Expand details for How Stripe builds interactive docs with Markdoc" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Markdoc delivers a good user experience without compromising the authoring experience. It enables writers to express interactivity and simple page logic without mixing code and content.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Ryan Paul</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Open Source</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/markdoc">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/migrating-to-typescript"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2022.5.20</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Migrating millions of lines of code to TypeScript<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Migrating millions of lines of code to TypeScript" title="Expand details for Migrating millions of lines of code to TypeScript" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">On Sunday, March 6, we migrated we converted more than 3.7 million lines of code with a single pull request. The next day, hundreds of engineers came in to start writing TypeScript for their projects.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Andrew Lunny</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Open Source</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/migrating-to-typescript">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/fast-secure-builds-choose-two"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2022.5.04</span></div><div class="text-md BlogListItem-module__QCnjCG__title">
1Fast builds, secure builds. Choose two<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Fast builds, secure builds. Choose two" title="Expand details for Fast builds, secure builds. Choose two" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe&#x27;s continuous integration system is responsible for orchestrating build pipelines and executing tens of thousands of test suites. To meet our exceptionally high security bar, we lean on a combination of open-source tech and novel engineering.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Sushain Cherivirala</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">
1Infrastructure</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/fast-secure-builds-choose-two">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/sorbet-stripes-type-checker-for-ruby"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2022.3.28</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Sorbet: Stripe’s type checker for Ruby<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Sorbet: Stripe’s type checker for Ruby" title="Expand details for Sorbet: Stripe’s type checker for Ruby" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Stripe uses Sorbet to type check our 15 million lines of Ruby code, making engineers more productive. Here&#x27;s why we love Sorbet.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Jake Zimmerman</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Developer Productivity</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Open Source</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/sorbet-stripes-type-checker-for-ruby">Read</a></div></li><li class="ListItem-module__kBFJiq__listItem"><div class="BlogListItem-module__QCnjCG__visible"><a class="BlogListItem-module__QCnjCG__listLink" target="_self" href="/blog/payment-api-design"><div class="BlogListItem-module__QCnjCG__date"><div class="SquareIcon-module__6K7DfG__icon"></div><span class="text-smallcaps">2020.12.15</span></div><div class="text-md BlogListItem-module__QCnjCG__title">Stripe’s payments APIs: The first 10 years<span class="BlogListItem-module__QCnjCG__hoverArrow"><svg viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="5" width="1" height="1" fill="currentColor"></rect><rect x="1" y="4" width="1" height="1" fill="currentColor"></rect><rect x="2" y="3" width="1" height="1" fill="currentColor"></rect><rect x="3" y="2" width="1" height="1" fill="currentColor"></rect><rect x="4" y="1" width="1" height="1" fill="currentColor"></rect><rect x="5" width="1" height="6" fill="currentColor"></rect><rect width="6" height="1" fill="currentColor"></rect></svg></span></div></a><button class="BlogListItem-module__QCnjCG__toggleButton" type="button" aria-label="Expand details for Stripe’s payments APIs: The first 10 years" title="Expand details for Stripe’s payments APIs: The first 10 years" aria-controls="collapsible" aria-expanded="false" id="toggle-collapsible"><svg class="AccordionButton-module__FEEb1G__button" width="10" height="10" viewB
1ox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M 0 5 L 10 5" stroke="currentColor" stroke-width="1"></path><path class="AccordionButton-module__FEEb1G__verticalPath" d="M 5 0 L 5 10" stroke="currentColor" stroke-width="1"></path></svg></button></div><div class="BlogListItem-module__QCnjCG__inner" aria-hidden="true" id="collapsible"><div class="BlogListItem-module__QCnjCG__spacer"></div><span class="text-smallcaps PostDetails-module__6PpOaq__summaryLabel">Summary:</span><p class="text-sm PostDetails-module__6PpOaq__summary">Abstracting away the complexity of payments has driven the evolution of our APIs over the last decade. Learn more about Stripe payments APIs here.</p><span class="text-smallcaps PostDetails-module__6PpOaq__authorsLabel">Author:</span><div class="PostDetails-module__6PpOaq__authors"><span class="text-sm">Michelle Bu</span></div><div class="text-smallcaps PostDetails-module__6PpOaq__topicsLabel">Topics:</div><ul class="PostDetails-module__6PpOaq__topics"><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Engineering</div></li><li><div class="text-smallcaps Tag-module__zQcxqq__tag">Payments</div></li></ul><a class="buttonMd PostDetails-module__6PpOaq__link" target="_self" href="/blog/payment-api-design">Read</a></div></li></ul></div></section><section class="section-module__Yglhya__section Footer-module__Grjkva__section"><div class="Footer-module__Grjkva__backgroundIcons"><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg></div><div class="Footer-module__Grjkva__docsSection"><div class="TableHeader-module__qdaoaq__label Footer-module__Grjkva__docsLabel text-smallcaps"><span>/</span>Docs</div><p class="text-sm Footer-module__Grjkva__docsDescription">Explore our guides and examples to integrate Stripe.</p><a target="_blank" class="buttonSm Footer-module__Grjkva__docsButton" href="https://docs.stripe.com">Learn more</a></div><div class="Footer-module__Grjkva__linksSection"><div class="TableHeader-module__qdaoaq__label Footer-module__Grjkva__linksLabel text-smallcaps"><span>/</span>Social</div><div class="Footer-module__Grjkva__linkList"><a href="https://www.youtube.com/stripedevelopers" class="text-smallcaps Tag-module__zQcxqq__tag" target="_blank">Youtube</a>
1<a href="https://x.com/stripedev" class="text-smallcaps Tag-module__zQcxqq__tag" target="_blank">Twitter/X</a><a href="https://discord.com/channels/841573134531821608/841573134531821612" class="text-smallcaps Tag-module__zQcxqq__tag" target="_blank">Discord</a></div><div class="TableHeader-module__qdaoaq__label Footer-module__Grjkva__resourcesLabel text-smallcaps"><span>/</span>Resources</div><div class="Footer-module__Grjkva__linkList"><a href="https://docs.stripe.com" class="text-smallcaps Tag-module__zQcxqq__tag" target="_blank">Docs</a><a href="https://www.meetup.com/pro/stripe/" class="text-smallcaps Tag-module__zQcxqq__tag" target="_blank">Developer Meetups</a></div></div><div class="Footer-module__Grjkva__backgroundIcons Footer-module__Grjkva__backgroundIconsSecondRow"><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg></div><div class="Footer-module__Grjkva__copyright"><div class="GlobeIcon-module__AdM6KG__icon"><canvas class="GlobeIcon-module__AdM6KG__ellipseCanvas"></canvas><svg width="85" height="42" viewBox="0 0 83 42" fill="none"><circle cx="63" cy="21" r="19.5" stroke="var(--globeGraphicColor)"></circle><circle cx="19.5" cy="21" r="19.5" stroke="var(--globeGraphicColor)"></circle><path d="M3.5 9.75 35 9.75" stroke="var(--globeGraphicColor)"></path><path d="M0 21 39 21" stroke="var(--globeGraphicColor)"></path><path d="M3 32 35 32.5" stroke="var(--globeGraphicColor)"></path><path d="M54.096 16.056H57.948V16.788H58.68V17.532H59.424V24.336H58.68V25.08H57.948V25.836H54.096V16.056ZM57.816 24.948V24.216H58.56V17.664H57.816V16.92H54.984V24.948H57.816ZM60.336 16.056H65.664V16.92H61.224V20.496H64.92V21.372H61.224V24.948H65.664V25.836H60.336V16.056ZM68.076 22.116H67.332V19.152H66.576V16.056H67.464V19.02H68.196V21.984H68.94V24.216H69.552V21.984H70.296V19.02H71.04V16.056H71.904V19.152H71.16V22.116H70.428V24.336H69.684V25.836H68.808V24.336H68.076V22.116Z" fill="var(--globeGraphicColor)"></path></svg></div><span class="text-smallcaps">© <!-- -->2026<!-- --> Stripe, Inc.</span></div><div class="Footer-module__Grjkva__miscList Footer-module__Grjkva__linkList"><a href="https://stripe.com/privacy" class="text-smallcaps Tag-module__zQcxqq__tag" target="_blank">Privacy</a><a href="https://stripe.com/legal" class="text-smallcaps Tag-module__zQcxqq__tag" target="_blank">Legal</a><a href="https://stripe.com" class="text-smallcaps Tag-module__zQcxqq__tag" target="_blank">Stripe.com</a></div><div class="Footer-module__Grjkva__backgroundIcons">
1<svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg><svg class="Footer-module__Grjkva__backgroundIcon BackgroundIcon-module__GtvU_G__icon" width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 4.5V8H4.5V4.5H8V3.5H4.5V0H3.5V3.5H0V4.5H3.5Z" fill="currentColor"></path></svg></div></section><div class="Console-module__X7eFnq__viewport"></div></div><div class="EndlessFooter-module__1AI9IW__footer"><canvas class="EndlessFooter-module__1AI9IW__canvas"></canvas></div><!--$--><!--/$--></main></div>
1<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"posts":[{"slug":"stripes-payment-method-factory-orchestrating-agents-for-repeated-custom-integrations","authorBio":"","title":"Stripe’s Payment Method Factory: Orchestrating agents for repeated, custom integrations","summary":"Stripe built an agentic payment method factory from over 100 reusable prompts, hardened by agents observing implementation runs, and kept them current by feeding back each run's learnings.","authors":["David Dunne","Xenofon Vourliotis","Sai Samant"],"date":"2026-09-30","location":[],"type":"Blog","topics":["Engineering","AI"],"artConfig":{"ampX":1.108349706120789,"ampY":0.9809320110790432,"aspectRatio":2.0819042240474372,"axis":"xy","lump":-0.5666931442916393,"count":65,"freq":1.2333991674780846,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-50,"mouseX":0.19688519865926357,"mouseY":0.8625176729662344,"noise":0.05828166402876377,"scale":0.2046110295653345,"shape":"ellipse","top":-54,"twirl":0.1334921052083373,"twist":-2.35388991124928,"velocity":1.1585699995607137,"isBalls":false,"isMatrix":false,"kaleids":6.220365716852248}},{"slug":"how-stripe-is-designing-checkout-for-ai-agents","authorBio":"","title":"How Stripe is designing Checkout for AI agents","summary":"How Stripe used WebMCP to accelerate agent purchases from the browser.","authors":["Cara Mecozzi","Steve Kaliski"],"date":"2026-09-22","location":[],"type":"Blog","topics":["Engineering","AI"],"artConfig":{"ampX":0.12984244818985463,"ampY":0,"aspectRatio":2.895486147847399,"axis":"x","lump":1.543369019597769,"count":107,"freq":0.4,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":4,"mouseX":0.913994096243754,"mouseY":0.91,"noise":0,"scale":0.4765875768065453,"shape":"ellipse","top":-58,"twirl":0.31475135089457035,"twist":8.725786664918067,"velocity":1.807551354855299,"isBalls":false,"isMatrix":false,"kaleids":7.553478290326893}},{"slug":"building-custom-financial-reconciliation-workflows-with-stripe","authorBio":"","title":"Building custom financial reconciliation workflows with Stripe","summary":"Stripe’s next generation of reporting APIs are focused on enterprise scalability, and this post shows you how to use them in your financial reporting infrastructure.","authors":["Maia Robinson"],"date":"2026-09-18","location":[],"type":"Blog","topics":["Best Practices","Enterprise","Infrastructure","Workflows"],"artConfig":{"ampX":0.32707809510827063,"ampY":0.45144533874467013,"aspectRatio":1.9493734171068295,"axis":"x","lump":2.0192238207533957,"count":136,"freq":1.5013935489952563,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":23,"mouseX":0.96,"mouseY":0.7909369524959475,"noise":0,"scale":1.3593780590742826,"shape":"ellipse","top":-58,"twirl":0.28392300506681206,"twist":12.549773386321963,"velocity":2.1734545307420197,"isBalls":false,"isMatrix":false,"kaleids":7.003003810718655}},{"slug":"harbor-stripes-ai-assisted-prototyping-tool","authorBio":"","title":"Harbor: Stripe’s AI-assisted prototyping tool","summary":"Harbor is the internal tool Stripe teams use to prototype with an AI agent. This post covers how it compiles prototypes in the browser, how the agent inspects its own work, and how comments stay anchored when the page is rewritten.","authors":["Cristian Rivera","Sai Samant"],"date":"2026-09-14","location":[],"type":"Blog","topics":["AI","Developer Productivity","Engineering"],"artConfig":{"ampX":0.02150250486284494,"ampY":0.09310752179846166,"aspectRatio":1.896440603828244,"axis":"x","lump":-0.7290447992905975,"count":65,"freq":2.695162442937493,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-59,"mouseX":0.2675437400490045,"mouseY":0.8336253919247538,"noise":0.021614458426833183,"scale":0.6561901813149452,"shape":"ellipse","top":13,"twirl":0.0695695403367281,"twist":-3.6,"velocity":1.2329336724672466,"isBalls":false,"isMatrix":false,"kaleids":3.3444452967494724}},{"slug":"what-if-stripe-could-work-the-way-your-business-does","authorBio":"","title":"What if Stripe could work the way your business does","summary":"Discover how Stripe Scripts, Workflows, Custom Objects, and UI extensions help businesses customize logic, data, and operations directly within Stripe.","authors":["Ben Smith"],"date":"2026-09-07","location":[],"type":"Blog","topics":["Workflows","Extensibility","Billing"],"artConfig":{"ampX":1.9133890583366155,"ampY":0.8160192918032407,"aspectRatio":0.5478517128219828,"axis":"x","lump":0.1305007289238274,"count":26,"freq":1.1332373580485582,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-120,"mouseX":0.4855219027794898,"mouseY":0.623992763819173,"noise":3.3,"scale":0.9752996436655522,"shape":"ellipse","top":-36,"twirl":0.12869633071124553,"twist":14.523949545376002,"velocity":0.7728906567841768,"isBalls":true,"isMatrix":true}},{"slug":"ai-didnt-write-our-sdk-it-changed-how-we-built-it","authorBio":"","title":"AI didn't write our SDK. It changed how 
1we built it.","summary":"AI was involved at every stage of building Stripe's extensibility SDK, but the story isn't that it wrote code faster. Here's how prototypes, agent-drafted specs, and persistent guidance got ideas into reviewable shape sooner.","authors":["Mike North"],"date":"2026-08-28","location":[],"type":"Blog","topics":["AI","Best Practices","featured"],"artConfig":{"ampX":0.9855847194418311,"ampY":0.8361296006143093,"aspectRatio":1.2415166240219027,"axis":"x","lump":0.660827196996659,"count":51,"freq":1.1890387553721666,"isDial":true,"isLineart":false,"isRing":false,"isSpiral":false,"left":-13,"mouseX":0.7535837505247445,"mouseY":0.3963832869073376,"noise":0.3840445221830159,"scale":1.0265785826742648,"shape":"ellipse","top":10,"twirl":0.04393045560270549,"twist":3.8347877557501198,"velocity":2.040423086600378}},{"slug":"building-a-data-plane-from-scratch-stripes-own-high-performance-distributed-proxy","authorBio":"","title":"Building a data plane from scratch: Stripe’s own high-performance distributed proxy","summary":"To minimize failed payments for our users, Stripe targets 99.9995% reliability.  As traffic grew beyond 1.6% of global GDP, this put intense strain on the service mesh.  This is the story of the infrastructure team replacing Envoy, a popular solution, with an alternative architecture.","authors":["Jack Loughran","Cara Mecozzi"],"date":"2026-08-26","location":[],"type":"Blog","topics":["Engineering","Infrastructure"],"artConfig":{"ampX":0.34922884912043817,"ampY":0.366142391782254,"aspectRatio":3.5991310963975267,"axis":"xy","lump":0.33172155507281426,"count":70,"freq":0.4,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":true,"left":4,"mouseX":0.5866846039371565,"mouseY":0.13641974309831856,"noise":0.08586734730005265,"scale":6.598315318033099,"shape":"rect","top":12,"twirl":0,"twist":1.4917267701253296,"velocity":2.061707329314202}},{"slug":"helping-ai-built-payment-integration-understand-business-intent","authorBio":"","title":"Reading the signals: Helping your AI-built payment integration understand business intent","summary":"The low-level code that makes a payment go through is getting cheap, fast. What is becoming valuable is the judgment above it: knowing what the money is supposed to do and making sure the code obeys it.","authors":["David Benchi"],"date":"2026-08-14","location":[],"type":"Blog","topics":["AI","featured","Payments"],"artConfig":{"ampX":1.1802767815068365,"ampY":1.04543959941715,"aspectRatio":2.2132197364812716,"axis":"x","lump":0.4280701804384589,"count":52,"freq":1.5133290976583957,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-20,"mouseX":0.7648399203095585,"mouseY":0.36289067409280684,"noise":0,"scale":1.7184825410693882,"shape":"ellipse","top":-13,"twirl":0.13161323622614146,"twist":11.091827599681913,"velocity":0.748455335373059}},{"slug":"pass-network-costs-to-your-connected-accounts","authorBio":"","title":"From charging a blended rate to IC++: pass network costs to your connected accounts","summary":"SaaS platforms don't fit a single mold when it comes to payments pricing. An early-stage vertical software company needs simple, flexible tools to experiment and iterate. A platform moving upmarket needs granular cost control and the ability to offer sophisticated pricing to enterprise customers. And as AI features reshape how platforms monetize, that diversity is only going to increase.","authors":["Safia El Bayed"],"date":"2026-08-10","location":[],"type":"Blog","topics":["Connect"],"artConfig":{"ampX":1.837328277476132,"ampY":0.3226800863929093,"aspectRatio":5,"axis":"xy","lump":-0.2766376358158886,"count":6,"freq":2.8106744187772272,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":1,"mouseX":0.4417222055330873,"mouseY":0.5193734257612377,"noise":0,"scale":3.175974424853921,"shape":"rect","top":11,"twirl":0.15725247528403996,"twist":12.233351287640632,"velocity":1.1027417841870337}},{"slug":"agentic-payments-for-marketplaces","authorBio":"","title":"Agentic payments for marketplaces: How a smart fridge can shop safely","summary":"While a smart fridge can detect when a household is running out of milk, the more interesting engineering problem begins after that.","authors":["Ana Andres"],"date":"2026-08-07","location":[],"type":"Blog","topics":["Agentic Commerce","featured"],"artConfig":{"ampX":2,"ampY":0.7783975968249143,"aspectRatio":1.097214935158752,"axis":"x","lump":0.4949384465590119,"count":101,"freq":5.288303373768925,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":5,"mouseX":0.3466461931204423,"mouseY":0.5766893312651664,"noise":0,"scale":1.0045796439945698,"shape":"ellipse","top":-5,"twirl":0.18160004455596207,"twist":45.9820934317857,"velocity":0.8762146667912603}},{"slug":"meet-stripes-knowledge-ai-platform","authorBio":"","title":"Meet Str
1ipe's Knowledge AI Platform","summary":"Stripe's Knowledge AI Platform is our versatile AI agent platform built to handle diverse non-coding knowledge work, from quick queries to complex, multi-day projects. By connecting employees to over 1,000 internal tools and skills, it enables secure, enterprise-scale productivity across the organization.","authors":["Anna Mason","Sharadh Krishnamurthy","Anupam Upadhyay"],"date":"2026-07-30","location":[],"type":"Blog","topics":["Engineering","AI","featured"],"artConfig":{"ampX":0.45312970344722275,"ampY":0.6594387119449675,"aspectRatio":3.640611987476796,"axis":"xy","lump":0.6013426144607366,"count":104,"freq":0.501017894551158,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":true,"left":-23,"mouseX":0.5907904613740742,"mouseY":0.1359473072765395,"noise":0.3699935179296881,"scale":7.06511910136044,"shape":"rect","top":-18,"twirl":0,"twist":7.786044806666672,"velocity":2.002865631341934}},{"slug":"how-stripe-uses-graph-search-and-state-machines-to-auto-remediate-a-global-database-fleet","authorBio":"","title":"How Stripe uses graph search and state machines to auto-remediate a global database fleet","summary":"Discover how we modeled our MongoDB infrastructure as a traversable graph and then use pathfinding algorithms to dynamically compute and execute recovery plans. This automated approach reduced pager volume by 30% (~200 pages/year), eliminated 12 days of unhealthy shard states annually, and supports new shard layouts with zero manual effort.","authors":["Pragya Mehta","Sai Samant"],"date":"2026-07-16","location":[],"type":"Blog","topics":["Engineering","featured"],"artConfig":{"ampX":1.8333372565731405,"ampY":0.8067956981211901,"aspectRatio":0.5175788556730374,"axis":"x","lump":-0.13829023626074194,"count":16,"freq":0.641273811146617,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-97,"mouseX":0.5031075581785291,"mouseY":0.4878755620848388,"noise":3.3,"scale":0.8627977433204652,"shape":"ellipse","top":-58,"twirl":0.10035621044039726,"twist":16.907588650368155,"velocity":0.7760455271862448,"isBalls":true,"isMatrix":true}},{"slug":"fund-segregation-stripe-connect","authorBio":"","title":"Keeping funds where they belong: Implementing fund segregation in Stripe Connect","summary":"Learn how to implement fund segregation in Stripe Connect using allocated balances to ring-fence seller funds from your platform's operational balance - covering payment creation, transfers, refunds, disputes, and preparing for upcoming PSD3 regulatory requirements.","authors":["Andrew Robinson"],"date":"2026-07-02","location":[],"type":"Blog","topics":["Connect","featured"],"artConfig":{"ampX":0.8654434816911817,"ampY":1.1552445094510913,"aspectRatio":1.4424102990521117,"axis":"x","lump":0.8008700220957399,"count":65,"freq":1.4696510171741246,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":1,"mouseX":0.7118572713293135,"mouseY":0.4064657856794074,"noise":0,"scale":0.9371847973763943,"shape":"ellipse","top":10,"twirl":0,"twist":4.71521330396086,"velocity":1.2082789681013673}},{"slug":"event-notification-handlers-thin-events","authorBio":"","title":"Introducing a better way to process Stripe's thin events","summary":"Event destinations are central to Stripe integrations but hard to get right. Event notification handlers encapsulate the setup and wiring, letting you focus on business logic and surface errors at development time instead of in production.","authors":["David Brownman"],"date":"2026-06-24","location":[],"type":"Blog","topics":["Event Destinations","featured"],"artConfig":{"ampX":1.9478374822437763,"ampY":1.869141367200762,"aspectRatio":1.3400135314168409,"axis":"xy","lump":3.2,"count":176,"freq":4.241414935961366,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":23,"mouseX":0.34827066342961044,"mouseY":0.38254122192505746,"noise":0.2989257664438337,"scale":1.678311857149005,"shape":"rect","top":20,"twirl":0.0011823457852005968,"twist":-3.6,"velocity":0.3565666787456721,"isBalls":false,"isMatrix":false,"kaleids":2.850848896801472}},{"slug":"extending-stripes-network-with-stablecoins","authorBio":"","title":"Extending Stripe’s network with stablecoins","summary":"Most of the world's money still moves in batches. A wire submitted at 2pm might settle by end of day, if you made the cutoff. ACH takes one to three business days. Cross-border payments touch correspondent banks, each adding lag and a fee. Stripe has spent over a decade building the Global Payments and Treasury Network (GPTN), a programmable infrastru
1cture for global money movement that batches transfers to reduce cost, nets opposing flows to minimize actual cash moved, and routes through the optimal path between accounts. Under the hood, it's a graph with accounts as nodes, and payment rails as edges.","authors":["Sai Samant","Maciej Makowski"],"date":"2026-06-22","location":[],"type":"Blog","topics":["Engineering","Crypto"],"artConfig":{"ampX":1.7739755672067405,"ampY":0.7976267714202404,"aspectRatio":2.0805537294752896,"axis":"y","lump":1.3576615063250066,"count":83,"freq":5.529211488872766,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-19,"mouseX":0.41627459064293654,"mouseY":0.14836930116731673,"noise":0.1587697581667453,"scale":3.134930970534682,"shape":"rect","top":116,"twirl":0.23255087293684482,"twist":46.54475291758776,"velocity":0.8554724747482687}},{"slug":"integrating-services-with-agents-stripe-projects","authorBio":"","title":"From hobby to real world: integrating the hard stuff with agents","summary":"When building with agents, most guides will give you the happy path - how to do something the best way, without friction. This post is all friction, and how to get through it when things go wrong.","authors":["Anna Spysz"],"date":"2026-06-16","location":[],"type":"Blog","topics":["AI","Partners"],"artConfig":{"ampX":0.6568061804473401,"ampY":0.4280616611391306,"aspectRatio":3.920863030753657,"axis":"xy","lump":0.3973611171655357,"count":97,"freq":0.8678523431867361,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":true,"left":-7,"mouseX":0.5509561785085126,"mouseY":0.12329083056561649,"noise":0.3883717101048678,"scale":8.117332061037422,"shape":"rect","top":12,"twirl":0.13775180246680974,"twist":4.419166987404227,"velocity":2.0376702293734996}},{"slug":"how-api-changes-flow-into-stripes-developer-products","authorBio":"","title":"How API changes flow into Stripe's developer products","summary":"When a Stripe engineer makes changes to an API, merging the PR is just the beginning. Stripe maintains a vast developer product suite that needs to stay in sync with the API changes we frequently ship:","authors":["Mikael Mello","Anna Mason"],"date":"2026-06-15","location":[],"type":"Blog","topics":["Engineering"],"artConfig":{"ampX":1.330371033743024,"ampY":2.2,"aspectRatio":1.1298637443546207,"axis":"xy","lump":1.0162690412588418,"count":98,"freq":3.3309744840413336,"isDial":false,"isLineart":true,"isRing":true,"isSpiral":false,"left":-73,"mouseX":0.6011866074964404,"mouseY":0.566429503605701,"noise":0.2619164789859205,"scale":3.24612698943913,"shape":"rect","top":150,"twirl":0.06954163590073585,"twist":6.049472840934992,"velocity":1.1205676033776253}},{"slug":"microservice-testing-with-apache-spark-part-2","authorBio":"","title":"Scaling up your microservice testing with Apache Spark—Part 2","summary":"Some microservices are difficult to test because their behavior depends on a long tail of inputs that are hard to model by hand. This post focuses on how to build a repeatable Apache Spark replay harness for testing without creating a second implementation of the service.","authors":["Vivek Yadav"],"date":"2026-06-08","location":[],"type":"Blog","topics":["Best Practices","Testing"],"artConfig":{"ampX":0.8052915538847447,"ampY":1.2236494842916728,"aspectRatio":2.1702384622942654,"axis":"x","lump":1.0160812956281007,"count":62,"freq":0.4962236511260272,"isDial":true,"isLineart":false,"isRing":false,"isSpiral":false,"left":9,"mouseX":0.8275250061322004,"mouseY":0.39948218991141765,"noise":0,"scale":0.2,"shape":"ellipse","top":-15,"twirl":0.19945070686936378,"twist":-3.2130713972151277,"velocity":2.2320668651927265}},{"slug":"microservice-testing-with-apache-spark","authorBio":"","title":"Scaling up your microservice testing with Apache Spark","summary":"Some microservices are difficult to test because their behavior depends on a long tail of inputs that are hard to model by hand. For that class of problem, Apache Spark's massive parallelism and linear scalability can be leveraged to build a regression test harness. That makes it possible to compare old and new implementations, model upcoming rule changes, and quantify impact before a change reaches production.","authors":["Vivek Yadav"],"date":"2026-06-01","location":[],"type":"Blog","topics":["Best Practices","Testing"],"artConfig":{"ampX":0.9206922518461943,"ampY":0.9704430575445294,"aspectRatio":0.724860591965355,"axis":"x","lump":-0.9898125268891453,"count":46,"freq":0.9747252817302943,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":11,"mouseX":0.7818119914734736,"mouseY":0.6401179067865015,"noise":0.3275884707793593,"scale":0.2,"shape":"line","top":-58,"twirl":0,"twist":2.4282394577488304,"velocity":2.367989814966917,"isBalls":false,"isMatrix":false,"kaleids":7.869841280952096}},{"slug":"tax-id-validation-at-checkout","authorBio":"","title":"Compliance versus conversion: Tax ID validation at checkout","summary":"For product-led businesses, conversion is paramount, so an important consideration is deciding whether to implement synchronous or asynchronous tax ID validation in a checkout flow. One is friendlier for conversion, but the other can keep your business compliant.","authors":["Jake Estes"],"date":"2026-05-29","location":[],"type":"Blog","topics":["Billing","Tax"],"artConfig":{"ampX":0.9478381600603462,"ampY":1.0086103660017252,"aspectRatio":1.5223
1186880959196,"axis":"xy","lump":-0.09229848964512348,"count":124,"freq":0.6667964058965445,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":90,"mouseX":0.2174640887077898,"mouseY":0.6495788076752796,"noise":0,"scale":12.2,"shape":"ellipse","top":-58,"twirl":0.027031239621341227,"twist":-0.5897537750303745,"velocity":0.3}},{"slug":"modern-java-at-stripe-language-upgrades-as-a-service","authorBio":"","title":"Modern Java at Stripe: Language upgrades as a service","summary":"We all know the stereotypes of working at enterprise tech companies: endless bureaucracy and behemoth codebases running on a years-old language version. Most organizations know they should modernize quickly, but haven’t figured out how to build an upgrade path compatible with a large codebase. The recurring cost of upgrading keeps most large JVM codebases trailing behind the latest Java versions.","authors":["Mahib Hosain","Cara Mecozzi"],"date":"2026-05-27","location":[],"type":"Blog","topics":["Engineering"],"artConfig":{"ampX":2,"ampY":1.8559479755982755,"aspectRatio":1.7822291770320386,"axis":"xy","lump":2.8830681853480637,"count":172,"freq":3.879319217070937,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-10,"mouseX":0.39156320831589403,"mouseY":0.4806619113823399,"noise":0,"scale":1.4134983434677124,"shape":"rect","top":4,"twirl":0,"twist":-1.9373103728145362,"velocity":0.37836479872651396,"isBalls":false,"isMatrix":false,"kaleids":1.24181405659765}},{"slug":"what-it-feels-like-building-with-stripe-projects","authorBio":"","title":"What it feels like building with Stripe Projects","summary":"Building a GitHub traffic dashboard with Stripe Projects revealed a surprising shift from “AI coding” into real infrastructure orchestration. In under an hour, Auth0, Supabase, Vercel, Prisma, deployments, environments, and scheduled jobs materialized around an idea with remarkable speed. The experience highlighted both the power and the emerging challenge of AI-assisted infrastructure: operational visibility, ownership clarity, environment management, and understanding rapidly orchestrated systems.","authors":["Ben Smith"],"date":"2026-05-26","location":[],"type":"Blog","topics":["AI","Partners","featured"],"artConfig":{"ampX":0.5068560228049755,"ampY":0.23753098507225512,"aspectRatio":0.01,"axis":"x","lump":0.4633763185814023,"count":25,"freq":2.4348252108693123,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":14,"mouseX":0.7238876734003424,"mouseY":0.6130420593870805,"noise":0.20883373100124297,"scale":0.2,"shape":"rect","top":28,"twirl":0.07418512535840274,"twist":10.581843402460217,"velocity":1.2493381003867834}},{"slug":"ai-steering-experiments","authorBio":"","title":"You can't whisper at an AI agent","summary":"What a dozen steering experiments taught us about how LLM-based agents actually behave in the wild.","authors":["James Beswick","Peter Epsteen"],"date":"2026-05-14","location":[],"type":"Blog","topics":["AI","Best Practices","featured"],"artConfig":{"ampX":1.0034237625822424,"ampY":0.7485246754325926,"aspectRatio":1.08591867865026,"axis":"xy","lump":-0.38921183867007497,"count":140,"freq":1.0687452907711268,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":82,"mouseX":0.17156833143271508,"mouseY":0.6629807139467448,"noise":0,"scale":11.571437431186437,"shape":"ellipse","top":-58,"twirl":0.050499773092567916,"twist":-3.6,"velocity":0.3}},{"slug":"learnings-from-building-with-agents-stripe-projects","authorBio":"","title":"Learnings from init to deploy","summary":"This post is a follow-up to last week’s “From init to deploy: building with agents and Stripe Projects” and explores the learnings gained along the way.","authors":["Anna Spysz"],"date":"2026-05-04","location":[],"type":"Blog","topics":["AI","Partners"],"artConfig":{"ampX":1.0612527437135577,"ampY":1.234942904137075,"aspectRatio":1.5170334625488147,"axis":"xy","lump":-0.05266346356272697,"count":100,"freq":1.4818068240135909,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":67,"mouseX":0.15337373048327865,"mouseY":0.5471747035868466,"noise":0.046181733900681136,"scale":12.2,"shape":"ellipse","top":-58,"twirl":0.11043438014388082,"twist":-3.6,"velocity":0.45189252300560473}},{"slug":"building-with-agents-stripe-projects","authorBio":"","title":"From init to deploy: building with agents and Stripe Projects","summary":"Stripe Projects makes it easy to spin up a useful, complex application that uses various SaaS providers. This post describes how one of our developer advocates built an internal transcript editing application using Stripe Projects, Vercel, and OpenRouter.","authors":["Anna Spysz"],"date":"2026-04-29","location":[],"type":"Blog","topics":["AI","Partners","featured"],"artConfig":{"ampX":2,"ampY":0.2946934436522424,"aspectRatio":4.531724429373816,"axis":"xy","lump":-0.006466929908841849,"count":18,"freq":3.3795316869616507,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":-18,"mouseX":0.5915066415254027,"mouseY":0.4084237457625568,"noise":0,"scale":3.4300969115644695,"shape":"rect","top":20,"twirl":0.09604551987349988,"twist":12.59575573053211,"velocity":0.9653949401974679}},{"slug":"formatting-an-entire-25-million-line-codebase-overnight-the-rubyfmt-story","authorBio":"","title":"Formatting an entire 25 million line codebase overnight: the rubyfmt story","summary":"This is the story of how our Developer Productivity team extended and rolled out rubyfmt, our Rust-based zero-config, ultra-fast autoformatter across the world's largest Ruby codebase.","authors":["Fable Tales","Anna Mason"],"date":"2026-04-28","location":[],"type":"Blog","topics":["Engineering","Developer Productivity","featured"],"artConfig":{"ampX":0.7902767608314752,"ampY":1.0306319341771304,"aspectRatio":1.3797658856278285,"axis":"xy","lump":-0.5556644957028329,"count":77,"freq":1.5358439070284367,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-18,"mouseX":0.32776119812019167,"mouseY":0.8527546629505232,"noise":0,"scale":1.936226717993617,"shape":"ellipse","top":-17,"twirl":0,"twist":7.613622068099677,"velocity":1.1934491901602595,"isBalls":false,"isMatrix":false,"kaleids":6.280919612906874}},{"slug":"how-we-built-stripe-credits-a-programmable-auditable-way-to-pay-your-stripe-fees","authorBio":"","title":"How we built Stripe Credits: A programmable, auditable way to pay your Str
1ipe fees","summary":"In this post we’ll dive into how we built a virtual cashless payment method that works for prepaid and Stripe-issued credits, and cleanly integrates with our accounting, compliance, and other frameworks.","authors":["Pratik Gupta","Sai Samant"],"date":"2026-04-16","location":[],"type":"Blog","topics":["Engineering","Payments"],"artConfig":{"ampX":1.4531950035393237,"ampY":2.060997702229768,"aspectRatio":1.164219562173821,"axis":"xy","lump":1.234843716558069,"count":79,"freq":4.072019349843264,"isDial":false,"isLineart":true,"isRing":true,"isSpiral":false,"left":-59,"mouseX":0.4670889249669388,"mouseY":0.44185271733719855,"noise":0,"scale":1.949388103350997,"shape":"rect","top":150,"twirl":0,"twist":1.3939915918931365,"velocity":1.2041009591128677}},{"slug":"build-stripe-salesforce-integrations-faster-with-agents","authorBio":"","title":"Using AI agents to build Stripe-Salesforce integrations faster","summary":"Building payment and revenue integrations across Stripe and Salesforce has a steep learning curve spanning both platforms. CLI-based AI coding agents make this faster, but hallucinate on complex, evolving platform surfaces. Open-source grounding context files flatten the learning curve and reduce hallucination, letting developers ship working integrations sooner.","authors":["Vishnu Samavedula"],"date":"2026-04-13","location":[],"type":"Blog","topics":["AI","Partners","Payments","Open Source"],"artConfig":{"ampX":1.514807145372033,"ampY":0,"aspectRatio":4.768040408697165,"axis":"xy","lump":-0.054875717345625165,"count":2,"freq":3.248975078880787,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":1,"mouseX":0.5731192913874984,"mouseY":0.4562752539627254,"noise":0,"scale":2.3338588879257443,"shape":"rect","top":5,"twirl":0.12852135492116212,"twist":11.452278153762222,"velocity":1.0036367579177021}},{"slug":"selective-test-execution-at-stripe-fast-ci-for-a-50m-line-ruby-monorepo","authorBio":"","title":"Selective Test Execution at Stripe: Fast CI for a 50M-line Ruby monorepo","summary":"Stripe's Selective Test Execution system employs some clever tricks to allow us to continue scaling our team and our codebase while only running around 5% of our tests on average. Find out how it works!","authors":["Aditya Anchuri"],"date":"2026-04-09","location":[],"type":"Blog","topics":["Developer Productivity","Engineering","Testing","featured"],"artConfig":{"ampX":0.4619596366584301,"ampY":0.9206785130240023,"aspectRatio":1.3698673702020199,"axis":"y","lump":-0.416974529877305,"count":52,"freq":1.4740542575865982,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-26,"mouseX":0.8598643432261421,"mouseY":0.23260247259680183,"noise":0.056395401628687974,"scale":1.0028045914322137,"shape":"rect","top":19,"twirl":0.11469961497187614,"twist":-3.6,"velocity":0.8131103640478105,"isBalls":false,"isMatrix":false,"kaleids":5.118668347410858}},{"slug":"production-ready-dev-stack-from-terminal","authorBio":"","title":"Provision a production-ready dev stack from your terminal","summary":"Provision hosting, databases, auth, analytics, AI and other dev tools from the Stripe CLI. Stripe Projects creates real resources in your own provider accounts, securely syncs agent-ready credentials, supports upgrades to paid tiers, and handles payments without leaving the terminal.","authors":["Rami Banna"],"date":"2026-03-26","location":[],"type":"Blog","topics":["Partners","AI","featured"],"artConfig":{"ampX":1.0502844127640127,"ampY":1.0957449081987143,"aspectRatio":1.9622262742251158,"axis":"x","lump":0.8936924783550202,"count":71,"freq":1.4748301670253277,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":20,"mouseX":0.7116828891731799,"mouseY":0.4369937550155446,"noise":0.31259696425125,"scale":3.0990320990979674,"shape":"ellipse","top":-17,"twirl":0.11904333256930114,"twist":9.394243891082704,"velocity":1.0519598121289164}},{"slug":"designing-flexible-payment-flows-with-checkoutsessions","authorBio":"","title":"Designing flexible payment flows with Checkout Session","summary":"Learn how to build a future-proof, global-ready checkout by implementing Stripe Checkout Session with embeddable Elements for flexible payments, tax calculation, and multi-currency supp
1ort.","authors":["Allison Farris"],"date":"2026-03-06","location":[],"type":"Blog","topics":["Best Practices","Payments","featured"],"artConfig":{"ampX":1.6013630664050578,"ampY":1.3324222465828062,"aspectRatio":1.1566195652082563,"axis":"xy","lump":-0.12733568902686238,"count":133,"freq":0.4,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":true,"left":-14,"mouseX":0.7362169293286278,"mouseY":0.346462440609932,"noise":0.26736738110706204,"scale":3.1293352632373574,"shape":"ellipse","top":18,"twirl":0,"twist":-0.37207950065284967,"velocity":0.6684189544711262}},{"slug":"minions-stripes-one-shot-end-to-end-coding-agents-part-2","authorBio":"","title":"Minions: Stripe’s one-shot, end-to-end coding agents—Part 2","summary":"Minions are Stripe’s homegrown coding agents, responsible for more than a thousand pull requests merged each week. Though humans review the code, minions write it from start to finish. Learn how they work, and how we built them.","authors":["Alistair Gray"],"date":"2026-02-19","location":[],"type":"Blog","topics":["AI","Developer Productivity","Engineering"],"artConfig":{"ampX":0.7759810890257358,"ampY":1.0542879999577999,"aspectRatio":0.5386830084100366,"axis":"y","lump":-0.9509781749881804,"count":72,"freq":1.4536619489192961,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-52,"mouseX":0.803304621101357,"mouseY":0.2621461196662858,"noise":0.0407699459977448,"scale":0.9804692730307578,"shape":"rect","top":-4,"twirl":0,"twist":0.9393650121018293,"velocity":1.0040213891211898,"isBalls":false,"isMatrix":false,"kaleids":6.196873706392944}},{"slug":"building-a-mental-model-for-stripe-payments","authorBio":"","title":"Building a mental model for Stripe payments","summary":"Learn how Stripe payments work under the hood by understanding the PaymentIntent lifecycle as a state machine—from checkout and tokenization to authorization, capture, and settlement—and why webhooks are essential for keeping your systems in sync with asynchronous payment state changes. ","authors":["Allison Farris"],"date":"2026-02-19","location":[],"type":"Blog","topics":["Getting Started","Best Practices","Payments","featured"],"artConfig":{"ampX":0.8680333827063441,"ampY":1.2165493903793394,"aspectRatio":1.6278908084386958,"axis":"xy","lump":-0.2739265382811427,"count":133,"freq":1.4362170624881982,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":90,"mouseX":0.24527556219305843,"mouseY":0.6826650682520121,"noise":0.19648057266511024,"scale":12.2,"shape":"ellipse","top":-52,"twirl":0,"twist":5.40090837083757,"velocity":0.3}},{"slug":"minions-stripes-one-shot-end-to-end-coding-agents","authorBio":"","title":"Minions: Stripe’s one-shot, end-to-end coding agents","summary":"Minions are Stripe’s homegrown coding agents, responsible for more than a thousand pull requests merged each week. Though humans review the code, minions write it from start to finish. Learn how they work, and how we built them.","authors":["Alistair Gray"],"date":"2026-02-09","location":[],"type":"Blog","topics":["AI","Developer Productivity","Engineering","featured"],"artConfig":{"ampX":1.8235186474770306,"ampY":0.7777896137163043,"aspectRatio":0.7759798691190779,"axis":"x","lump":-0.22575414742156863,"count":8,"freq":0.7056627613902092,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-120,"mouseX":0.6328590837597847,"mouseY":0.4696151268901304,"noise":3.3,"scale":2.255546933427453,"shape":"ellipse","top":-41,"twirl":0,"twist":16.2268109036386,"velocity":0.8226747052334249,"isBalls":true,"isMatrix":true}},{"slug":"ai-agents-terraform-stripe-infrastructure","authorBio":"","title":"Configuring Stripe using Terraform and AI agents","summary":"Learn why using AI agents to author Terraform code is safer than direct API calls for Stripe configuration. Get transparent, consistent, and auditable infrastructure with code review workflows.","authors":["Michael Selander"],"date":"2026-01-27","location":[],"type":"Blog","topics":["AI","featured"],"artConfig":{"ampX":0.46374908785521984,"ampY":0.2340162882581353,"aspectRatio":1.9749037015913053,"axis":"x","lump":-0.6066802159361542,"count":128,"freq":3.2494967567920683,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":49,"mouseX":0.96,"mouseY":0.91,"noise":0.8008322306890041,"scale":1.006577027529478,"shape":"line","top":-1,"twirl":0,"twist":6.298247295752168,"velocity":1.2347055610325188,"isBalls":false,"isMatrix":false,"kaleids":7.783001734241844}},{"slug":"introducing-versioning-for-stripe-workflows","authorBio":"","title":"Versioning in Stripe Workflows: Ship workflow changes with confidence","summary":"Versioning in Stripe Workflows lets you edit automations safely with drafts, roll back changes instantly, and see exactly what ran. Update with confidence.","authors":["Tanya Boiteau"],"date":"2025-12-10","location":[],"type":"Blog","topics":["Workflows","featured"],"artConfig":{"ampX":0.8035172709450125,"ampY":0.7695847800038755,"aspectRatio":1.5107061568807811,"axis":"y","lump":-1,"count":81,"freq":1.031650835841894,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-26,"mouseX":0.8394569475349039,"mouseY":0.31180161562934516,"noise":0.21165650042518971,"scale":0.2,"shape":"rect","top":-3,"t
1wirl":0.09413254849612712,"twist":-3.6,"velocity":0.8112367222122848,"isBalls":false,"isMatrix":false,"kaleids":5.463615310750901}},{"slug":"building-production-ready-stripe-subscriptions-kiro-powers","authorBio":"","title":"Building production-ready Stripe subscriptions using Kiro powers","summary":"Learn how to build production-ready Stripe subscriptions faster using Kiro Powers. Implement secure payment flows, webhooks, and scalable architecture with AI assistance.","authors":["Kalyani Koppisetti","Dan Kiuna"],"date":"2025-12-04","location":[],"type":"Blog","topics":["AWS","Partners","Billing"],"artConfig":{"ampX":2,"ampY":0.1753553957045078,"aspectRatio":4.60991002284009,"axis":"xy","lump":0.36324992625787855,"count":49,"freq":3.524213360369205,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":-15,"mouseX":0.5488251901108772,"mouseY":0.5327937977593392,"noise":0.12395954358950258,"scale":4.60771434225142,"shape":"rect","top":-19,"twirl":0.08670539847016336,"twist":6.507516741521657,"velocity":1.0553534015137702}},{"slug":"using-stripe-stablecoin-payments-no-crypto-knowledge","authorBio":"","title":"Stablecoin payments for Stripe developers: zero crypto knowledge required","summary":"Learn how to add stablecoin payments to your Stripe integration in under an hour. Accept USDC on Ethereum, Solana, Polygon, and Base with zero blockchain knowledge—just add 'crypto' to your existing payment methods.","authors":["Robert Love"],"date":"2025-11-25","location":[],"type":"Blog","topics":["Crypto","Payments","featured"],"artConfig":{"ampX":1.1125568823888898,"ampY":0.809337711457163,"aspectRatio":1.2861138487942516,"axis":"xy","lump":-0.39014341824129223,"count":86,"freq":0.6143388265520335,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":16,"mouseX":0.9511434387736022,"mouseY":0.5536369107030332,"noise":0.19208145879395305,"scale":0.5211819335520267,"shape":"rect","top":-58,"twirl":0.4540221612751484,"twist":-3.6,"velocity":0.3,"isBalls":false,"isMatrix":false,"kaleids":6.36344450648874}},{"slug":"web-pos-mobile-terminal-integration","authorBio":"","title":"Using a web-based POS with a mobile Terminal reader","summary":"Learn how to integrate web-based POS systems with mobile Terminal readers using a React Native wrapper app. Connect M2 readers and Tap to Pay seamlessly.","authors":["Benjamin Nuttin"],"date":"2025-10-23","location":[],"type":"Blog","topics":["Terminal"],"artConfig":{"ampX":0.8862171074748039,"ampY":0.805689089346677,"aspectRatio":0.834541689119488,"axis":"y","lump":-0.6653219552747904,"count":79,"freq":0.9065456396788358,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-37,"mouseX":0.8181062366072088,"mouseY":0.15662498469650746,"noise":0,"scale":1.3767478484660387,"shape":"rect","top":-24,"twirl":0.07332004118710755,"twist":0.997220124676824,"velocity":1.202287722049281,"isBalls":false,"isMatrix":false,"kaleids":4.905337933637202}},{"slug":"how-we-built-it-real-time-analytics-for-stripe-billing","authorBio":"","title":"How we built it: Real-time analytics for Stripe Billing","summary":"Among global business leaders surveyed, 84% agree that adapting pricing quickly will be a key competitive advantage. Our new real-time analytics system for Stripe Billing helps them spot customer trends just as they emerge.","authors":["Reed Trevelyan"],"date":"2025-09-16","location":[],"type":"Blog","topics":["Billing","Infrastructure","Engineering"],"artConfig":{"ampX":1.9396925493329764,"ampY":2.2,"aspectRatio":1.6918080194145442,"axis":"xy","lump":2.787520623873919,"count":180,"freq":4.40652204734087,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-7,"mouseX":0.2754157068183646,"mouseY":0.41637367344647647,"noise":0,"scale":1.2861224984526634,"shape":"rect","top":-17,"twirl":0,"twist":6.139713340558112,"velocity":0.493984429679811,"isBalls":false,"isMatrix":false,"kaleids":2.9024114716798066}},{"slug":"workflows-automate-compliance-safeguards","authorBio":"","title":"Workflows: Automate compliance safeguards by flagging transactions","summary":"Learn how to automate compliance safeguards with Stripe Workflows by flagging high-value transactions and suspicious orders to enhance risk management.","authors":["Ashley Ansari"],"date":"2025-09-11","location":[],"type":"Blog","topics":["Workflows","featured"],"artConfig":{"ampX":2,"ampY":0.3010566111430526,"aspectRatio":4.291251712274924,"axis":"xy","lump":0.44133526031300424,"count":14,"freq":3.625194543838501,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":-10,"mouseX":0.48837305776197465,"mouseY":0.4296328345136717,"noise":0.32565700060129166,"scale":3.0635892233997586,"shape":"rect","top":-20,"twirl":0.11700108816474676,"twist":11.35650027359277,"velocity":0.9704229642730207}},{"slug":"seamlessly-connect-stripe-events-to-your-frontend","authorBio":"","title":"Seamlessly connect Stripe events to your frontend","summary":"Learn how to connect Stripe events to your frontend applications using real-time subscriptions, webhooks, and AWS services. Build responsive payment UIs that react instantly to transaction updates, subscription changes, and account modifications with event-driven architecture.","authors":["Josh Kahn"],"date":"2025-09-11","location":[],"type":"Blog","topics":["Event Destinations","AWS"],"artConfig":{"ampX":1.5794272150844335,"ampY":0.1960993317589164,"aspectRatio":5,"axis":"xy","lump":-0.3162182202152908,"count":37,"freq":2.4817823515981434,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":3,"mouseX":0.416535101692006,"mouseY":0.5427416261686012,"noise":0,"scale":3.3728040499240164,"shape":"rect","top":-11,"twirl":0.1751636893376708,"twist":15.692265735946595,"velocity":0.8126409150417894}},{"slug":"marketplace-monetization-with-stripe","authorBio":"","title":"Marketplace monetization with Stripe","summary":"Complete guide to monetizing online marketplaces with Stripe Connect. Configure transaction fees, usage-based billing, and automated invoicing with code examples.","authors":["Ana Andres"],"date":"2025-09-04","location":[],"type":"Blog","topics":["Connect","Payments"],"artConfig":{"ampX":1.9985629072785378,"ampY":2.024760423649102,"aspectRatio":1.9054934798559173,"axis":"xy","lump":3.2,"count":180,"freq":3.741601933389902,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-15,"mouseX":0.29520960565619175,"mouseY":0.45774364831484854,"noise":0.22553102379105983,"scale":0.5350259501636028,"
1shape":"rect","top":3,"twirl":0.08121444719284772,"twist":-3.6,"velocity":0.3,"isBalls":false,"isMatrix":false,"kaleids":2.2317879885435103}},{"slug":"database-reconciliation-growing-businesses-part-3","authorBio":"","title":"Real-time vs batch reconciliation: Practical patterns for keeping data in sync","summary":"Learn effective data reconciliation strategies to keep product information synchronized between your internal systems and Stripe. Explore real-time vs batch processing tools, validation techniques, and best practices for maintaining consistent data across multiple platforms as your business scales.","authors":["James Beswick"],"date":"2025-08-23","location":[],"type":"Blog","topics":["Best Practices"],"artConfig":{"ampX":0.9976486286148429,"ampY":1.0540556995794177,"aspectRatio":2.013123700354248,"axis":"x","lump":0.720615264248103,"count":41,"freq":2.026685016527772,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-24,"mouseX":0.8728881774909795,"mouseY":0.2635624724626541,"noise":0.27566204256378113,"scale":1.0187841267883777,"shape":"ellipse","top":-9,"twirl":0.24393845054507254,"twist":1.0640254344642166,"velocity":1.218053670866415}},{"slug":"database-reconciliation-growing-businesses-part-2","authorBio":"","title":"From naive webhooks to durable sync: Queue-based and event-driven data reconciliation patterns","summary":"Learn advanced database reconciliation patterns for Stripe integration. Explore queue-based architectures, event-driven sync, and robust error handling to maintain product data consistency at scale.","authors":["James Beswick"],"date":"2025-08-22","location":[],"type":"Blog","topics":["Best Practices"],"artConfig":{"ampX":1.193129551038146,"ampY":0.8776664175614715,"aspectRatio":1.3272050451058894,"axis":"x","lump":0.5434740924686193,"count":60,"freq":0.5992960635125637,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":17,"mouseX":0.7352137200048193,"mouseY":0.29577394635509696,"noise":0,"scale":6.375609711036086,"shape":"ellipse","top":10,"twirl":1.2,"twist":8.15090920908004,"velocity":1.144295177957043}},{"slug":"gating-entrances-with-stripe-and-nfc-passes","authorBio":"","title":"Gating entrances with Stripe and NFC passes","summary":"Learn how to gate physical entrances using Stripe subscriptions and NFC passes. This guide shows how to issue Apple/Google Wallet passes with PassNinja, integrate Stripe Checkout, and control door access with a Raspberry Pi and NFC reader.","authors":["Joshua Nussbaum"],"date":"2025-08-21","location":[],"type":"Blog","topics":["AI","Partners"],"artConfig":{"ampX":0.7630767650976777,"ampY":0.32125145246833564,"aspectRatio":3.4632553337987515,"axis":"xy","lump":0.5026354399025441,"count":100,"freq":0.6826792225390673,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":true,"left":23,"mouseX":0.5165107855141162,"mouseY":0.24567422837298364,"noise":0,"scale":8.823593465268612,"shape":"rect","top":4,"twirl":0,"twist":2.7660088098496196,"velocity":2.240750058170408}},{"slug":"database-reconciliation-growing-businesses-part-1","authorBio":"","title":"Keeping product data aligned with Stripe as your systems scale","summary":"Learn how product data synchronization between internal databases and payment providers like Stripe evolves from simple scripts to complex architectural challenges as your business scales from hundreds to millions of products.","authors":["James Beswick"],"date":"2025-08-21","location":[],"type":"Blog","topics":["Best Practices"],"artConfig":{"ampX":0.9538092735409737,"ampY":1.2159779332876206,"aspectRatio":1.913110912772268,"axis":"x","lump":0.6531228155381977,"count":9,"freq":1.5221566795408725,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":-12,"mouseX":0.7807965436272324,"mouseY":0.4395781651046127,"noise":0,"scale":2.499936594516039,"shape":"ellipse","top":-9,"twirl":0.1503747276365757,"twist":0.46542875267565265,"velocity":1.0545567613132298}},{"slug":"guardrails-money-movement-integrating-stripe-mcp-portia-ai","authorBio":"","title":"Guardrails for money movement: Integrating Stripe MCP with Portia AI","summary":"Learn how to build secure AI agents for payment processing using Stripe MCP and Portia AI, with built-in guardrails and human approval workflows.","authors":["Mounir Mouawad","Agentic"],"date":"2025-08-13","location":[],"type":"Blog","topics":["Partners","AI","Payments"],"artConfig":{"ampX":1.3488375709354876,"ampY":0.4127943706139922,"aspectRatio":1.86486105342675,"axis":"y","lump":0.5896102496348321,"count":93,"freq":2.6283585103303193,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":15,"mouseX":0.5861192602412775,"mouseY":0.8086482584122568,"noise":0.2001456999722868,"scale":0.5951658622324467,"shape":"ellipse","top":7,"twirl":0,"twist":1.1467434810623525,"velocity":0.33394868148490786,"isBalls":false,"isMatrix":false,"kaleids":3.3431848264858126}},{"slug":"building-financial-operations-agents-hypermode-stripe","authorBio":"","title":"Building financial operations agents with Hypermode and Stripe","summary":"Learn how to build sophisticated financial operations agents using natural language with Hypermode and Stripe. Create AI agents that handle payments, process refunds, generate invoices, and automate complex financial workflows—no coding required.","authors":["William Lyon"],"date":"2025-08-06","location":[],"type":"Blog","topics":["Agentic Commerce","Partners","AI","featured"],"artConfig":{"ampX":0.007701700285077107,"ampY":0.0010000988207757577,"aspectRatio":2.883035736245103,"axis":"x","lump":1.7172123864255846,"count":112,"freq":0.49512120202183724,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":2
10,"mouseX":0.8267237765578553,"mouseY":0.8827268702024594,"noise":0.11108814021013677,"scale":0.2,"shape":"ellipse","top":-58,"twirl":0.12762346325069668,"twist":3.383278429076076,"velocity":2.1515473844632504,"isBalls":false,"isMatrix":false,"kaleids":6.950578256882727}},{"slug":"workflows-customize-objects-metadata","authorBio":"","title":"Workflows: Automatically customize an object with metadata","summary":"Workflow patterns provide repeatable solutions to common developer problems. This pattern helps automate customize a Stripe object with metadata.","authors":["Ashley Ansari"],"date":"2025-07-22","location":[],"type":"Blog","topics":["Workflows"],"artConfig":{"ampX":0.31874160408228636,"ampY":0.3131305130645633,"aspectRatio":2.8279462097512558,"axis":"x","lump":1.9822926465310158,"count":115,"freq":1.0200926883518695,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-20,"mouseX":0.8950870952507481,"mouseY":0.8087477584825828,"noise":0.004551447149366139,"scale":1.1622908822596072,"shape":"ellipse","top":-58,"twirl":0.27176101101934913,"twist":13.595462949723006,"velocity":1.9966445639990271,"isBalls":false,"isMatrix":false,"kaleids":7.976946463808417}},{"slug":"workflows-creating-early-fraud-alerts-for-streamlined-refunds","authorBio":"","title":"Workflows: Creating early fraud alerts for streamlined refunds","summary":"Workflow patterns provide repeatable solutions to common developer problems. This pattern helps automate creating early fraud alerts when streamlining refunds.","authors":["Ashley Ansari"],"date":"2025-07-10","location":[],"type":"Blog","topics":["Workflows","Fraud Detection"],"artConfig":{"ampX":0.190952547557652,"ampY":0.4011099583208561,"aspectRatio":1.683050817881711,"axis":"x","lump":-0.015136969760060348,"count":69,"freq":2.465538232833147,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-73,"mouseX":0.15,"mouseY":0.8129359800079837,"noise":0,"scale":0.994794667378068,"shape":"ellipse","top":-11,"twirl":0.1270411699339747,"twist":4.688908459536731,"velocity":1.0427043430358172,"isBalls":false,"isMatrix":false,"kaleids":4.541088278591633}},{"slug":"how-we-built-it-jurisdiction-resolution-for-stripe-tax","authorBio":"","title":"How we built it: Jurisdiction resolution for Stripe Tax","summary":"Our new jurisdiction resolution system (JRS) is a faster, less resource-intensive solution to the challenging problem of determining tax obligations in places with complicated, overlapping tax jurisdictions.","authors":["Erich Rentz","Danko Komlen"],"date":"2025-07-10","location":[],"type":"Blog","topics":["Tax","Engineering"],"artConfig":{"ampX":0.09338220796734095,"ampY":0.003481807336211201,"aspectRatio":2.9999863954808563,"axis":"x","lump":2.163670100938529,"count":98,"freq":1.0818976035267114,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-19,"mouseX":0.85744559128806,"mouseY":0.8969486919175833,"noise":0.19199904461950063,"scale":1.6510784556865692,"shape":"ellipse","top":-58,"twirl":0.14099110689759256,"twist":13.45122475655377,"velocity":2.0813053754977884,"isBalls":false,"isMatrix":false,"kaleids":6.911472934111953}},{"slug":"stripe-marketplaces-mapping-commercial-relationships-code","authorBio":"","title":"Stripe for marketplaces: Mapping commercial relationships in code","summary":"Learn how to use Stripe Connect to power your marketplace. Configure your fund flows, onboard merchants and manage payments in a few lines of code.","authors":["Ana Andres"],"date":"2025-07-03","location":[],"type":"Blog","topics":["Connect"],"artConfig":{"ampX":1.9766793812289836,"ampY":0.5794500826075674,"aspectRatio":1.388709211757034,"axis":"x","lump":0.7953244167603553,"count":80,"freq":5.547157691717147,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-12,"mouseX":0.3701595550214872,"mouseY":0.5362749179117382,"noise":0.0924019974656403,"scale":0.4936954888850451,"shape":"ellipse","top":-22,"twirl":0.16024025066941977,"twist":52,"velocity":0.9003977244831621}},{"slug":"stay-within-limits-api-rate-limit-friendly-pattern-for-stripe-webhooks","authorBio":"","title":"Stay within limits: API rate-limit-friendly pattern for Stripe webhooks","summary":"Learn how to build a resilient, rate-limit-friendly system for handling Stripe webhooks at scale. This guide explains the fetch-before-process pattern, its risks under high volume, and how to use Hookdeck to queue and throttle webhooks—ensuring reliable processing without exceeding Stripe API limits.","authors":["Phil Leggetter"],"date":"2025-07-03","location":[],"type":"Blog","topics":["Partners","Event Destinations","featured","Best Practices"],"artConfig":{"ampX":1.1490734188258647,"ampY":0.9615792935006321,"aspectRatio":2.133543042981252,"axis":"x","lump":0.5916225917451083,"count":71,"freq":1.458634289830923,"isDial":true,"isLineart":false,"isRing":false,"isSpiral":false,"left":17,"mouseX":0.7477983356317506,"mouseY":0.3664252362595871,"noise":0.23295151306316253,"scale":1.6890426686406135,"shape":"ellipse","top":-13,"twirl":0.15422323227673768,"twist":5.783708693116903,"velocity":1.8993440765906124}},{"slug":"connect-embedded-components-streamline-onboarding","authorBio":"","title":"Using Connect embedded components to streamline your Connect onboarding flow","summary":"Replace hosted onboarding with embedded Connect components. Keep users on your platform while collecting requirements and enabling payments..","authors":["Jorge Aguirre Gonzalez","Chris Streeter"],"date":"2025-07-02","location":[],"type":"Blog","topics":["Connect"],"artConfig":{"ampX":1.675425874069333,"ampY":0.23133540284633639,"aspectRatio":5,"axis":"xy","lump":0.4310723179392517,"count":9,"freq":3.6597026252299547,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-5,"mouseX":0.5351660097707063,"mouseY":0.4515072468696162,"noise":0,"scale":3.2113041574507952,"shape":"rect","top":7,"twirl":0.07008442022651434,"twist":3.8735262764617806,"velocity":0.7523834968097508}},{"slug":"implementing-scalable-metered-billing-with-stripe-how-edgee-handles-billions-of-events","authorBio":"","title":"Implementing scalable metered billing with Stripe: How Edgee handles billions of events","summary":"Discover how Edgee built a scalable, usage-based billing system processing billions of requests across 100+ global edge locations. Learn how they leverage Stripe’s metering and billing APIs to ensure accurate, resilient invoicing in a complex distributed architecture, all while solving critical web analytics data loss challenges.","authors":["Alex Casalboni"],"date":"2025-06-24","location":[],"type":"Blog","topics":["Partners","Billing"],"artConfig":{"ampX":1.1907943323627115,"ampY":1.0481240297593177,"aspectRatio":1.0182767948795108,"axis":"xy","lump":-0.32504511637240646,"count":114,"freq":0.689251296505332,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":77,"mouseX":0.29030545636136085,"mouseY":0.5566075212005526,"noise":0,"scale":11.352956793665886,"shape":"ellipse","top":-58,"twirl":0,"twist":3.63675221003592,"velocity":0.3}},{"slug":"stripe-terminal-on-screen-input-collection","authorBio":"","title":"Stop juggling multiple POS devices with Stripe Terminal","summary":"Eliminate separate devices and manual data entry. Stripe Terminal's on-screen input collection consolidates customer interactions in one place.","authors":["Andrew Robinson"],"date":"2025-06-12","location":[],"type":"Blog","topics":["Terminal","featured"],"artConfig":{"ampX":1.1584484605118632,"ampY":1.097291600394994,"aspectRatio":0.6054721770554781,"axis":"xy","lump":-0.4031760332621634,"count":109,"freq":0.5528249595314265,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":70,"mouseX":0.2887519750319421,"mouseY":0.699233176571317,"noise":0.24434509459510442,"scale":11.280519268646836,"shape":"ellipse","top":-58,"twirl":0,"twist":0.5618316302895547,"velocity":0.48408699957467616}},{"slug":"docusign-stripe-integration-automating-billing-workflows","authorBio":"","title":"Extending Docusign with Stripe to automate complex billing workflows","summary":"Discover how to streamline your agreement process by connecting DocuSign with Stripe using extension apps. Learn to build automated billing workflows without complex coding.","authors":["Paige Rossi"],"date":"2025-06-02","location":[],"type":"Blog","topics":["Partners","Billing"],"artConfig":{"ampX":1.0437597885727883,"ampY":1.1941063671819867,"aspectRatio":1.7393786174502224,"axis":"x","lump":0.8458250402100385,"count":21,"freq":1.6059011054337025,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":5,"mouseX":0.7086684291658923,"mouseY":0.41225548555888236,"noise":0,"scale":0.8704019570350647,"shape":"ellipse","top":6,"twirl":0.007263621091842656,"twist":7.468601961113513,"velocity":1.1969816408753395}},{"slug":"sessions-2025-dev-track-resources","authorBio":"","title":"Sessions 2025 Developer Track resources","summary":"Discover the latest from Stripe Sessions! Explore new products, APIs, and enhancements, including Stripe Workflows for no-code automation, MCP server for AI integration, and Accounts v2 for streamlined management.","authors":["Ashley Ansari","James Beswick","Jon Byrum"],"date":"2025-05-07","location":[],"type":"Blog","topics":["Announcements","AI"],"artConfig":{"ampX":1.2385265017673373,"ampY":1.1789534152187406,"aspectRatio":2.19772099197153,"axis":"x","lump":0.8674907110333443,"count":53,"freq":1.2679299068003893,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":15,"mouseX":0.7933444007178769,"mouseY":0.397467153952457,"noise":0.16400016673095524,"scale":0.6449861321598291,"shape":"ellipse","top":1,"twirl":0.12574257411062717,"twist":0.5210180430114271,"velocity":0.9448238679599017}},{"slug":"introducing-stripes-new-public-preview-release-channel","authorBio":"","title":"Introducing Stripe's new public preview release channel","summary":"Discover the benefits of Stripe's new public preview release channel, designed to provide early access to cutting-edge API features before their general availability. Start innovating faster with Stripe’s latest offerings while sharing your feedback to shape future developments!","authors":["Paul Anders
1on"],"date":"2025-05-07","location":[],"type":"Blog","topics":["Announcements"],"artConfig":{"ampX":1.9324815275147558,"ampY":1.877221209514886,"aspectRatio":1.1368737238928674,"axis":"xy","lump":2.840332029402256,"count":180,"freq":3.631058380588889,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":6,"mouseX":0.3713094742082059,"mouseY":0.32571208381932226,"noise":0.3497141601797193,"scale":0.2,"shape":"rect","top":14,"twirl":0,"twist":4.037389220058918,"velocity":0.31384952368587254,"isBalls":false,"isMatrix":false,"kaleids":1.7438913004472851}},{"slug":"introducing-stripe-workflows","authorBio":"","title":"Introducing Stripe Workflows: Tailoring Payments to Your Business Needs","summary":"Today, Stripe launches Stripe Workflows, a powerful new way to automate your payment operations and orchestrate Stripe products with ease—right from the Dashboard. Whether you are looking to streamline invoicing, manage fraud detection, automate subscription logic, or build custom quote-to-cash flows, Stripe Workflows helps developers move faster with fewer lines of code. With built-in support for real-time triggers, conditional logic, and seamless integration across Stripe’s ecosystem, Workflows eliminates the need for managing infrastructure or writing boilerplate logic. Instead, you get a visual, event-driven automation engine designed for high-performance financial operations at scale. In this post, we’ll explore how Stripe Workflows can help you simplify complexity, boost developer productivity, and unlock new use cases—all with low latency and high reliability.","authors":["Ben Smith"],"date":"2025-05-07","location":[],"type":"Blog","topics":["Workflows","featured"],"artConfig":{"ampX":0.9843780594319105,"ampY":0.8091666567176581,"aspectRatio":1.5914780070321635,"axis":"xy","lump":0.1645503696911037,"count":118,"freq":1.3908117066770793,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":73,"mouseX":0.2782845611227676,"mouseY":0.5862525528622791,"noise":0,"scale":11.920056828394532,"shape":"ellipse","top":-35,"twirl":0.015386222921311855,"twist":3.173233224019408,"velocity":0.5247019052244722}},{"slug":"how-to-charge-customers-across-accounts","authorBio":"","title":"How to easily charge customers across accounts in an organization","summary":"Learn how to simplify customer charging across multiple accounts in your organization using Stripe's new sharing feature.","authors":["Daniel Wood"],"date":"2025-05-07","location":[],"type":"Blog","topics":["Enterprise","Sandboxes","featured","Payments","Connect"],"artConfig":{"ampX":2,"ampY":0.18132999489456414,"aspectRatio":4.947268360145949,"axis":"xy","lump":0.19212872370332482,"count":12,"freq":2.889357400074601,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":12,"mouseX":0.5515021443899721,"mouseY":0.5519655717294663,"noise":0,"scale":4.825285009518266,"shape":"rect","top":14,"twirl":0,"twist":4.9573678980618725,"velocity":1.0079933085348458}},{"slug":"optimizing-stripe-api-performance-lambda-caching-elasticache-dynamodb","authorBio":"","title":"Optimizing Stripe API performance in Lambda with caching strategies","summary":"Discover advanced caching strategies to optimize Stripe API performance in AWS Lambda using Amazon ElastiCache and DynamoDB. Learn how to manage API rate limits, reduce latency, and minimize costs while ensuring data consistency and scalability in high-volume applications.","authors":["James Beswick"],"date":"2025-04-21","location":[],"type":"Blog","topics":["AWS"],"artConfig":{"ampX":0.3767488415837288,"ampY":0.23406388828158378,"aspectRatio":1.6417083472730591,"axis":"x","lump":0.1427717619799077,"count":63,"freq":3.139387011691928,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-39,"mouseX":0.15,"mouseY":0.7507841874063015,"noise":0,"scale":1.9982861498892306,"shape":"ellipse","top":15,"twirl":0.107349791996181,"twist":-3.6,"velocity":0.8958902275916188,"isBalls":false,"isMatrix":false,"kaleids":3.076810705475509}},{"slug":"because-nobody-likes-being-charged-twice","authorBio":"","title":"Because nobody likes being charged twice","summary":"In complex, high-volume systems, even minor failures—like a dropped internet connection—can lead to major headaches, such as duplicate charges. This post explores advanced patterns for integrating Stripe into your enterprise applications with a focus on building fault-tolerant, user-friendly payment systems. Learn how strategies like idempotency and message queues can protect your users from double charges, reduce operational errors, and improve reliability as your system scales.","authors":["Ben Smith"],"date":"2025-04-10","location":[],"type":"Blog","topics":["Best Practices","featured","Payments"],"artConfig":{"ampX":1.330115089982748,"ampY":1.892879856560379,"aspectRatio":1.595901793349348,"axis":"xy","lump":0.8326288203746081,"count":90,"freq":3.6691126785278323,"isDial":false,"isLineart":true,"isRing":true,"isSpiral":false,"left":-89,"mouseX":0.5124081813707948,"mouseY":0.5742730113286525,"noise":0.06288946143910287,"scale":2.730575782597065,"shape":"rect","top":145,"twirl":0.09745306715369224,"twist":-0.5431798469200728,"velocity":1.0345707515161484}},{"slug":"aws-microservice-architecture-subscription-management","authorBio":"James leads the Stripe Developer Relations team, helping our developer customers build solutions and learn about the benefits that Stripe offers for their workloads. He was previously a Developer Advocacy leader at AWS and loves helping startups and enterprise teams use technology to wow their customers and grow their businesses.","t
1itle":"Using an AWS microservice architecture for subscription management","summary":"Explore the complexities of enterprise subscription management and discover how an AWS microservice architecture can streamline subscription lifecycles. This guide uses AWS services to create a scalable, reliable, and auditable subscription management system, addressing challenges like mid-cycle plan changes and usage-based billing adjustments.","authors":["James Beswick"],"date":"2025-04-08","location":[],"type":"Blog","topics":["AWS","Billing"],"artConfig":{"ampX":1.7177213162183762,"ampY":0.07889741744473577,"aspectRatio":5,"axis":"xy","lump":-0.08704273444786668,"count":41,"freq":2.7749215426146985,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":2,"mouseX":0.5441776837937534,"mouseY":0.4560042572543025,"noise":0.1764732143115252,"scale":4.544444321990014,"shape":"rect","top":18,"twirl":0.023588066041469583,"twist":4.687472449876368,"velocity":1.1965398040041326}},{"slug":"unlock-powerful-analytics-stripe-data-pipeline-bigquery","authorBio":"","title":"Unlocking powerful analytics with Stripe Data Pipeline and Google BigQuery","summary":"Discover how to integrate Stripe Data Pipeline with Google Cloud Storage and BigQuery for powerful analytics. This guide walks you through setting up automated data transfers, optimizing reporting, and unlocking valuable insights to enhance your business decisions.","authors":["Sushant Jain"],"date":"2025-03-21","location":[],"type":"Blog","topics":["Best Practices"],"artConfig":{"ampX":0.7151544714272022,"ampY":0.13488471162691712,"aspectRatio":0.36863073896933346,"axis":"x","lump":0.39316587210819126,"count":23,"freq":2.4459548845142125,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":23,"mouseX":0.6463892416737974,"mouseY":0.5349612463153899,"noise":0.08868030488491058,"scale":1.9085351558029653,"shape":"rect","top":20,"twirl":0.24255725266784428,"twist":11.229501694843172,"velocity":0.9770550063196569}},{"slug":"stripes-ai-assistant-vs-code","authorBio":"","title":"Stripe’s new AI Assistant in VS Code","summary":"Learn about the Stripe AI assistant in VS Code and how we built it, including technical details on retrieval, evaluations, measurement, and more.","authors":["Mathew Varughese"],"date":"2025-03-18","location":[],"type":"Blog","topics":["AI"],"artConfig":{"ampX":0.36872040114551785,"ampY":0.12168841556832193,"aspectRatio":2.0740864244803787,"axis":"x","lump":-0.39470592584460973,"count":150,"freq":3.292577163591981,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":32,"mouseX":0.96,"mouseY":0.91,"noise":0.8065965477600694,"scale":1.3654447732269763,"shape":"line","top":14,"twirl":0,"twist":9.742599940568208,"velocity":0.8779029267448932,"isBalls":false,"isMatrix":false,"kaleids":6.9497874244302515}},{"slug":"real-time-payment-analytics-stripe-to-aws-data-pipeline","authorBio":"James leads the Stripe Developer Relations team, helping our developer customers build solutions and learn about the benefits that Stripe offers for their workloads. He was previously a Developer Advocacy leader at AWS and loves helping startups and enterprise teams use technology to wow their customers and grow their businesses.","title":"Real-time payment analytics: Building a data pipeline from Stripe to AWS","summary":"Discover how to build a scalable real-time payment analytics pipeline from Stripe to AWS. This guide explores the challenges, architectural components, and implementation details to help businesses monitor transactions, enhance security, and gain insights into customer behavior.","authors":["James Beswick"],"date":"2025-03-14","location":[],"type":"Blog","topics":["AWS","Payments"],"artConfig":{"ampX":1.1225629629194736,"ampY":1.0522793960757553,"aspectRatio":0.522304819510877,"axis":"x","lump":-1,"count":86,"freq":0.5467459508627655,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":26,"mouseX":0.8557551414430141,"mouseY":0.4798115066550672,"noise":0.2755024440363049,"scale":0.608244725689292,"shape":"line","top":-43,"twirl":0.14260473592579365,"twist":5.59297826577723,"velocity":2.4,"isBalls":false,"isMatrix":false,"kaleids":5.9057274457067255}},{"slug":"load-balancing-stripe-api-calls-multiple-aws-regions","authorBio":"","title":"Load balancing Stripe API calls from multiple AWS regions","summary":"Implementing a resilient multi-region payment processing system using AWS and Stripe ensures reliable webhook handling, minimizes outages, and complies with regulations. This guide covers architecture design, challenges, and AWS service integration for optimal global performance and rate limit management.","authors":["James Beswick"],"date":"2025-03-06","location":[],"type":"Blog","topics":["AWS"],"artConfig":{"ampX":0.5651534053608775,"ampY":0.22383294074982407,"aspectRatio":1.0100215791992844,"axis":"x","lump":-0.15149200459197165,"count":15,"freq":1.6784866620451213,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-1,"mouseX":0.7323975812705233,"mouseY":0.4525420452049002,"noise":0.37752365329116583,"scale":0.8164371352642774,"shape":"rect","top":51,"twirl":0.11133789929747581,"twist":10.57986768937856,"velocity":0.8543640773706138}},{"slug":"importing-sales-data-from-stripe-into-aws","authorBio":"","title":"Importing sales data from Stripe into AWS","summary":"This article focuses on how to process Stripe's data in your AW
1S account with minimal code. You'll learn how to query your business and customer data using SQL, assisted by an LLM (Large Language Model) for query generation. Additionally, it demonstrates how to enhance the security of your data integration by using the native Stripe-AWS integration, specifically the Stripe Event Destination to Amazon EventBridge feature.","authors":["Hidetaka Okamoto"],"date":"2025-03-04","location":[],"type":"Blog","topics":["AWS","Event Destinations"],"artConfig":{"ampX":1.224917699098587,"ampY":0.8246572561264038,"aspectRatio":2.0673549264637754,"axis":"x","lump":0.7448566784262658,"count":60,"freq":2.066032133087516,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-24,"mouseX":0.6953880344372243,"mouseY":0.4230543117281049,"noise":0,"scale":1.1409741640836,"shape":"ellipse","top":18,"twirl":0.2431108611896634,"twist":1.9132672319859267,"velocity":0.7931806973032653}},{"slug":"building-serverless-usage-notification-with-aws","authorBio":"","title":"Building serverless usage notification with AWS","summary":"In this article, we will guide you on how to set up usage threshold alerts based on consumption for customers with pay-as-you-go plans. By integrating AWS's serverless tools with Stripe, you can create a streamlined and easy-to-manage notification system with minimal coding.","authors":["Hidetaka Okamoto"],"date":"2025-02-27","location":[],"type":"Blog","topics":["AWS","Billing","Event Destinations"],"artConfig":{"ampX":1.5826123585179448,"ampY":0.23401348521560433,"aspectRatio":4.438373988522962,"axis":"xy","lump":0.23262004197761418,"count":12,"freq":2.5947623608857393,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":14,"mouseX":0.42423593047149477,"mouseY":0.5825842797374353,"noise":0.08968481931835412,"scale":3.283350773975253,"shape":"rect","top":17,"twirl":0.1401886341571808,"twist":9.29516780307889,"velocity":0.9850450144801289}},{"slug":"securing-stripe-api-keys-aws-automatic-rotation","authorBio":"","title":"Securing Stripe API Keys in AWS with automatic rotation","summary":"Learn how to securely manage and automatically rotate your Stripe API keys in AWS for a production-grade approach. This guide covers best practices, tools, and strategies to enhance the security of your financial transactions.","authors":["James Beswick"],"date":"2025-02-21","location":[],"type":"Blog","topics":["AWS","Security"],"artConfig":{"ampX":1.498401514440775,"ampY":1.1752333751246333,"aspectRatio":0.7270606099553406,"axis":"x","lump":-0.48549658866226675,"count":30,"freq":0.9694276267886162,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-120,"mouseX":0.639198434332572,"mouseY":0.5475645364578814,"noise":3.1291765929143875,"scale":0.7148183508366347,"shape":"ellipse","top":-58,"twirl":0,"twist":13.181632682830095,"velocity":0.8366091138441115,"isBalls":true,"isMatrix":true}}
1,{"slug":"tracking-customer-spend-omnichannel-multiprocessor-environment","authorBio":"Stripe Solutions Architect","title":"Tracking customer spend in an omnichannel or multiprocessor environment","summary":"Discover how to effectively track customer spending across multiple channels and payment processors. Learn about the challenges of fragmented payment systems and explore solutions like the Payment Account Reference (PAR) to gain a unified view.","authors":["Andrew Robinson"],"date":"2025-02-19","location":[],"type":"Blog","topics":["Enterprise","Payments"],"artConfig":{"ampX":0.9252345254272223,"ampY":1.2300847350880504,"aspectRatio":1.695495242172666,"axis":"x","lump":0.9612371493726968,"count":44,"freq":1.4478886089771987,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":8,"mouseX":0.8702071143476293,"mouseY":0.28491660061851143,"noise":0.09558223692141472,"scale":2.462239449694753,"shape":"ellipse","top":12,"twirl":0.19293735119700434,"twist":3.590541084341705,"velocity":1.06229620552063}},{"slug":"building-solid-stripe-integrations-developers-guide-success","authorBio":"James leads the Stripe Developer Relations team, helping our developer customers build solutions and learn about the benefits that Stripe offers for their workloads. He was previously a Developer Advocacy leader at AWS and loves helping startups and enterprise teams use technology to wow their customers and grow their businesses.","title":"Building rock-solid Stripe integrations: A developer's guide to success","summary":"Learn about Stripe integrations with essential tips for robust, secure payment systems and seamless user experiences. This guide prepares developers for real-world scenarios, from subscription management to dispute resolution, ensuring secure and seamless payments.","authors":["James Beswick"],"date":"2025-02-06","location":[],"type":"Blog","topics":["Getting Started","featured","Best Practices"],"artConfig":{"ampX":1.6105292682945729,"ampY":0.7756243682540953,"aspectRatio":1.6313232528455557,"axis":"x","lump":1.1371694093868137,"count":92,"freq":4.70252471382916,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":17,"mouseX":0.4153226799245924,"mouseY":0.5844921886269003,"noise":0.14895777487568557,"scale":0.2,"shape":"ellipse","top":-2,"twirl":0.010016741812229155,"twist":52,"velocity":0.8435400511715561}},{"slug":"building-resilient-webhook-handlers-aws-dlqs-stripe-events","authorBio":"","title":"Building resilient webhook handlers in AWS: Implementing DLQs for Stripe events","summary":"Discover how to build reliable webhook handlers for Stripe events using AWS in this comprehensive guide. Learn about the challenges of processing webhook events at scale and how to address them with an enterprise-grade architecture.","authors":["James Beswick"],"date":"2025-01-30","location":[],"type":"Blog","topics":["AWS","Event Destinations","Best Practices"],"artConfig":{"ampX":1.8089753604754806,"ampY":1.3438394609354438,"aspectRatio":0.9060814158147201,"axis":"xy","lump":-0.13661446375027297,"count":120,"freq":1.026840758368373,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":true,"left":13,"mouseX":0.7854965473985299,"mouseY":0.3990608404679224,"noise":0,"scale":2.620446127146483,"shape":"ellipse","top":-24,"twirl":0.11634997764229774,"twist":2.014559140898287,"velocity":0.3}},{"slug":"new-to-stripe-learn-key-concepts-software-developers","authorBio":"","title":"New to Stripe? Learn the key concepts for software developers.","summary":"Discover the key concepts and terms for integrating Stripe in your applications. This guide covers Payment Intents Customer management, Subscription billing, Webhooks, Disputes, Refunds, and the benefits of expanded responses, providing developers with the tools they need to streamline payment processing efficiently.","authors":["James Beswick"],"date":"2025-01-29","location":[],"type":"Blog","topics":["Getting Started","featured"],"artConfig":{"ampX":0.9792227873206139,"ampY":0.9983640877865255,"aspectRatio":1.6598977617664263,"axis":"xy","lump":0.3001851764805615,"count":108,"freq":1.455964275971055,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":90,"mouseX":0.16148884493056687,"mouseY":0.5829434520248323,"noise":0,"scale":12.2,"shape":"ellipse","top":-58,"twirl":0,"twist":-3.6,"velocity":0.33666040798835456}},{"slug":"testing-connect-onboarding-with-sandboxes","authorBio":"","title":"Testing Connect onboarding with Sandboxes","summary":"As a platform, you can accelerate your Connect development with Sandboxes, by replicating your live settings to test out the merchant onboarding flow.","authors":["David Edoh-Bedi"],"date":"2024-12-19","location":[],"type":"Blog","topics":["Connect","Sandboxes","Testing"],"artConfig":{"ampX":0.7624491764605046,"ampY":0.8634627563431859,"aspectRatio":1.3958354421356693,"axis":"x","lump":0.9732032558955253,"count":45,"freq":2.194027800217271,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":15,"mouseX":0.7162410370657221,"mouseY":0.2825263974433765,"noise":0.30258591084368525,"scale":1.8188828843086957,"shape":"ellipse","top":6,"twirl":0.1587403040677309,"twist":13.296988923132421,"velocity":1.0809863091502339}},{"slug":"crush-errors-with-sandbox-testing","authorBio":"","title":"Crush errors with Sandbox testing","summary":"With Sandboxes, you can reproduce and troubleshoot errors in your integration without impacting live transactions.","authors":["David Edoh-Bedi"],"date":"2024-12-19","location":[],"type":"Blog","topics":["Sandboxes","Testing"],"artConfig":{"ampX":1.8292240097001196,"ampY":1.0550612228140235,"aspectRatio":1.5155257004173472,"axis":"x","lump":-0.3573925295323133,"count":12,"freq":0.9078896445631981,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-120,"mouseX":0.4609671447768808,"mouseY":0.45811957723181695,"noise":3.246083348248154,"scale":1.6499486129134895,"shape":"ellipse","top":-51,"twirl":0.008496589198708542,"twist":11.204601893663405,"velocity":1.0265333495102822,"isBalls":true,"isMatrix":true}},{"slug":"developing-modern-architecture-energy-utilities-embedded-finance","authorBio":"","title":"Developing a modern architecture for energy utilities with embedded finance","summary":"This blog explores how utilities can enhance customer engagement and capture energy-related revenue by creating an online marketplace.","authors":["Rajan Patel"],"date":"2024-12-17","location":[],"type":"Blog","topics":["Connect","Billing","Payments"],"artConfig":{"ampX":1.0779044286906718,"ampY":0.846025205604732,"aspectRatio":2.534584754092246,"axis":"xy","lump":-0.09928583047538997,"count":64,"freq":1.1108948035389186,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-18,"mouseX":0.2919040431544185,"mouseY":0.8914148547872901,"noise":0,"scale":0.2,"shape":"ellipse","top":-42,"twirl":0.018720087960362435,"twist":6.526891662307084,"velocity":0.8804812370575964,"isBalls":false,"isMatrix":false,"kaleids":7.163547961562872}},{"slug":"how-do-i-store-inventory-data-in-my-stripe-application","authorBio":"","title":"How do I store inventory data in my Stripe application","summary":"Explore the critical importance of managing real-time inventory updates for both online marketplaces and physical stores. This blog post details the development of an event-driven architecture designed to synchronize inventory levels with Stripe payment events using AWS cloud services. The demonstration centers around the DevRel Swag Store, showcasing a practical application used at the GOTO Chicago event, which integrates serverless technologies like Amazon DynamoDB, AWS Lambda, and IoT Core for efficient inventory management. Learn about the challenges of using Stripe metadata for inventory, and discover robust solutions for handling race conditions and implementing dynamic inventory checks. Additionally, understand the trade-offs between using Stripe Payment Links and custom payment processes for real-time stock validation.","authors":["Ben Smith"],"date":"2024-12-16","location":[],"type":"Blog","topics":["Event Destinations","AWS"],"artConfig":{"ampX":1.172770593650639,"ampY":0.880255790092051,"aspectRatio":1.5511224264223127,"axis":"x","lump":0.7944968152977526,"count":27,"freq":1.058919788017869,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":12,"mouseX":0.7839658829091117,"mouseY":0.3697677732603624,"noise":0,"scale":2.4088778119534253,"shape":"ellipse","top":-23,"twirl":0.2114381913691759,"twist":4.185358300231398,"velocity":1.1552521742153914}},{"slug":"japan-community-highlights-2024-09","authorBio":"","title":"Japan community highlights: Effective testing and security","summary":"This article highlights development tips for efficiently developing and operating Stripe at a lower cost, as presented by the Japanese Stripe user community JP_Str
1ipes. We'll focus on content from two events held in September 2024 in Aizuwakamatsu, Fukushima Prefecture, and Sapporo, Hokkaido.","authors":["Hidetaka Okamoto"],"date":"2024-12-13","location":[],"type":"Blog","topics":["Connect","Billing","Sandboxes"],"artConfig":{"ampX":2,"ampY":1.9150257312655448,"aspectRatio":1.6189771253719927,"axis":"xy","lump":2.955639018502086,"count":180,"freq":3.904117453828454,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":0,"mouseX":0.25847873679641636,"mouseY":0.4852314185043797,"noise":0,"scale":0.2,"shape":"rect","top":-5,"twirl":0,"twist":-3.6,"velocity":0.4515057152565568,"isBalls":false,"isMatrix":false,"kaleids":1.8850633352994919}},{"slug":"enhance-your-monitoring-by-integrating-stripe-events-with-aws-cloudwatch-log-groups","authorBio":"","title":"Enhance your monitoring by integrating Stripe events with AWS CloudWatch Log Groups","summary":"Integrating Stripe events with AWS CloudWatch Log Groups enhances monitoring by enabling real-time tracking and analysis of Stripe transactions. This setup allows for seamless transfer of Stripe data to CloudWatch via Amazon EventBridge, streamlining payment operations. It provides the tools to visualize, monitor, and respond to events efficiently, optimizing strategic decisions.","authors":["Andrew Robinson"],"date":"2024-12-09","location":[],"type":"Blog","topics":["Workbench","Payments","AWS","Event Destinations"],"artConfig":{"ampX":0.1443630461320281,"ampY":0.13011489147692917,"aspectRatio":1.4381185373557732,"axis":"x","lump":-0.6730499860644341,"count":94,"freq":3.423000984072685,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-67,"mouseX":0.15683255794811993,"mouseY":0.6948088035909459,"noise":0.4560574368610978,"scale":0.2,"shape":"ellipse","top":-21,"twirl":0.061069467216730115,"twist":2.5711894369795916,"velocity":1.0292963924258947,"isBalls":false,"isMatrix":false,"kaleids":3.5365324418991806}},{"slug":"data-access-patterns-for-simple-stripe-Integrations","authorBio":"","title":"Data access patterns for simple Stripe integrations","summary":"Is your Stripe integration ready to scale with your application? In this blog post, explore smart data strategies to enhance performance and security. Learn how to leverage Stripe/'s features, secure web backends, and serverless functions for efficient data management. Discover when to integrate a global CDN and use a separate database for deeper data control, ensuring a seamless user experience.","authors":["Ben Smith"],"date":"2024-11-27","location":[],"type":"Blog","topics":["Event Destinations","AWS"],"artConfig":{"ampX":1.7919516241177917,"ampY":1.9949761289320884,"aspectRatio":1.7399122468773276,"axis":"xy","lump":2.6798840146139264,"count":180,"freq":4.114458929747343,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-21,"mouseX":0.2923189404210076,"mouseY":0.39809732290077954,"noise":0.27874227867275475,"scale":0.2,"shape":"rect","top":6,"twirl":0.12833293332159518,"twist":-1.2869194818288088,"velocity":0.3012707959804684,"isBalls":false,"isMatrix":false,"kaleids":2.816165357641876}},{"slug":"managing-multiple-stripe-test-environments-from-aws","authorBio":"","title":"Managing multiple Stripe test environments from your AWS-hosted application","summary":"Stripe sandboxes enhance test environment management, offering improved functionality over test mode, allowing isolated accounts, multiple developers, and better access control while integrating seamlessly with AWS applications.","authors":["James Beswick"],"date":"2024-11-26","location":[],"type":"Blog","topics":["Sandboxes","AWS"],"artConfig":{"ampX":0.9913623155653477,"ampY":1.1209751350469888,"aspectRatio":0.43154332731366163,"axis":"x","lump":-0.9722526994496584,"count":62,"freq":1.0124742446392774,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":-2,"mouseX":0.817478006875515,"mouseY":0.5516544564105571,"noise":0,"scale":0.2,"shape":"line","top":-48,"twirl":0.07492835426330566,"twist":3.761196671113372,"velocity":2.4,"isBalls":false,"isMatrix":false,"kaleids":5.628658697754145}},{"slug":"getting-started-with-stripe-in-the-uae","authorBio":"","title":"Getting started with Stripe in the UAE: A comprehensive guide for developers","summary":"Stripe has emerged as a vital payment processing platform in the UAE, offering diverse features like automated billing, fraud protection, and multi-currency supp
1ort, empowering developers to streamline e-commerce operations.","authors":["Soad Abuelnaga"],"date":"2024-11-25","location":[],"type":"Blog","topics":["Getting Started"],"artConfig":{"ampX":0.9609549232199788,"ampY":0.8665922976396978,"aspectRatio":2.2115533718610183,"axis":"xy","lump":0.09325716844946147,"count":99,"freq":1.5017359147518874,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":12,"mouseX":0.828653909263201,"mouseY":0.47631639395281666,"noise":0.13093168436177077,"scale":1.5399914291352035,"shape":"ellipse","top":-9,"twirl":0,"twist":-3.6,"velocity":0.5510742544345557}},{"slug":"using-demo-data-for-testing-stripe-integrations-in-aws","authorBio":"","title":"Using demo data for testing Stripe integrations in AWS-hosted applications","summary":"This post discusses integrating the Stripe agent toolkit with large language models (LLMs) to enhance automation workflows, enabling financial services access, metered billing, and streamlined operations across agent frameworks.","authors":["James Beswick"],"date":"2024-11-22","location":[],"type":"Blog","topics":["Sandboxes","AWS","Testing"],"artConfig":{"ampX":1.6845409780964256,"ampY":0.7599886810854077,"aspectRatio":1.95409757806696,"axis":"y","lump":0.6725110247358679,"count":78,"freq":5.71794087781012,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":1,"mouseX":0.48699515048787,"mouseY":0.1284782191924751,"noise":0.3409855146389454,"scale":1.67477119320631,"shape":"rect","top":88,"twirl":0.11412181551009418,"twist":52,"velocity":0.8055967411361634}},{"slug":"avoiding-silent-errors","authorBio":"","title":"Avoiding silent errors in your Stripe integration","summary":"Once your Stripe integration is live, it’s easy to set it and forget it. You can move on and focus on other elements of your application. However, trouble may be brewing behind the scenes. Unless you’ve set up robust logging and alerting in your application you may not be aware of increasing Stripe API error rates which could impact your bottom line","authors":["Abe Haskins"],"date":"2024-11-21","location":[],"type":"Blog","topics":["Workbench","Best Practices"],"artConfig":{"ampX":0.8622068785130977,"ampY":0.7518007785975933,"aspectRatio":2.204805870736949,"axis":"x","lump":1.262550710491836,"count":72,"freq":1.2086420054882765,"isDial":true,"isLineart":false,"isRing":false,"isSpiral":false,"left":-18,"mouseX":0.8615023729234934,"mouseY":0.3236792556196451,"noise":0.0004063420593738555,"scale":0.2,"shape":"ellipse","top":-9,"twirl":0.009184165894985205,"twist":0.6688213121220469,"velocity":2.006237599372864}},{"slug":"adding-payments-to-your-agentic-workflows","authorBio":"","title":"Adding payments to your LLM agentic workflows","summary":"This post discusses integrating the Stripe agent toolkit with large language models (LLMs) to enhance automation workflows, enabling financial services access, metered billing, and streamlined operations across agent frameworks.","authors":["Steve Kaliski"],"date":"2024-11-14","location":[],"type":"Blog","topics":["Agentic Commerce","AI","featured","Payments"],"artConfig":{"ampX":1.053410340063274,"ampY":1.154779110111296,"aspectRatio":1.8271525234071537,"axis":"xy","lump":0.889705343645066,"count":77,"freq":1.841051739141345,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":11,"mouseX":0.7798387266946957,"mouseY":0.6319675470804795,"noise":0.4279176106266677,"scale":3.5328275118619206,"shape":"ellipse","top":-23,"twirl":0.0014015480205416678,"twist":-3.6,"velocity":0.3504606488998979}},{"slug":"developing-and-investigating-subscription-data-flow","authorBio":"","title":"Developing and investigating subscription data flow","summary":"This article shows you how to use Stripe's sandbox to simplify your development process. You'll learn to create isolated test environments, simulate real-world scenarios, and debug your subscription logic efficiently. ","authors":["Hidetaka Okamoto"],"date":"2024-11-13","location":[],"type":"Blog","topics":["Workbench","Billing","Sandboxes"],"artConfig":{"ampX":1.3586530078947545,"ampY":0.3950942718014121,"aspectRatio":5,"axis":"xy","lump":0.18357885998114945,"count":1,"freq":2.7364269140660764,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-11,"mouseX":0.5375148387022316,"mouseY":0.5051424801340326,"noise":0.323183708678931,"scale":2.8176841547340157,"shape":"rect","top":7,"twirl":0.07936689525842668,"twist":14.0715346076563,"velocity":0.8031195790544152}},{"slug":"managing-saas-access-control-with-stripe-entitlements-api","authorBio":"","title":"Managing SaaS access control with Stripe’s Entitlements API","summary":"This post introduces how to manage SaaS feature entitlements efficie
1ntly using the Stripe API. It explains why it's important to provide multiple plans to your customers and how to differentiate each plan through entitlement management. With the Stripe API, managing entitlements can become more straightforward, allowing you to focus on building and improving your core services.","authors":["Hidetaka Okamoto"],"date":"2024-10-31","location":[],"type":"Blog","topics":["Workbench","Billing"],"artConfig":{"ampX":1.2360790884941817,"ampY":2.2,"aspectRatio":2.025395252628252,"axis":"xy","lump":1.199469288971275,"count":97,"freq":3.7884911077916623,"isDial":false,"isLineart":true,"isRing":true,"isSpiral":false,"left":-71,"mouseX":0.4417685773631558,"mouseY":0.48165497033391147,"noise":0,"scale":1.1792067065238954,"shape":"rect","top":142,"twirl":0.01673245295137167,"twist":-3.6,"velocity":0.7890032974611968}},{"slug":"growing-your-stripe-integration-with-event-destinations","authorBio":"","title":"Growing your Stripe integration With Event Destinations","summary":"Event Destinations has begun rolling out to general availability as of 10/30 and will soon be enabled for all accounts. This post explores how to use Stripe Event Destinations and Amazon EventBridge to achieve near infinite customization possibilities for your payment solutions without disrupting your existing integrations.","authors":["Ben Smith"],"date":"2024-10-31","location":[],"type":"Blog","topics":["Event Destinations","AWS"],"artConfig":{"ampX":1.570415560424328,"ampY":2.1547016086131334,"aspectRatio":0.9850190538810566,"axis":"xy","lump":0.43591167057305574,"count":94,"freq":3.710680815026164,"isDial":false,"isLineart":true,"isRing":true,"isSpiral":false,"left":-83,"mouseX":0.5717536989314481,"mouseY":0.5392546817259863,"noise":0,"scale":2.9839173756688835,"shape":"rect","top":150,"twirl":0,"twist":1.3434912820905447,"velocity":0.8896432484667748}},{"slug":"prepare-for-api-upgrades","authorBio":"","title":"Preparing for Stripe API upgrades","summary":"New Stripe API versions come with new, and sometimes breaking, changes which should be evaluated before upgrading. Stripe Sandboxes and Workbench provide tooling to create isolated workspaces to test applications against these new changes.","authors":["Cecil Phillip"],"date":"2024-10-24","location":[],"type":"Blog","topics":["Workbench","Best Practices"],"artConfig":{"ampX":0.9056666521728038,"ampY":1.2394122493043542,"aspectRatio":2.0397033766528594,"axis":"xy","lump":-0.6415028828904032,"count":81,"freq":0.8031748651266098,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-48,"mouseX":0.21974816110078246,"mouseY":0.91,"noise":0.34510451543144877,"scale":2.548987401589751,"shape":"ellipse","top":-51,"twirl":0,"twist":-0.8194780293479558,"velocity":0.8349142113663256,"isBalls":false,"isMatrix":false,"kaleids":7.949364857524634}},{"slug":"optimize-payment-flow-reduce-complexity-stripe-ab-testing","authorBio":"","title":"Optimize payment flow while reducing code complexity with Stripe's A/B Testing","summary":"This post explores how to leverage Stripe's A/B testing, its benefits, and how you can use it to boost online sales. You can learn how to improve the conversion rate by optimizing payment options without adding further code.","authors":["Hidetaka Okamoto"],"date":"2024-10-23","location":[],"type":"Blog","topics":["Workbench","Payments"],"artConfig":{"ampX":0.7879538828879595,"ampY":1.0017467811331153,"aspectRatio":1.5201428325321524,"axis":"xy","lump":0.16062325651198625,"count":131,"freq":1.261089227348566,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":66,"mouseX":0.15,"mouseY":0.6097445337017998,"noise":0.21932056963071225,"scale":12.2,"shape":"ellipse","top":-58,"twirl":0.09173336865752935,"twist":0.29001188596338046,"velocity":0.3716849421467632}},{"slug":"easily-debug-your-3ds-authentication-with-stripe-workbench","authorBio":"","title":"Easily debug your 3DS authentication with Stripe Workbench","summary":"In this article, you'll learn how to investigate the payment process with just a few clicks on the Stripe dashboard. You'll also see how to obtain event data for testing code related to the 3DS authentication flow.","authors":["Hidetaka Okamoto"],"date":"2024-10-22","location":[],"type":"Blog","topics":["Workbench","Payments"],"artConfig":{"ampX":0.9645909705758094,"ampY":0.8027019091211259,"aspectRatio":2.067191575508751,"axis":"xy","lump":0.12506812156736852,"count":103,"freq":1.6848665851354598,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":-8,"mouseX":0.819478856388852,"mouseY":0.5429598169028759,"noise":0.13323230679892006,"scale":3.811793321877718,"shape":"ellipse","top":16,"twirl":0,"twist":3.6847156076133256,"velocity":0.3}},{"slug":"creating-reusable-dev-environments-with-sandboxes","authorBio":"","title":"Creating reusable developer environments with Stripe Sandboxes","summary":"When onboarding new team members, getting their development environments setup can be very time consuming. Preprovisioned environments with Stripe sandboxes and development containers can speed up their time to productivity.","authors":["Cecil Phillip"],"date":"2024-10-20","location":[],"type":"Blog","topics":["Sandboxes"],"artConfig":{"ampX":1.1931807071343064,"ampY":1.1030492421798408,"aspectRatio":1.5446299369910732,"axis":"x","lump":0.3728009130656719,"count":12,"freq":0.9700207155048848,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":-22,"mouseX":0.8518788558401168,"mouseY":0.39336311572603877,"noise":0.058365108825266354,"scale":0.507090900093317,"shape":"ellipse","top":-3,"t
1wirl":0.16168526308238507,"twist":1.041202739417554,"velocity":1.2047880839146674}},{"slug":"testing-subscriptions-with-stripe-test-clocks-and-workbench","authorBio":"","title":"Testing subscriptions with Stripe Test Clocks and Workbench","summary":"Validating payment logic that gets triggered over a period of time is challenging and sometimes results in inelegant solutions.The combination of test clocks and workbench will improve the ability for developers to build and debug recurring payments.","authors":["Cecil Phillip"],"date":"2024-10-14","location":[],"type":"Blog","topics":["Workbench","Payments","Testing","Billing"],"artConfig":{"ampX":2,"ampY":0.28903078616410494,"aspectRatio":4.779733519972302,"axis":"xy","lump":0.13432002448663116,"count":10,"freq":3.536246230483055,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":16,"mouseX":0.4068068985817954,"mouseY":0.5567333735860884,"noise":0,"scale":4.399375893399119,"shape":"rect","top":24,"twirl":0.11414123845845461,"twist":8.202933644533157,"velocity":1.0940135593172162}},{"slug":"choosing-the-right-sandbox-strategy-for-your-organization","authorBio":"","title":"Choosing the right sandbox strategy for your organization","summary":"Stripe Sandboxes offer a powerful solution for isolating testing environments, but how you implement them can make all the difference. Pick a sandbox strategy that best suits your organizations development approach and team size.","authors":["Ben Smith"],"date":"2024-09-26","location":[],"type":"Blog","topics":["Sandboxes"],"artConfig":{"ampX":1.4100584575161337,"ampY":0.27519091287627817,"aspectRatio":5,"axis":"xy","lump":-0.03242161624506116,"count":4,"freq":3.655090434283018,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-8,"mouseX":0.494246414626576,"mouseY":0.6015672913789749,"noise":0,"scale":4.265179076194763,"shape":"rect","top":17,"twirl":0.014367580346763137,"twist":15.678466108031571,"velocity":1.0994131933432072}},{"slug":"upgrading-your-stripe-plugin-security","authorBio":"","title":"Upgrading your Stripe plugin security","summary":"Secure your Stripe integrations by ditching unrestricted secret keys—learn how to protect merchant accounts with restricted access API keys and OAuth 2.0, and avoid compliance fees.","authors":["Ben Smith"],"date":"2024-09-19","location":[],"type":"Blog","topics":["Best Practices","Security"],"artConfig":{"ampX":0.9999826089441776,"ampY":0.11144591095298527,"aspectRatio":1.8101356898909433,"axis":"y","lump":1.112302258387208,"count":98,"freq":2.858153666332364,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-1,"mouseX":0.5653092885501683,"mouseY":0.697340868268162,"noise":0,"scale":0.5401597420275213,"shape":"ellipse","top":11,"twirl":0,"twist":1.1352279501259326,"velocity":0.45141213250160217,"isBalls":false,"isMatrix":false,"kaleids":2.8762217269837853}},{"slug":"avoiding-test-mode-tangles-with-stripe-sandboxes","authorBio":"","title":"Avoiding test mode tangles with Stripe Sandboxes","summary":"Discover how to create independent testing environments with Stripe Sandboxes, streamline your development through GitHub automation, and prioritize the security of your API keys to enhance your payment integration process.","authors":["Ben Smith"],"date":"2024-09-16","location":[],"type":"Blog","topics":["Sandboxes","Testing"],"artConfig":{"ampX":0.16601333349198102,"ampY":0.1717356364764273,"aspectRatio":2.2270198005262762,"axis":"x","lump":2.1642113653868438,"count":113,"freq":1.4637801868617535,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":11,"mouseX":0.9010868740987032,"mouseY":0.91,"noise":0,"scale":0.2,"shape":"ellipse","top":-58,"twirl":0.2985394545197487,"twist":14.144919954039157,"velocity":1.814680639695376,"isBalls":false,"isMatrix":false,"kaleids":8.978498646616936}},{"slug":"advanced-error-handling-patterns-for-Stripe-enterprise-developers","authorBio":"","title":"Advanced error handling patterns for Stripe enterprise developers","summary":"This post demonstrates some more advanced patterns to help you build resilient and robust payment systems to integrate Stripe with your enterprise applications. As your integration grows in complexity and volume, these patterns become crucial for maintaining system stability and providing a smooth user experience.","authors":["Ben Smith"],"date":"2024-09-03","location":[],"type":"Blog","topics":["Workbench","Best Practices","Enterprise"],"artConfig":{"ampX":0.9756479376927019,"ampY":1.2601135640181602,"aspectRatio":2.267775402307138,"axis":"xy","lump":-0.5367118107676505,"count":95,"freq":0.431840860798955,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-47,"mouseX":0.16199311062246563,"mouseY":0.91,"noise":0,"scale":0.690342872902751,"shape":"ellipse","top":-40,"twirl":0,"twist":7.442183572009206,"velocity":0.9052430663537234,"isBalls":false,"isMatrix":false,"kaleids":7.956443970985711}},{"slug":"simple-error-handling-strategies-with-stripe-workbench","authorBio":"","title":"Simple error handling strategies with Stripe Workbench","summary":"With Workbench, developers now have a bird’s-eye view of their integration which shows many potential issues in one place. This makes it easier to see the impact of each incident, see how often it’s happening, and receive actionable advice for resolving the issue.","authors":["Ben Smith"],"date":"2024-09-02","location":[],"type":"Blog","topics":["Workbench","Best Practices"],"artConfig":{"ampX":0.9416396580636501,"ampY":1.2424033663868905,"aspectRatio":1.5304242260912433,"axis":"x","lump":-0.02472964565455915,"count":67,"freq":2.4967724843621255,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-5,"mouseX":0.7529017591726035,"mouseY":0.4269032971905544,"noise":0.060468036599457264,"scale":0.4844295035302639,"shape":"ellipse","top":22,"twirl":0.011817976325750365,"twist":7.538950800284743,"velocity":0.7930023423731327}
1},{"slug":"stripe-developer-digest-august-2024-workbench-is-now-available-to-everyone","authorBio":"","title":"Stripe Developer Digest (August 2024): Workbench is now available to everyone","summary":"Test Stripe functionality in an isolated environment","authors":["Stripe Team"],"date":"2024-08-30","location":[],"type":"Blog","topics":["Announcements"],"artConfig":{"ampX":0.6446634973511101,"ampY":0.14603524768352508,"aspectRatio":0.52718810767252,"axis":"x","lump":-0.15188536016643048,"count":28,"freq":2.581720632791519,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-8,"mouseX":0.6473556031038985,"mouseY":0.49112572643719615,"noise":0.10408214448206127,"scale":1.7072844007611274,"shape":"rect","top":41,"twirl":0.3177125829681754,"twist":-0.4189406661465762,"velocity":0.9649985942784697}},{"slug":"debugging-your-stripe-invoicing-integration-with-workbench","authorBio":"","title":"Debugging your Stripe Invoicing integration with Workbench","summary":"With Stripe Invoicing, you can create and manage invoices for one-time and recurring payments. Whether caused by infrastructure issues or coding bugs, integration failures do sometimes happen, which can prevent invoices from being paid in a timely manner.","authors":["David Edoh-Bedi"],"date":"2024-08-29","location":[],"type":"Blog","topics":["Workbench","Billing"],"artConfig":{"ampX":1.0971170450374483,"ampY":1.0360280923619867,"aspectRatio":1.3043966312961652,"axis":"x","lump":0.9065256463252008,"count":84,"freq":1.4424794520437718,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":18,"mouseX":0.84284598983787,"mouseY":0.3307695440100506,"noise":0.3224359083864837,"scale":5.223352610170841,"shape":"ellipse","top":16,"twirl":1.1569836535006763,"twist":8.589164060734213,"velocity":1.1359732291139661}}
1,{"slug":"bringing-your-stripe-objects-to-life-with-workbench","authorBio":"","title":"Bringing your Stripe objects to life with Workbench","summary":"This post shows how to use the Stripe Workbench Inspector to examine the lifecycle of a PaymentIntent object.","authors":["Ben Smith"],"date":"2024-08-29","location":[],"type":"Blog","topics":["Workbench","Payments"],"artConfig":{"ampX":0.951698473058641,"ampY":1.0052086895890533,"aspectRatio":1.9941408100508153,"axis":"x","lump":0.7114288439154625,"count":80,"freq":0.4,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":1,"mouseX":0.8457128413669766,"mouseY":0.3492515600873157,"noise":0.0685310950241983,"scale":2.431199117824435,"shape":"ellipse","top":-2,"twirl":0.06209683027863504,"twist":1.4602773790508508,"velocity":1.036521389413625}},{"slug":"peeking-under-the-hood-of-stripe-invoicing","authorBio":"","title":"Peeking under the hood of Stripe Invoicing","summary":"Stripe Invoicing offers a no-code solution for sending invoices to customers. Because this option handles the complexity of all underlying API calls, developers sometimes struggle to understand the different phases a Stripe invoice goes through, which is problematic when attempting to debug payment failures. ","authors":["David Edoh-Bedi"],"date":"2024-08-26","location":[],"type":"Blog","topics":["Workbench","Billing"],"artConfig":{"ampX":2,"ampY":2.1141901888735593,"aspectRatio":1.3322153600061313,"axis":"xy","lump":3.163461266539991,"count":164,"freq":3.2274895399957897,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":3,"mouseX":0.3685777423897758,"mouseY":0.45448552729934455,"noise":0,"scale":1.3472718529552221,"shape":"rect","top":-14,"twirl":0.08539312069863081,"twist":-2.180075534015894,"velocity":0.3,"isBalls":false,"isMatrix":false,"kaleids":3.1393651155754925}},{"slug":"observing-immediate-versus-delayed-payments-with-stripe-workbench","authorBio":"","title":"Observing immediate versus delayed payments with Stripe Workbench","summary":"Immediate and delayed payments need to be handled differently within an integration. It’s important to understand what events to listen for and properties to inspect for relevant changes.","authors":["Cecil Phillip"],"date":"2024-08-23","location":[],"type":"Blog","topics":["Workbench","Payments"],"artConfig":{"ampX":1.00034933693707,"ampY":0.926659873984754,"aspectRatio":1.6726436272988094,"axis":"xy","lump":0.7408588064983488,"count":101,"freq":1.6166019380837677,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":15,"mouseX":0.7312278966085985,"mouseY":0.6023044462008401,"noise":0.5321259084846824,"scale":3.553458194568753,"shape":"ellipse","top":-17,"twirl":0.13580134990811346,"twist":-2.782196592569351,"velocity":0.3638250589761883}},{"slug":"resolving-production-issues-in-your-aws-stripe-integration-using-workbench","authorBio":"","title":"Resolving production issues in your AWS/Stripe integration using Workbench","summary":"This blog shows how to find when something is wrong in production, avoid jumping between tabs/docs to find information, and resolving issues quickly in the troubleshooting process, using an AWS integration as a starting point.","authors":["James Beswick"],"date":"2024-08-21","location":[],"type":"Blog","topics":["Workbench","AWS"],"artConfig":{"ampX":1.0728129578381778,"ampY":0.8459605697989464,"aspectRatio":2.2581436963373793,"axis":"x","lump":0.6021871911920607,"count":53,"freq":1.8261547539830207,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-4,"mouseX":0.7780944751663134,"mouseY":0.2811180308507755,"noise":0.10820950365811585,"scale":2.047101929411292,"shape":"ellipse","top":23,"twirl":0.15055735884606838,"twist":7.423867710627616,"velocity":0.9832444059103728}},{"slug":"debugging-your-aws-stripe-integration-just-got-easier","authorBio":"","title":"Debugging your AWS/Stripe integration just got easier","summary":"For developers building on AWS, you have various choices for processing payments within your application. Most developers choose a payment processing service to handle this part of their application flow, which involves integrating with a third-party vendor outside of the AWS environment.","authors":["James Beswick"],"date":"2024-08-21","location":[],"type":"Blog","topics":["Workbench","AWS"],"artConfig":{"ampX":1.8233348797857762,"ampY":0,"aspectRatio":5,"axis":"xy","lump":0.009064630251377822,"count":10,"freq":2.9891599034667014,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":-21,"mouseX":0.4759936618426815,"mouseY":0.5784949325518682,"noise":0.059051115129142996,"scale":4.148925440013409,"shape":"rect","top":-8,"twirl":0,"twist":4.273897265024484,"velocity":0.868791313489899}},{"slug":"doing-more-with-less-reducing-requests-to-the-stripe-api","authorBio":"","title":"Doing more with less: Reducing requests to the Stripe API","summary":"The performance of an application can directly affect the customer experience. Using the expand feature along with caching techniques, developers can improve the performance of their application by reducing the number of API calls to Stripe.","authors":["Cecil Phillip"],"date":"2024-08-19","location":[],"type":"Blog","topics":["Workbench","Best Practices"],"artConfig":{"ampX":1.0515860204026104,"ampY":1.2245470198243857,"aspectRatio":1.1498437596602364,"axis":"xy","lump":0.47329222855344416,"count":111,"freq":0.4,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":3,"mouseX":0.7709293240495027,"mouseY":0.6746938568297773,"noise":0.32285525206848975,"scale":0.7793133001476527,"shape":"rect","top":-33,"twirl":0.44091834232211113,"t
1wist":-2.722107929907739,"velocity":0.48555313114635645,"isBalls":false,"isMatrix":false,"kaleids":7.352845200076699}},{"slug":"stripe-developer-digest-june-2024-join-the-sandboxes-private-beta","authorBio":"","title":"Stripe Developer Digest (June 2024): Join the Sandboxes private beta","summary":"Test Stripe functionality in an isolated environment","authors":["Stripe Team"],"date":"2024-06-30","location":[],"type":"Blog","topics":["Announcements"],"artConfig":{"ampX":1.760415432177484,"ampY":0.36404013029858473,"aspectRatio":4.247969375606813,"axis":"xy","lump":0.07083275991305708,"count":10,"freq":2.528976886704564,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":15,"mouseX":0.5222382074642926,"mouseY":0.5422660224884749,"noise":0.11499842519313097,"scale":3.458356441110373,"shape":"rect","top":7,"twirl":0.19340717745572328,"twist":9.874669756859541,"velocity":1.2108963084947317}},{"slug":"how-stripes-document-databases-supported-99.999-uptime-with-zero-downtime-data-migrations","authorBio":"","title":"How Stripe’s document databases supported 99.999% uptime with zero-downtime data migrations ","summary":"In this blog post we’ll share an overview of Stripe’s database infrastructure and discuss the design and application of the Data Movement Platform.","authors":["Jimmy Morzaria","Suraj Narkhede"],"date":"2024-06-06","location":[],"type":"Blog","topics":["Infrastructure","Engineering"],"artConfig":{"ampX":0.9568483278900385,"ampY":0.8432718716599047,"aspectRatio":0.8587627440901473,"axis":"xy","lump":-0.01795910948887467,"count":105,"freq":0.6620622467249633,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":31,"mouseX":0.8779975873460993,"mouseY":0.5441230994854122,"noise":0.008773796338587998,"scale":0.4291511720865965,"shape":"rect","top":-51,"twirl":0.5402620467543602,"twist":1.1264030070751907,"velocity":0.3,"isBalls":false,"isMatrix":false,"kaleids":6.969713980071246}},{"slug":"test-clocks-how-we-made-it-easier-to-test-stripe-billing-integrations","authorBio":"","title":"Test clocks: How we made it easier to test Stripe Billing integrations","summary":"Stripe Billing allows businesses to manage customer relationships with recurring payments, usage triggers, and other customizable features.","authors":["Ji Huang"],"date":"2024-05-09","location":[],"type":"Blog","topics":["Billing","Developer Productivity","Engineering","Testing"],"artConfig":{"ampX":1.9471627205461264,"ampY":0.7498212495446205,"aspectRatio":2.2772983344176785,"axis":"y","lump":0.7916832196190953,"count":94,"freq":5.567273245051503,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":15,"mouseX":0.507693309780024,"mouseY":0.09164949606731534,"noise":0.05099293874390423,"scale":2.03422195994854,"shape":"rect","top":112,"twirl":0.14051851153373718,"twist":52,"velocity":0.8536013807430863}},{"slug":"shepherd-how-stripe-adapted-chronon-to-scale-ml-feature-development","authorBio":"","title":"Shepherd: How Stripe adapted Chronon to scale ML feature development ","summary":"This blog discusses the technical details of how we built Shepherd and how we are expanding the capabilities of Chronon to meet Stripe’s scale.","authors":["Ben Mears"],"date":"2024-04-15","location":[],"type":"Blog","topics":["Machine Learning","Infrastructure","Open Source","Fraud Detection","Engineering"],"artConfig":{"ampX":1.0053161361441016,"ampY":1.147542692936957,"aspectRatio":1.4593362365847453,"axis":"xy","lump":-0.3082853759564459,"count":99,"freq":0.6158658258914947,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":true,"left":74,"mouseX":0.1769581701822579,"mouseY":0.5441037351163104,"noise":0,"scale":12.2,"shape":"ellipse","top":-33,"twirl":0,"twist":3.5930139017775655,"velocity":0.3}},{"slug":"ledger-stripe-system-for-tracking-and-validating-money-movement","authorBio":"","title":"Ledger: Stripe’s system for tracking and validating money movement ","summary":"Technical details on how Stripe built Ledger, a state-of-the-art money movement tracking system, including how teams at Stripe interact with the data quality metrics that underlie our payment processing network.","authors":["Ilya Ganelin"],"date":"2024-02-16","location":[],"type":"Blog","topics":["Engineering","Payments","Infrastru
1cture"],"artConfig":{"ampX":1.1613415272533893,"ampY":1.1512089137472212,"aspectRatio":1.3883419586742298,"axis":"xy","lump":-0.7038665371499955,"count":65,"freq":0.7005702759474517,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-40,"mouseX":0.28532644720822575,"mouseY":0.8772488541668281,"noise":0,"scale":0.7821207536906005,"shape":"ellipse","top":-53,"twirl":0.11489921598136424,"twist":8.289087411470712,"velocity":0.8492452986910939,"isBalls":false,"isMatrix":false,"kaleids":6.720857914313674}},{"slug":"how-we-built-it-stripe-radar","authorBio":"","title":"How we built it: Stripe Radar","summary":"What makes Radar, Stripe’s fraud prevention solution, so powerful? Here are some of the key decisions made—and lessons learned—in the years it has taken to build it.","authors":["Ryan Drapeau"],"date":"2023-03-29","location":[],"type":"Blog","topics":["Machine Learning","Fraud Detection","Security","Engineering"],"artConfig":{"ampX":0.82207040887326,"ampY":1.2318462854586543,"aspectRatio":1.5876591704739256,"axis":"x","lump":0.8428659101128578,"count":63,"freq":0.5944894898831845,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":19,"mouseX":0.8137119293954224,"mouseY":0.28692712393961844,"noise":0.07481534017436206,"scale":1.4751599448174237,"shape":"ellipse","top":-13,"twirl":0.0435093026533723,"twist":0.8905654763057829,"velocity":0.9827008733861148}},{"slug":"markdoc","authorBio":"","title":"How Stripe builds interactive docs with Markdoc","summary":"Markdoc delivers a good user experience without compromising the authoring experience. It enables writers to express interactivity and simple page logic without mixing code and content.","authors":["Ryan Paul"],"date":"2022-09-13","location":[],"type":"Blog","topics":["Open Source","Developer Productivity","Engineering"],"artConfig":{"ampX":1.23630471739918,"ampY":0.9431330194175244,"aspectRatio":2.091802496040985,"axis":"xy","lump":-0.2171474635340273,"count":69,"freq":0.6256197121441365,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-32,"mouseX":0.16529451020192357,"mouseY":0.7443271412663162,"noise":0,"scale":0.2,"shape":"ellipse","top":-24,"twirl":0.0380736552849412,"twist":-3.368107042841613,"velocity":0.8311441897880286,"isBalls":false,"isMatrix":false,"kaleids":6.906056269407272}},{"slug":"migrating-to-typescript","authorBio":"","title":"Migrating millions of lines of code to TypeScript","summary":"On Sunday, March 6, we migrated we converted more than 3.7 million lines of code with a single pull request. The next day, hundreds of engineers came in to start writing TypeScript for their projects.","authors":["Andrew Lunny"],"date":"2022-05-20","location":[],"type":"Blog","topics":["Developer Productivity","Open Source","Engineering"],"artConfig":{"ampX":1.582606621272862,"ampY":0.16666807171702386,"aspectRatio":4.636209263200499,"axis":"xy","lump":-0.4567711051367223,"count":10,"freq":2.416582939088345,"isDial":false,"isLineart":false,"isRing":false,"isSpiral":false,"left":8,"mouseX":0.4775803976310417,"mouseY":0.47042820921819656,"noise":0.35329329112172125,"scale":3.559619831368327,"shape":"rect","top":-8,"twirl":0.1463054479584098,"twist":14.191300268396736,"velocity":1.1608670826554297}},{"slug":"fast-secure-builds-choose-two","authorBio":"","title":"Fast builds, secure builds. Choose two","summary":"Stripe's continuous integration system is responsible for orchestrating build pipelines and executing tens of thousands of test suites. To meet our exceptionally high security bar, we lean on a combination of open-source tech and novel engineering.","authors":["Sushain Cherivirala"],"date":"2022-05-04","location":[],"type":"Blog","topics":["Developer Productivity","Infrastructure","Engineering"],"artConfig":{"ampX":0.9250445367395878,"ampY":0.9236130483597517,"aspectRatio":1.3424129119805992,"axis":"x","lump":-0.8017324562855065,"count":78,"freq":0.8371634679585696,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":7,"mouseX":0.9117010313661769,"mouseY":0.5660940428255127,"noise":0,"scale":0.2,"shape":"line","top":-58,"twirl":0,"twist":-1.5631126956492662,"velocity":2.4,"isBalls":false,"isMatrix":false,"kaleids":7.835022098012269}},{"slug":"sorbet-stripes-type-checker-for-ruby","authorBio":"","title":"Sorbet: Stripe’s type checker for Ruby","summary":"Stripe uses Sorbet to type check our 15 million lines of Ruby code, making engineers more productive. Here's why we love Sorbet.","authors":["Jake Zimmerman"],"date":"2022-03-28","location":[],"type":"Blog","topics":["Developer Productivity","Open Source","Engineering"],"artConfig":{"ampX":2,"ampY":0.18192066100612284,"aspectRatio":4.837574399359338,"axis":"xy","lump":0.36030045073851946,"count":36,"freq":2.388717696338892,"isDial":false,"isLineart":true,"isRing":false,"isSpiral":false,"left":8,"mouseX":0.4641624102042988,"mouseY":0.4666144397752359,"noise":0.11011555938608944,"scale":2.5490250158309937,"shape":"rect","top":-11,"twirl":0.06828457764536143,"twist":6.5112991185784335,"velocity":1.0477658707518132}},{"slug":"payment-api-design","authorBio":"","title":"Stripe’s payments APIs: The first 10 years","summary":"Abstracting away the complexity of payments has driven the evolution of our APIs over the last decade. Learn more about Stripe payments APIs here.","authors":["Michelle Bu"],"date":"2020-12-15","location":[],"type":"Blog","topics":["Engineering","Payments"],"artConfig":{"ampX":1.0456712739914655,"ampY":1.0644972275346518,"aspectRatio":2.0471657345628365,"axis":"xy","lump":-1,"count":71,"freq":0.7281437523961067,"isDial":false,"isLineart":false,"isRing":true,"isSpiral":false,"left":-35,"mouseX":0.3289427285401151,"mouseY":0.891312663450837,"noise":0,"scale":1.4462320472449064,"shape":"ellipse","top":-26,"twirl":0.1343460436463356,"twist":0.5231069362387064,"velocity":1.10752656099014,"isBalls":false,"isMatrix":false,"kaleids":7.710177828148007}}]},"__N_SSG":true},"page":"/blog","query":{},"buildId":"HMug0bjn9Z2F73FJyfLnU","isFallback":false,"gsp":true,"scriptLoader":[]}</script>
1</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.