Repository navigation
feat(quotes): add an ACH statementDescriptor to quotes - #1142
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.
|
|
⚡ Review ledger Round 1
Round 2
Round 3
Round 4
Round 5
|
|
⚡ Review rounds — updated in place, latest first. Round 9 · b7bcb0f
Earlier rounds (8)Round 8 · 8178019
Round 7 · 5478ad2
Round 6 · 42f1154
Round 5 · 42f1154
Round 4 · e3b1e63
Round 3 · e3b1e63
Round 2 · d1d4d8a
Round 1 · 256559dCommits
|
256559d to
d1d4d8a
Compare
Faraday reviewfastpass advisory - comment-only, never blocks a merge. To retire a finding, either fix it or reply explaining why it is wrong: a rebuttal gets an agree or disagree answer on the thread, and if you reply again after a disagreement we concede. Acknowledging it ("will fix") or resolving the thread does not retire it on its own. This comment is edited in place every round; inline findings still post as new comments each round. Score 5/5: converged - nothing blocking open. fastpass: reviewed Round history (4 rounds)
This summary supersedes the per-round summary blocks on the faraday reviews above; those are left in place as history and are not edited. |
|
📌 Bolt Status 2026-10-08 17:12:20 UTC — ⚡ Agent |
|
@greptile review |
…yEntryDescription Co-Authored-By: akanter <akanter@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…yEntryDescription Co-Authored-By: akanter <akanter@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: akanter <akanter@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… in the schema Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…applies to Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: akanter <akanter@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…iptor Co-Authored-By: akanter <akanter@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
8178019 to
b7bcb0f
Compare
|
@greptile review |
…, FedNow, and wire Co-Authored-By: akanter <akanter@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Summary
Adds an optional top-level
statementDescriptortoPOST /quotes. It's a label of up to 10 characters, such asPAYROLL, that the counterparty's bank shows on their statement. It is used only on ACH, where it is sent as the NACHA Company Entry Description, and it works for both directions:{ "source": { "sourceType": "ACCOUNT", "accountId": "InternalAccount:..." }, "destination": { "destinationType": "ACCOUNT", "accountId": "ExternalAccount:...", "paymentRail": "ACH" }, "lockedCurrencySide": "SENDING", "lockedCurrencyAmount": 12550, "statementDescriptor": "PAYROLL", "remittanceInformation": "INV-12345" }What changed
QuoteRequest.statementDescriptor(newStatementDescriptorschema):remittanceInformationandpurposeOfPayment.remittanceInformationstill carries free-text payment details, which ACH puts in the addenda record.MISC, and the descriptions NACHA reserves for system entries (REVERSAL,RETURN FEE,AUTOENROLL,NONSETTLED,RECLAIM), in any letter case and ignoring surrounding spaces. So generated validators reject the same values the API does.statementDescriptoron a quote that moves no ACH entry returns400 INVALID_INPUT.AchRailDetails.statementDescriptor: transactions and webhooks report the Company Entry Description on the entry.remittanceInformationdescription: now lists what each rail does with it. ACH uses the addenda record, RTP and FedNow the remittance information field, and wire the OBI. On other rails, such as SEPA, PIX, SPEI, and Faster Payments, it is sent as the payment reference on the recipient's bank statement. That reference is often much shorter than 80 characters, so the description tells integrators to put the most important information first. It also points tostatementDescriptorfor the ACH purpose text.achPullToAccountexample. The send-payment guide and snippet and the changelog are updated.Why a single top-level field
An earlier revision of this PR put the field inside a per-rail
railOptionsobject. It's now a single top-level field instead, because none of the other rails we looked at has a separate short label like this. On those rails, the text the recipient sees is either the sender name or the remittance reference, whichremittanceInformationalready covers. Several bank-grade ACH APIs use the same split: a 10-character statement descriptor plus a separate addenda field.destination.paymentRailis unchanged and not deprecated.Test plan
make build: bundles regenerated, andopenapi.yamlis identical tomintlify/openapi.yaml.make lint(Redocly, Spectral, markdown, andmint openapi-check): 0 errors.oasdiff breaking(1.16.0, the version CI pins) againstmain: no breaking changes.StatementDescriptoracceptsPAYROLL,ACME PAY,MISC PAY,REVERSALS,0001,A.MISC/misc, every reserved value in mixed case and with padding, 11 characters, and non-ASCII.QuoteRequestcarrying it validates.