<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Increase Updates</title><description>Product updates, articles, and customer stories from Increase</description><link>https://increase.com</link><atom:link href="https://increase.com/updates.xml" rel="self" type="application/rss+xml"/><language>en</language><image><url>https://dashboard.increase.com/increase-logo.svg</url><title>Increase Updates</title><link>https://increase.com/updates</link></image><generator>Increase</generator><item><title>Announcing Increase Bank</title><link>https://increase.com/articles/announcing-increase-bank</link><guid isPermaLink="true">https://increase.com/articles/announcing-increase-bank</guid><description>This is the bank for ambitious technology companies. You’re obsessed with building the best possible product for your customers; we’re just as obsessed with building for you.</description><pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;im-excited-to-announce-the-launch-of-increase-bank&quot;&gt;I’m excited to announce the launch of &lt;a href=&quot;https://increase.com/bank&quot;&gt;Increase Bank&lt;/a&gt;.&lt;/h2&gt;
&lt;p&gt;This is the bank for ambitious technology companies. You’re obsessed with building the best possible product for your customers; we’re just as obsessed with building for you.&lt;/p&gt;
&lt;p&gt;A bank sits between you and payment rails like ACH, wires, and Visa. Those rails can handle just about anything you want to do programmatically, but the core technology inside most banks prevents you from harnessing that capability.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;increase-built-our-own-api-first-core-technology-from-scratch&quot;&gt;Increase built our own API-first core technology from scratch.&lt;/h2&gt;
&lt;p&gt;Everything is programmable, with minimal human intervention even for edge cases. Whenever possible, we want your machines to talk to our machines.&lt;/p&gt;
&lt;p&gt;Our APIs are faithful. We pass through high-fidelity data straight from the payment rails. We make as few decisions on your behalf as possible. If that appeals to you, &lt;a href=&quot;https://increase.com/documentation&quot;&gt;here’s our documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;companies-like-gusto-ramp-and-stripe-already-rely-on-increase-core-technology-to-process-more-than-500b-annually&quot;&gt;Companies like Gusto, Ramp, and Stripe already rely on Increase core technology to process more than $500B annually.&lt;/h2&gt;
&lt;p&gt;Since 2020, Increase has been the banking backbone to move, store, and lend money at scale. We’ve helped our customers build regulated banking products with support from some fantastic bank partners. Those partnerships remain important.&lt;/p&gt;
&lt;p&gt;But we’re still early in the grand scheme; we will get much bigger. Today, we take the next step toward that future.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;this-is-the-bank-i-needed-at-stripe&quot;&gt;This is the bank I needed at Stripe.&lt;/h2&gt;
&lt;p&gt;Before starting Increase, I was the first employee at Stripe. When we worked with banks, they often struggled to understand what we needed and why it mattered. Problems that seemed minor to them—like managing wires over email—were blockers for us. We had to build all kinds of workarounds.&lt;/p&gt;
&lt;p&gt;For years, I needed a bank with good product sense. One that grasped the possibilities of software and couldn’t stand to see them stifled.&lt;/p&gt;
&lt;p&gt;The Increase team comes from industry-leading payments companies, and we’ve all had similar frustrations and hopes. We’re motivated to get this right.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;we-believe-the-future-of-banking-is-api-first&quot;&gt;We believe the future of banking is API-first.&lt;/h2&gt;
&lt;p&gt;Companies use Increase to pay millions of people on time, free up working capital for small businesses, and simplify healthcare billing.&lt;/p&gt;
&lt;p&gt;I’m inspired by the people who create these new financial technologies, but they’re not the only ones depending on banks. In a real way, you can’t build a road, school, company, spacecraft, hospital, corner store, or country without a bank.&lt;/p&gt;
&lt;p&gt;Banks are where we formalize trust to do ambitious things together. An institution this important should run on the best technology we can build.&lt;/p&gt;
&lt;p&gt;That’s why Increase Bank exists.&lt;/p&gt;</content:encoded><dc:creator>Darragh Buckley</dc:creator><media:content url="https://increase.com/images/increase-bank-launch-hero.jpg" medium="image" type="image/jpeg"/><category>Article</category></item><item><title>2026 Q2 Newsletter</title><link>https://increase.com/newsletter/q2-2026</link><guid isPermaLink="true">https://increase.com/newsletter/q2-2026</guid><description>Changes for 2026 Q2, including managed compliance, blockchain transfers, FedNow, customer and industry insights, and upcoming cross-border payments and lending APIs.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here’s what we shipped in the second quarter of 2026.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;money-movement&quot;&gt;&lt;strong&gt;Money movement&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We launched &lt;a href=&quot;https://increase.com/documentation/managed-compliance&quot;&gt;managed compliance&lt;/a&gt; for platforms. In this model, you can delegate identity verification and transaction monitoring to Increase and our bank partners instead of running them yourself. This makes launching a new product and program faster and easier than ever before on Increase, while preserving the optionality to graduate to sponsor banking as you grow.&lt;/li&gt;
&lt;li&gt;Blockchain transfers are &lt;a href=&quot;https://www.finextra.com/pressarticle/110315/grasshopper-adds-stablecoin-based-payments-capability&quot;&gt;now in beta&lt;/a&gt;. Send and receive USDC from an Increase account, Increase handles the conversion to/from USD to stablecoin for you in minutes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://increase.com/documentation/sending-fednow-transfers#approvals&quot;&gt;FedNow is live for all users&lt;/a&gt;. FedNow enables real-time clearing and settlement of domestic transactions within seconds, 24/7, directly through the Federal Reserve.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;things-we-wrote-and-said&quot;&gt;&lt;strong&gt;Things we wrote and said&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We shared insights into the way &lt;a href=&quot;https://increase.com/customers/vantaca&quot;&gt;Vantaca uses Increase to power its Vendor Pay solution&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Matt Hennessy from Increase and Jamie Fox from Tekion joined the &lt;a href=&quot;https://lnkd.in/gnxhQ9NK&quot;&gt;Fintech One-on-One podcast&lt;/a&gt;, hosted by Peter Renton, to discuss how embedded finance is helping to fuel growth for vertical fintechs.&lt;/li&gt;
&lt;li&gt;We wrote about &lt;a href=&quot;https://increase.com/articles/seeing-like-a-network&quot;&gt;merchant category codes&lt;/a&gt;, the four-digit numbers that classify the type of goods or services a business offers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;looking-ahead&quot;&gt;&lt;strong&gt;Looking ahead&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Up next we’re building out our cross-border payments and lending APIs. Let us know if you’re interested in trying them out!&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>Canary transfers: testing banking infrastructure in production</title><link>https://increase.com/articles/canary-transfers</link><guid isPermaLink="true">https://increase.com/articles/canary-transfers</guid><description>Canary transfers are how we find the details the documentation leaves out:
we send ourselves money over every rail, all day, every day.
</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There’s a saying in software: &lt;a href=&quot;https://johnsalvatier.org/blog/2017/reality-has-a-surprising-amount-of-detail&quot;&gt;reality has a surprising amount of detail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Federal Reserve documents exactly when wire transfers are supposed to settle. What the manual &lt;em&gt;won’t&lt;/em&gt; tell you is that during a major Amazon Web Services outage, the Fed might stay open an hour late to give banks more time to finish their daily settlements. We noticed because our own wires settled faster than expected. That’s the kind of detail you only discover by exercising the banking system in production, every minute of every day.&lt;/p&gt;
&lt;p&gt;At Increase, we connect directly to the Federal Reserve and Visa, which means their surprises are ours to catch. Prevention handles the failures you anticipate. For everything else, the goal is to shrink the time between a failure happening and the moment you notice it. Our solution is almost embarrassingly literal: we send ourselves money, all day, every day, on every network we operate, and get paged when it doesn’t arrive on schedule. We call these payments &lt;em&gt;canary transfers&lt;/em&gt;.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;the-late-file&quot;&gt;The late file&lt;/h2&gt;
&lt;p&gt;In the early days of Increase, an uncaught head-of-line blocking serialization bug caused us to submit a file of transfers to the Fed late, and we missed a same-day ACH settlement cutoff. The transfers landed hours behind schedule. For a customer running payroll, that’s serious: the money has to arrive on time or people can’t pay their mortgages. Worse, it took hours to notice. Had we caught the delay immediately, we could have re-sent the transfers over wires; by the time we saw the problem, that option was gone.&lt;/p&gt;
&lt;p&gt;The postmortem fixed that bug, but the next incident will be something else. Whatever it is, we’d rather find out in five minutes than five hours.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;sending-ourselves-money-all-day&quot;&gt;Sending ourselves money all day&lt;/h2&gt;
&lt;p&gt;Engineers already have a tool for this shape of problem: synthetic monitoring. In a typical web stack, you run a script that continuously hits your endpoints so you find out something is broken before your users do. A canary transfer is the same idea, except the request is money and the endpoint is the Federal Reserve.&lt;/p&gt;
&lt;p&gt;Our first version was under fifty lines of code: send an ACH transfer between two accounts we own, then poll the receiving account until the balance moves. We built it on top of the same public API our customers use, so anything customer-facing in the stack gets exercised on every loop.&lt;/p&gt;
&lt;p&gt;ACH is ideal for canaries because its timing is &lt;a href=&quot;https://www.frbservices.org/resources/resource-centers/same-day-ach/fedach-processing-schedule.html&quot;&gt;predictable&lt;/a&gt;. A transfer we hand to the Fed at 10:00 AM Eastern Time makes the 10:30 AM same-day window and settles at 1:00 PM, so we place a canary in every outbound FedACH file and page if a canary transfer in that file hasn’t settled by 1:05 PM. We time the canaries so one settles during every ACH window. That signal turned out to be useful enough that we now publish it on our &lt;a href=&quot;https://status.increase.com&quot;&gt;public status page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We run a version of this on every rail. Wires settle almost instantly, so we send ourselves one every hour, and we do the same over Real-Time Payments and FedNow. Cards get the full loop: every minute, we issue a new card on our infrastructure and authorize a live transaction. And to cover the physical world, we mail ourselves at least one paper check every day, which tests printing, the mail, and lockbox deposit end to end. Somewhere in a USPS truck right now is an envelope we addressed to ourselves, running an integration test at the speed of mail.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;what-a-canary-can-and-cant-tell-you&quot;&gt;What a canary can and can’t tell you&lt;/h2&gt;
&lt;p&gt;A canary tells you the air is bad, not which gas is leaking or where it’s leaking from. If a file gets stuck, the round trip fails and we get paged, but the canary won’t say whether the cause was a bad deploy, a Fed issue, or something we haven’t imagined yet. To find the root cause, we rely on a separate invariant-monitoring framework called &lt;a href=&quot;https://increase.com/articles/automated-invariant-monitoring&quot;&gt;Checker&lt;/a&gt;, which continuously asserts specific conditions about the state of our systems. A canary tells us a file is stuck; a failing check tells us which step it’s stuck on.&lt;/p&gt;
&lt;p&gt;Sometimes the answer is that nothing is wrong on our end at all. We occasionally get paged because a payment network itself is running slow. That’s fine! Those pages still shrink the time between something changing and someone starting to look.&lt;/p&gt;
&lt;p&gt;And those false alarms carry real information. Because we authorize a card transaction every minute, we know within a minute if there are any issues with the Visa network. Because we mail ourselves a check every day, we know when the USPS is having a slow week. So when a customer asks why the check they mailed a week ago still hasn’t been deposited, we can answer from our own data: the mail really is slow, and we know because we’re feeling the same conditions our customers feel.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;boring-is-reliable&quot;&gt;Boring is reliable&lt;/h2&gt;
&lt;p&gt;If you build infrastructure that touches the physical world, reality’s surprising details will eventually break your models. Unlike monitoring that watches from the outside, canaries participate: our money rides the same rails, meets the same cutoffs, and sits in the same mail trucks as our customers’ money.&lt;/p&gt;
&lt;p&gt;Sending yourself money all day will never be glamorous. It’s still the most dependable way we’ve found to keep learning the details the manual leaves out.&lt;/p&gt;</content:encoded><dc:creator>Mattt Zmuda</dc:creator><category>Article</category></item><item><title>Vantaca partners with Increase to launch Vendor Pay</title><link>https://increase.com/customers/vantaca</link><guid isPermaLink="true">https://increase.com/customers/vantaca</guid><description>Vantaca, a leading platform for community association management, launched Vantaca Vendor to let property managers pay vendors directly from the same system where they manage invoices, approvals, and accounting. The solution is powered by Increase, a modern banking core that helped Vantaca replace a fragmented stack of payments tools with a single integration — launching and scaling in weeks, not months.</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><media:content url="https://increase.com/images/vantaca-thumbnail.png" medium="image" type="image/png"/><category>Customer story</category></item><item><title>Seeing like a network: the merchant category code</title><link>https://increase.com/articles/seeing-like-a-network</link><guid isPermaLink="true">https://increase.com/articles/seeing-like-a-network</guid><description>The merchant category code is a 50-year-old lookup table that modern spend controls still depend on. This post explains how it works, where it leaks, and what replaces it.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Suppose you’re building the financial infrastructure for a logistics network. You need to issue physical corporate cards to truck drivers so they can pay for fuel and maintenance. Or maybe you’re engineering the payment flows for a delivery platform, issuing zero-balance cards to couriers to buy groceries for customers at the point of sale.&lt;/p&gt;
&lt;p&gt;In both cases, you need to guarantee that each card buys what it was issued for, and nothing else.&lt;/p&gt;
&lt;p&gt;At Increase, you enforce this programmatically via a synchronous webhook on &lt;a href=&quot;https://increase.com/documentation/real-time-decisions&quot;&gt;Real-Time Decisions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When a courier swipes, dips, or taps their card, the payment terminal generates an ISO 8583 &lt;code&gt;0100&lt;/code&gt; Authorization Request. This message traverses the card network on its way to us. We intercept it mid-flight and, while the terminal and network wait for an answer, send a real-time webhook to your server.&lt;/p&gt;
&lt;p&gt;That thin webhook tells you an event happened and hands you an ID:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text); overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;category&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;real_time_decision.card_authorization_requested&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;associated_object_type&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;real_time_decision&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;associated_object_id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;real_time_decision_123abc&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You fetch the decision itself with a &lt;code&gt;GET&lt;/code&gt; to &lt;code&gt;/real_time_decisions/{id}&lt;/code&gt;, which returns the authorization details:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text); overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;real_time_decision_123abc&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;category&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;card_authorization_requested&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;pending&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;card_authorization&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;decision&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;presentment_amount&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 14550&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;presentment_currency&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;USD&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;merchant_category_code&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;5411&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;merchant_acceptor_id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;1234567890&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;merchant_descriptor&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;SAFEWAY STORE 0021&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You have about four seconds to ingest this payload, evaluate it against your internal state machine, and &lt;code&gt;POST&lt;/code&gt; your verdict back to &lt;code&gt;/real_time_decisions/{id}/action&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text); overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;card_authorization&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;decision&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;approve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once your action &lt;code&gt;POST&lt;/code&gt; completes, you return a &lt;code&gt;200 OK&lt;/code&gt; to the original webhook, and the transaction resumes.&lt;/p&gt;
&lt;p&gt;One of the highest-signal fields for evaluating the authorization request is &lt;code&gt;merchant_category_code&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You don’t have to make every call live, either. Increase’s API lets you pre-configure static &lt;a href=&quot;https://increase.com/documentation/api/cards#card-object.authorization_controls&quot;&gt;authorization controls&lt;/a&gt; on a card, allow-listing or blocking specific merchant category codes outright, so you can reserve Real-Time Decisions for the cases that genuinely need a judgment call.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;seeing-like-a-network&quot;&gt;Seeing like a network&lt;/h2&gt;
&lt;p&gt;In his book &lt;em&gt;Seeing Like a State&lt;/em&gt;, James C. Scott explores the concept of “legibility.” A state (or any complex organization) can’t govern without first simplifying reality. To manage a dense, old-growth forest, for example, the state clears it and plants identical trees in straight rows. To calculate taxes, a 19th-century tariff regime declares that a tomato is a “vegetable,” not a fruit.&lt;/p&gt;
&lt;p&gt;The global payment networks operate the same way. Governed by the International Organization for Standardization under ISO 18245, the Merchant Category Code (MCC) is Visa and Mastercard’s instrument of legibility.&lt;/p&gt;
&lt;p&gt;Modeling a messy, contradictory world is an impossible task; no taxonomy ever fits perfectly, and some are simply better than others. The MCC is serviceable, but its quirks run deep.&lt;/p&gt;
&lt;p&gt;Originally designed in the 1970s to calculate tiered interchange fees (a jewelry store presents a higher fraud risk than a bakery, and is priced accordingly), the MCC maps global commerce onto a rigid numeric grid, keyed to a business’s &lt;em&gt;primary consumer-facing activity&lt;/em&gt;. But how do you classify a 200,000-square-foot mega-mart that sells tires, prescriptions, milk, and life insurance? You oversimplify. To the network, a merchant is whatever it sells most of. The grid compresses reality into a four-digit integer, producing outcomes by turns comical and genuinely inconvenient.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;hardcoded-history&quot;&gt;Hardcoded history&lt;/h2&gt;
&lt;p&gt;The full ISO 18245 taxonomy reads like a fossil record of 20th-century commerce. The system encodes point-in-time business realities as permanent infrastructure.&lt;/p&gt;
&lt;p&gt;Specific entities from the 1970s and 80s are hardcoded into the global grid. Major carriers get their own: United is &lt;code&gt;3000&lt;/code&gt;, American is &lt;code&gt;3001&lt;/code&gt;, each reserved exclusively for that airline. The networks maintain &lt;code&gt;3667&lt;/code&gt; purely to identify transactions at a single casino hotel: the Luxor in Las Vegas.&lt;/p&gt;
&lt;p&gt;The grid is just as lopsided in the other direction. For every entity rich enough to earn its own code, whole swaths of commerce funnel through a single overloaded one. A corner café, a food truck, and a hotel banquet hall can all land under the same restaurant code, while a genuinely new kind of business picks among a half-dozen overlapping food-service options, none a clean fit. And the granularity is wildly uneven. The same grid that crams all of food service into a handful of codes keeps dedicated entries for furriers (&lt;code&gt;5681&lt;/code&gt;), wig shops (&lt;code&gt;5698&lt;/code&gt;), and snowmobile dealers (&lt;code&gt;5598&lt;/code&gt;).&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;when-the-abstraction-leaks&quot;&gt;When the abstraction leaks&lt;/h2&gt;
&lt;p&gt;The grid’s real trouble is that it can’t keep up. When new business models emerge, it buckles.&lt;/p&gt;
&lt;p&gt;Authorizing a fleet card seems trivial: you allow-list MCC &lt;code&gt;5542&lt;/code&gt; (Automated Fuel Dispensers). But when electric vehicle charging networks scaled, they lacked a dedicated identifier. Some acquirers miscategorized EV chargers as generic utilities (&lt;code&gt;4900&lt;/code&gt;). If your fleet transitioned to EVs, your programmatic webhooks started declining legitimate charges or approving ambiguous ones.&lt;/p&gt;
&lt;p&gt;A specific code for EV charging (&lt;code&gt;5552&lt;/code&gt;) was eventually introduced, but implementation remains fragmented. Updating an MCC isn’t a cloud deployment; it often requires the acquiring bank to reclassify the merchant in its core systems and manually push a configuration change to a physical point-of-sale terminal in a parking lot. For an independent station owner, there’s zero financial incentive to initiate this process just so a driver’s corporate card categorizes the spend correctly.&lt;/p&gt;
&lt;p&gt;This kind of mismatch reveals a deeper limitation. MCCs classify the &lt;em&gt;entity&lt;/em&gt;, not the &lt;em&gt;basket&lt;/em&gt;. By default, the ISO 8583 payload can’t distinguish between a cart of groceries and a flat-screen television rung up at the same big-box store. The code tells you where the card was swiped, but nothing about what was actually bought.&lt;/p&gt;
&lt;p&gt;Some transactions do carry richer, itemized data alongside the authorization, but it’s supplemental, inconsistently supported, and a subject of its own; the base authorization still identifies the merchant, not the purchase. When you’re writing authorization logic against the category code, you’re making decisions based on who the merchant says they are, not what the cardholder is doing.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;from-entity-to-intent-iso-20022&quot;&gt;From entity to intent: ISO 20022&lt;/h2&gt;
&lt;p&gt;The MCC has been a durable piece of financial infrastructure for fifty years. But as global commerce shifts, its dominance is waning.&lt;/p&gt;
&lt;p&gt;The structural threat isn’t a new set of codes; it’s the bypass of the card networks entirely. As Open Banking and direct account-to-account (A2A) payments scale via rails like the UK’s Faster Payments, Europe’s SEPA Instant, or the FedNow network, transactions no longer traverse Visa or Mastercard. They don’t use ISO 8583 or carry an MCC.&lt;/p&gt;
&lt;p&gt;To prevent a data void in spend categorization, the global financial system is migrating to the &lt;strong&gt;ISO 20022&lt;/strong&gt; messaging standard. This replaces legacy flat files with highly structured, extensible (if charmless) XML.&lt;/p&gt;
&lt;p&gt;Imagine you’re building the financial flows for that same logistics network, but ten years from now. Instead of a driver swiping a physical corporate card at a gas station, the connected fleet vehicle initiates a real-time A2A transfer over FedNow to settle the charging fee directly with the EV station.&lt;/p&gt;
&lt;p&gt;When your webhook fires, you aren’t checking a merchant’s category code. ISO 20022 carries a dedicated Purpose Code that defines the &lt;em&gt;intent&lt;/em&gt; of the transfer. Inside a standard &lt;code&gt;pacs.008&lt;/code&gt; customer credit transfer payload, you parse the &lt;code&gt;&amp;#x3C;Purp&gt;&lt;/code&gt; element:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text); overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;xml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Purp&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Cd&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;ENRG&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Cd&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Purp&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Values like &lt;code&gt;ENRG&lt;/code&gt; for energy, &lt;code&gt;AIRB&lt;/code&gt; for air transport, or &lt;code&gt;SALA&lt;/code&gt; for salary define intent natively in the payload. The classification moves from the &lt;em&gt;entity&lt;/em&gt; (who the merchant is) to the &lt;em&gt;intent&lt;/em&gt; (why the money is moving).&lt;/p&gt;
&lt;p&gt;Note &lt;code&gt;AIRB&lt;/code&gt; (and resist the autocomplete to AirBnB): it names the &lt;em&gt;purpose&lt;/em&gt; of the payment, not the merchant behind it. Where the card networks split air travel across dedicated carrier codes like United’s &lt;code&gt;3000&lt;/code&gt; and a generic catch-all (&lt;code&gt;4511&lt;/code&gt;), ISO 20022 simply carries a field that means “air travel.”&lt;/p&gt;
&lt;p&gt;Migrations of core financial infrastructure are slow. The transition to ISO 20022 has been repeatedly delayed by central banks, and the volume of physical point-of-sale hardware ensures legacy mainframes will remain operational for decades. Swift held its November 2025 deadline to retire cross-border MT payment messages, but a long tail of message types and address formats runs into 2027. The transition will be measured in business cycles, not quarters.&lt;/p&gt;
&lt;p&gt;Until that migration is complete, if you’re building programmatic spend controls, you’re living in the world of the MCC. That’s a more workable place than it sounds. The taxonomy is messy, but it’s also shared and public, so you can design for its edges deliberately instead of discovering them in production. Treat the category code as a strong hint rather than a verdict: keep your allow-lists in configuration, not code, so they change in minutes rather than a deploy; log the code and your decision on every authorization, so a miscategorized EV charger surfaces as a pattern instead of a support ticket; and fold in new codes like &lt;code&gt;5552&lt;/code&gt; as they come into use.&lt;/p&gt;
&lt;p&gt;The highest-leverage move is making the taxonomy more legible to each other. The 50-year-old grid isn’t going anywhere soon, but the tooling we wrap around it can be modern, shared, and a good deal more legible than the grid itself.&lt;/p&gt;</content:encoded><dc:creator>Mattt Zmuda</dc:creator><category>Article</category></item><item><title>Why we’re still talking about paper checks in 2026</title><link>https://increase.com/articles/check-updates</link><guid isPermaLink="true">https://increase.com/articles/check-updates</guid><description>We’re not going to sell you on the benefits of sending checks. If you’re sending checks in 2026, you’re doing it because you have to.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We’re not going to sell you on the benefits of sending checks. If you’re sending checks in 2026, you’re doing it because you have to.&lt;/p&gt;
&lt;p&gt;Many healthcare, real estate, and insurance businesses still &lt;a href=&quot;https://www.atlantafed.org/research-and-data/publications/take-on-payments/2026/01/12/why-do-businesses-still-use-paper-checks&quot;&gt;rely on checks&lt;/a&gt; to send and receive funds. While the majority of our transactions are digital, Increase processed billions of dollars in old-fashioned paper checks in the past six months.&lt;/p&gt;
&lt;p&gt;So we invested heavily in features that support platforms scaling check send: support for attachments, overnight shipping, delivery notifications, design customization, and fraud controls.&lt;/p&gt;
&lt;p&gt;If you don’t send checks at scale, congratulations! You can read the unmitigated pedantry that follows just for fun.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;checks-love-company&quot;&gt;Checks love company&lt;/h2&gt;
&lt;p&gt;If you’re going to the trouble of putting a check into an envelope, you may want other things in there too.&lt;/p&gt;
&lt;p&gt;Attachments to checks can be useful for a range of use cases. Bill Pay platforms include remittance information for invoices. Healthcare platforms send explanations of benefits. Some companies send marketing materials along with each check to acquire counterparties as customers.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;speed-matters-even-when-youre-sending-paper-checks&quot;&gt;Speed matters, even when you’re sending paper checks&lt;/h2&gt;
&lt;p&gt;When we initially built our &lt;a href=&quot;https://increase.com/documentation/api/check-transfers&quot;&gt;check send API&lt;/a&gt;, we assumed our users would always prefer the cheapest mailing option and wouldn’t be particularly sensitive to shipment times.&lt;/p&gt;
&lt;p&gt;This turned out to be wrong! The CheckTransfer API now supports &lt;a href=&quot;https://increase.com/documentation/api/check-transfers#create-a-check-transfer.physical_check.shipping_method.fedex_overnight&quot;&gt;Fedex Overnight&lt;/a&gt; shipping.&lt;/p&gt;
&lt;p&gt;Users often send checks when collecting bank details isn’t possible or desirable. This includes refunds, rebates, settlements, class-action payouts and more. And sometimes those payments are urgent.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;its-nice-to-know-where-your-paper-check-is&quot;&gt;It’s nice to know where your paper check is&lt;/h2&gt;
&lt;p&gt;Our users want to give their customers delivery update notifications. So we found ourselves integrating into the United States Postal Service and the FedEx APIs to get these for them. For USPS, that’s the Informed Visibility® Mail Tracking &amp;#x26; Reporting (IV-MTR).&lt;/p&gt;
&lt;p&gt;You may have had the experience of receiving an in-transit notification a few days after the package is delivered. Delivery tracking update events use &lt;a href=&quot;https://postalpro.usps.com/informedvisibility/OperationCodesList&quot;&gt;operations codes&lt;/a&gt;, and there are a little less than 1000 different codes. (Fedex, mercifully, uses only a few dozen).&lt;/p&gt;
&lt;p&gt;The result is a straightforward and readable timeline, so you can track every step of your paper check’s journey to its destination. We now surface these tracking updates in the Dashboard.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://increase.com/images/check-updates-timeline.png&quot; alt=&quot;Check timeline&quot;&gt;&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;customization-requires-going-direct-to-printer&quot;&gt;Customization requires going direct-to-printer&lt;/h2&gt;
&lt;p&gt;To deliver much of the above, we invested in integrating into an industrial printer. Their preferred delivery format from us was a single, very large PDF, with all of a day’s checks and attachments in a single file. (As you might expect, this created a side quest around file size optimization).&lt;/p&gt;
&lt;p&gt;This unlocked an ability to customize appearance on a per-check basis. The American National Standards Institute’s standard for checks specifies the font (&lt;a href=&quot;https://en.wikipedia.org/wiki/Magnetic_ink_character_recognition&quot;&gt;E-13B&lt;/a&gt;), the placement of the magnetic ink character recognition line, and the paper used. But that leaves a fairly wide space for customization, which we’re excited to support.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;fraud-controls-are-critical&quot;&gt;Fraud controls are critical&lt;/h2&gt;
&lt;p&gt;No matter how beautifully customized your paper checks may be, they quickly become a hassle if lost or stolen. This unfortunately does happen, and when it does, you’ll need controls to block checks from being fraudulently deposited.&lt;/p&gt;
&lt;p&gt;We now offer &lt;a href=&quot;https://increase.com/documentation/positive-pay&quot;&gt;fine-grained positive pay controls&lt;/a&gt; on every Check Transfer, allowing users to review attempted deposits before funds get withdrawn from an Increase account, and decline the deposit attempt for any reason.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;designing-for-programmable-paper-checks&quot;&gt;Designing for programmable paper checks&lt;/h2&gt;
&lt;p&gt;At Increase, we default to building financial primitives with &lt;a href=&quot;https://increase.com/articles/no-abstractions&quot;&gt;no abstractions&lt;/a&gt; for flexibility, transparency and reliability.&lt;/p&gt;
&lt;p&gt;For this reason, we resisted investing in a printer integration. Our customers are large, sophisticated financial technology companies: maybe they’d prefer to bring their own printer integration for checks?&lt;/p&gt;
&lt;p&gt;They didn’t.&lt;/p&gt;
&lt;p&gt;So, where it made sense, we picked up as much of the toil as we could for printing and mail tracking. And by directly integrating into an industrial printer for printing, USPS/FedEx for tracking updates, and Check21 for money movement, we’re able to offer API-powered paper checks that are programmable and flexible.&lt;/p&gt;
&lt;p&gt;If you’re sending checks at scale, let’s chat! Reach us at &lt;a href=&quot;mailto:hello@increase.com&quot;&gt;hello@increase.com&lt;/a&gt;.&lt;/p&gt;</content:encoded><dc:creator>Sacha Perold</dc:creator><media:content url="https://increase.com/images/check-updates-article.png" medium="image" type="image/png"/><category>Article</category></item><item><title>2026 Q1 Newsletter</title><link>https://increase.com/newsletter/q1-2026</link><guid isPermaLink="true">https://increase.com/newsletter/q1-2026</guid><description>Changes for 2026 Q1, including the Entity Onboarding Sessions API, 3D Secure, Push Provisioning, Event polling, IP-restricted API keys, and a C# SDK.</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here’s what we shipped in the first quarter of 2026.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;accounts-and-entities&quot;&gt;Accounts and Entities&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We launched our &lt;a href=&quot;https://increase.com/documentation/hosted-onboarding&quot;&gt;Entity Onboarding Sessions API&lt;/a&gt;, which lets you use our hosted authentication UI to collect your customers’ information during onboarding without having to build the KYC flow yourself.&lt;/li&gt;
&lt;li&gt;Eligible platforms can now set the interest rate for each of their Accounts.&lt;/li&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/api/exports#create-an-export.voided_check&quot;&gt;create a voided check&lt;/a&gt; via the API, which is useful for sharing your account and routing numbers with a counterparty in a familiar format.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;money-movement&quot;&gt;Money movement&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://increase.com/documentation/api/cards#card-object.authorization_controls&quot;&gt;Card authorization controls&lt;/a&gt; now support per-card spending limits, with single-use and multi-use cards; per-transaction, per-week, per-month, and per-year limits, giving you fine-grained control over where and how each card can be used.&lt;/li&gt;
&lt;li&gt;We launched &lt;a href=&quot;https://increase.com/documentation/3d-secure&quot;&gt;3D Secure&lt;/a&gt; for card authentications, letting you authenticate your cardholders at checkout to reduce fraud and disputes.&lt;/li&gt;
&lt;li&gt;We launched &lt;a href=&quot;https://increase.com/documentation/push-provisioning&quot;&gt;Push Provisioning&lt;/a&gt;, letting your users add their card to Apple Pay and Google Pay directly from your website or native app without typing in a card number.&lt;/li&gt;
&lt;li&gt;We’re now fully reconciling and passing on all scheme fees from Visa, so the card-network fees on every card payment match the network’s books exactly.&lt;/li&gt;
&lt;li&gt;We now support attaching up to 999 pages to a single check, for use cases like remittance and lockbox payments where you need to mail substantial documentation alongside the check.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;developer-experience&quot;&gt;Developer experience&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You can now restrict API keys to a list of IP addresses, reducing the scope of impact if a key is ever compromised.&lt;/li&gt;
&lt;li&gt;You can see what an object looks like in the API directly from most Dashboard detail pages via the “Show API representation &amp;#x26; events” link, which is handy when debugging an integration without dropping into a terminal.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://increase.com/documentation/webhooks#event-polling&quot;&gt;Event polling API&lt;/a&gt; is now generally available - you can poll for new Events instead of listening via webhook, which substantially reduces end-to-end Event handling latency.&lt;/li&gt;
&lt;li&gt;You can now manually trigger a webhook delivery for an Event from the Dashboard, which makes it easier to debug webhook handlers or replay after an outage on your side.&lt;/li&gt;
&lt;li&gt;You can now subscribe an Event Subscription to multiple Event categories at creation time, instead of registering a separate subscription per category.&lt;/li&gt;
&lt;li&gt;Increase SDKs are now available in &lt;a href=&quot;https://github.com/increase/increase-csharp&quot;&gt;C#&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;things-we-wrote-and-said&quot;&gt;Things we wrote and said&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We were named to the &lt;a href=&quot;https://www.forbes.com/sites/brandonkochkodin/2026/02/19/the-future-of-business-to-business-banking-fintech-50-2026/&quot;&gt;Forbes Fintech 50&lt;/a&gt; list for 2026.&lt;/li&gt;
&lt;li&gt;Our founder Darragh joined the &lt;a href=&quot;https://open.spotify.com/episode/3Npt82f5sk9sMgGF5r2TfG&quot;&gt;Fintech One-on-One Podcast&lt;/a&gt; to talk about bank infrastructure.&lt;/li&gt;
&lt;li&gt;We wrote about &lt;a href=&quot;https://increase.com/articles/support-that-doesnt-scale&quot;&gt;what it’s like to work with Increase&lt;/a&gt;, and why our engineers handle their own support rather than running a dedicated support team.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>Support that doesn’t scale: what it’s like to work with Increase</title><link>https://increase.com/articles/support-that-doesnt-scale</link><guid isPermaLink="true">https://increase.com/articles/support-that-doesnt-scale</guid><description>At Increase, the engineers who build the system also support it. This post explains why we skip the traditional support team, and what that means for the customers working with us.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;At Increase, we open a shared Slack Connect channel for each new customer (and prospective customer). Our engineering team is a part of the channel and whoever is on-call responds to customer questions directly. We don’t have a traditional support team; the same engineers who build the system also operate and support it.&lt;/p&gt;
&lt;p&gt;A customer recently asked us about adding support for voided checks to our API to help demonstrate account ownership. At most companies, that request would have gone to someone in Support or Customer Success, then added to a queue of potential feature requests. In this case, the engineer who owns our Check Transfers product was able to gather additional context in real-time, iterate on the request with the customer, and push the &lt;a href=&quot;https://increase.com/documentation/api/exports#create-an-export.voided_check&quot;&gt;new API&lt;/a&gt; to production the following day.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“With Increase, we have high confidence that systems are running smoothly. And if something goes wrong, we can quickly drill down into the issue and act before it affects payroll. This level of control has been critical for us.” - Andrew Brown, CEO at Check&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a natural extension of our model of &lt;a href=&quot;https://increase.com/articles/how-we-work&quot;&gt;empowered owners&lt;/a&gt;, where the person responsible for a given feature (usually an engineer) is responsible for the full stack of ownership and decision-making, from the underlying network integration to the product design to the sales and support of that feature. We believe in giving our employees the context and the agency to fix, tinker, and build.&lt;/p&gt;
&lt;p&gt;When you send us a note in our joint Slack channel about something that’s broken, needs improvement, or needs to be built, you’ll talk directly to an Increase engineer. We think this matters for a few reasons:&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;lack-of-translation&quot;&gt;Lack of translation&lt;/h2&gt;
&lt;p&gt;When customer feedback travels through layers of support, account executives, product managers, and engineers, each step adds latency and subtracts fidelity. Talking directly to the owner gets our customers faster, better answers, and lets us move more efficiently as an organization. When a traditional support team is receiving questions and bug reports, they’re often incentivized to find workarounds for defects and bugs in the name of closing tickets. When the engineering owner is receiving them, they’re incentivized to fix the bugs and improve our documentation.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;tight-feedback-loops&quot;&gt;Tight feedback loops&lt;/h2&gt;
&lt;p&gt;Our product spans complex systems and serves demanding customers. Feedback is oxygen to us. If we ship a feature that generates pain or confusion for our customers, the person responsible for it will feel that pain viscerally and immediately. This acts as a self-regulating mechanism - engineers can’t afford the support burden that shipping subpar work will cause them.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;nuanced-conversations&quot;&gt;Nuanced conversations&lt;/h2&gt;
&lt;p&gt;In many cases, the questions we receive involve a lengthy back-and-forth. The US depository system is powerful and complex. If you’re not talking to someone with a deep understanding of the systems at play, you may not get the answers or resolutions you need. It helps to talk to experts who operate in complex systems because they can connect the ways your use case fits into those systems.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“I appreciate your decision to have an engineer serve as the equivalent of an account manager. I know it’s not an easy decision, but it makes a big difference for us. There’s no customer &amp;#x3C;&gt; AM &amp;#x3C;&gt; engineer loop, and it feels like the answers come straight from the source of truth.” - Perry Zheng, founder and CEO, Cash Flow Portal&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ultimately businesses come to Increase for access to speed, transparency, and reliability. We feel that should be as true when working with our team as it is when working with our machines.&lt;/p&gt;</content:encoded><dc:creator>Jamshed Vesuna</dc:creator><category>Article</category></item><item><title>Increase named to the 2026 Forbes Fintech 50</title><link>https://increase.com/articles/forbes-fintech-50-2026</link><guid isPermaLink="true">https://increase.com/articles/forbes-fintech-50-2026</guid><description>We&apos;re honored that Forbes named Increase to its annual Fintech 50 list for the second year in a row.</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We’re honored that Forbes named Increase to its annual &lt;a href=&quot;https://www.forbes.com/lists/fintech50/&quot;&gt;Fintech 50 list&lt;/a&gt; for the second year in a row. And we’re in great company, alongside customers like &lt;a href=&quot;https://stripe.com&quot;&gt;Stripe&lt;/a&gt; and &lt;a href=&quot;https://ramp.com&quot;&gt;Ramp&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some reflections on recent milestones that got us here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Increase now processes hundreds of billions in payments volume per year. We handle a growing number of API calls while maintaining latency of under 100 milliseconds.&lt;/li&gt;
&lt;li&gt;We added powerful new rails for instant money movement: FedNow and Push-to-card transfers. Alongside Real-Time Payments, Increase now supports every US instant payment network.&lt;/li&gt;
&lt;li&gt;We shipped improvements to our existing rails: &lt;a href=&quot;https://increase.com/articles/check-updates&quot;&gt;Check Transfers&lt;/a&gt; now offer attachments, overnight shipping, delivery notifications, design customization, and fraud controls. Our &lt;a href=&quot;https://increase.com/documentation/api/lockboxes#lockboxes&quot;&gt;Lockbox&lt;/a&gt; offering enables users to spin up unique locations to minimize latency. And we saw growing adoption of &lt;a href=&quot;https://increase.com/documentation/api/wire-drawdown-requests#wire-drawdown-requests&quot;&gt;Wire Drawdowns&lt;/a&gt; for use cases like payroll and bill payment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’re most grateful for the ambitious companies building the next generation of banking, payments and card products on Increase. In their own words:&lt;/p&gt;
&lt;div class=&quot;border-l-2 border-gray-200 pl-5 text-base italic&quot;&gt; &lt;p&gt;With Increase, we have high confidence that systems run smoothly. And if something goes wrong, we can quickly drill down and act before it affects payroll. This level of control has been critical for us.&lt;/p&gt; &lt;div class=&quot;mt-2 text-gray-600 not-italic&quot;&gt;— Andrew Brown, CEO of Check&lt;/div&gt; &lt;/div&gt;
&lt;div class=&quot;border-l-2 border-gray-200 pl-5 text-base italic&quot;&gt; &lt;p&gt;Increase has been a critical partner in helping us launch products that feel as modern and intuitive as the rest of Ramp’s offerings. The flexibility and transparency is unmatched.&lt;/p&gt; &lt;div class=&quot;mt-2 text-gray-600 not-italic&quot;&gt;— Nik Koblov, Head of Engineering at Ramp&lt;/div&gt; &lt;/div&gt;
&lt;p&gt;Thank you, Forbes, for the recognition. And now, back to work!&lt;/p&gt;
&lt;p&gt;— The Increase team&lt;/p&gt;</content:encoded><category>Article</category></item><item><title>2025 Q4 Newsletter</title><link>https://increase.com/newsletter/q4-2025</link><guid isPermaLink="true">https://increase.com/newsletter/q4-2025</guid><description>Changes for 2025 Q4, including FedNow, Push-to-Card, Cards Disputes API, Push Provisioning, Check Transfer enhancements, PHP and Ruby SDKs, Dashboard and Status Page improvements, and LLM-friendly documentation.</description><pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;December 31, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FedNow is live. FedNow is an instant payment network that’s ergonomically similar to Real-Time Payments (RTP) but administered directly by the Federal Reserve.&lt;/li&gt;
&lt;li&gt;We launched support for Push-to-Card transfers on Visa and Mastercard. You can now instantly send funds from an Increase account to the majority of US debit cards.&lt;/li&gt;
&lt;li&gt;Our new &lt;a href=&quot;https://increase.com/documentation/api/card-disputes&quot;&gt;Cards Disputes API&lt;/a&gt; is live. It’s directly integrated to Visa Resolve Online (VROL) APIs and lets you pass structured data for every type of dispute Visa supports, optimizing your UX and win rates.&lt;/li&gt;
&lt;li&gt;We launched &lt;a href=&quot;https://increase.com/documentation/push-provisioning&quot;&gt;Push Provisioning&lt;/a&gt;: your users can add their card to their Apple Pay wallet from your app without having to type (or know) their card number.&lt;/li&gt;
&lt;li&gt;We added support for attachments, overnight shipping, and design customization to &lt;a href=&quot;https://increase.com/documentation/api/check-transfers&quot;&gt;Check Transfers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Increase SDKs are now available in &lt;a href=&quot;https://github.com/increase/increase-php&quot;&gt;PHP&lt;/a&gt; and &lt;a href=&quot;https://github.com/increase/increase-ruby&quot;&gt;Ruby&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You can see what an object looks like in the API directly from the Dashboard.&lt;/li&gt;
&lt;li&gt;You can see Increase’s live system metrics directly on our &lt;a href=&quot;https://status.increase.com&quot;&gt;Status Page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;All our documentation is now LLM-friendly: copy or send any docs page to an LLM, and when robots browse our site they get markdown.&lt;/li&gt;
&lt;li&gt;We wrote about &lt;a href=&quot;https://increase.com/articles/lending-fast-and-slow&quot;&gt;why platforms have unique data insights to deliver small business lending to their customers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;We published a guide to embedding banking and payments into &lt;a href=&quot;https://increase.com/articles/vertical-saas&quot;&gt;Vertical SaaS&lt;/a&gt; companies.&lt;/li&gt;
&lt;li&gt;Our founder Darragh talked about bank infrastructure on the Fintech One-on-One Podcast.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>Lending, fast and slow</title><link>https://increase.com/articles/lending-fast-and-slow</link><guid isPermaLink="true">https://increase.com/articles/lending-fast-and-slow</guid><description>Small‑business lending bifurcated over the last decade.</description><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Small‑business lending bifurcated over the last decade.&lt;/p&gt;
&lt;p&gt;If you run your business on a platform like Stripe or Square, and need a working capital line, you can get it fast. The big payment processors have eaten up a huge chunk of the market for short-duration, low-dollar lines. Merchants get a decision in seconds and funding next day.&lt;/p&gt;
&lt;p&gt;But if you need a larger or longer duration loan, you’re stuck in a much slower world. You’re downloading your account statement then uploading it back again to the loan portal at the same bank. You’re reading through pages of covenants. You may wait months.&lt;/p&gt;
&lt;p&gt;How did fintechs win so much of the market for small business working capital — and why did it stop there?&lt;/p&gt;
&lt;p&gt;We’ve argued &lt;a href=&quot;https://increase.com/articles/vertical-saas&quot;&gt;elsewhere&lt;/a&gt; that vertical software is the new distribution model for financial services. This post covers why we think that’s true with lending, especially.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;extending-credit-with-the-data-on-hand-is-fast&quot;&gt;Extending credit with the data on-hand is fast&lt;/h2&gt;
&lt;p&gt;Stripe, Shopify, and Square all play in this market. The offer shows up where you sell. You drag a slider to pick an amount, accept the fee, and money appears. Terms are short — 9 months on average — and amounts comparatively small, mostly well under $100k. Repayment happens automatically, ebbing and flowing with your sales.&lt;/p&gt;
&lt;p&gt;It’s worth calling out what a great user experience this is. I’ve talked to founders who say they never would have applied for a loan, but seeing it teed up in front of them changed their mind.&lt;/p&gt;
&lt;p&gt;The great part is the speed. You know you qualify before you apply. The trick is prequalifying merchants based on sales data — processing volume, payment history, customer mix, seasonality — and not considering anything they wouldn’t be able to know ahead of time.&lt;/p&gt;
&lt;p&gt;The downside of this tight credit box is eye-popping charge-off rates: 5, 10 or even 15%. Payment processors stay ahead of these with high interest rates and fees.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;large-loans-require-data-that-banks-dont-have-on-hand&quot;&gt;Large loans require data that banks don’t have on-hand&lt;/h2&gt;
&lt;p&gt;Meanwhile, if you need capital to buy equipment, or real estate, or otherwise expand, you’re dealing with a bank, and it is not fast.&lt;/p&gt;
&lt;p&gt;You are not pre-qualified. You begin a weeks-long process, uploading every excruciating detail of yours and your company’s financial life, without any promise of success.&lt;/p&gt;
&lt;p&gt;Why is it this way? Because underwriting these deals is hard. Every banker knows they can give back ten years of gains in one bad quarter.&lt;/p&gt;
&lt;p&gt;Heterogeneity doesn’t help. One week underwriters review a new site for a craft brewery, the next week a renovation at an auto body shop. Different industries have different labor markets, regulatory risks, and collateral valuations. Generally, underwriters aren’t actually adjusting the ratios they’re looking for by industry: instead they adjust their thresholds portfolio-wide to be on the conservative side.&lt;/p&gt;
&lt;p&gt;And underwriters look at &lt;em&gt;everything&lt;/em&gt;. Tax returns, financial statements, collateral, insurance, appraisals, and comparables. This rigor mostly pays off! Charge-off rates on business loans from banks hover around 0.5%.&lt;/p&gt;
&lt;p&gt;This is not a great product experience. But it doesn’t have to be. Business owners looking for expansion capital don’t have a better option.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;a-better-option&quot;&gt;A better option&lt;/h2&gt;
&lt;p&gt;Let’s say you have a property that you rent out on Airbnb. It’s going well, and you’d like to expand by adding a second unit.&lt;/p&gt;
&lt;p&gt;You can see why &lt;em&gt;Airbnb’s payments processor&lt;/em&gt; isn’t in a good position to give you this loan. They can see your payment history, but not much beyond that.&lt;/p&gt;
&lt;p&gt;The local community bank may do better! However, the underwriter would have to make guesses about unfamiliar areas. And you’d have to commit to the application process itself.&lt;/p&gt;
&lt;p&gt;The best-positioned party to underwrite this loan is Airbnb itself. They see your reviews, cancellations, calendar; your property’s location, amenities, and comparables; how often travelers search for terms it matches; how long travelers linger over photos of the picture windows.&lt;/p&gt;
&lt;p&gt;This is why we think industry-specific platforms, whether they’re marketplaces or vertical SaaS, are so well set up to make embedded finance plays. They have the data and distribution. They understand their customers’ businesses. While these loans can and will remain mostly sold, they can do most of the data collection at the pre-qualification phase. The challenge for them is finding a partner with right technology, capital, and underwriting capacity.&lt;/p&gt;
&lt;p&gt;At the end of the day, the lender that can squeeze the most risk out of the portfolio &lt;em&gt;and&lt;/em&gt; win on user experience is going to run away with the show. If you’re building in this space, we’d love to chat! Reach out at &lt;a href=&quot;mailto:sam@increase.com&quot;&gt;sam@increase.com&lt;/a&gt;.&lt;/p&gt;</content:encoded><dc:creator>Sam Ballantyne</dc:creator><media:content url="https://increase.com/images/lending-fast-and-slow-hero.png" medium="image" type="image/png"/><category>Article</category></item><item><title>Agentic commerce — the Increase perspective</title><link>https://increase.com/articles/agentic-commerce</link><guid isPermaLink="true">https://increase.com/articles/agentic-commerce</guid><description>Agents based on large language models are doing more and more for us. Empowering them to make payments on our behalf is a live frontier.</description><pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Agents based on large language models are doing more and more for us. Empowering them to make payments is a live frontier.&lt;/p&gt;
&lt;p&gt;Agentic commerce is often cited as the breakthrough use case for stablecoin payments. See &lt;a href=&quot;https://www.coinbase.com/developer-platform/discover/launches/agentic-commerce&quot;&gt;Why Agentic Commerce Needs Crypto to Scale&lt;/a&gt; from Coinbase. Stripe’s new &lt;a href=&quot;https://www.paradigm.xyz/2025/09/tempo-payments-first-blockchain&quot;&gt;Tempo blockchain&lt;/a&gt; is built with a similar motivation.&lt;/p&gt;
&lt;p&gt;At Increase, we have a boring perspective: the existing rails are best.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;a-consumer-use-case&quot;&gt;A consumer use case&lt;/h2&gt;
&lt;p&gt;I recently took a summer vacation to the Alps. ChatGPT did much of the heavy lifting in finding hikes, hotels, restaurants, and train tickets. With due affection for the rigor and thoroughness that Europeans bring to building web forms, I would have loved to have ChatGPT book everything for me. It can’t today, but soon it will. And when it does, I will want it to use my existing credit cards.&lt;/p&gt;
&lt;p&gt;Partly this is for the rewards and benefits; the partner-specific benefits were one criterion I asked ChatGPT to consider in its research.&lt;/p&gt;
&lt;p&gt;But beyond the rewards, the biggest reason is the protection of Visa’s dispute machinery. As agents become targets for scammers, I want the full dispute apparatus of the card networks behind me.&lt;/p&gt;
&lt;p&gt;I expect product innovation from card issuers and acquirers here. If I were building this, I might spin up per-purchase virtual cards with a nice user-facing approval flow. Just as cards fight to be top of wallet, they’ll fight to be the card you give to ChatGPT.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;a-commercial-use-case&quot;&gt;A commercial use case&lt;/h2&gt;
&lt;p&gt;Businesses of all sizes receive a large volume of invoices. Validating these is toilsome: Did we really authorize this? Is this invoice early? Is this the negotiated amount? Is someone impersonating our vendor?&lt;/p&gt;
&lt;p&gt;This kind of checklist is reasonable for an agent to track down; but when it comes time to move money, they’ll likely use the same payment rails the operator would in the first place. Most of the time, that’s cards or bank transfers. That’s where payee preferences lie, and it’s where dispute protection lives.&lt;/p&gt;
&lt;p&gt;By the way, this is a real use case today. Ramp is doing some amazing work around agent-powered bill pay. If this is a problem you have, we highly recommend signing up: &lt;a href=&quot;https://ramp.com/bill-pay&quot;&gt;https://ramp.com/bill-pay&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;a-speculative-use-case&quot;&gt;A speculative use case&lt;/h2&gt;
&lt;p&gt;Cloudflare recently &lt;a href=&quot;https://blog.cloudflare.com/introducing-pay-per-crawl/&quot;&gt;announced&lt;/a&gt; a pay-per-crawl blocker:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Imagine asking your favorite deep research program to help you synthesize the latest cancer research or a legal brief… and then giving that agent a budget to spend to acquire the best and most relevant content.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s early days, but intuitively this use case feels real. Today, valuable data is monetized in an all-or-none fashion designed for human readers: newspaper subscriptions, Bloomberg terminals, trade journals.&lt;/p&gt;
&lt;p&gt;A potential challenge for existing rails here is cost. One could argue that stablecoins are a better fit for the market-clearing price of many of these transactions. But as with any low-dollar usage-based product, I suspect that these kinds of payments are likely to be settled in batches as part of broad commercial relationships.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;wrapping-up&quot;&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;Hypotheses should be falsifiable, so here’s ours: payments initiated by agents are going to skyrocket over the next two years, but the funding mix won’t look much different than it does today.&lt;/p&gt;
&lt;p&gt;That agentic commerce &lt;em&gt;doesn’t&lt;/em&gt; require reinventing money movement is a reason we expect it to take off. The existing rails work. What matters is giving agents programmable, low-level access to them and building the dispute protections and workflows that make them usable at scale.&lt;/p&gt;</content:encoded><dc:creator>Sam Ballantyne</dc:creator><media:content url="https://increase.com/images/agentic-commerce-hero.png" medium="image" type="image/png"/><category>Article</category></item><item><title>Embedding financial services in vertical software</title><link>https://increase.com/articles/vertical-saas</link><guid isPermaLink="true">https://increase.com/articles/vertical-saas</guid><description>Embedding financial services in industry-specialized software is good for customers, good for software companies, and good for banks. But to do it well, you need direct access to banking fundamentals and a willingness to understand how money actually moves.</description><pubDate>Tue, 09 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Embedding financial services in industry-specialized software is good for customers, good for software companies, and good for banks. But to do it well, you need direct access to banking fundamentals and a willingness to understand how money actually moves.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;vertical-software-as-the-new-distribution-model&quot;&gt;Vertical software as the new distribution model&lt;/h2&gt;
&lt;p&gt;Traditionally, banks have specialized by geography. A community bank knows and understands its local customers deeply. But geography isn’t always the right proxy for customer needs. A dentist in Portland, OR has more in common with a dentist in Portland, ME than with a dry cleaner next door.&lt;/p&gt;
&lt;p&gt;Industry specialization has always existed in banking. J.P. Morgan financed railroads. &lt;a href=&quot;https://en.wikipedia.org/wiki/Ally_Financial&quot;&gt;GMAC&lt;/a&gt; was created to finance the auto industry. What’s different now is that specialization increasingly comes from software, not banks. Vertical software platforms run tailored workflows for specific industries: dentists, insurance agents, contractors, nonprofits. And because those workflows often involve money, software platforms are naturally expanding into payments, bank accounts, lending, and more.&lt;/p&gt;
&lt;p&gt;Think of a software platform for beauty businesses that not only manages appointment booking, but also handles embedded payroll and tailored loans for salons and spas. Or insurance software that started with accounting flows, and now handles client invoice payments and payouts to carriers.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;why-payments-literacy-matters&quot;&gt;Why payments literacy matters&lt;/h2&gt;
&lt;p&gt;Can a software company really be expected to understand banking? At Increase, we think yes.&lt;/p&gt;
&lt;p&gt;Not everyone on your team needs to be a payments expert, but someone should be. Just as pizza software like Slice needs someone who understands oven throughput, vertical software teams embedding payments need someone who understands settlement timing, reconciliation, and network behavior. Your product will be stronger for it.&lt;/p&gt;
&lt;p&gt;The good news: the lift to access and understand payment details isn’t as heavy as it once was. With Increase, those details are exposed directly to you, rather than being hidden behind layers of middleware. Our direct connections to the Federal Reserve, Visa, and The Clearing House make financial primitives programmatically accessible. You can test, monitor, and refine payments flows just like any other system that matters to your business.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;building-on-financial-primitives&quot;&gt;Building on financial primitives&lt;/h2&gt;
&lt;p&gt;Embedded finance starts with financial primitives: accounts, payments, lending. They’re the building blocks. What matters is assembling them for the unique needs of your industry. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A property management platform building on Increase can debit rent through &lt;a href=&quot;https://status.increase.com/#ach-submission-timeline&quot;&gt;same-day ACH&lt;/a&gt; in the morning, see funds settle midday, and pay contractors seconds later via &lt;a href=&quot;https://increase.com/documentation/api/real-time-payments-transfers&quot;&gt;Real-Time Payment&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A nonprofit software platform can assign every inbound donation its own &lt;a href=&quot;https://increase.com/documentation/api/account-numbers&quot;&gt;Account Number&lt;/a&gt;, reconciling funds automatically down to the penny.&lt;/li&gt;
&lt;li&gt;An agriculture software provider can programmatically send paper checks and expose &lt;a href=&quot;https://increase.com/documentation/originating-checks#originating-checks&quot;&gt;each lifecycle event&lt;/a&gt; — printed, mailed, deposited — giving farmers the transparency they expect. With direct, low-level access, the financial system becomes flexible enough to map to the workflows you already run.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;better-outcomes-with-no-abstractions&quot;&gt;Better outcomes with no abstractions&lt;/h2&gt;
&lt;p&gt;Embedding financial services inside vertical software creates better outcomes across the board. Customers get integrated, reliable workflows. Software companies unlock new revenue streams and deeper retention. And banks gain distribution into industries that would otherwise remain fragmented or underserved.&lt;/p&gt;
&lt;p&gt;If you’re a vertical software platform launching embedded payments or financial services, you might be tempted by abstractions that hide complexity. But we’ve seen again and again that real speed, flexibility, and reliability come from building on financial primitives with &lt;a href=&quot;https://increase.com/articles/no-abstractions&quot;&gt;no abstractions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That’s the work we’re doing at Increase: giving vertical software platforms the modern banking core they need to build financial services that are seamless, resilient, and built for the industries they serve.&lt;/p&gt;
&lt;p&gt;If you’re building in this space, let’s talk! Reach us at &lt;a href=&quot;mailto:hello@increase.com&quot;&gt;hello@increase.com&lt;/a&gt;.&lt;/p&gt;</content:encoded><dc:creator>Matt Hennessy</dc:creator><media:content url="https://increase.com/images/vertical-saas-article.png" medium="image" type="image/png"/><category>Article</category></item><item><title>2025 Q2 Newsletter</title><link>https://increase.com/newsletter/q2-2025</link><guid isPermaLink="true">https://increase.com/newsletter/q2-2025</guid><description>Changes for 2025 Q2, including API event log filtering, Event page improvements, Check Transfer enhancements, and more.</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;May 30, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now filter API event logs in the Dashboard by the request path.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;May 9, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve made a number of improvements to the Event page in the Dashboard to give you more insight across your integration. You can now filter event logs by the associated object. We’ve also added an event timeline that gives you more context surrounding the event, as well as more details about the request and response lifecycle.&lt;/li&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/api/inbound-wire-transfers#reverse-an-inbound-wire-transfer&quot;&gt; reverse an Inbound Wire Transfer &lt;/a&gt; . This is useful if you received a duplicate wire or the recipient of the wire transfer requested the funds be returned to the sender.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 18, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now include an attachment when sending a &lt;a href=&quot;https://increase.com/documentation/api/check-transfers&quot;&gt; Check Transfer &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now send a Check Transfer using FedEx Overnight by setting the &lt;a href=&quot;https://increase.com/documentation/api/check-transfers#create-a-check-transfer.physical_check.shipping_method&quot;&gt; &lt;code&gt;shipping_method&lt;/code&gt;&lt;/a&gt; parameter.&lt;/li&gt;
&lt;li&gt;You can now accept requests for late ACH returns in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 4, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now add &lt;a href=&quot;https://increase.com/documentation/api/entities#entity-object.corporation.beneficial_owners.individual.address&quot;&gt; international beneficial owners &lt;/a&gt; to a corporate Entity.&lt;/li&gt;
&lt;li&gt;We now surface the cardholder name and device information on &lt;a href=&quot;https://increase.com/documentation/api/digital-wallet-tokens#digital-wallet-tokens&quot;&gt; Digital Wallet Tokens &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now view Digital Wallet Tokens in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>Check partners with Increase to enable payroll</title><link>https://increase.com/customers/check</link><guid isPermaLink="true">https://increase.com/customers/check</guid><description>Check is a leading embedded payroll infrastructure, giving businesses the ability to integrate payroll directly into their platforms. Whether those platforms are designed for coffee shops or construction companies, Check ensures their payroll operations run efficiently – supporting thousands of businesses and hundreds of thousands of employees. Their mission is to simplify payroll, making it seamless, scalable, and accessible to platforms of all shapes and sizes. However, achieving this goal requires more than functional software—it depends on having high visibility into the underlying financial networks and access to faster payment methods, areas where traditional banking partnerships can fall short.</description><pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate><media:content url="https://increase.com/images/check-thumbnail.png" medium="image" type="image/png"/><category>Customer story</category></item><item><title>2025 Q1 Newsletter</title><link>https://increase.com/newsletter/q1-2025</link><guid isPermaLink="true">https://increase.com/newsletter/q1-2025</guid><description>Changes for 2025 Q1, including File Links, check deposit images, Apple Pay transaction history, and more.</description><pubDate>Mon, 31 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;March 21, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now generate an unauthenticated URL for a &lt;a href=&quot;https://increase.com/documentation/api/files&quot;&gt;File&lt;/a&gt; using &lt;a href=&quot;https://increase.com/documentation/api/file-links&quot;&gt;File Links&lt;/a&gt; . This is useful if you want to share a File with a customer, auditor, or other third party.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 21, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deposit images from inbound checks are now viewable directly inline in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 31, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Incoming check deposits are now visible in the Dashboard.&lt;/li&gt;
&lt;li&gt;Apple Pay transaction history is now available for cards in your Apple Wallet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 10, 2025&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Declined Transactions with a &lt;a href=&quot;https://increase.com/documentation/api/declined-transactions#declined-transaction-object.source&quot;&gt; source &lt;/a&gt; of &lt;code&gt;check_decline&lt;/code&gt; now display negative amounts to better reflect the intended direction of fund flows. Please note that these transactions are informational only and do not represent actual financial messages.&lt;/li&gt;
&lt;li&gt;You can now quickly create a duplicate Transfer in the Dashboard. Simply navigate to the Transfer detail view and select “Draft Duplicate” to pre-fill the Transfer details for faster entry.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>How Ascend facilitates payments and automates insurance AR/AP workflows with Increase</title><link>https://increase.com/customers/ascend</link><guid isPermaLink="true">https://increase.com/customers/ascend</guid><description>Ascend is a leading finance automation platform in the insurance industry, streamlining the entire payment lifecycle, from collection and accounting to reconciliation and disbursement. By automating these processes, Ascend helps insurance businesses simplify treasury management, eliminate repetitive, time-consuming operational tasks, and provide a better customer experience. The result is greater profitability for its customers which include leading agencies, MGAs, and insurance carriers.</description><pubDate>Mon, 31 Mar 2025 00:00:00 GMT</pubDate><media:content url="https://increase.com/images/article-ascend-thumbnail.png" medium="image" type="image/png"/><category>Customer story</category></item><item><title>Compliance as code</title><link>https://increase.com/articles/compliance-as-code</link><guid isPermaLink="true">https://increase.com/articles/compliance-as-code</guid><description>As an engineer, how do you ensure that a code change doesn’t inadvertently break a compliance or legal obligation? More fundamentally, how do you even know what those obligations are? Conway’s Law tells us that compliance and engineering teams tend to operate in separate systems that rarely talk to each other. As a result, policies, procedures, and legal frameworks live in one world, while production systems live in another.</description><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As an engineer, how do you ensure that a code change doesn’t inadvertently break a compliance or legal obligation? More fundamentally, how do you even know what those obligations are?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Conway%27s_law&quot;&gt;Conway’s Law&lt;/a&gt; tells us that compliance and engineering teams tend to operate in separate systems that rarely talk to each other. As a result, policies, procedures, and legal frameworks live in one world, while production systems live in another. This disconnect creates risk—what’s written in a compliance document may not reflect what actually happens in production.&lt;/p&gt;
&lt;p&gt;We think there’s a better way to approach this.&lt;/p&gt;
&lt;p&gt;What if your application’s code also helped manage its regulatory, compliance, and legal requirements? You’d have a source of truth for all your obligations and encoded tests to ensure they are continuously fulfilled. This would eliminate discrepancies with outdated documents and prevent you from making a change if it would bring you out of compliance. Not only would this remove uncertainty when heading into an audit or exam, but it would essentially provide an internal automated audit function—ensuring compliance is proactive, not reactive.&lt;/p&gt;
&lt;p&gt;This system is one of the many ways we’re scaling compliance at Increase.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;how-it-works&quot;&gt;How it works&lt;/h2&gt;
&lt;p&gt;Our system has three concepts: Obligation Documents, Obligations, and Fulfillments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Obligation Documents&lt;/strong&gt; define a whole regulatory or compliance framework, such as the System and Organization Controls (SOC) or Truth in Savings Act (Regulation DD). Obligation Documents live in code, not data, and define the source of truth for its obligations and audit lifecycle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Obligations&lt;/strong&gt; represent the individual, verifiable requirements for our business. Every Obligation is associated with a parent Obligation Document—which contains many individual Obligations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fulfillments&lt;/strong&gt; are executable code that verify if an Obligation is met. There can be one or more Fulfillments associated with a single Obligation. Additionally, Fulfillments can take one of five implementation shapes.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-compliance-as-code-hierarchy.png&quot; alt=&quot;Obligation Document hierarchy&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;types-of-fulfillment&quot;&gt;Types of Fulfillment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Code Enforcement:&lt;/strong&gt; These fulfillments can sit in the test suite. For example, checking that transactions are processed in a certain order.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;State Checks:&lt;/strong&gt; These fulfillments involve checking the state of databases or external systems. For example, ensuring that all entities have verified tax IDs, financial ratios fall within acceptable ranges, or that external systems (such as firewall deny lists) are properly configured, monitored, and alerted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Policy Enforcement:&lt;/strong&gt; These fulfillments require written policies or procedures. For example, ensuring there is a policy in place to assess third-party contractors and vendors for risk to Increase.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Manual Assurance:&lt;/strong&gt; These fulfillments verify that a named role within the company makes a regular assurance about the current state. For example, that security incidents have been examined by the Chief Information Security Officer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No Action:&lt;/strong&gt; Some obligations cannot be actioned by us because they require regulatory intervention. For example, conducting specific interviews. These obligations are tracked for completeness.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;testing&quot;&gt;Testing&lt;/h2&gt;
&lt;p&gt;All of our Obligation Fulfillments run on our &lt;a href=&quot;https://increase.com/articles/automated-invariant-monitoring&quot;&gt;Checker framework&lt;/a&gt;, which manages the execution scheduling and handles the results in an easy to use interface.&lt;/p&gt;
&lt;p&gt;The neat thing about bringing obligations into your codebase is that the source of truth for requirements lives as close to the implementation as possible.&lt;/p&gt;
&lt;p&gt;Let’s look at an Obligation based on a 2010 Federal Deposit Insurance Corporation (FDIC) &lt;a href=&quot;https://www.fdic.gov/news/financial-institution-letters/2010/fil10081.html&quot;&gt;order&lt;/a&gt; to address compliance issues with overdraft fees and transaction processing:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text);overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;code_enforced_obligation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;  &amp;lt;&amp;lt;~DESCRIPTION&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;    Transactions should be processed in a neutral order that avoids manipulating or structuring the processing order to maximize customer overdraft and related fees.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;  DESCRIPTION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &amp;#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;processes ACH credits before debits&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is a deterministically provable statement that we can test against. In order to ensure we continuously remain in compliance, we have fulfillment code that looks like:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text);overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;it &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;processes ACH credits before debits&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;regulations&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  account &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt; make_account&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;balance&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  debit_entry &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt; make_entry&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;account&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; amount&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  credit_entry &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt; make_entry&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;account&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; amount&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 20&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;  FedACHEntryAllocating&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;run!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;  expect&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;historical_balance_below_zero?&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;account&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt; be_falsey&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We therefore have a test in our codebase against our transaction processing system that enforces a certain processing order and links back to this Obligation.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;bidirectional-linking&quot;&gt;Bidirectional linking&lt;/h2&gt;
&lt;p&gt;Often, the sub-organization building products is segmented from those interfacing with regulators and auditors. This can lead to many issues. In particular, audit requests ultimately branch out far beyond those interfacing with the auditor, either because it’s unclear how an obligation is fulfilled, it’s inaccessible to the working group, or the state of the system (a procedure, network diagram, access list, etc.) has shifted since the last audit.&lt;/p&gt;
&lt;p&gt;A tremendous benefit of bringing regulations into code is the ability to link the source of truth (the implementation in code or policy document, for example) back to the Obligation which it fulfills.&lt;/p&gt;
&lt;p&gt;This uniquely ensures that someone altering the implementation is aware of its otherwise opaque downstream impact. For example, a unit test may break that points back to the neutral transaction processing order Obligation, which gives a developer more context on why that code exists. Someone editing a policy document will see a footnote that links back to the Obligation, so they can proceed with cautious confidence.&lt;/p&gt;
&lt;p&gt;The bidirectional link is also enforced by the system. A breakage in either direction notifies the team.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;why-compliance-as-code-works-for-us&quot;&gt;Why compliance as code works for us&lt;/h2&gt;
&lt;p&gt;For many businesses, this approach may feel too heavy-handed. Compliance automation platforms like Vanta provide powerful, accessible solutions that help companies quickly achieve and maintain compliance with standard frameworks. However, these platforms are optimized for common compliance requirements.&lt;/p&gt;
&lt;p&gt;As banking infrastructure providers we, of course, adhere to common standards such as the System and Organization Controls (SOC) and Payment Card Industry Data Security Standards (PCI DSS). However, we also have bank-specific obligations, such as Regulation E (Electronic Fund Transfers), Federal Financial Institutions Examination Council (FFIEC), and Bank Secrecy Act (BSA) and additionally must comply with evolving regulatory guidance that introduces one-off obligations. These industry-specific requirements make off-the-shelf compliance solutions impractical for us.&lt;/p&gt;
&lt;p&gt;Compliance as code offers a more flexible and precise way to manage our obligations. It enables our engineering and compliance teams to work from the same source of truth, fostering collaboration and mutual understanding. Engineers engage directly with regulatory guidelines, while compliance specialists can inspect and interact with the code that enforces them.&lt;/p&gt;
&lt;p&gt;By embedding compliance into our development process, we ensure that regulatory requirements are continuously enforced, easily auditable, and integrated directly into our workflows — rather than maintained as a separate, manual function. This approach keeps our infrastructure both resilient and adaptable as regulations evolve.&lt;/p&gt;</content:encoded><dc:creator>Jamshed Vesuna</dc:creator><media:content url="https://increase.com/images/article-compliance-as-code-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>Ramp launches Ramp Treasury, powered by Increase</title><link>https://increase.com/customers/ramp-treasury</link><guid isPermaLink="true">https://increase.com/customers/ramp-treasury</guid><description>Ramp is a financial operations platform that helps companies achieve more by spending less. From spend and expense management to bill payments and vendor management, Ramp’s all-in-one solution is designed to automate finance operations and help businesses grow efficiently. With the launch of the Ramp Treasury, Ramp has further expanded its suite of financial tools, offering an all-in-one cash and treasury portfolio that puts customers’ operating cash to work.</description><pubDate>Thu, 23 Jan 2025 00:00:00 GMT</pubDate><media:content url="https://increase.com/images/ramp-treasury-thumbnail.png" medium="image" type="image/png"/><category>Customer story</category></item><item><title>2024 Q4 Newsletter</title><link>https://increase.com/newsletter/q4-2024</link><guid isPermaLink="true">https://increase.com/newsletter/q4-2024</guid><description>Changes for 2024 Q4, including OAuth applications, lockboxes, export functionality, and more.</description><pubDate>Tue, 31 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;December 27, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now list your &lt;a href=&quot;https://increase.com/documentation/api/oauth-applications&quot;&gt; OAuth applications &lt;/a&gt; via the API.&lt;/li&gt;
&lt;li&gt;You can now view the Groups connected to your OAuth Application in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;December 20, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view and &lt;a href=&quot;https://dashboard.increase.com/lockboxes&quot;&gt; create lockboxes &lt;/a&gt; directly from the Dashboard. Lockboxes provide virtual addresses for receiving checks, which are automatically deposited into their designated accounts upon arrival.&lt;/li&gt;
&lt;li&gt;You can now export filtered data from tables in the Dashboard. Additionally, when reviewing your &lt;a href=&quot;https://dashboard.increase.com/documents/exports?status=complete&amp;#x26;status=pending&amp;#x26;creator=me&quot;&gt; list of exports &lt;/a&gt; , you can easily return to the original filtered data.&lt;/li&gt;
&lt;li&gt;Inbound check deposits can now be declined through the Dashboard within one hour of their deposit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;December 16, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now filter objects in the dashboard by &lt;code&gt;created_at&lt;/code&gt; date.&lt;/li&gt;
&lt;li&gt;Cashback earned on individual card transactions is now visible in both the Dashboard and &lt;a href=&quot;https://increase.com/documentation/api/card-payments#card-payment-object.elements.card_settlement.cashback&quot;&gt; the API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;When exporting data from the Dashboard, you can more easily monitor the export status and retroactively view the specific data that was exported.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;December 6, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Payee information is now extracted from deposited check images for your initiated Check Transfers using Optical Character Recognition (OCR). This data helps mitigate fraud and supports informed accept or decline decisions. Contact support if you’d like to try this feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;December 2, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now quickly generate test data in Sandbox directly from the Dashboard. If no transactions have been created in your Sandbox environment, you’ll see an alert that lets you populate it with sample data, including a variety of transfers, account numbers, and a card with a settled authorization.&lt;/li&gt;
&lt;li&gt;The stand-in processing reason for card declines is now &lt;a href=&quot;https://increase.com/documentation/api/card-payments#card-payment-object.elements.card_decline.network_details.visa.stand_in_processing_reason&quot;&gt; available &lt;/a&gt; under &lt;code&gt;network_details.visa.stand_in_processing_reason&lt;/code&gt; .&lt;/li&gt;
&lt;li&gt;You will now receive emails for all transfers requiring approval. By default, all Owners, Administrators, and Finance Managers will be notified. However, you can update these email preferences at any time in &lt;a href=&quot;https://dashboard.increase.com/settings/general&quot;&gt; Settings &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;November 15, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sandbox simulations for creating an Inbound ACH Transfer, depositing a mailed Check Transfer, creating a Card Authorization, and settling a Card Authorization can be used from the Dashboard.&lt;/li&gt;
&lt;li&gt;Sandbox simulations now support Idempotency Keys (except Card Authorization simulations).&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>ISO 8583: The language of credit cards</title><link>https://increase.com/articles/iso-8583-the-language-of-credit-cards</link><guid isPermaLink="true">https://increase.com/articles/iso-8583-the-language-of-credit-cards</guid><description>ISO 8583 is the standard for real-time messages communicated between acquirers and issuers through all of the major card networks. Whenever you tap your card at a point of sale device or click “purchase” online, odds are it will eventually end up as an ISO 8583 message sent between the merchant’s acquiring processor, the card network, and your bank’s issuer processor.</description><pubDate>Mon, 16 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.iso.org/standard/79451.html&quot;&gt;ISO 8583&lt;/a&gt; is the standard for real-time messages communicated between acquirers and issuers through all of the major card networks. Whenever you tap your card at a point of sale device or click “purchase” online, odds are it will eventually end up as an ISO 8583 message sent between the merchant’s acquiring processor, the card network, and your bank’s issuer processor. Early on, the point of sale device or the ATM might have built and sent the ISO 8583 message directly to the acquirer, but in today’s ecommerce environment messages typically pass from the merchant to a payment processor in higher-level formats, such as JSON, which then in turn are translated to the card network’s ISO 8583-based format. This approach simplifies the process by abstracting away the complexity of the ISO 8583 format from the rest of the payments ecosystem.&lt;/p&gt;
&lt;p&gt;When the standard was first defined in 1987, it included the overall structure of the message specification and the names and lengths of the core fields, such as the card number (“primary account number”) in field 2 and the transaction amount in field 4. The message began with a 4-digit Message Type Indicator code representing whether it was an authorization message, a reversal, or some other message type. This was followed by a bitmap that told the recipient which fields were present. It left room for a few fields that could be used by networks to include network-specific information, and as a result the various card network specifications quickly diverged through a series of nested fields that did not overlap at all. &lt;a href=&quot;https://standards.iso.org/iso/8583/ed-3/en/&quot;&gt;Later versions&lt;/a&gt; of the standard greatly increased the number of fields, reducing the need for network-specific behavior for new implementations. Specifications like Visa’s &lt;a href=&quot;https://corporate.visa.com/content/dam/VCOM/download/corporate/media/visanet-technology/visa-net-booklet.pdf&quot;&gt;Base I&lt;/a&gt; have thousands of clients running on everything from mainframes to devices like ATMs, however, making sweeping backwards incompatible changes next to impossible. As a result, these specifications still largely follow the rules set forth by the original standard from 1987.&lt;/p&gt;
&lt;p&gt;The standard also allowed flexibility in how each field was serialized. For instance, networks could choose to use &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC&quot;&gt;EBCDIC&lt;/a&gt;—the 8-bit encoding scheme favored by mainframes—for all fields, or opt for packed &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary-coded_decimal&quot;&gt;BCD&lt;/a&gt; to save space in numeric fields wherever possible. This made the specifications defined by each network, such as Visa, Mastercard, and Discover, eventually evolve to have more differences than similarities.&lt;/p&gt;
&lt;p&gt;Throughout this article we’ll explore the basic structure of the ISO 8583 format before delving into its more complex nested sub-fields. In the end we’ll look at how you might define an ISO 8583 parser in code, grounded in how we process card transactions as an issuer processor connected directly to networks like VisaNet here at Increase.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-file.png&quot; alt=&quot;ISO 8583 file structure&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h1 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;basic-format&quot;&gt;Basic format&lt;/h1&gt;
&lt;p&gt;ISO 8583 messages can only be transmitted and received by parties with a shared specification detailing exactly which fields are present and in what positions. ISO 8583 messages, similar to other storage-efficient formats and unlike a more verbose format like JSON, carry only values and no field names. A basic message contains a “message type indicator” describing what type of message is sent, a bitmap explaining which fields are present, and the fields themselves.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-basic-format.png&quot; alt=&quot;ISO 8583 basic format&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;message-type-indicator&quot;&gt;Message Type Indicator&lt;/h2&gt;
&lt;p&gt;The message type indicator is a four-digit code that informs the receiver of the type of message being sent, such as an authorization message or a reversal. This tells the recipient which fields to expect to be present and not present in the message. While the specification defines a standard set of values—e.g., &lt;code&gt;0100&lt;/code&gt; for an authorization request and &lt;code&gt;0110&lt;/code&gt; for an authorization response—some networks deviate from these values and retain only the general concept. The way the indicator is serialized also varies between networks. Some networks use packed BCD to reduce its size to 2 bytes, while others use simpler formats like an ASCII or EBCDIC 4-byte value.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;bitmap&quot;&gt;Bitmap&lt;/h2&gt;
&lt;p&gt;Most of the fields in an ISO 8583 message are optional, requiring the sender to convey which fields are present and which are missing. This is done with a bitmap, where each bit is set to 1 if the field is present and 0 if it is not. For example, &lt;code&gt;0110 1100&lt;/code&gt; in the first byte of the bitmap communicate that fields 2, 3, 5, and 6 are present. The first bit in the first byte is reserved for communicating whether a second 8-byte bitmap is included, required when more than 64 fields are present. Similar to the Message Type Indicator, how the bitmap itself is serialized varies from network to network: hex, binary, ASCII, or EBCDIC are all possible choices.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-bitmap.png&quot; alt=&quot;ISO 8583 bitmap&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;data-elements&quot;&gt;Data elements&lt;/h2&gt;
&lt;p&gt;Following the bitmap, the sender serializes each present field in sequential order. Fields can be either primitive, containing a single value such as a string or an integer, or complex, containing nested fields within them. The serialization of primitive fields typically involves a combination of the factors enumerated below.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Encoding&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Even for networks that prefer ASCII for their free-text fields, a serialized ISO 8583 message is usually not fully readable in plaintext, as the encoding of each field varies based on the type of field. There are generally a few options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC&quot;&gt;EBCDIC&lt;/a&gt; or ASCII: Typically used for freeform text but sometimes preferred for all fields, regardless of content. Some networks support both EBCDIC and ASCII and translate between the formats according to their participants’ preferences. The major networks usually default to EBCDIC, as this was the encoding of choice for IBM mainframes when the networks were first built.&lt;/li&gt;
&lt;li&gt;Packed &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary-coded_decimal&quot;&gt;BCD&lt;/a&gt;: Often used for integers, with each digit occupying 4 bits. This encoding aligns with the 0-9 subset of hexadecimal, making it space-efficient for numerical data.&lt;/li&gt;
&lt;li&gt;Binary: Occasionally used for fixed length integers, encoded as 1 or 2 byte values in either little-endian or big-endian format, depending on the system’s requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Variable or fixed length&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A fixed length field always takes up the same number of bytes and padding is necessary to make sure the field fills its entire length. For example, amount fields are often 12 digits, right-justified, and padded with zeros—&lt;code&gt;000000002412&lt;/code&gt; represents $24.12. Variable length fields are preceded by a length prefix, so no padding is necessary, as the receiver first decodes the length indicator and then uses that to know how many bytes to extract for the field itself.&lt;/p&gt;
&lt;p&gt;How a variable length indicator is encoded also depends on the content of the field itself: a numeric Acquiring Institution ID might for example be encoded as packed BCD, where 12 digits is encoded in 6 bytes, but the length indicator would still state the number of digits, 12, and not the number of bytes, 6. This creates an interesting situation for odd-length integers. Take the number &lt;code&gt;123&lt;/code&gt; as an example: when serialized, it becomes the byte array &lt;code&gt;[1, 35]&lt;/code&gt;, represented in binary as &lt;code&gt;00000001 00100011&lt;/code&gt;. When we roundtrip this back, we end up with the value &lt;code&gt;0123&lt;/code&gt; as we’re not able to differentiate between a &lt;code&gt;0&lt;/code&gt; in the first nibble (half byte) and the padding-zero we used for &lt;code&gt;123&lt;/code&gt;. As such, it is necessary to incorporate the length indicator, which tells our encoder that the actual value length is supposed to be 3 digits so that we can trim away the first padding-zero.&lt;/p&gt;
&lt;h1 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;nested-messages&quot;&gt;Nested messages&lt;/h1&gt;
&lt;p&gt;While the standard defines core fields such as “transaction amount” and “merchant identifier,” the list of pre-defined fields in the &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO_8583#ISO-defined_data_elements_%28ver_1987%29&quot;&gt;original standard&lt;/a&gt; eventually became a limiting factor for card network feature development. To address this, the standard reserved certain “private use” fields that card networks could utilize to serialize custom data as needed. This is where the specifications really started to differ between networks, both in the data they chose to communicate but also in how each nested field was serialized. The original standard provided limited guidance on this topic, an oversight that later versions sought to address.&lt;/p&gt;
&lt;p&gt;There are generally three main ways to serialize a nested message:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tables: Each field is usually of fixed length and is always included, either with its actual value or replaced by a default placeholder value if empty.&lt;/li&gt;
&lt;li&gt;Nested bitmap messages: Only present fields are serialized, using a simplified, fixed-length version of the top-level bitmap to indicate field presence.&lt;/li&gt;
&lt;li&gt;Tag Length Value (TLV) messages: Each field is serialized as a tuple containing the field number (“tag”), the length of the field, and the field value. This format is defined by a separate standard, &lt;a href=&quot;https://www.iso.org/standard/81420.html&quot;&gt;ISO 8825&lt;/a&gt;, which outlines the encoding rules from &lt;a href=&quot;https://en.wikipedia.org/wiki/ASN.1&quot;&gt;ASN.1&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;How common each nested message type is varies from network to network. You might see American Express heavily use tables, while only Visa and China UnionPay make use of nested bitmap messages. Mastercard primarily sticks to Tag Length Value messages, a direction in which most of the card networks are slowly moving towards for all their new sub-fields.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;tables&quot;&gt;Tables&lt;/h2&gt;
&lt;p&gt;The original nested message element is both the simplest and the most complex. In its simplest form, each sub-field is serialized sequentially, with no fields omitted, always resulting in a fixed number of bytes. This works fine for basic tables with a low number of fields but resulted in space inefficiencies for tables with a larger number of optional fields by having to send unnecessary padding characters for fields that were rarely present. Attempts to tweak the format to better support this and other scenarios introduced significant complexity, where the implementers would have likely been better off with a completely different sub-message type altogether.&lt;/p&gt;
&lt;p&gt;This evolution reflects a common pattern in software development, where an implementation starts off as simple but gradually grows in complexity as extensions are added. In the end you’re left with a solution that is more complicated to implement for clients than what a new and separate concept altogether would have been.&lt;/p&gt;
&lt;p&gt;We can see the basic table format at display in one of the original fields, field 43 &lt;em&gt;Card Acceptor&lt;sup&gt;&lt;a href=&quot;#user-content-fn-0&quot; id=&quot;user-content-fnref-0&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;0&lt;/a&gt;&lt;/sup&gt; Name or Location&lt;/em&gt;:&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-basic-tables.png&quot; alt=&quot;ISO 8583 basic tables&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Variable tables&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Each table takes up a predefined number of bytes and is always present, as receivers expect to parse each field in order. To omit the city name in the example above we would instead fill it with 13 spaces, resulting in the same overall size of 40 bytes. This is an inefficient approach if the city name is frequently omitted, forcing participants to transmit empty spaces to indicate the absence of data. Instead, in cases where a number of the sub-fields in a table are optional, implementations might let the sender omit sub-fields as long as they omit all the subsequent sub-fields in the table. Referring to the sub-fields in the example below as A, B, and C, you would be able to send the combinations of: only A, only A and B, or A, B, and C altogether. This type of “telescoping” is only possible when the table is preceded by a variable length indicator, communicating to the recipient how many bytes they should expect to read for the field, such as 25 bytes (A), 38 bytes (A + B), or 40 bytes (A + B + C).&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-telescoping-tables.png&quot; alt=&quot;ISO 8583 telescoping tables&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;This concept is also used to nest sub-messages within sub-messages, as shown in the &lt;em&gt;Additional Amounts&lt;/em&gt; field below, where we can serialize up to 6 additional amounts of 20 bytes each:&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-nested-tables.png&quot; alt=&quot;ISO 8583 nested tables&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;A similar extension happens when we want to support having one of the sub-fields take up a variable amount of space. Going back to our &lt;em&gt;Card Acceptor Name or Location&lt;/em&gt; table, if we wanted to support a card acceptor name sub-field of up to 200 characters, the original approach would require all participants to pad the value with spaces up to the maximum length of 200 characters. This method, while functional, is inefficient for a standard that greatly values its frugal use of space.&lt;/p&gt;
&lt;p&gt;To address this, some networks solve the issue for fields like addresses by placing the variable-length sub-field at the end of the table. This allows the receiver to simply read the remainder of the field without requiring padding, effectively eliminating unnecessary overhead. This method only allows a single variable length sub-field per table, however.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-tables-variable-sub-field.png&quot; alt=&quot;Variable sub-field table&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Nibble tables&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some tables consist entirely of numeric fields encoded with packed BCD. This is the case with Visa’s &lt;em&gt;Additional Point of Sale Information&lt;/em&gt; field, where most of the fields only consist of single-digit enums. If we were to serialize these as usual, we would end up with an entire byte for each separate field, with the first 4 bits of each byte wasted on zeros. “Obviously” an egregious inefficiency, the specification instead defines that each single-digit field should occupy only one nibble, or half a byte.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-nibble-tables.png&quot; alt=&quot;ISO 8583 nibble tables&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;Serialized, this would look like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Byte 1: &lt;em&gt;terminal type&lt;/em&gt; for the first 4 bits, &lt;em&gt;terminal entry capability&lt;/em&gt; for the last 4 bits&lt;/li&gt;
&lt;li&gt;Byte 2: &lt;em&gt;chip condition code&lt;/em&gt; for the first 4 bits, &lt;em&gt;special condition indicator&lt;/em&gt; for the last 4&lt;/li&gt;
&lt;li&gt;…and so on.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;nested-bitmap-messages&quot;&gt;Nested bitmap messages&lt;/h2&gt;
&lt;p&gt;Most of the complexity discussed earlier comes from trying to omit certain sub-fields without having to waste space on empty characters to communicate that a field has been omitted. A nested bitmap message solves this problem by including a bitmap before the elements, communicating to the recipient which fields are present and which are omitted. This is identical to how the top-level message itself is serialized, with the distinction that nested sub-level message bitmaps are generally shorter and of fixed length (e.g., 8 bytes to allow 64 bits/fields).&lt;/p&gt;
&lt;p&gt;This is an improvement over tables in that it eliminates the need to serialize empty values entirely, saving space and simplifying the interpretation of fields. There is no ambiguity about whether an empty value indicates omission or carries an actual value (e.g., a zero amount).&lt;/p&gt;
&lt;p&gt;It is also an improvement in retaining backward compatibility. For example, you could write a parser where you ignore any new bitmap fields that you’ve yet to implement, allowing networks to add new fields up to the maximum capacity of the bitmap (e.g., 64 fields for 8 bytes). However, this is generally not how the networks operate, as the addition of a new field is considered a significant change that requires advance notice to clients.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;tag-length-value-messages&quot;&gt;Tag-length value messages&lt;/h2&gt;
&lt;p&gt;Later versions of the ISO 8583 standard incorporated parts of a separate standard altogether, &lt;a href=&quot;https://www.iso.org/standard/81420.html&quot;&gt;ISO 8825&lt;/a&gt;, for use in nested sub-messages. This approach is so robust that it completely removes the need for other nested message types like tables and bitmap messages. In this format, each field is serialized as a tuple consisting of a tag, the length of the field, and the field value itself. Similar to the nested bitmap messages this lets the sender omit any missing fields as the recipient can rely on the tag component to identify which sub-field is being parsed.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-tlv.png&quot; alt=&quot;ISO 8583 tag-length-value&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;The TLV format is, unlike the other two message formats we’ve looked at, unordered. While the tags are defined in a specific order in the specification, the sender can choose to serialize each tag-length-value tuple however they want without causing issues for the recipient. This would not work for the nested bitmap field, where the recipient reads the bitmap to see which fields (e.g., field 1, 3, and 5) are present and then expects the corresponding data to follow in that order. A tag-length-value parser, on the other hand, would read the tag first and use that to know which field is being parsed.&lt;/p&gt;
&lt;p&gt;Tag-length value parsers are slightly more involved to implement but offer the most flexibility for networks: participants are expected to handle new sub-fields gracefully.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tag and length formatting&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Both the tag and length components are encoded in a way where the recipient can determine how many bytes are used for each component from the value of the initial byte. The tag, for example, only sets the last 5 bits in the first byte if a subsequent byte is necessary.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hierarchy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Generally tag-length value messages are structured as two layers of messages: the top level is called a “dataset” where the number of bytes used by the tag and length components are fixed, while the lower level of tag-length value fields rely on the variable format for both the tag and length indicators. This provides ample room for adding more fields.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-hierarchy.png&quot; alt=&quot;ISO 8583 hierarchy&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h1 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;framing&quot;&gt;Framing&lt;/h1&gt;
&lt;p&gt;ISO 8583 messages are generally sent over long-lived TCP sockets, as described in &lt;a href=&quot;https://increase.com/articles/visa-redundancy&quot;&gt;“Visa: half a century of high availability”&lt;/a&gt;. As such, there needs to be a layer of framing around the messages so that the recipient knows where one ISO 8583 message ends and another begins in a stream of TCP packets. This is usually done with a simple length indicator, preceding the ISO 8583 message with a 4-byte indicator that informs the recipient of how many bytes they should read for the ISO 8583 message itself.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;network-specific-header&quot;&gt;Network-specific header&lt;/h2&gt;
&lt;p&gt;Some of the card networks, such as Visa, also include a header between the framing Message Length Header and the ISO 8583 message itself. This generally consists of meta information about the message itself, such as where it was sent from and where it is to be delivered, and whether the network rejected it with any errors.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-framing.png&quot; alt=&quot;ISO 8583 framing&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h1 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;building-parsers&quot;&gt;Building parsers&lt;/h1&gt;
&lt;p&gt;Parsing a basic ISO 8583 message is straightforward and generally only requires the implementation of a bitmap parser and a length definition for each field to be able to handle the primitive elements at the top level. A lot of the complexity comes from correctly handling the various types of nested sub-messages and the subtle differences between each card network’s implementation. A useful technique for tackling this complexity is to define the core building blocks needed to declaratively compose a message, as opposed to imperatively implementing each of the different field types on their own.&lt;/p&gt;
&lt;p&gt;At Increase we write Ruby and make heavy use of the &lt;a href=&quot;https://sorbet.org/&quot;&gt;Sorbet&lt;/a&gt; type system. As such we define our ISO 8583 parsers with &lt;code&gt;T::Struct&lt;/code&gt; classes from Sorbet, which gives us a type-safe message class after parsing.&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text);overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;Struct&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;primary_account_number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bitmap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;BCD&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;              Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Variable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;                bytes&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Variable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bytes&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;ONE&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;                encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;BINARY&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;              ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;          )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;processing_code&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;ProcessingCode&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bitmap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Fixed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;          )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;amount_transaction&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bitmap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;BCD&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Fixed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 12&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;          )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;transmission_date_and_time&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Time&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bitmap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            transform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Transform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Time&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;%m%d%H%M%S&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Fixed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;BCD&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;          )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;response_code&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;ResponseCode&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bitmap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 39&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;EBCDIC&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Fixed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;          )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This makes it easy to map from the specifications provided by the card networks to a declarative parser implementation. It is useful to try to define sane defaults—a fixed-length &lt;code&gt;Integer&lt;/code&gt; type is by default right-justified and padded with zeros, but if you needed to override it you could do so:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text);overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;amount_settlement&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;      T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;      extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bitmap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;BCD&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Fixed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 12&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          padding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Padding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;              character&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Padding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Character&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;SPACE&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;              justification&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Padding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Justification&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;LEFT&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;            ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Similarly, we define nested sub-messages with other &lt;code&gt;T::Struct&lt;/code&gt;s and leave room for configuration where functionality deviates from network to network:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text);overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; VerificationAndTokenData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;Struct&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  sig &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt; override&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;returns&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;MessageTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;VerificationAndTokenData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;])&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;  def&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt; self.transform&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;    TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;MessageTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;      struct_class&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;      tag_transform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;FixedTagTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          bytes&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;FixedTagTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bytes&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;ONE&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;        ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;      length_transform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;FixedLengthTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          bytes&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;FixedLengthTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Bytes&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;TWO&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;        ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;  class&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; VerificationData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;Struct&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;    sig &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt; override&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;returns&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;MessageTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;VerificationData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;])&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt; self.transform&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;      TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;MessageTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        struct_class&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        tag_transform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;VariableTagTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        length_transform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;VariableLengthTransform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;      )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;    const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;postal_code&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;              encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;EBCDIC&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;              message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 0xC0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;    const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;street_address&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;              encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Encoding&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;EBCDIC&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;              message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 0xCF&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;verification_data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;VerificationData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;        extra&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;          Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Field&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;TagLengthValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 0x66&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;  # ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  const &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;missing_tags&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;nilable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Hash&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;]),&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; default&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;error-handling&quot;&gt;Error handling&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;missing_tags&lt;/code&gt; fields in the tag-length-value messages above store a hash map of any tags we’ve yet to implement and ensure that messages still round-trip correctly without blowing up for new tags. This type of future-proofing is generally only required for tag-length-value messages, but gracefully handling local errors in sub-messages is a useful concept to apply to the rest of the parser as well. While the card networks do validate the overall format of the message, there is lots of room for subtle errors that do not result in rejections at the network level.&lt;/p&gt;
&lt;p&gt;This makes graceful error handling especially crucial for issuer processors, who receive authorization requests from a large number of acquirers across the world. Failing to parse one of these messages means a decline for your cardholder, an especially frustrating experience when you’re trying to pay for a bill in person. It is also a useful concept for acquiring processors, however, where you often end up seeing incompliant sub-fields in the responses to your messages.&lt;/p&gt;
&lt;p&gt;To gracefully handle errors in nested sub-fields you partition the byte stream you’re parsing such that you can continue handling the next field if an error happens in the field before. Take the &lt;em&gt;Additional Point of Sale Information&lt;/em&gt; table from earlier as an example: each of these fields are enumerations, and you might wish to map them to an enumeration in your programming language instead of dealing with the raw network values (usually integers). If you do so you will eventually see an enumeration you have yet to handle, at which point your parser should be able to record it as a partial error and continue with the next field.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-error-nibble.png&quot; alt=&quot;ISO 8583 error in nibble table&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;An important nuance to keep in mind here is that we still need to ensure that we serialize the table back to a reasonable value (often called round-tripping), especially if it’s a table the sender expects to receive mirrored back in the response. Simply omitting the value you failed to parse altogether would result in a shorter overall length for the table, and so you’ll need to either replace the unknown value with a placeholder—such as a space or a zero, depending on the content—or keep hold of the raw value you were unable to parse to put it back in the message afterwards.&lt;/p&gt;
&lt;p&gt;Moving up one level you can follow a similar principle for an entire sub-message itself. If we’ve parsed two fields in a tag-length-value message correctly but then reach an error trying to interpret the length indicator of the next tag, we’ll need to throw out the rest of the sub-message and keep what we parsed so far, even if it means potentially throwing away sub-fields that would’ve followed after the faulty length indicator.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-error-subfield.png&quot; alt=&quot;ISO 8583 error in subfield&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;Finally, at the very top level there are errors that we just can’t recover from. If we fail to parse the length indicator for one of the top-level fields we’ll have no way to parse the rest of the message and it is likely critical enough that we shouldn’t attempt to use what we have so far. This is the type of decision you want to make for every part of your parser that can possibly fail—have we reached a fatal point of no return or is there a way we can gracefully continue to parse the rest of the message, despite the error we just experienced?&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-iso8583-error-header.png&quot; alt=&quot;ISO 8583 error in header&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h1 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;conclusion&quot;&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;Throughout this article we’ve looked at some of the interesting intricacies that arise when parsing ISO 8583 messages, and discussed how they came to be from the initial ISO 8583 standard defined in 1987. When you use Increase for &lt;a href=&quot;https://increase.com/products/cards&quot;&gt;Programmatic Card Processing&lt;/a&gt; we take care of parsing the card network messages for you so that you can focus on building your product. We do so in a way that avoids hiding or obfuscating details, as described in our &lt;a href=&quot;https://increase.com/articles/no-abstractions&quot;&gt;“No Abstractions: an Increase API design principle”&lt;/a&gt; blog post. If this approach resonates with you, &lt;a href=&quot;https://increase.com/contact&quot;&gt;contact our sales team&lt;/a&gt; to talk about using Increase as your issuer processor, or check out our &lt;a href=&quot;https://increase.com/documentation/card-payment-lifecycle&quot;&gt;API documentation&lt;/a&gt;.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class id=&quot;footnote-label&quot;&gt;Notes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-0&quot;&gt;
&lt;p&gt;Card Acceptor is usually synonymous with merchant: an entity that accepts cards for payments. &lt;a href=&quot;#user-content-fnref-0&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><dc:creator>Martin Ek</dc:creator><media:content url="https://increase.com/images/article-iso-8583-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>Cash reconciliation: Aligning transaction activity with the Federal Reserve&apos;s data</title><link>https://increase.com/articles/cash-reconciliation</link><guid isPermaLink="true">https://increase.com/articles/cash-reconciliation</guid><description>Increase operates as a parallel core for our bank partners. We connect directly to the Federal Reserve and process wires, ACH transfers, and checks using a dedicated routing number. An important associated responsibility is to reconcile the activity in our systems with the cash movement at the Federal Reserve.</description><pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Increase operates as a &lt;a href=&quot;https://increase.com/articles/modernized-banking-core&quot;&gt;parallel core&lt;/a&gt; for our bank partners. We connect directly to the Federal Reserve and process wires, ACH transfers, and checks using a dedicated routing number. An important associated responsibility is to reconcile the activity in our systems with the cash movement at the Federal Reserve.&lt;/p&gt;
&lt;p&gt;While banks are responsible for ledgering the activity of their customers, the Federal Reserve is the source of truth on where dollars &lt;em&gt;actually sit&lt;/em&gt;. Ensuring precise reconciliation between bank records and the Federal Reserve’s data is essential to maintain a clear and accurate view of customer funds. Each day, we compare reports provided by the Federal Reserve with our independently generated expectations of those reports to ensure alignment.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;federal-reserve-accounts&quot;&gt;Federal Reserve Accounts&lt;/h2&gt;
&lt;p&gt;Every chartered financial institution is &lt;a href=&quot;https://www.federalreserve.gov/monetarypolicy/reserve-maintenance-manual-account-structure.htm&quot;&gt;eligible for an account&lt;/a&gt; at their regional Federal Reserve Bank. In many ways, this account is just like any other bank account. There’s an account number (generally the bank’s main routing number), an interest rate (the &lt;a href=&quot;https://www.federalreserve.gov/monetarypolicy/reserve-balances.htm&quot;&gt;Interest on Reserve Balances&lt;/a&gt;), an API (ACH, wires, etc), a web interface, and statements. The Federal Reserve makes these statements available in a machine-readable file they call &lt;a href=&quot;https://www.frbservices.org/resources/financial-services/accounting/rules-regulations.html&quot;&gt;Financial Institution Reconcilement Data&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This file has detailed information about debits and credits posting to the account. If a bank has multiple routing numbers, the Financial Institution Reconcilement Data separates activity by routing number. There are many different transaction codes, ranging from &lt;code&gt;10010&lt;/code&gt; (“Transfer of Funds”, used for wires), to &lt;code&gt;63010&lt;/code&gt; (“Coin Transaction”), to &lt;code&gt;84710&lt;/code&gt; (“Dodd Frank Assessment Fee”)—you can &lt;a href=&quot;https://www.frbservices.org/binaries/content/assets/crsocms/resources/rules-regulations/amg-appendix-b-092923.xlsx&quot;&gt;download a full list of transaction codes&lt;/a&gt; from the Federal Reserve.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;expectations&quot;&gt;Expectations&lt;/h2&gt;
&lt;p&gt;To support reconciling Increase activity to this Financial Institution Reconcilement Data, we generate what we call an “Expected Cash Transaction Contribution” whenever something happens in our system that we expect to contribute to some cash transaction. We check daily that our expectations match the actual reality of the Federal Reserve reporting in both directions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All expectations correspond to reported cash movement&lt;/li&gt;
&lt;li&gt;All reported cash movement corresponds to expectations&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-cash-reconciliation-flow.png&quot; alt=&quot;Cash reconciliation flow&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;This means that our code needs to deeply understand and model how the Federal Reserve works to generate expectations that can later be matched to the actual reporting. For wires, this is straightforward: there is one Financial Institution Reconcilement Data (FIRD) transaction for each incoming / outgoing wire. This transaction includes the wire’s Input Message Accountability Data (&lt;a href=&quot;https://increase.com/documentation/api/wire-transfers#wire-transfer-object.submission.input_message_accountability_data&quot;&gt;IMAD&lt;/a&gt;), which uniquely identifies it. We generate an expectation including the IMAD that is later matched to the actual reporting through a point-lookup.&lt;/p&gt;
&lt;p&gt;Things are substantially more complicated for ACH. Whereas there is one FIRD transaction per wire, for ACH the reported transactions are aggregates of many underlying ACH entries, and not just a single aggregate. The FIRD transaction an ACH entry will end up contributing to depends on multiple factors.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Whether the entry was a credit or debit&lt;/li&gt;
&lt;li&gt;Whether the entry was a forward or return&lt;/li&gt;
&lt;li&gt;Whether the entry was originated or received&lt;/li&gt;
&lt;li&gt;Whether the entry was same-day or future-dated&lt;/li&gt;
&lt;li&gt;The specific same-day window it settled in or the date the entry was processed (for a future-dated entry). “Date” here—of course—referring not to a calendar date in Eastern Time or UTC but rather an “ACH–date” which runs 2:15AM Eastern Time to 2:15AM Eastern Time.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Our logic that generates expectations considers all this. We reconcile an ACH FIRD transaction by finding the many expected contributions that correspond to it, adding up their amounts, and making sure the sum matches the aggregated amount reported by the Federal Reserve.&lt;/p&gt;
&lt;p&gt;The complexity of the Federal Reserve’s check settlement service, Check 21, is somewhere between ACH and wires. There are fewer transaction codes — 4 rather than 26. But we need to account for edge cases in how the same-day funds availability cutoffs are defined. For example, there can be different same-day deadlines for checks drawn on routing numbers starting with &lt;a href=&quot;https://www.frbservices.org/resources/fees/check-electronic-check-collection-2026#3ftn&quot;&gt;“1214” or “3214”&lt;/a&gt;, or in lists &lt;a href=&quot;https://www.frbservices.org/resources/fees/check21-endpoint-listing.html&quot;&gt;published by the Federal Reserve&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;operating-confidence&quot;&gt;Operating confidence&lt;/h2&gt;
&lt;p&gt;While there’s a lot of complexity to encode, it’s all complexity essential to accurately predicting how events in our system impact cash movement at the Federal Reserve. At Increase, we love getting deep into these details, understanding them, then automating that understanding. Reconciling these predictions to the actual reporting gives us confidence that our modeling is correct and that our system is working as expected.&lt;/p&gt;
&lt;p&gt;We have alerts that &lt;a href=&quot;https://increase.com/articles/automated-invariant-monitoring&quot;&gt;continuously monitor&lt;/a&gt; the reconciliation process, ensuring that our expectations align with actual outcomes. While we have numerous other alerts that would trigger if, for instance, we failed to process an incoming ACH file or a wire we think was sent was actually rejected, these alerts provide an additional control and layer of detection in case those earlier mechanisms miss something.&lt;/p&gt;
&lt;p&gt;Among the many reconciliations that we perform, this one confirms that we are correctly performing a critical role of a bank core: interacting with our partner banks’ Federal Reserve accounts. By rigorously matching every expected transaction with the Federal Reserve’s reporting, we’re able to identify discrepancies instantly, confirm the accuracy of our models, and ensure seamless operation for our partners. This ongoing alignment doesn’t just give us operational confidence—it embodies our commitment to transparency and reliability, setting a high standard for how banking infrastructure should operate.&lt;/p&gt;
&lt;p&gt;At Increase, we believe that mastering the details and automating with precision is the way to advance how financial systems connect and operate.&lt;/p&gt;</content:encoded><dc:creator>Louis Sobel</dc:creator><media:content url="https://increase.com/images/article-cash-reconciliation-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>2024 Q3 Newsletter</title><link>https://increase.com/newsletter/q3-2024</link><guid isPermaLink="true">https://increase.com/newsletter/q3-2024</guid><description>Changes for 2024 Q3, including RSS feed subscription, card authorization improvements, Real-Time Payments, and more.</description><pubDate>Mon, 30 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;September 30, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now subscribe to an &lt;a href=&quot;https://increase.com/updates.xml&quot;&gt;RSS feed&lt;/a&gt; of our changelog.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;card_decline&lt;/code&gt; and &lt;code&gt;real_time_decision.card_authorization&lt;/code&gt; resources now have the &lt;code&gt;direction&lt;/code&gt; field populated to signal if it is a refund authorization or a regular authorization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;September 23, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now download bank letters and funding instructions from the Account detail views in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;September 6, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view a timeline of events for Declined Transactions in the Dashboard.&lt;/li&gt;
&lt;li&gt;You can now view a timeline of events for Inbound Real-Time Payments in the Dashboard.&lt;/li&gt;
&lt;li&gt;Inbound Real-Time Payments are now exposed &lt;a href=&quot;https://increase.com/documentation/api/inbound-real-time-payments-transfers&quot;&gt; by the API &lt;/a&gt; , letting you list and get Transfers.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://increase.com/documentation/api/inbound-real-time-payments-transfers#sandbox-create-an-inbound-real-time-payments-transfer&quot;&gt; Simulating &lt;/a&gt; an inbound RTP will now return an Inbound Real-Time Payments Transfer object&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 16, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view the &lt;code&gt;inbound_funds_hold&lt;/code&gt; &lt;a href=&quot;https://increase.com/documentation/api/ach-transfers#ach-transfer-object.inbound_funds_hold&quot;&gt; sub-resource &lt;/a&gt; on the ACH Transfer object. This is relevant for ACH debit transfers and will contain details of the hold, including the ID of the Pending Transaction and when funds will be released.&lt;/li&gt;
&lt;li&gt;Cards can now be used with Samsung Pay. You can view the requestor in the &lt;code&gt;token_requestor&lt;/code&gt; &lt;a href=&quot;https://increase.com/documentation/api/digital-wallet-tokens#digital-wallet-token-object.token_requestor&quot;&gt; attribute &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;Creating reversals for ACH Transfers is now out of beta in the Dashboard.&lt;/li&gt;
&lt;li&gt;You will now receive daily emails for any control failures.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 9, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now configure the email preferences for your Group in the &lt;a href=&quot;https://dashboard.increase.com/settings/general&quot;&gt; Dashboard Settings &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now export Transactions by Program.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 26, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view the &lt;code&gt;merchant_state&lt;/code&gt; and &lt;code&gt;merchant_postal_code&lt;/code&gt; on various &lt;a href=&quot;https://increase.com/documentation/api/card-payments#card-payment-object.elements.card_authorization&quot;&gt; card authorization &lt;/a&gt; sub-resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 12, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Dashboard now supports both light and dark modes. You can configure your theme in &lt;a href=&quot;https://dashboard.increase.com/settings/general&quot;&gt; Settings &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now mark &lt;a href=&quot;https://increase.com/documentation/api/inbound-check-deposits#return-an-inbound-check-deposit&quot;&gt; Inbound Check Deposits as “Returned” &lt;/a&gt; with an accompanying reason.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 5, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inbound ACH Transfers now resolve on their effective date. This means that the &lt;a href=&quot;https://increase.com/documentation/api/inbound-ach-transfers&quot;&gt; Inbound ACH Transfer &lt;/a&gt; will still be created as soon as Increase receives it, but the Transaction will be created according to the &lt;a href=&quot;https://www.frbservices.org/resources/resource-centers/same-day-ach/fedach-processing-schedule.html&quot;&gt; settlement schedule &lt;/a&gt; for the effective date. You can use the &lt;styledlink href=&quot;https://increase.com/documentation/api#inbound-ach-transfer-object.automatically_resolves_at&quot;&gt; &lt;code&gt;automatically_resolves_at&lt;/code&gt; &lt;/styledlink&gt; field to see when the Transaction will be created.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>Automated invariant monitoring</title><link>https://increase.com/articles/automated-invariant-monitoring</link><guid isPermaLink="true">https://increase.com/articles/automated-invariant-monitoring</guid><description>In 2012, Stripe had an incident where a file sent to a financial partner wasn’t acknowledged. This went unnoticed, leading to a delay in transferring what seemed like a significant amount of money at the time. During the debrief, it became clear that we needed more robust automated monitoring and alerting for our financial partner integrations. In the next day or so, Patrick and Siddarth built an invariant monitor.</description><pubDate>Mon, 09 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In 2012, Stripe had an incident where a file sent to a financial partner wasn’t acknowledged. This went unnoticed, leading to a delay in transferring what seemed like a significant amount of money at the time. During the debrief, it became clear that we needed more robust automated monitoring and alerting for our financial partner integrations. In the next day or so, &lt;a href=&quot;https://twitter.com/patrickc&quot;&gt;Patrick&lt;/a&gt; and &lt;a href=&quot;http://siddarthc.com/&quot;&gt;Siddarth&lt;/a&gt; built an invariant monitor.&lt;/p&gt;
&lt;p&gt;The invariant monitor was a lightweight framework that enabled engineers to write code that continuously tracked certain database conditions to ensure they always held true. If something went wrong, it would raise an alert. It was loosely inspired by &lt;a href=&quot;https://www.nagios.org/&quot;&gt;Nagios&lt;/a&gt; but written as application code that runs in the context of the rest of the codebase. Examples of the conditions that were monitored were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Has a money movement file been generated every day?&lt;/li&gt;
&lt;li&gt;Has every generated file been submitted to a partner?&lt;/li&gt;
&lt;li&gt;Has every submitted file been acknowledged by that partner within the expected timeframe?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The invariant monitor became even more useful when &lt;a href=&quot;https://twitter.com/jeremydhoon&quot;&gt;Jeremy&lt;/a&gt; built automated monitoring into the frameworks for file generation, submission, retrieval, and storage.&lt;/p&gt;
&lt;p&gt;This tool massively improved operations. It let us codify and monitor our assumptions. It was like seeing automated testing for the first time—it felt so clearly the right approach and so necessary that it was surprising every company didn’t have a similar tool.&lt;/p&gt;
&lt;p&gt;At Increase, this kind of monitoring was one of the first things we built. We call it Checker, with the individual monitoring rules known as Checks. (&lt;a href=&quot;https://increase.com/articles/no-abstractions&quot;&gt;We’re not particularly creative&lt;/a&gt; with names.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Here’s what a Check looks like:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text); overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;check &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Database backup test restorations are running&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;      frequency&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Frequency&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;EVERY_SIX_HOURS&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;  DatabaseBackupRestoration&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;exists?&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;    created_at&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Time&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;days&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;)..,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; DatabaseBackupRestoration&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;DONE&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This alerts if we’ve failed to restore our database backups within the last two days. It’s reassuring to know that we’d know if there’s something wrong with our database backups before we need them.&lt;/p&gt;
&lt;p&gt;Like Stripe, we’ve built automated Checks into our frameworks. One particularly useful pattern has been implementing automated Checks for our state machines. These Checks monitor that transitory states don’t last too long. For example, any mail item received for &lt;a href=&quot;https://increase.com/articles/announcing-check-lockboxes&quot;&gt;our new lockbox feature&lt;/a&gt; shouldn’t have a &lt;code&gt;status&lt;/code&gt; of &lt;code&gt;PENDING_PROCESSING&lt;/code&gt; for more than a day. If it does, we’re alerted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Here’s the code:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text); overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; InboundMailItem&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt; AbstractModel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-color-text)&quot;&gt;  attribute &lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            default&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;PENDING_PROCESSING&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            transient_values&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;PENDING_PROCESSING&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;            terminal_values&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;Status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;PROCESSED&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; Status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;REJECTED&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Engineers mostly don’t have to think about Checks when building features. &lt;code&gt;attribute&lt;/code&gt; is the default way to declare a model property in our Object-Relational Mapper so engineers typically get this monitoring for free.&lt;/p&gt;
&lt;p&gt;We use Checks broadly. Since Checks are code, they can make API calls and monitor external services too. Security, for example, has a Check to ensure no Dropbox files are accidentally shared. And Compliance has one to track sanction screening lists. Whenever a person manually monitors something, we try to turn it into a Check. (That way they can go on vacation.)&lt;/p&gt;
&lt;p&gt;We’ve also built tooling and processes around our Checks. If you’re considering building your own, here are a few things we’ve learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As with any monitoring, be careful with your signal. A flappy Check is worse than no Check.&lt;/li&gt;
&lt;li&gt;Checks can have different priorities and alerting. A Check for an unexpectedly missing ACH file might page an on-call engineer while a Check that our physical card inventory is getting low might just create a ticket.&lt;/li&gt;
&lt;li&gt;Each Check should have a responsible team or person.&lt;/li&gt;
&lt;li&gt;Have a suppression mechanism to help with long-failing Checks.&lt;/li&gt;
&lt;li&gt;Similar to tests, ensure Checks are easy to write. Also similar to tests, periodic pruning helps.&lt;/li&gt;
&lt;li&gt;Have tests for your Checks. These need to include both the success and failure cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If ensuring people can sleep well at night is the kind of engineering you enjoy, you might also enjoy &lt;a href=&quot;mailto:jobs@increase.com&quot;&gt;jobs@increase.com&lt;/a&gt;.&lt;/p&gt;</content:encoded><dc:creator>Darragh Buckley</dc:creator><media:content url="https://increase.com/images/article-invariant-monitoring-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>Visa: half a century of high availability</title><link>https://increase.com/articles/visa-redundancy</link><guid isPermaLink="true">https://increase.com/articles/visa-redundancy</guid><description>From the Fresno drop in 1958 and through Visa’s first 15 years of existence, an authorization with a Visa card was processed by having the merchant call either the cardholder’s bank, if the card was regional, or a switching center to be forwarded onto the bank if it was not. In the early 70s, the overhead of this reached a breaking point and Visa set out to build what would become known as “BankAmericard Authorization System Experimental (BASE)”—an electronic authorization system linking the Visa member banks with merchants or their acquiring centers through a central switching system.</description><pubDate>Fri, 23 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;From the Fresno drop in 1958 and through Visa’s first 15 years of existence, an authorization with a Visa card was processed by having the merchant call either the cardholder’s bank, if the card was regional, or a switching center to be forwarded onto the bank if it was not. In the early 70s, the overhead of this reached a breaking point and Visa set out to build what would become known as “BankAmericard Authorization System Experimental (BASE)“—an electronic authorization system linking the Visa member banks with merchants or their acquiring centers through a central switching system. While the protocols and implementation details look drastically different 50 years later, many of the core principles from BASE still stand today: a centralized switching system connecting acquirers to issuers through leased line connectivity to both sides, with redundancy built in at each step of the process&lt;sup&gt;&lt;a href=&quot;#user-content-fn-0&quot; id=&quot;user-content-fnref-0&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;0&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Increase’s authorization connectivity with Visa is built on the same principle of redundancy: each of our data centers connect to each of Visa’s two data centers through at least two separate circuits from at least two routers. This in turn connects to our cloud provider through at least two regions. Every layer maintains redundancy of each other: both of our physical data centers can talk to both of Visa’s data centers and both of our cloud regions can reach both of our physical locations.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt; &lt;source srcset=&quot;/images/article-visa-redundancy-flow.png&quot; media=&quot;(min-width: 768px)&quot;&gt; &lt;source srcset=&quot;/images/article-visa-redundancy-flow-mobile.png&quot; media=&quot;(max-width: 767px)&quot;&gt; &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-visa-redundancy-flow.png&quot; alt=&quot;Increase redundancy flow&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;This summarizes the high-level architecture of Increase’s redundant connectivity with Visa. The rest of the article digs deeper into the details of how the specific messages transmitted over the Visa network work.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;visa-authorization-messages&quot;&gt;Visa authorization messages&lt;/h2&gt;
&lt;p&gt;Visa’s BASE I system predates HTTP and the internet by almost two decades, but the way the contents of an authorization message transmit from an acquirer to an issuer is intuitive even from today’s point of view. Unlike HTTP 1.1, where a corresponding response always has to follow serially on a TCP socket after the request, Visa’s authorization system is configurable to allow responses to be sent through almost any live connection the recipient has, resembling HTTP 2’s multiplexing with a unique identifier in each message. For Visa, the messages follow the ISO 8583 standard&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; but are preceded by a 4-byte message length header that indicates the size of the message that is to follow. After the 4-byte message length header follows a routing header that includes information about where the message is to be routed, which then is followed by the message itself.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-visa-file-outline.png&quot; alt=&quot;Visa authorization file outline&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;The ISO 8583 standard defines the overall structure of the message but leaves the underlying content to be defined by each card network. From a quick glance they share similar principles: a 4-digit Message Type Indicator that states the purpose of the message and its direction (e.g., &lt;code&gt;0100&lt;/code&gt; is an &lt;code&gt;Authorization Request&lt;/code&gt; and &lt;code&gt;0110&lt;/code&gt; is an &lt;code&gt;Authorization Response&lt;/code&gt;), a bitmap that indicates which fields are present, followed by each present field serialized in order. Unlike a message protocol like Google’s Protocol Buffers, deserializing an ISO 8583 message correctly is impossible without first having implemented a parser to a specification. The parser tells the recipient how to handle each separate field—some fields might be simple fixed-length numeric fields, while others will be complicated deeply nested variable length fields.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-visa-file-data.png&quot; alt=&quot;Visa authorization file data&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;initiating-sessions&quot;&gt;Initiating sessions&lt;/h2&gt;
&lt;p&gt;Both sides of the table, the acquiring processors and the issuer processors, sign on to the Visa network by opening a TCP connection and sending a sign-on message that identifies the specific authorization “station” that they represent. As an issuer processor, we sign on to our stations from our cloud-hosted Message Processor services and wait for Visa to relay us messages from acquiring processors relevant to our cards. When we receive a message, we parse it, redact out sensitive details from a Payment Card Industry Data Security Standards (PCI-DSS) perspective (such as card numbers), and pass the message on to the rest of our authorization processing systems for further checks.&lt;/p&gt;
&lt;p&gt;When we’re ready to respond, we send a similar looking message back with a specific numeric identifier (field 37, “Retrieval Reference Number”) set to the same value as we received in the request. This then gets passed back to the acquiring processor, which in turn will match the incoming response to the outgoing pending request they have and provide an answer to the merchant and the cardholder who is waiting at the point of sale.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-visa-sessions-flow.png&quot; alt=&quot;Visa authorization session flow&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;from-cloud-to-physical&quot;&gt;From cloud to physical&lt;/h2&gt;
&lt;p&gt;From our cloud providers, we connect to the routers hosted in our physical data centers through &lt;a href=&quot;https://cloud.google.com/network-connectivity/docs/interconnect/concepts/overview&quot;&gt;Cloud Interconnect&lt;/a&gt;. Each cloud region maps to a physical data center in regional proximity. However, all of our cloud providers can reach all of our physical data centers and vice versa. From here, our routers connect to a set of Visa-owned routers in the same data center, which in turn handles communication with another set of routers in Visa’s data center.&lt;/p&gt;
&lt;p&gt;Avoiding the fragility of the public internet, the communication between the Visa routers in our data centers and the Visa Message Gateways in Visa’s own data centers happen using a combination of leased circuits from redundant telecom providers and Visa’s Multiprotocol Label Switching (MPLS) network. In some ways this has more of a resemblance to the point-to-point behavior observed in analog phone lines than to the packet routed system of the public internet. Instead of labeling a packet with the destination and letting the individual hops decide how the packet gets there, the route through the network is defined ahead of time and the packets state which path they expect to take.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;visas-data-centers&quot;&gt;Visa’s data centers&lt;/h2&gt;
&lt;p&gt;Outside of European traffic, all Visa authorizations eventually end up in either of Visa’s two US data centers: central and east. These are both active at any time and transactions fall back to either seamlessly. Similar to how we redundantly connect to both of our data centers, each of the two locations also connect to each other and relay messages back and forth when necessary. When Visa receives a message from an acquirer processor, its main responsibility is figuring out where to send it by looking at the first digits of the card number and figuring out which issuer processor is set up to handle it.&lt;/p&gt;
&lt;p&gt;As Visa’s system has evolved from manual authorizations to modern redundant systems, it has maintained its foundational commitment to reliability and high availability. Increase’s architecture is built on these same principles, ensuring that transactions are processed securely, reliably, and promptly. If you’re looking to partner with an issuer processor that provides direct access to the Visa network, you can &lt;a href=&quot;mailto:sales@increase.com&quot;&gt;contact our sales team&lt;/a&gt; or learn more through our &lt;a href=&quot;https://increase.com/documentation/api/cards&quot;&gt;API&lt;/a&gt;.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class id=&quot;footnote-label&quot;&gt;Notes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-0&quot;&gt;
&lt;p&gt;Stearns, D: A History of the VISA Payment System, 1970 – 1984. &lt;a href=&quot;#user-content-fnref-0&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ISO_8583&quot;&gt;https://en.wikipedia.org/wiki/ISO_8583&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><dc:creator>Martin Ek</dc:creator><media:content url="https://increase.com/images/article-visa-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>Increase: a modernized banking core</title><link>https://increase.com/articles/modernized-banking-core</link><guid isPermaLink="true">https://increase.com/articles/modernized-banking-core</guid><description>A financial institution can maintain its existing core while simultaneously adding a new core. The two cores can interact as necessary (either by exchanging data directly or separately interacting with upstream or downstream services). This is what Increase does: we operate as a parallel core for our bank partners. We also expose functionality of the underlying depository rails via powerful APIs.</description><pubDate>Thu, 01 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;bank-cores&quot;&gt;Bank cores&lt;/h2&gt;
&lt;p&gt;A bank core is one of those bedrock systems of modern society (birth registry, electronic healthcare records, air traffic control, etc) that we all want to see operate reliably and not be particularly exciting.&lt;/p&gt;
&lt;p&gt;A bank core serves as the database and related logic responsible for maintaining the transactions and balances of a bank. It can also be responsible for services like account holder data, payment network interactions, and reconciliations. It is designed to be highly reliable and scalable while being in compliance with regulatory standards.&lt;/p&gt;
&lt;p&gt;In the US, the most widely used bank core providers are &lt;a href=&quot;https://www.fisglobal.com/&quot;&gt;FIS&lt;/a&gt;, &lt;a href=&quot;https://www.fiserv.com/&quot;&gt;Fiserv&lt;/a&gt;, and &lt;a href=&quot;https://jackhenry.com/&quot;&gt;Jack Henry&lt;/a&gt;. The core providers themselves have many different cores&lt;sup&gt;&lt;a href=&quot;#user-content-fn-0&quot; id=&quot;user-content-fnref-0&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;0&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; targeting sizes or cohorts of financial institutions. In fact, there’s even an open source Apache core project, if you’re interested in seeing code&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;technical-limitations&quot;&gt;Technical limitations&lt;/h2&gt;
&lt;p&gt;Many financial technology companies building products in partnership with banks run into technical constraints that start with bank cores. This is for a couple of reasons.&lt;/p&gt;
&lt;p&gt;Many cores weren’t designed or built with programmatic interaction in mind. Even if a financial technology company integrates into a traditional core, the core was likely built with very different use-cases in mind and therefore very different assumptions. For example, it often takes a day to open a new bank account, and each account has a single account number as its primary identifier. Payments are typically sent via batch files, rather than via API. Visibility into transaction details is limited.&lt;/p&gt;
&lt;p&gt;A bank could gain more technical flexibility and data visibility by converting to a more modernized core&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. However, migrating from one core to another is a large project involving months of planning, as well as coordination with the Federal Reserve and other payment network operators. This also fails to solve for the challenges around programmatic data interaction between the core and the financial technology company; there’s substantial product work required to expose a sensible API to clients, and many modernized cores haven’t been designed with client needs in mind.&lt;/p&gt;
&lt;div class=&quot;mt-10 rounded bg-gray-50 md:mt-0&quot;&gt; &lt;div class=&quot;p-5 font-mono text-base md:p-8 lg:text-lg lg:leading-8&quot;&gt; &lt;p&gt;“Many cores weren’t designed or built with programmatic interaction in mind. Even if a financial technology company integrates into a traditional core, the core was likely built with very different use-cases in mind and therefore very different assumptions.”&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;To solve for client-facing APIs, a bank could partner with a banking-as-a-service or “middleware” provider. These providers do the heavy lifting of integrating to the bank’s traditional core, and offer abstracted account creation and money movement to financial technology companies via API. However, they’re still dependent on the traditional core for access to underlying network data and account structures. They can’t solve for limited data visibility and inflexible account structures.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-modern-core-middleware.png&quot; alt=&quot;Middleware providers&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;running-a-parallel-core&quot;&gt;Running a parallel core&lt;/h2&gt;
&lt;p&gt;One solution to this problem is running a parallel core. A financial institution can maintain its existing core while simultaneously adding a new core. The two cores can interact as necessary (either by exchanging data directly or separately interacting with upstream or downstream services).&lt;/p&gt;
&lt;p&gt;This is what Increase does: we operate as a parallel core for our bank partners. We also expose functionality of the underlying depository rails via powerful APIs.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-modern-core-increase.png&quot; alt=&quot;Increase as a parallel core&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;Increase allows bank partners to offer financial technology clients programmatic access to banking and card rails with flexible implementation structures and granular network details.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;flexible-implementations&quot;&gt;Flexible implementations&lt;/h2&gt;
&lt;p&gt;With Increase, banks can enable financial technology clients to synchronously provision &lt;a href=&quot;https://increase.com/documentation/api/accounts&quot;&gt;Accounts&lt;/a&gt;. Every Account sits on Increase’s core and is able to receive and originate payments. Abstractions like virtual “accounts”—which can help with ledgering but have more limited functionality—aren’t necessary. Importantly, this also means the bank and the client work off a single system of record, and funds in each Account are always reconciled down the penny.&lt;/p&gt;
&lt;p&gt;Banks may also offer many &lt;a href=&quot;https://increase.com/documentation/api/account-numbers&quot;&gt;Account Numbers&lt;/a&gt; pointing to each Account. Clients can programmatically &lt;a href=&quot;https://increase.com/documentation/accounts-and-account-numbers&quot;&gt;spin up unique Account Numbers&lt;/a&gt; to track and reconcile inbound payments into one Account.&lt;/p&gt;
&lt;div class=&quot;mt-10 rounded bg-gray-50 md:mt-0&quot;&gt; &lt;div class=&quot;p-5 font-mono text-base md:p-8 lg:text-lg lg:leading-8&quot;&gt; &lt;p&gt;“We operate as a parallel core for our bank partners. We also expose functionality of the underlying depository rails via powerful APIs.”&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;fine-grained-network-details&quot;&gt;Fine grained network details&lt;/h2&gt;
&lt;p&gt;With direct connections to the US payment rails, Increase exposes all the details and functionality of the underlying financial network by API, &lt;a href=&quot;https://increase.com/articles/no-abstractions&quot;&gt;without abstractions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For example:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Every inbound wire allocated to an Account contains an Input Message Accountability Data (“IMAD”), a unique identifier assigned to each Fedwire payment made through the Federal Reserve. Details like this one often get obfuscated when there’s a human-run wire desk involved.&lt;/li&gt;
&lt;li&gt;When an ACH Transfer is returned, we parse the network message from the Federal Reserve, correlate it to the original transfer, and create a new Transaction to reduce an Account’s balance. A client can immediately view the return details and instantly map each return to its initial Transaction.&lt;/li&gt;
&lt;li&gt;We expose &lt;a href=&quot;https://status.increase.com/#ach-submission-timeline&quot;&gt;network updates&lt;/a&gt; in real-time. Originated ACH Transfers update when the transfer is submitted to the Federal Reserve, when the transfer is acknowledged by the Federal Reserve, and when it’s expected to settle with the recipient bank.&lt;/li&gt;
&lt;/ol&gt;
&lt;a href=&quot;https://status.increase.com/#ach-submission-timeline&quot; target=&quot;_blank&quot; class=&quot;article-image mx-auto my-10 block cursor-pointer overflow-hidden rounded border border-gray-200 transition-all duration-300 hover:shadow-xl&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-modern-core-status.png&quot; alt=&quot;Increase ACH submission status&quot;&gt; &lt;/picture&gt; &lt;/a&gt;
&lt;p&gt;Your reaction to all this might range from amazement to ‘huh, that’s a neat little tidy-up I guess’ and either way, we agree. To the original observation that bank cores should be reliable and not particularly exciting, we strive to be lovingly boring. The US financial networks&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot; id=&quot;user-content-fnref-4&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-5&quot; id=&quot;user-content-fnref-5&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-6&quot; id=&quot;user-content-fnref-6&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-7&quot; id=&quot;user-content-fnref-7&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; have been around for a long time and offer robust functionality and detail for accounts and payments. Increase simply improves the last mile delivery.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class id=&quot;footnote-label&quot;&gt;Notes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-0&quot;&gt;
&lt;p&gt;Silverlake: &lt;a href=&quot;https://jackhenry.dev/open-enterprise-api-docs/enterprise-soap-api/api-provider/silverlake/&quot;&gt;https://jackhenry.dev/open-enterprise-api-docs/enterprise-soap-api/api-provider/silverlake/&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-0&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;DNA: &lt;a href=&quot;https://www.fiserv.com/en/solutions/core-platforms-for-banks/dna-platform.html&quot;&gt;https://www.fiserv.com/en/solutions/core-platforms-for-banks/dna-platform.html&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://fineract.apache.org/&quot;&gt;https://fineract.apache.org/&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;An example is Thought Machine: &lt;a href=&quot;https://www.thoughtmachine.net/&quot;&gt;https://www.thoughtmachine.net/&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref aria-label=&quot;Back to reference 4&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-4&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://increase.com/documentation/fedach&quot;&gt;https://increase.com/documentation/fedach&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-4&quot; data-footnote-backref aria-label=&quot;Back to reference 5&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-5&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://increase.com/documentation/fedwire&quot;&gt;https://increase.com/documentation/fedwire&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-5&quot; data-footnote-backref aria-label=&quot;Back to reference 6&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-6&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://increase.com/documentation/check-21&quot;&gt;https://increase.com/documentation/check-21&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-6&quot; data-footnote-backref aria-label=&quot;Back to reference 7&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-7&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://increase.com/documentation/real-time-payments&quot;&gt;https://increase.com/documentation/real-time-payments&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-7&quot; data-footnote-backref aria-label=&quot;Back to reference 8&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><media:content url="https://increase.com/images/article-modern-core-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>Announcing Lockboxes: Programmatically deposit checks with your own virtual mailbox</title><link>https://increase.com/articles/announcing-check-lockboxes</link><guid isPermaLink="true">https://increase.com/articles/announcing-check-lockboxes</guid><description>Increase’s API and Dashboard allow efficient, programmatic access to mail checks, deposit check images, and — starting this month — host a virtual mailbox to accept payments in your designated check lockbox.</description><pubDate>Tue, 30 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Paper checks are a practical and widespread form of payment. Writing an amount and your signature on a slip of paper is easy to understand and simple to do. In 2023 alone, the Federal Reserve collected over $8.45 trillion in commercial checks&lt;sup&gt;&lt;a href=&quot;#user-content-fn-0&quot; id=&quot;user-content-fnref-0&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;0&lt;/a&gt;&lt;/sup&gt;. Digital transfer mechanisms are growing, but the good-old-fashioned physical check is still relied upon and essential for many payment flows.&lt;/p&gt;
&lt;p&gt;However, checks are slow and tedious to manage. They sometimes take weeks (or even months!) to be deposited after making it to the recipients’ mailbox. If you’re sending or depositing checks at scale, managing these slips of paper can be a significant headache. This is why we’ve built a fully digital check processing system.&lt;/p&gt;
&lt;p&gt;Increase’s API and Dashboard allow efficient, programmatic access to mail checks, deposit check images, and — starting this month — host a virtual mailbox to accept payments in your designated check lockbox.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://increase.com/documentation/api/lockboxes&quot;&gt;Lockboxes&lt;/a&gt; are the latest addition to our suite of check features. You can create unlimited mailing addresses and whenever a check is mailed to that address, we’ll create a &lt;a href=&quot;https://increase.com/documentation/api/check-deposits&quot;&gt;Check Deposit&lt;/a&gt; and add the funds to your account. We’ll send you a webhook to keep you in the loop and you’ll have full access to accept or decline checks as they come in. We will even shred the checks once they’re processed.&lt;/p&gt;
&lt;p&gt;Depending on your business, we recommend making one lockbox per invoice or one lockbox per customer relationship. This makes reconciliation between incoming funds and their revenue attribution much easier.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt; &lt;source srcset=&quot;/images/article-lockbox-flow.png&quot; media=&quot;(min-width: 768px)&quot;&gt; &lt;source srcset=&quot;/images/article-lockbox-flow-mobile.png&quot; media=&quot;(max-width: 767px)&quot;&gt; &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-lockbox-flow.png&quot; alt=&quot;Check Lockboxes diagram&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;Increase’s commitment to &lt;a href=&quot;https://increase.com/articles/no-abstractions&quot;&gt;No Abstractions&lt;/a&gt; means we give you full control over the network messages sent to &lt;a href=&quot;https://increase.com/documentation/check-21&quot;&gt;Check 21&lt;/a&gt;, the Federal Reserve’s network for processing checks. That includes reading the raw TIFF images sent from other banks or controlling fraud by issuing return codes directly to your counterparty’s institution. All of Increase’s features are available in the API for programmatic, bulk actioning and in the Dashboard for one-off debugging as you build your application.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-lockbox-dashboard.png&quot; alt=&quot;Check transfer Dashboard&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;You can also &lt;a href=&quot;https://increase.com/documentation/originating-checks#lifecycle&quot;&gt;send checks&lt;/a&gt; through Increase, either through our check printer under the hood, or by a third party fulfillment provider of your choice. Before the check gets deposited at the recipient bank, we surface critical details to you—including the arrival scan and depositing bank name—allowing you to review and decline the deposit attempt if necessary.&lt;/p&gt;
&lt;p&gt;Increase’s check features allow our users fine grained control, high levels of visibility, and great fraud-fighting tools. Read more in our &lt;a href=&quot;https://increase.com/documentation/api&quot;&gt;API&lt;/a&gt; or &lt;a href=&quot;https://increase.com/contact&quot;&gt;contact sales&lt;/a&gt;.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class id=&quot;footnote-label&quot;&gt;Notes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-0&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.federalreserve.gov/paymentsystems/check_commcheckcolqtr.htm&quot;&gt;https://www.federalreserve.gov/paymentsystems/check_commcheckcolqtr.htm&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-0&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><media:content url="https://increase.com/images/article-lockbox-thumbnail.png" medium="image" type="image/png"/><category>Product updates</category></item><item><title>2024 Q2 Newsletter</title><link>https://increase.com/newsletter/q2-2024</link><guid isPermaLink="true">https://increase.com/newsletter/q2-2024</guid><description>Changes for 2024 Q2, including check deposit images, card dispute timelines, lockboxes, and more.</description><pubDate>Sun, 30 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;June 21, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view check deposit images in the Dashboard.&lt;/li&gt;
&lt;li&gt;Card disputes are now visible on Transaction timelines in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;June 14, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now create &lt;a href=&quot;https://increase.com/documentation/api/lockboxes#create-a-lockbox&quot;&gt; Lockboxes &lt;/a&gt; to deposit checks automatically via the mail. Each Lockbox has a unique address and is associated with one of your Accounts.&lt;/li&gt;
&lt;li&gt;You can now configure transfer approvals for the Dashboard and the API separately.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 29, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view the presentment amount ( &lt;code&gt;presentment_amount&lt;/code&gt;) and presentment currency ( &lt;code&gt;presentment_currency&lt;/code&gt;) on &lt;a href=&quot;https://increase.com/documentation/api/pending-transactions&quot;&gt; Card Authorization &lt;/a&gt; and &lt;a href=&quot;https://increase.com/documentation/api/declined-transactions&quot;&gt; Card Decline &lt;/a&gt; resources in the API.&lt;/li&gt;
&lt;li&gt;We now support single sign-on in the dashboard. &lt;a href=&quot;mailto:support@increase.com&quot;&gt; Reach out &lt;/a&gt; if you’d like to set it up.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 15, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added documentation for &lt;a href=&quot;https://increase.com/documentation/programs&quot;&gt; Programs &lt;/a&gt; to our guides.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 22, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added an &lt;a href=&quot;https://increase.com/documentation/api/inbound-check-deposits&quot;&gt; Inbound Check Deposit &lt;/a&gt; model to the API to surface check deposit attempts on originated checks.&lt;/li&gt;
&lt;li&gt;We now publish an &lt;code&gt;inbound_check_deposit.created&lt;/code&gt; webhook event that you can listen for to run &lt;a href=&quot;https://increase.com/documentation/originating-checks#custom-evaluation-logic&quot;&gt; custom evaluation logic &lt;/a&gt; for Inbound Check Deposits.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 8, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added more detail on when Transfers require approval in the Dashboard Money Movement flow.&lt;/li&gt;
&lt;li&gt;We’ve added a &lt;a href=&quot;https://increase.com/documentation/card-payment-lifecycle#card-payment-lifecycle&quot;&gt; Card Payment lifecycle &lt;/a&gt; guide.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 1, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added more detail to our &lt;a href=&quot;https://increase.com/documentation&quot;&gt; Documentation Guides &lt;/a&gt; for ACH, Wires, Checks and Real Time Payments.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>No Abstractions: an Increase API design principle</title><link>https://increase.com/articles/no-abstractions</link><guid isPermaLink="true">https://increase.com/articles/no-abstractions</guid><description>Learn about the foundational design principle of Increase’s API and how it helps us model the inherent complexity of the underlying financial networks we work with.</description><pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;API resources&lt;/strong&gt; are the nouns of your API. Deciding how to name and model these nouns is arguably the hardest and most important part of designing an API. The resources you expose organize your users’ mental model of how your product works and what it can do. At Increase, our team has used a principle called “no abstractions” to help. What do we mean by this?&lt;/p&gt;
&lt;p&gt;Much of our team came from Stripe, and when designing our API we considered the same values that have been successful there. Stripe excels at designing &lt;strong&gt;abstractions&lt;/strong&gt; in their API — extracting the essential features of a complex domain into something their users can easily understand and work with. In their case this most notably means &lt;a href=&quot;https://stripe.com/blog/payment-api-design&quot;&gt;modeling&lt;/a&gt; payments across many different networks into an API resource called a &lt;a href=&quot;https://docs.stripe.com/api/payment_intents&quot;&gt;PaymentIntent&lt;/a&gt;. For example, Visa and Mastercard have subtly different reason codes for why a chargeback can be initiated, but Stripe combines those codes into a single enum so that their users don’t need to consider the two networks separately.&lt;/p&gt;
&lt;p&gt;This makes sense because many of Stripe’s users are early startups working on products totally unrelated to payments. They don’t necessarily know, or need to know, about the nuances of credit cards. They want to integrate Stripe quickly, get back to building their product, and stop thinking about payments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“For Increase users, trying to hide the underlying complexity of these networks would irritate them, not simplify their lives.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Increase’s users are not like this. They often have deep existing knowledge of payment networks, think about financial technology all the time, and come to us because of our direct network connections and the depth of integration that lets them build. They want to know &lt;a href=&quot;https://status.increase.com/#ach-submission-timeline&quot;&gt;exactly&lt;/a&gt; when the FedACH window closes and when transfers will land. They understand that setting a different Standard Entry Class code on an ACH transfer can result in different return timing. Trying to hide the underlying complexity of these networks (by, for example, modeling ACH transfers and wire transfers with a single API resource) would irritate them, not simplify their lives.&lt;/p&gt;
&lt;p&gt;Early conversations with these users helped us articulate what we dubbed the “no abstractions” principle as we built the first version of our API. Some examples of the way this mindset has subsequently affected its design:&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;real-world-naming&quot;&gt;Real-world naming&lt;/h2&gt;
&lt;p&gt;Instead of inventing our own names for API resources and their attributes, we tend to use the vocabulary of the underlying networks. For example, the parameters we expose when making an ACH transfer via our API are named after fields in the &lt;a href=&quot;https://achdevguide.nacha.org/ach-file-details&quot;&gt;Nacha specification&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;immutability&quot;&gt;Immutability&lt;/h2&gt;
&lt;p&gt;Similar to how we use network nomenclature, we try to model our resources after real-world events like an action taken or a message sent. This results in more of our API resources being immutable. An approach that’s worked well for our API is to take a cluster of these immutable resources (all of the network messages that can be sent as part of the ACH transfer lifecycle, for example) and group them together under a state machine “lifecycle object”. For example, the &lt;code&gt;ach_transfer&lt;/code&gt; object in our API has a field called &lt;code&gt;status&lt;/code&gt; that changes over time, and several immutable sub-objects that are created as the transfer moves through its lifecycle. A newly-minted &lt;code&gt;ach_transfer&lt;/code&gt; object looks like:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text); overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;ach_transfer_abc123&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;created_at&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;2024-04-24T00:00:00+00:00&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;amount&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 1000&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;pending_approval&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;approval&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;submission&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;acknowledgement&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt; null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;  // other fields omitted here for clarity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After that same transfer has moved through our pipeline and we’ve submitted it to FedACH, it looks like:&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--shiki-color-background);color:var(--shiki-color-text); overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;ach_transfer_abc123&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;created_at&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;2024-04-24T00:00:00+00:00&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;amount&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt; 1000&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;submitted&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;  // immutable, populated when the transfer is approved&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;approval&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;approved_by&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;administrator@yourcompany.com&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;approved_at&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;2024-04-24T01:00:00+00:00&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;  // immutable, populated when the transfer is submitted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;submission&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;trace_number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;058349238292834&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;submitted_at&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;2024-04-24T02:00:00+00:00&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;  // immutable, populated when the transfer is acknowledged&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;acknowledgement&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-builtin)&quot;&gt;acknowledged_at&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;2024-04-24T03:00:00+00:00&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;  // other fields omitted for clarity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;separating-resources-by-use-case&quot;&gt;Separating resources by use case&lt;/h2&gt;
&lt;p&gt;If, for a given API resource, the set of actions a user can take on different instances of the resource varies a lot, we tend to split it into multiple resources. For example, the set of actions you can take on an originated ACH transfer is different (the complete opposite, really) than the actions you can take on a received ACH transfer, so we separate these into &lt;code&gt;ach_transfer&lt;/code&gt; and &lt;code&gt;inbound_ach_transfer&lt;/code&gt; resources.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This approach can make our API more verbose and intimidating at first glance — there are a lot of resources on the left-hand side of our &lt;a href=&quot;https://increase.com/documentation/api&quot;&gt;documentation&lt;/a&gt; page! We think it makes things more predictable over the long-term, though.&lt;/p&gt;
&lt;p&gt;Importantly, our engineering team has committed to this approach. When you design a complex API over several years, you make small incremental decisions all the time. Committing to foundational principles upfront has reduced the cognitive load for these decisions. For example, when sending a wire transfer to the Federal Reserve, there’s a required field called &lt;a href=&quot;https://increase.com/documentation/api/wire-transfers#wire-transfer-object.submission.input_message_accountability_data&quot;&gt;Input Message Accountability Data&lt;/a&gt; which serves as a globally-unique ID for that transfer. When building support for wire transfers, an engineer in an abstraction-heavy API might have to deliberate how to name this field in a “user-friendly” way — &lt;code&gt;trace_number&lt;/code&gt;? &lt;code&gt;reference_number&lt;/code&gt;? &lt;code&gt;id&lt;/code&gt;? At Increase that hypothetical engineer names the field &lt;code&gt;input_message_accountability_data&lt;/code&gt; and moves on. When an Increase user encounters this field for the first time, while it might not be the most immediately recognizable name at first, it helps them understand immediately how this maps to the underlying system.&lt;/p&gt;
&lt;p&gt;No Abstractions isn’t right for every API, but considering the level of abstraction that’s appropriate for the developers integrating against it is a valuable exercise. This will depend on their level of experience working with your product domain and the amount of energy they’ll be committing to the integration, among other things. If you’re building an abstraction-heavy API, be prepared to think hard before adding new features. If you’re building an abstraction-light API, commit to it and resist the temptation to add abstractions when it comes along.&lt;/p&gt;</content:encoded><dc:creator>Jack Reed</dc:creator><media:content url="https://increase.com/images/article-api-principles-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>2024 Q1 Newsletter</title><link>https://increase.com/newsletter/q1-2024</link><guid isPermaLink="true">https://increase.com/newsletter/q1-2024</guid><description>Changes for 2024 Q1, including Program ID exposure, Visa fraud scores, Quickbooks integration, and more.</description><pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;March 25, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We now expose &lt;a href=&quot;https://increase.com/documentation/api/accounts#account-object&quot;&gt; Program ID &lt;/a&gt; in the Account APIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;March 18, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visa Advanced Authorization fraud scores are available for all card authorizations in the Dashboard and &lt;a href=&quot;https://increase.com/documentation/api/card-payments&quot;&gt; API &lt;/a&gt; under network_risk_score.&lt;/li&gt;
&lt;li&gt;Increase can now automatically sync your Accounts and Transactions to Quickbooks Online.&lt;/li&gt;
&lt;li&gt;We’ve removed the unused Submitted status from Check Transfer &lt;a href=&quot;https://increase.com/documentation/api/check-transfers#check-transfer-object.status&quot;&gt; Documentation &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;March 11, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve updated our Dashboard permissions to provide more granular control. You can access team permissions in &lt;a href=&quot;https://dashboard.increase.com/settings/team&quot;&gt; Settings &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now assign more &lt;a href=&quot;https://increase.com/documentation/roles#roles-and-permissions&quot;&gt; specialized roles &lt;/a&gt; when inviting teammates.&lt;/li&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://dashboard.increase.com/settings/programs&quot;&gt; configure Transfer approvals &lt;/a&gt; independently for each Program.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;March 4, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve polished a number of our views in the &lt;a href=&quot;https://dashboard.increase.com&quot;&gt;Dashboard&lt;/a&gt; to follow a more standardized pattern for increased predictability on navigation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 26, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/api/entities#update-an-entity.corporation.industry_code&quot;&gt; update &lt;/a&gt; the industry code for a corporate Entity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 19, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now upload and update Complaints in the &lt;a href=&quot;https://dashboard.increase.com/compliance/platform_complaints&quot;&gt; Dashboard &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;We’ve introduced a new Dashboard based flow for reporting &lt;a href=&quot;https://dashboard.increase.com/compliance/unusual_activity_reports&quot;&gt; Unusual Activity Reports &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 12, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now order physical versions of your Increase cards in the API and in the &lt;a href=&quot;https://dashboard.increase.com/cards&quot;&gt; Dashboard Card detail view &lt;/a&gt; by using the ‘Ship physical card button’ on any cards you’ve created.&lt;/li&gt;
&lt;li&gt;You can now view structured ACH Addenda in the &lt;a href=&quot;https://dashboard.increase.com&quot;&gt;Dashboard&lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 05, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve exposed canceled Transfer Schedules in the &lt;a href=&quot;https://dashboard.increase.com/scheduled_transfers&quot;&gt; Dashboard &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 29, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added a guide to &lt;a href=&quot;https://increase.com/documentation/idempotency-keys#idempotency-keys&quot;&gt; Idempotency Keys &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 22, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added an &lt;a href=&quot;https://increase.com/documentation/api/inbound-wire-transfers&quot;&gt; Inbound Wire Transfer API &lt;/a&gt; to allow viewing and reconciling Inbound Wire Transfers.&lt;/li&gt;
&lt;li&gt;You can now set your Program’s billing account in &lt;a href=&quot;https://dashboard.increase.com/documents/fee_plans/&quot;&gt; the dashboard &lt;/a&gt; by clicking into the Fee Plan detail view.&lt;/li&gt;
&lt;li&gt;We’ve added command palette search functionality to the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 15, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added documentation on &lt;a href=&quot;https://increase.com/documentation/sending-ach-debit-transfers&quot;&gt; ACH Authorizations. &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;You can now view Inbound Wire Transfer timeline details on Transaction detail views in the Dashboard.&lt;/li&gt;
&lt;li&gt;We’ve added more validation on CSV compliance report updates in the Dashboard.&lt;/li&gt;
&lt;li&gt;We’ve updated our status page’s &lt;a href=&quot;https://status.increase.com/&quot;&gt; FedACH Schedule display &lt;/a&gt; for improved readability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 8, 2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now favorite &lt;a href=&quot;https://increase.com/documentation/api/external-accounts&quot;&gt; External Accounts &lt;/a&gt; in the Dashboard.&lt;/li&gt;
&lt;li&gt;Fees and Fee Plans are now visible in the Dashboard.&lt;/li&gt;
&lt;li&gt;You can now upload Vendor Lists as CSVs in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>How CapitalOS built their spend management platform on Increase</title><link>https://increase.com/customers/capitalos</link><guid isPermaLink="true">https://increase.com/customers/capitalos</guid><description>CapitalOS offers embedded spend management solutions for B2B platforms looking to launch card-based products for their users. As B2B platforms increasingly become the operating system for small businesses, they’re uniquely positioned to save time and money for their users through smart spend management.</description><pubDate>Wed, 06 Mar 2024 00:00:00 GMT</pubDate><media:content url="https://increase.com/images/capitalos-case-study-thumbnail.png" medium="image" type="image/png"/><category>Customer story</category></item><item><title>How depository placement networks provide extended FDIC coverage</title><link>https://increase.com/articles/how-depository-placement-networks-provide-extended-fdic-coverage</link><guid isPermaLink="true">https://increase.com/articles/how-depository-placement-networks-provide-extended-fdic-coverage</guid><description>Increase and our bank partners now offer access to Federal Deposit Insurance Corporation (“FDIC”) coverage on deposits of more than $250,000. This works through our connection to a deposit placement network offered by IntraFi. You can place deposits using IntraFi’s ICS service via Increase’s Dashboard or API. Enrollment does not impact access to your funds.</description><pubDate>Thu, 25 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Increase and our bank partners now offer access to Federal Deposit Insurance Corporation (“FDIC”) coverage on deposits of more than $250,000. This works through our connection to a deposit placement network offered by &lt;a href=&quot;https://www.intrafi.com/&quot;&gt;IntraFi&lt;/a&gt;. You can place deposits using IntraFi’s ICS service via Increase’s Dashboard or API. Enrollment does not impact access to your funds.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-intrafi-balances.png&quot; alt=&quot;Ramp funds flow&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;If you’re in a hurry, that’s all you need to know. Deposit placement networks are a fascinating topic, however. The rest of this article dives into why this feature exists and how it works.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;silicon-valley-bank&quot;&gt;Silicon Valley Bank&lt;/h2&gt;
&lt;p&gt;On Friday, March 10, 2023, California regulators closed Silicon Valley Bank and appointed the FDIC as receiver, which issued a press release:&lt;/p&gt;
&lt;div class=&quot;border-l-2 border-gray-200 pl-5 text-base italic&quot;&gt; &lt;p&gt;All insured depositors will have full access to their insured deposits no later than Monday morning, March 13, 2023. The FDIC will pay uninsured depositors an advance dividend within the next week. Uninsured depositors will receive a receivership certificate for the remaining amount of their uninsured funds. As the FDIC sells the assets of Silicon Valley Bank, future dividend payments may be made to uninsured depositors.&lt;/p&gt;  &lt;/div&gt;
&lt;p&gt;Unusual to this closure was the percentage of uninsured deposits: 93.9%. Depositors rushed to wire their funds out. At 6:24pm on Friday evening, a message came in extending the Fedwire window by 30 minutes:&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-intrafi-svb-message.png&quot; alt=&quot;Fedwire deadline extension message&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;p&gt;The deadline was extended by 30 minutes eight times that evening, then by 15 minutes three more times, until it finally closed at 11:45pm.&lt;/p&gt;
&lt;p&gt;The confusion continued over the weekend. The Silicon Valley Bank web portal started disallowing transfers. Alarmism circulated online. A news story on Sunday, March 12, reported, &lt;a href=&quot;https://fortune.com/2023/03/12/how-many-silicon-valley-bank-svb-deposits-fdic-30-50-percent-long-sale-process/&quot;&gt;“Just 30% of uninsured SVB deposits could be available Monday as the FDIC gears up for a long and drawn-out sale process: sources.”&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;bank-failures&quot;&gt;Bank failures&lt;/h2&gt;
&lt;p&gt;While Silicon Valley Bank’s failure happened quickly, it certainly wasn’t novel.&lt;/p&gt;
&lt;p&gt;The Federal Deposit Insurance Corporation is well-named. As you might expect, it was founded in the 1930s when bank failures and bank runs were common. It aims to solve the &lt;em&gt;runs&lt;/em&gt;, not the failures. It does so by guaranteeing your first $250,000 of deposits at a single bank. It’s funded by an annual levy on insured banks.&lt;/p&gt;
&lt;p&gt;[Note: Interestingly, the insurance is per ownership category, per account holder, per institution. Checking accounts, savings accounts and CDs are treated as one category; retirement accounts are another; trust accounts another; employee benefit accounts yet another. &lt;a href=&quot;https://www.fdic.gov/resources/deposit-insurance/brochures/insured-deposits/&quot;&gt;Ownership categories are well documented.&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;The amount insured was originally $2500 and has been raised gradually since then, most recently from $100,000 in 2008.&lt;/p&gt;
&lt;p&gt;Today, bank failures are rare. Of the &lt;a href=&quot;https://www.fdic.gov/analysis/quarterly-banking-profile/statistics-at-a-glance/2023jun/industry.pdf&quot;&gt;4,645 FDIC-insured banks in the United States&lt;/a&gt;, there were zero failures in 2021 and 2022. But as you’re likely aware, there were 5 failures in 2023, including Silicon Valley Bank, First Republic Bank and Signature Bank.&lt;/p&gt;
&lt;p&gt;Silicon Valley Bank’s failure was unique in that the vast majority of deposits there were uninsured (93.9%). Since then, there’s been a resurgence of attention on FDIC insurance limits, and how to protect funds above the limit.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;deposit-networks-explained&quot;&gt;Deposit networks, explained&lt;/h2&gt;
&lt;p&gt;If you’re storing funds above the limit, you’re likely interested in ways to insure them. In theory, you could get yourself multiples of $250,000 in deposit coverage by opening accounts at 2, 3 or even 400 banks. This would be a hassle. A startup CFO might spend all day on the phone with different banks putting together instructions to wire $3M.&lt;/p&gt;
&lt;div class=&quot;mt-10 rounded bg-gray-50 md:mt-0&quot;&gt; &lt;div class=&quot;p-5 font-mono text-base md:p-8 lg:text-lg lg:leading-8&quot;&gt; &lt;p&gt;“The swapped deposits ensure customers have access to additional FDIC insurance without the inconvenience of maintaining accounts at multiple banks.”&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;Suppose she has an idea: her fellow CFOs also have large deposits parked at the same banks. What if, &lt;em&gt;operationally&lt;/em&gt;, they could each do business at their primary bank, and simply swap each other’s deposits? You have each bank place their deposits at several other banks in a placement network, with FDIC insurance up to $250,000 available at each. A bank that placed a large deposit through the network could also receive deposits in the same amount.&lt;/p&gt;
&lt;p&gt;This is roughly how reciprocal deposits work. The swapped deposits ensure customers have access to additional FDIC insurance without the inconvenience of maintaining accounts at multiple banks. From the depositor’s perspective, everything is seamless: you can still access all the funds at your bank even if in the background some of those funds are “swapped” to another institution. You’re just better insured.&lt;/p&gt;
&lt;p&gt;[Note: Until 2018, reciprocal deposits were considered brokered deposits, which are subject to different rules. Congress intervened, and now &lt;a href=&quot;https://www.dallasfed.org/research/economics/2023/1128&quot;&gt;most reciprocal deposits are considered non-brokered.&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;Increase’s implementation of this is transparent. You can see in the Dashboard which banks are holding deposits that have been placed for you.&lt;/p&gt;
&lt;p&gt;The deposit network will only ever place funds for a depositor up to the current FDIC insurance limit at any other single institution. Of course, it’s possible that you already have funds stored at one or more other banks. To ensure that your funds held there are still insured, it’s straightforward to exclude financial institutions where you’re already storing funds.&lt;/p&gt;
&lt;div class=&quot;article-image mx-auto my-10 overflow-hidden rounded border border-gray-200&quot;&gt; &lt;picture class=&quot;h-auto w-full&quot;&gt;   &lt;img class=&quot;h-auto w-full&quot; src=&quot;https://increase.com/images/article-intrafi-exclusions.png&quot; alt=&quot;IntraFi institution exclusions&quot;&gt; &lt;/picture&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;are-uninsured-deposits-really-uninsured&quot;&gt;Are uninsured deposits really uninsured?&lt;/h2&gt;
&lt;p&gt;When regulators announced Silicon Valley Bank’s closure on Friday evening, it made clear that insured and uninsured deposits would be treated separately. But that didn’t end up being the case: over the weekend, federal regulators decided to invoke the &lt;a href=&quot;https://www.fdic.gov/news/press-releases/2023/pr23017.html&quot;&gt;systemic risk exception&lt;/a&gt;, which protected uninsured deposits.&lt;/p&gt;
&lt;p&gt;Because of this, you may assume your deposits will be protected even above insurance limits. The regulators make no assurances on that point. Past performance is no guarantee of future results.&lt;/p&gt;
&lt;p&gt;The FDIC itself has reviewed insurance limits. It &lt;a href=&quot;https://www.fdic.gov/analysis/options-deposit-insurance-reforms/index.html&quot;&gt;issued a report&lt;/a&gt; that considered various options, including changing limits or abolishing them. Instead, the FDIC seems to be leaning towards targeting insurance at specific account types — specifically business payment accounts. However, any changes to deposit insurance would require congressional action.&lt;/p&gt;
&lt;p&gt;So where does that leave us?&lt;/p&gt;
&lt;p&gt;The FDIC insures funds up to $250,000, per ownership category, per account holder, per institution. In the event of a bank failure, uninsured deposits could be safe. Another institution might step in to acquire all deposits, or federal regulators could invoke the systemic risk exception again. But there is no guarantee either of these things will happen.&lt;/p&gt;
&lt;p&gt;That’s why we’re offering access to reciprocal deposits. It’s a way to obtain more peace of mind with access to additional insurance for more of your balances without impacting your operational access to funds. This is all now available in the Increase &lt;a href=&quot;https://dashboard.increase.com/&quot;&gt;Dashboard&lt;/a&gt; and &lt;a href=&quot;https://increase.com/documentation/api&quot;&gt;API&lt;/a&gt;.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;em&gt;Deposit placement through IntraFi Cash Service (“ICS”) is subject to the terms, conditions, and disclosures in applicable agreements.&lt;/em&gt;&lt;/p&gt;</content:encoded><dc:creator>Sam Ballantyne</dc:creator><media:content url="https://increase.com/images/article-intrafi-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>How we work</title><link>https://increase.com/articles/how-we-work</link><guid isPermaLink="true">https://increase.com/articles/how-we-work</guid><description>We first wrote an internal culture document at Increase on 2019-10-09. It was labeled as a draft since we weren’t sure what principles would hold true as we scaled. Now, 4 years later, we’ve found the way that we work allows us to process tens of billions in payments.</description><pubDate>Wed, 10 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We first wrote an internal culture document at Increase on 2019-10-09. It was labeled as a draft since we weren’t sure what principles would hold true as we scaled. Now, 4 years later, we’ve found the way that we work allows us to process tens of billions in payments. Internally, this document will always remain a draft.&lt;/p&gt;
&lt;p&gt;The central tenet of our culture is empowerment. It drives the way we make decisions, share knowledge, and make changes. It allows us to move with urgency. Ownership, transparency, and trust are key underpinnings for empowerment.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;ownership&quot;&gt;Ownership&lt;/h2&gt;
&lt;p&gt;At Increase, we make decisions by owner, not consensus. There is a single decision maker for almost every decision: technical design, product pricing, hiring, and third party integrations to name a few. It ensures that one person is responsible for the ultimate outcome. While the owner may not initially have all the information they need, it’s their job to solicit feedback and move us forward. We frequently use decision timeouts with a default decision to ensure owners aren’t blocked and to allow others to provide time-boxed input. We’ve found this model to scale well with our organization.&lt;/p&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;transparency&quot;&gt;Transparency&lt;/h2&gt;
&lt;p&gt;A necessary pre-requisite to empowerment is transparency. At Increase, we commit to transparency by working in public. In practice, this looks like draft pull requests, work-in-progress documents, notes written and shared for every meeting, and emails sent to lists. There’s no opaque-box’ing from any function (except, of course, for personally sensitive information). This ensures that everyone (including future employees!) has access to the information that went into a decision.&lt;/p&gt;
&lt;p&gt;Transparency requires clear communication. We operate in at least two complex domains: technology and financial services. Both have their own jargon and acronyms. Whenever possible, we rely on primary sources and avoid shorthand communications that can act as a barrier to information, question asking, and understanding. (In other words: expand acronyms!)&lt;/p&gt;
&lt;div class=&quot;mt-10 rounded bg-gray-50 md:mt-0&quot;&gt; &lt;div class=&quot;p-5 font-mono text-base md:p-8 lg:text-lg lg:leading-8&quot;&gt; &lt;p&gt;“The central tenet of our culture is empowerment. It drives the way we make decisions, our access to knowledge, our ability to make changes, and our sense of urgency.”&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt;
&lt;h2 class=&quot;article-scrollspy-child scroll-mt-[100px]&quot; id=&quot;trust&quot;&gt;Trust&lt;/h2&gt;
&lt;p&gt;Building trust with both our users and our partners is critical to growth. We maintain trust by keeping our promises, acting with honesty and integrity, and operating responsibly. Whenever we have an opportunity to go above and beyond to build trust, we should take it.&lt;/p&gt;
&lt;p&gt;Empowerment also hinges on trusting others at Increase, and trusting they trust you. We’re still a small team, in the early innings of a long journey. We navigate it best by consistently being empathetic, humble, and kind.&lt;/p&gt;
&lt;p&gt;Operating this way comes with overhead. For example, disagreeing with an owner’s decision but committing to it can feel uncomfortable. There’s often a temptation to carve out a sub-decision, show how two domains of ownership are contentious and therefore require consensus, or re-open a decision a short period later with a different owner. We’re certainly imperfect but we watch when we’re doing these.&lt;/p&gt;
&lt;p&gt;We also watch out for read-access not equating to write access, drive-by comments&lt;sup&gt;&lt;a href=&quot;#user-content-fn-0&quot; id=&quot;user-content-fnref-0&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;0&lt;/a&gt;&lt;/sup&gt;, costly casual curiosity, and psychological safety. If wide transparency becomes fundamentally at odds to psychological safety, we’ll choose psychological safety.&lt;/p&gt;
&lt;p&gt;These tenets are not perfect or complete. We’ll add to them and revise them over time. If this way of working resonates, &lt;a href=&quot;mailto:jobs@increase.com&quot;&gt;we’d love to hear from you&lt;/a&gt;.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class id=&quot;footnote-label&quot;&gt;Notes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-0&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.recurse.com/social-rules&quot;&gt;https://www.recurse.com/social-rules&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-0&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><dc:creator>Jamshed Vesuna</dc:creator><media:content url="https://increase.com/images/how-we-work-thumbnail.png" medium="image" type="image/png"/><category>Article</category></item><item><title>2023 Q4 Newsletter</title><link>https://increase.com/newsletter/q4-2023</link><guid isPermaLink="true">https://increase.com/newsletter/q4-2023</guid><description>Changes for 2023 Q4, including Wire Transfer limits, Check Deposit timing, IntraFi enrollment, and more.</description><pubDate>Sun, 31 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;December 18, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://increase.com/documentation/api/wire-transfers#create-a-wire-transfer&quot;&gt; Wire Transfers &lt;/a&gt; now limit the &lt;code&gt;beneficiary_name&lt;/code&gt; to 35 characters, the &lt;code&gt;message_to_recipient&lt;/code&gt; to 140 characters, and each line of the &lt;code&gt;beneficiary_address&lt;/code&gt; to 35 characters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;December 11, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://increase.com/documentation/api/check-deposits#check-deposit-object&quot;&gt; Check Deposit submissions &lt;/a&gt; now show the time a check was sent to Check21.&lt;/li&gt;
&lt;li&gt;You can now set &lt;code&gt;debtor_name&lt;/code&gt; and &lt;code&gt;ultimate_debtor_name&lt;/code&gt; on &lt;a href=&quot;https://increase.com/documentation/api/real-time-payments-transfers#create-a-real-time-payments-transfer&quot;&gt; Real Time Payments Creation &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;December 04, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now enroll accounts in &lt;a href=&quot;https://increase.com/documentation/api/intrafi-account-enrollments#enroll-an-account-in-the-intrafi-deposit-sweep-network&quot;&gt; IntraFi &lt;/a&gt; for higher FDIC coverage.&lt;/li&gt;
&lt;li&gt;You can now create &lt;a href=&quot;https://dashboard.increase.com/compliance&quot;&gt; security incidents &lt;/a&gt; in the Dashboard.&lt;/li&gt;
&lt;li&gt;You can now connect your Increase accounts anywhere Plaid is supported.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;November 27, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now receive and submit &lt;a href=&quot;https://increase.com/documentation/api/proof-of-authorization-requests&quot;&gt; Proof of Authorization Requests &lt;/a&gt; in the API.&lt;/li&gt;
&lt;li&gt;You can now submit platform complaint metrics via a CSV file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;November 20, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now filter &lt;a href=&quot;https://dashboard.increase.com/transactions&quot;&gt; Transactions &lt;/a&gt; by description in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;November 13, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added new &lt;a href=&quot;https://dashboard.increase.com/transfers&quot;&gt; Transfers &lt;/a&gt; , &lt;a href=&quot;https://dashboard.increase.com/account_numbers?statuses=active&amp;#x26;statuses=disabled&quot;&gt; Account Numbers &lt;/a&gt; and &lt;a href=&quot;https://dashboard.increase.com/external_accounts&quot;&gt; External Accounts &lt;/a&gt; tabs in Dashboard for easier navigation.&lt;/li&gt;
&lt;li&gt;You can now filter Entities, Account Numbers and Accounts by name in the Dashboard.&lt;/li&gt;
&lt;li&gt;You can now filter External Accounts and Cards by description in the Dashboard.&lt;/li&gt;
&lt;li&gt;You can now filter Transfers by date in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;November 6, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now save beneficiary address and name details when creating new External Accounts in the &lt;a href=&quot;https://dashboard.increase.com/external_accounts&quot;&gt; External Accounts &lt;/a&gt; tab.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 30, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now download account verification letters from Dashboard. This is helpful if you need to demonstrate ownership to a third party.&lt;/li&gt;
&lt;li&gt;You can now export a CSV of Entities.&lt;/li&gt;
&lt;li&gt;You can now see which Entry Effective Date was used for an ACH Transfer.&lt;/li&gt;
&lt;li&gt;You can now save beneficiary address and name details when creating new External Accounts in the Money Movement flow for reuse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 23, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ACH addenda are now visible on the Inbound ACH Transfer object.&lt;/li&gt;
&lt;li&gt;There is a new verification hash on the card authorization resource that shows the address provided by a customer, the address we match it against, and the result. It also shows the result of the CVC match.&lt;/li&gt;
&lt;li&gt;We now expose a few more network identifiers on our various card payment-related resources, nested under network_identifiers.&lt;/li&gt;
&lt;li&gt;We’ve added support for Automatic Fuel Dispenser payments, where the initial authorization will be followed by a &lt;code&gt;card_fuel_confirmation&lt;/code&gt; that updates the amount to the actual fuel pump amount.&lt;/li&gt;
&lt;li&gt;You can now filter the Transfers list in Dashboard.&lt;/li&gt;
&lt;li&gt;ACH Transfer objects now include an &lt;code&gt;effective_date&lt;/code&gt; that tells you which day a transfer was processed.&lt;/li&gt;
&lt;li&gt;You can now search Inbound Wires by Input Message Accountability Data (IMAD) and Trace Number in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 16, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We updated our Proof of Authorization flow to be more guided.&lt;/li&gt;
&lt;li&gt;You can now see the Check Transfer ID on Check Transfer Deposits in the Transactions API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 9, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now filter Transactions by amount in the Dashboard.&lt;/li&gt;
&lt;li&gt;You can now view Fee Statements by Program in the Dashboard.&lt;/li&gt;
&lt;li&gt;You can access more Federal Deposit Insurance Corporation (FDIC) coverage to protect your account balances above $250K. &lt;a href=&quot;mailto:support@increase.com&quot;&gt;Reach out&lt;/a&gt; if you’d like to enroll in our Extended Deposit Insurance.&lt;/li&gt;
&lt;li&gt;You can now see failed scheduled transfers in the dashboard and we will email you if they fail.&lt;/li&gt;
&lt;li&gt;You can disable notification emails altogether in &lt;a href=&quot;https://dashboard.increase.com/settings/team&quot;&gt; Settings &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;There is now a direction field on Card Authorization resources that shows whether it’s a settlement or refund authorization.&lt;/li&gt;
&lt;li&gt;We fixed a bug where Card increment amounts would sometimes have the wrong signage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 2, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now search for ACH Transfers by Trace ID and for Wire Transfers by Input Message Accountability Data (IMAD) in the Dashboard.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>How Ramp scaled a successful bill pay product with Increase</title><link>https://increase.com/customers/ramp</link><guid isPermaLink="true">https://increase.com/customers/ramp</guid><description>Ramp is the ultimate platform for modern finance teams. From spend management and expense management software, to bill payments and vendor management, Ramp’s all-in-one solution is designed to automate finance operations and build healthier businesses.</description><pubDate>Tue, 28 Nov 2023 00:00:00 GMT</pubDate><media:content url="https://increase.com/images/ramp-case-study-thumbnail.png" medium="image" type="image/png"/><category>Customer story</category></item><item><title>2023 Q3 Newsletter</title><link>https://increase.com/newsletter/q3-2023</link><guid isPermaLink="true">https://increase.com/newsletter/q3-2023</guid><description>Changes for 2023 Q3, including API documentation improvements, physical card simulations, check image reviews, and more.</description><pubDate>Sat, 30 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;September 25, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now see maximum string lengths in our API Documentation.&lt;/li&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/api/physical-cards#sandbox-advance-the-shipment-status-of-a-physical-card&quot;&gt; simulate advancing a physical card shipment &lt;/a&gt; in sandbox.&lt;/li&gt;
&lt;li&gt;When depositing a check in the money movement flow you can now review check images before depositing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;September 18, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://increase.com/documentation/api/inbound-ach-transfers#inbound-ach-transfer-object&quot;&gt; Inbound ACH Transfer &lt;/a&gt; object now includes the originator routing number information.&lt;/li&gt;
&lt;li&gt;The Inbound Wire object now optionally includes the originator routing number information.&lt;/li&gt;
&lt;li&gt;You can now cancel physical card submissions prior to shipping.&lt;/li&gt;
&lt;li&gt;You can now assign a &lt;a href=&quot;https://increase.com/documentation/roles#owner&quot;&gt; compliance &lt;/a&gt; role to users.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;September 11, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/api/inbound-ach-transfers#sandbox-create-an-inbound-ach-transfer&quot;&gt; simulate creating actionable Inbound ACH Transfers &lt;/a&gt; to your account in sandbox.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;September 4, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added polish to our mobile experience to make it easier to view timeline data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 28, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/receiving-ach-transfers#actioning&quot;&gt; action &lt;/a&gt; on Inbound ACH Transfers using the new decline and return APIs.&lt;/li&gt;
&lt;li&gt;You can &lt;a href=&quot;https://increase.com/documentation/api/inbound-ach-transfers#create-a-notification-of-change-for-an-inbound-ach-transfer&quot;&gt; create a notification of change &lt;/a&gt; for Inbound ACH Transfers.&lt;/li&gt;
&lt;li&gt;We’ve added new guides for understanding &lt;a href=&quot;https://increase.com/documentation/sending-ach-debit-transfers#sending-an-ach-debit-transfer&quot;&gt; ACH debit funds holds &lt;/a&gt; and &lt;a href=&quot;https://increase.com/documentation/sending-ach-transfers#sending-an-ach-transfer&quot;&gt; Outbound ACH Transfers &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 21, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view FedACH processing windows and FedACH file submission details on our &lt;a href=&quot;https://status.increase.com/&quot;&gt;status&lt;/a&gt; page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 14, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ACH transfers report when they were acknowledged by FedACH in the &lt;code&gt;acknowledgement&lt;/code&gt; details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 7, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now add a new Beneficial Owner to an existing Corporation entity.&lt;/li&gt;
&lt;li&gt;Beneficial Owners can have multiple prongs within one Corporation.&lt;/li&gt;
&lt;li&gt;You can fetch an image of the mailed check sent by Increase for a Check Transfer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 31, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now manage Card Profiles in Dashboard.&lt;/li&gt;
&lt;li&gt;Wire Transfers now allow alphanumeric characters in account numbers.&lt;/li&gt;
&lt;li&gt;There are improved Dashboard filters for Transactions and Cards.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 24, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now make a Check Transfer that you, rather than Increase, mail.&lt;/li&gt;
&lt;li&gt;Level 2 and industry-specific data is available under &lt;code&gt;card_settlement&lt;/code&gt; and &lt;code&gt;card_refund&lt;/code&gt; sources in the &lt;code&gt;purchase_details&lt;/code&gt; object.&lt;/li&gt;
&lt;li&gt;Level 3 data, such as line item level itemization of purchases, is available under the new &lt;code&gt;/card_purchase_supplements&lt;/code&gt; API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 10, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now upload rear images for driver’s licenses and other identification documents.&lt;/li&gt;
&lt;li&gt;You can now view all of your prior document submissions in Dashboard.&lt;/li&gt;
&lt;li&gt;We’ve updated transaction descriptions in Dashboard to be more readable.&lt;/li&gt;
&lt;li&gt;We’ve added additional polish to our move money flows, improving the ability to send money to saved External Accounts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 03, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added newly designed move money flows in Dashboard to make it easier to pay saved External Accounts, created a review step to reduce commonly made errors, and introduced a few other experience improvements.&lt;/li&gt;
&lt;li&gt;Open Fee Statements for the current month are now visible in Dashboard.&lt;/li&gt;
&lt;li&gt;Document requests for late returns and proof of authorization requests are now visible in Dashboard.&lt;/li&gt;
&lt;li&gt;The ACH &lt;code&gt;notifications_of_change&lt;/code&gt; &lt;a href=&quot;https://increase.com/documentation/api/ach-transfers#ach-transfer-object&quot;&gt; attribute &lt;/a&gt; now has all of its &lt;code&gt;change_code&lt;/code&gt;s documented.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>2023 Q2 Newsletter</title><link>https://increase.com/newsletter/q2-2023</link><guid isPermaLink="true">https://increase.com/newsletter/q2-2023</guid><description>Changes for 2023 Q2, including Transactions vs Transfers guide, documentation refactoring, and more.</description><pubDate>Fri, 30 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;June 26, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added a new guide for understanding the differences between &lt;a href=&quot;https://increase.com/documentation/transactions-transfers&quot;&gt; Transactions and Transfers &lt;/a&gt; in our documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;June 19, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve refactored our &lt;a href=&quot;https://increase.com/documentation&quot;&gt;documentation&lt;/a&gt; and &lt;a href=&quot;https://increase.com/documentation/api&quot;&gt;API reference&lt;/a&gt; to improve navigation and surface more information by default.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;June 12, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added support for a &lt;a href=&quot;https://increase.com/documentation/software-development-kits#go&quot;&gt; Go SDK &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;Checks can now be stopped before they’re mailed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;June 05, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view the raw return code ( &lt;code&gt;raw_return_reason_code&lt;/code&gt;) on a returned &lt;a href=&quot;https://increase.com/documentation/api/ach-transfers#ach-transfer-object&quot;&gt; ACH Transfer &lt;/a&gt; including a brief description ( &lt;code&gt;return_reason_code&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Dashboard now surfaces additional information in object lists including Transactions, Cards, Account Numbers, and Transfers lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;May 29, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view the interest rate earned by an Account in the &lt;a href=&quot;https://increase.com/documentation/api/accounts&quot;&gt;Accounts API&lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;Post Office Boxes are no longer accepted as valid Entity addresses, with the exception of Army Post Office (APO) and Fleet Post Office (FPO) addresses.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;May 22, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you have more than one &lt;a href=&quot;https://increase.com/documentation/api/programs&quot;&gt;Program&lt;/a&gt;, you’ll now need to specify a &lt;code&gt;program_id&lt;/code&gt; when &lt;a href=&quot;https://increase.com/documentation/api/accounts#create-an-account&quot;&gt; creating a new Account &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now create &lt;a href=&quot;https://increase.com/documentation/api/programs#sandbox-create-a-program&quot;&gt; Programs in Sandbox &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;May 15, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New Entity views in Dashboard let you review and edit your information and give you access to quick actions, all in one place.&lt;/li&gt;
&lt;li&gt;With Programs, platforms can now report compliance data (such as metrics, complaints, and third-party risk reports) directly in Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 17, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now view detailed timelines for transfers in Dashboard.&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;pending_reviewing&lt;/code&gt; status on a transfer indicates when a transfer is under review by Increase.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://increase.com/documentation/api/ach-transfers#ach-transfer-object&quot;&gt; ACH Transfer API &lt;/a&gt; now includes multiple &lt;code&gt;notifications_of_change&lt;/code&gt;, if they are sent by the receiving bank.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 10, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now override webhook Event Subscriptions for Real-Time Decisions in the sandbox by specifying an &lt;code&gt;event_subscription_id&lt;/code&gt; in the &lt;a href=&quot;https://increase.com/documentation/api/card-payments#sandbox-create-a-card-authorization&quot;&gt; simulation &lt;/a&gt; . This is helpful when multiple developers are building in the same sandbox environment.&lt;/li&gt;
&lt;li&gt;Our new &lt;a href=&quot;https://increase.com/documentation/api/accounts#retrieve-an-account-balance&quot;&gt; Balance Lookups API &lt;/a&gt; enables you to see the available and current balance of your accounts. This will soon replace the balance attribute on &lt;a href=&quot;https://increase.com/documentation/api/accounts#account-object&quot;&gt; Accounts &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;Our new beta &lt;a href=&quot;https://increase.com/documentation/api/exports&quot;&gt;Exports API&lt;/a&gt; enables you to download your Increase data in batches. Check out the &lt;a href=&quot;https://increase.com/documentation/exports&quot;&gt; Exports documentation &lt;/a&gt; for more information.&lt;/li&gt;
&lt;li&gt;You can now update your Entity’s address in Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;April 3, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve written new guides to common &lt;a href=&quot;https://increase.com/documentation&quot;&gt;Networks&lt;/a&gt;, such as ACH, Check 21, and Fedwire. &lt;a href=&quot;mailto:support@increase.com&quot;&gt;Let us know&lt;/a&gt; what networks you’d like us to write about next!&lt;/li&gt;
&lt;li&gt;You can now simulate an &lt;a href=&quot;https://increase.com/documentation/api/accounts#sandbox-create-an-interest-payment&quot;&gt; Interest Payment &lt;/a&gt; to your Account.&lt;/li&gt;
&lt;li&gt;Transfer templates are now deprecated in favor of &lt;a href=&quot;https://increase.com/documentation/api/external-accounts&quot;&gt; External Accounts &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>2023 Q1 Newsletter</title><link>https://increase.com/newsletter/q1-2023</link><guid isPermaLink="true">https://increase.com/newsletter/q1-2023</guid><description>Changes for 2023 Q1, including Programs introduction, wire transfer requirements, SDK launches, and more.</description><pubDate>Fri, 31 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;March 27, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve introduced &lt;a href=&quot;https://increase.com/documentation/api/programs&quot;&gt;Programs&lt;/a&gt; to guide the compliance and commercial terms for Accounts. You can also view your &lt;a href=&quot;https://dashboard.increase.com/settings/programs&quot;&gt; Programs in Dashboard &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;&lt;code&gt;beneficiary_address_line1&lt;/code&gt; is now a required field on &lt;a href=&quot;https://increase.com/documentation/api/wire-transfers#create-a-wire-transfer&quot;&gt; outbound wires &lt;/a&gt; for transfers made through Blue Ridge Bank.&lt;/li&gt;
&lt;li&gt;We’ve launched &lt;a href=&quot;https://increase.com/documentation/software-development-kits&quot;&gt; Java and Kotlin Software Development Kits &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;March 13, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve launched &lt;a href=&quot;https://increase.com/documentation/software-development-kits&quot;&gt; Python and Node Software Development Kits &lt;/a&gt; ! We’d love for you to try them out and &lt;a href=&quot;mailto:support@increase.com&quot;&gt; give us feedback &lt;/a&gt; as you build your integration. Go, Java, and Kotlin are coming soon. Let us know if there’s another language you’d like us to support.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;March 06, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now require everyone in your Team to set up two-factor authentication on your &lt;a href=&quot;https://dashboard.increase.com/settings/team&quot;&gt; Team’s settings page &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can also view events related to your Team’s security changes, such as password resets and two-factor authentication changes, on your &lt;a href=&quot;https://dashboard.increase.com/settings/team&quot;&gt; Team’s settings page &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 27, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now create and revoke API keys in Dashboard.&lt;/li&gt;
&lt;li&gt;You can now simulate returning check deposits using the &lt;a href=&quot;https://increase.com/documentation/api/check-deposits#sandbox-return-a-check-deposit&quot;&gt; Simulations API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now access the accompanying message that is printed on a &lt;a href=&quot;https://increase.com/documentation/api/check-transfers&quot;&gt; CheckTransfer &lt;/a&gt; ‘s letter.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 20, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now return inbound ACH Transfers with our new &lt;a href=&quot;https://increase.com/documentation/api/inbound-ach-transfers#return-an-inbound-ach-transfer&quot;&gt; returns API &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 13, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve made usability changes to Dashboard, including a refreshed Account page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;February 6, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We have a &lt;a href=&quot;https://increase.com/&quot;&gt;new landing page&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;We now include Visa specific fields in &lt;a href=&quot;https://increase.com/documentation/api/real-time-decisions#real-time-decision-object.card_authorization&quot;&gt; card authorization requests &lt;/a&gt; that can be used to differentiate between online and offline purchases.&lt;/li&gt;
&lt;li&gt;You can now receive and respond to inbound wire drawdown requests through our &lt;a href=&quot;https://increase.com/documentation/api/inbound-wire-drawdown-requests#inbound-wire-drawdown-request-object&quot;&gt; API &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 30, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We now support notes on &lt;a href=&quot;https://increase.com/documentation/api/check-transfers&quot;&gt; CheckTransfers &lt;/a&gt; that will be printed on the letter included with the check.&lt;/li&gt;
&lt;li&gt;You can now schedule transfers with any interval in Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 23, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now link External Accounts using Stripe’s Financial Connections through Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 16, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We now have a &lt;a href=&quot;https://status.increase.com/&quot;&gt;status page&lt;/a&gt; !&lt;/li&gt;
&lt;li&gt;You can now view images of deposited CheckTransfers in Dashboard and the &lt;a href=&quot;https://increase.com/documentation/api/check-transfers&quot;&gt; CheckTransfer API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now simulate depositing a CheckTransfer with our &lt;a href=&quot;https://increase.com/documentation/api/inbound-check-deposits#sandbox-create-an-inbound-check-deposit&quot;&gt; Simulations API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;&lt;code&gt;beneficiary_name&lt;/code&gt; is now a required field on &lt;a href=&quot;https://increase.com/documentation/api/wire-transfers#create-a-wire-transfer&quot;&gt; outbound wires &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 9, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An Account’s available balance, which represents the balance less any open Pending Transactions, is now available via the &lt;a href=&quot;https://increase.com/documentation/api/accounts#account-object&quot;&gt; Account API &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;January 3, 2023&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now approve and require approval on specific transfers, rather than all or nothing, through our API.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://increase.com/documentation/api/ach-transfers#ach-transfer-object&quot;&gt; ACH Transfer API &lt;/a&gt; now includes the time the transfer was submitted to FedACH, as well as beneficiary information.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://increase.com/documentation/api/wire-transfers#wire-transfer-object&quot;&gt; Wire Transfer API &lt;/a&gt; now includes the time the transfer was submitted to Fedwire, as well as beneficiary information.&lt;/li&gt;
&lt;li&gt;Simulations now include richer data for &lt;a href=&quot;https://increase.com/documentation/api/inbound-ach-transfers#sandbox-create-an-inbound-ach-transfer&quot;&gt; ACH Transfers &lt;/a&gt; , &lt;a href=&quot;https://increase.com/documentation/api/inbound-wire-transfers#sandbox-create-an-inbound-wire-transfer&quot;&gt; Wire Transfers &lt;/a&gt; , and &lt;a href=&quot;https://increase.com/documentation/api/inbound-real-time-payments-transfers#sandbox-create-an-inbound-real-time-payments-transfer&quot;&gt; Real-Time Payments &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now filter Transactions with specific source categories using the &lt;a href=&quot;https://increase.com/documentation/api/transactions#list-transactions&quot;&gt; Transactions List API &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>2022 Q4 Newsletter</title><link>https://increase.com/newsletter/q4-2022</link><guid isPermaLink="true">https://increase.com/newsletter/q4-2022</guid><description>Changes for 2022 Q4, including general availability launch, Real-Time Payments API, Check Transfer improvements, and more.</description><pubDate>Sat, 31 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;December 12, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Increase is now generally available and no longer requires an invite code to sign up! &lt;a href=&quot;https://dashboard.increase.com/signup&quot;&gt; Start building today &lt;/a&gt; !&lt;/li&gt;
&lt;li&gt;Our Real-Time Payments API, built directly on top of The Clearing House network, now supports sending Requests for Payment. &lt;a href=&quot;mailto:support@increase.com&quot;&gt;Reach out&lt;/a&gt; if you’d like to try it out!&lt;/li&gt;
&lt;li&gt;You can now specify a return address on outbound checks with our &lt;a href=&quot;https://increase.com/documentation/api/check-transfers#create-a-check-transfer&quot;&gt; Check Transfers API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;Card settlement transactions now surface the presentment amount and currency.&lt;/li&gt;
&lt;li&gt;Transaction CSV exports from Dashboard now include the transaction type.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://increase.com/documentation/api/real-time-decisions&quot;&gt; Real Time Decisions API &lt;/a&gt; now includes the Card Profile ID if it was set by the Real Time Decision.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;December 5, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now receive webhook events for Digital Wallet Tokens using the &lt;a href=&quot;https://increase.com/documentation/api/events#event-object&quot;&gt; Events API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now simulate refunding a card transaction using the &lt;a href=&quot;https://increase.com/documentation/api/card-payments#sandbox-refund-a-card-transaction&quot;&gt; Simulations API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;Templates are being deprecated in favor of &lt;a href=&quot;https://increase.com/documentation/api/external-accounts&quot;&gt; External Accounts &lt;/a&gt; , which are now available in Dashboard. Existing Templates will continue to work as expected, but you won’t be able to create new ones.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://increase.com/documentation/api/check-transfers#check-transfer-object&quot;&gt; Check Transfers &lt;/a&gt; now have a returned status to let you know if there was an issue with the receiver.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;November 28, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now simulate card disputes using the &lt;a href=&quot;https://increase.com/documentation/api/card-disputes#sandbox-advance-the-state-of-a-card-dispute&quot;&gt; Simulations API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now upload supplemental documents for your entity using the &lt;a href=&quot;https://increase.com/documentation/api/supplemental-documents#create-a-supplemental-document-for-an-entity&quot;&gt; Entity API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now retrieve digital wallet tokens that are created when a user adds their Card to Apple Pay or Google Pay using the &lt;a href=&quot;https://increase.com/documentation/api/digital-wallet-tokens&quot;&gt; Digital Wallet Tokens API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;We now include additional originator information, such as name and address, on outbound wires.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;November 14, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We have a new &lt;a href=&quot;https://increase.com/documentation/platform-implementation&quot;&gt; platform integration guide &lt;/a&gt; to help you get started when building your business with a compliance forward mindset!&lt;/li&gt;
&lt;li&gt;You can now use SMS to verify a card when adding it to a digital wallet using our &lt;a href=&quot;https://increase.com/documentation/api/cards&quot;&gt;Cards API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You can now check if a routing number supports ACH, wire, and Real Time Payment transfers using our &lt;a href=&quot;https://increase.com/documentation/api/routing-numbers&quot;&gt; Routing Number API &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 31, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Receiving inbound Real-Time Payments is now generally available.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 24, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now specify an Entity’s relationship to your group using the &lt;a href=&quot;https://increase.com/documentation/api/entities&quot;&gt;Entities API&lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now create beneficial owners in the &lt;a href=&quot;https://increase.com/documentation/api/entities&quot;&gt;Entities API&lt;/a&gt; without a passport.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 10, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now add Increase cards to digital wallets such as Apple and Google Pay! If you’d like to do this for cards you issue to your users, we also support custom artwork and branding. &lt;a href=&quot;mailto:support@increase.com&quot;&gt;Reach out&lt;/a&gt; if you’d like to use this.&lt;/li&gt;
&lt;li&gt;Our updated &lt;a href=&quot;https://increase.com/documentation/api/check-deposits&quot;&gt; Check Deposits API &lt;/a&gt; gives you access to details of a parsed check, such as the account number printed on the check.&lt;/li&gt;
&lt;li&gt;Users can now be re-added to a Group.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;October 3, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Our new &lt;a href=&quot;https://increase.com/documentation/api/real-time-decisions&quot;&gt; Real-Time Decisions API &lt;/a&gt; lets you take actions in real-time for events such as card authorizations.&lt;/li&gt;
&lt;li&gt;Our new &lt;a href=&quot;https://increase.com/documentation/api/wire-drawdown-requests&quot;&gt; Wire Drawdown Requests API &lt;/a&gt; lets you request that someone else send you a wire transfer.&lt;/li&gt;
&lt;li&gt;There’s a new &lt;a href=&quot;https://increase.com/documentation/api/entities&quot;&gt;Entities API&lt;/a&gt; that includes richer information about your legal entities.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>2022 Q3 Newsletter</title><link>https://increase.com/newsletter/q3-2022</link><guid isPermaLink="true">https://increase.com/newsletter/q3-2022</guid><description>Changes for 2022 Q3, including check numbers, Real-Time Payments simulation, company creation flow, and more.</description><pubDate>Fri, 30 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;September 5, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check numbers are now available in Dashboard and the &lt;a href=&quot;https://increase.com/documentation/api/check-transfers&quot;&gt; Check Transfers API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/api/inbound-real-time-payments-transfers#sandbox-create-an-inbound-real-time-payments-transfer&quot;&gt; simulate inbound Real-Time Payments &lt;/a&gt; to your account. &lt;a href=&quot;mailto:support@increase.com&quot;&gt;Reach out&lt;/a&gt; if you’d like to use Real-Time Payments in production.&lt;/li&gt;
&lt;li&gt;Our new company creation flow improves onboarding and entity creation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 29, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now filter transactions by direction and transaction type in Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 15, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Our new &lt;a href=&quot;https://increase.com/documentation/api/external-accounts&quot;&gt; External Accounts API &lt;/a&gt; lets you store external account details for reuse.&lt;/li&gt;
&lt;li&gt;You can now redirect cashback and interest to a specific account. &lt;a href=&quot;mailto:support@increase.com&quot;&gt;Reach out&lt;/a&gt; if you’d like to do this.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 8, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now specify the &lt;code&gt;amount&lt;/code&gt; in &lt;a href=&quot;https://increase.com/documentation/api/card-payments#sandbox-settle-a-card-authorization&quot;&gt; card settlement simulations &lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;August 1, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Our new Cards webhook, which enables you to make real time decisions in the authorization flow, is in private beta! &lt;a href=&quot;mailto:support@increase.com&quot;&gt;Reach out&lt;/a&gt; if you’d like to try it out!&lt;/li&gt;
&lt;li&gt;Cards now appear in search.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 25, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dashboard.increase.com/developers/logs&quot;&gt; API logs &lt;/a&gt; are now viewable under Developers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;July 18, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now validate routing numbers against our new &lt;a href=&quot;https://increase.com/documentation/api/routing-numbers&quot;&gt; Routing Number API &lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;Our new Real-Time Payments API, built directly on top of The Clearing House network, is in private beta. &lt;a href=&quot;mailto:support@increase.com&quot;&gt;Reach out&lt;/a&gt; if you’d like to try it out!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://increase.com/documentation/api/account-statements&quot;&gt; Account Statements &lt;/a&gt; are now available in the API.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dashboard.increase.com/compliance/entities&quot;&gt; Entities &lt;/a&gt; now have their own tab under Settings.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dashboard.increase.com/developers/events&quot;&gt; Events &lt;/a&gt; are now viewable under Developers.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item><item><title>2022 Q2 Newsletter</title><link>https://increase.com/newsletter/q2-2022</link><guid isPermaLink="true">https://increase.com/newsletter/q2-2022</guid><description>Changes for 2022 Q2, including wire routing details, stop payment functionality, Cards API launch, and more.</description><pubDate>Thu, 30 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;June 20, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can download a PDF of wire routing details for an Account Number from Dashboard.&lt;/li&gt;
&lt;li&gt;If you need to stop payment on a Check Transfer, you may now &lt;a href=&quot;https://increase.com/documentation/api/check-transfers#stop-payment-on-a-check-transfer&quot;&gt; do so &lt;/a&gt; via the API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;June 6, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Our new Cards API, built directly on top of the Visa network, is now in public beta. &lt;a href=&quot;https://increase.com/documentation/api/cards&quot;&gt;Try it out!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;May 30, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/api/check-deposits&quot;&gt; deposit checks &lt;/a&gt; in the API and Dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;May 23, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now &lt;a href=&quot;https://increase.com/documentation/api/overview#sandbox-simulations&quot;&gt; simulate &lt;/a&gt; certain types of activity, such as inbound ACH transfers, in the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://increase.com/documentation/oauth&quot;&gt;OAuth applications&lt;/a&gt; are now generally available - you can make applications to work with data for other Increase users.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;May 16, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Files (both sent by you to Increase, and generated by Increase for you) are now exposed in the API. You can listen to &lt;code&gt;file.created&lt;/code&gt; webhooks to know when Increase generates certain Files (such as statement PDFs) for you.&lt;/li&gt;
&lt;li&gt;There are no longer limits on Account Number or Card creation in the sandbox.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;May 9, 2022&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Webhooks now have more predictable payloads and work in the sandbox. There’s a guide on how they work &lt;a href=&quot;https://increase.com/documentation/webhooks&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;There’s now an &lt;a href=&quot;https://increase.com/documentation/api/overview#openapi&quot;&gt; OpenAPI schema &lt;/a&gt; for our API.&lt;/li&gt;
&lt;li&gt;This changelog now exists!&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Product updates</category></item></channel></rss>