feat(rails): add ACH_SAME_DAY payment rail - #931
jacklatourette wants to merge 2 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
3 Skipped Deployments
|
|
Preview deployment for your docs. Learn more about Mintlify Previews.
|
✱ Stainless preview builds for gridThis PR will update the cli go kotlin openapi php python ruby typescript Edit this comment to update them. They will appear in their respective SDK's changelogs. ✅ grid-typescript studio · code · diff
✅ grid-openapi studio · code · diff
✅ grid-kotlin studio · code · diff
✅ grid-ruby studio · code · diff
✅ grid-go studio · code · diff
✅ grid-python studio · code · diff
✅ grid-php studio · code · diff
✅ grid-cli studio · code · diff
This comment is auto-generated by GitHub Actions and is automatically kept up to date as you push. |
|
38e2c6c to
71fa3d2
Compare
71fa3d2 to
8e4ddb9
Compare
8e4ddb9 to
4741fd0
Compare
4741fd0 to
90faaf4
Compare
Grid exposes one ACH rail today, so a platform cannot choose between
standard and same-day settlement and the two cannot be priced apart.
Add ACH_SAME_DAY alongside ACH in PaymentRail, and to the paymentRails
array on UsdAccountInfo. The array is the one that matters at runtime:
the generated client validates paymentRails against it, so advertising
the rail on a USD account without this entry makes
GET /customers/external-accounts/{id} return 500. UsdAccountInfo is
composed by PaymentUsdAccountInfo and UsdExternalAccountInfo, so the
single entry covers all three generated models.
Describe the rails as they will actually behave on release. ACH keeps
settling same-business-day on production platforms until an announced
date, and already settles next-business-day on sandbox, so the
description says so rather than claiming next-day everywhere. An
over-cap same-day request settles on the standard schedule and is
priced accordingly; it is not rejected.
RailFeeConfig accepts the new rail, and its description now says the
two are separate rails that each need their own fee config.
The docs pages that enumerate rails list the new one: the US row of the
country support table, the paymentRail tip on the sending pages, the
rail-fee limits on the fees page, and a changelog entry.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RUF3krYG9C9hShf4iS5Sug
The description said an over-limit payout 'settles on the standard schedule and is priced accordingly'. Grid now refuses it instead, so a customer who named the fast rail chooses the slower one themselves rather than being moved to it silently. Plain ACH is never refused by this limit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RUF3krYG9C9hShf4iS5Sug
5a3b0cf to
d4f0f2f
Compare

What
Adds
ACH_SAME_DAYto thePaymentRailenum alongside the existingACH, and to thepaymentRailsarray onUsdAccountInfo.Why
Grid exposes one ACH rail today. Every ACH payout it originates already settles same
day, because the sponsor bank's default service level is same-day and nothing in the
request path ever asks for a different one. A platform therefore cannot choose
standard ACH, and the two speeds cannot be priced apart.
Splitting the rail gives platforms an explicit choice, and gives each speed its own
RailFeeConfig.The
paymentRailsarray is the part that matters at runtimeThe top-level enum alone is not enough. The generated client validates an account's
paymentRailsagainst the array onUsdAccountInfo, so advertising the rail on a USDaccount without that entry makes
GET /customers/external-accounts/{id}return 500— verified against a live account.
UsdAccountInfois composed byPaymentUsdAccountInfoandUsdExternalAccountInfo, sothe single entry covers all three generated models.
What this means for integrators
ACH_SAME_DAYrequests same-business-day settlement and is priced separately. Abovethe NACHA per-entry same-day limit it settles on the standard schedule and is priced
accordingly — it is not rejected.
ACHwill settle on the standard next-business-day schedule. Until an announceddate it continues to settle same-business-day on production platforms, and already
settles next-business-day on sandbox platforms. The descriptions say so explicitly
rather than claiming next-day everywhere, because that would be wrong for every
production customer until the cutover.
RailFeeConfigacceptsACH_SAME_DAY. The two are separate rails, so price each onewith its own config.
The change is additive to both enums. No existing field changes shape.
Docs
The pages that enumerate rails now list it: the US row of the country support table, the
paymentRailtip on both sending pages, and the rail-fee limits on the fees page. Thechangelog gets a September 2026 entry.
Sequencing
Backend support lands separately in webdev under AT-6555, which regenerates its vendored
client from this branch. Until that ships, a request naming
ACH_SAME_DAYis declined bythe backend, so hold this if you would rather the docs never advertise a rail the API
does not yet accept.
Verification
main(was 45 behind). One conflict, in the changelog, where bothsides added September entries; both kept.
make buildrebundles cleanly;openapi.yamlandmintlify/openapi.yamlare in sync.make lint-openapiexits 0: 866 problems, 0 errors (174 warnings, 692 infos, allpre-existing and unrelated — the 2 redocly warnings are
paths-kebab-case).make lint-markdowncannot run locally:package.jsonhas nolint:markdownscript.CI's "Lint Code & Documentation" job covers it.
🤖 Generated with Claude Code
https://claude.ai/code/session_01RUF3krYG9C9hShf4iS5Sug