Skip to content

Add SWIFT pay-in API surface: holder name, readiness webhook, failure reason - #834

Open
mohamedwane wants to merge 7 commits into
mainfrom
claude/swift-payins-m-api
Open

Add SWIFT pay-in API surface: holder name, readiness webhook, failure reason#834
mohamedwane wants to merge 7 commits into
mainfrom
claude/swift-payins-m-api

Conversation

@mohamedwane

@mohamedwane mohamedwane commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Reason

SWIFT pay-ins (epic AT-5861, milestone AT-6333) shipped their substrate in webdev M2/M3 without spec changes (decision D-M2-3): coordinates render from pre-existing fields, the platform has no push signal when wire coordinates become available, and a failed collect carries no failure reason. This is the deferred spec surface, landing spec-first so the webdev consumption PR can replay it via update_schema.sh.

Overview

  • PaymentSwiftAccountInfo: adds accountHolderName (required — remitting banks match the beneficiary name, and every enabled collection account carries it) and bankAddress (optional). reference moves out of required: SWIFT collections are attributed by the destination account number/IBAN, not a memo.
  • INTERNAL_ACCOUNT.FUNDING_INSTRUCTIONS_UPDATED: new WebhookType value in the internal-account webhook family, fired when an account's fundingPaymentInstructions change (coordinates became servable, or were withdrawn). Payload is the full internal account, same as the existing family members. Path docs + a SWIFT example added.
  • IncomingTransactionFailureReason: adds COLLECTION_FAILED (inbound bank-rail collection failed after arrival — screening rejection or unresolved RFI; funds returned to sender). Additive for generated clients.
  • Docs: the incoming-payment webhook description now covers bank-rail pay-ins, and states that bank-rail incoming payments (including at PENDING) are informational — the synchronous approval mechanism and 5-second window do not apply, because the funds have already moved interbank.
  • Hygiene: PaymentAccountType gains SWIFT_ACCOUNT (the fundingPaymentInstructions discriminator already maps this value; the enum contradicted it); SwiftAccountInfoBase documents the accountNumber/IBAN co-presence invariant in prose (at least one present, both legal — live Tazapay collection accounts expose both identifiers, observed in the dev E2E 2026-08-14). A structural anyOf enforcement was tried (aab23ff) and reverted (082bf7f): the base schema is shared with SwiftExternalAccountCreateInfo, a client-authored create-request body, so the constraint would tighten the existing request contract, and the Stainless preview builds regressed on it (grid-typescript/kotlin build failures, duplicate generated types in python/php). The invariant binds the producer and is enforced where the shape is constructed.

openapi.yaml and mintlify/openapi.yaml are the regenerated bundles (npm run build:openapi).

oasdiff report, mapped

All 41 flagged errors are the two deliberate changes above, fanned out across every path that transitively embeds PaymentSwiftAccountInfo:

  • 37 × response-property-became-optional on reference — the intended relaxation. No producer has ever constructed this shape (nothing serves SWIFT payment instructions until the webdev consumption PR), so no client can observe a field disappearing that it previously received.
  • 4 × new-required-request-property on accountHolderName — these are webhook request bodies, i.e. payloads Grid sends to platforms. The "required" obligation binds the sender (us), not receivers; for platforms it is a new field that is always present. Same no-producer-yet argument applies.

The SWIFT_ACCOUNT/COLLECTION_FAILED enum-value warnings are the standard additive-enum notes; this repo does not use x-extensible-enum.

Test Plan

  • npm run lint:openapi passes: redocly lint + spectral, 0 errors; the new properties carry descriptions and examples per openapi/README.md, and no new warnings are attributable to these lines.
  • Webdev consumption PR (linked when open) regenerates the Python client from this spec and exercises the new fields/enum values in unit tests.

Rollout

Spec-only. accountHolderName is required on a shape nothing constructs today (webdev M2 renders SWIFT instructions from existing fields and starts constructing the new shape only in the consumption PR, where the field is guaranteed before render). reference required→optional is the one loosening: generated clients make the field nullable, which matches reality (it was never meaningful for SWIFT attribution). All other changes are additive enum values and docs.

… reason

PaymentSwiftAccountInfo gains accountHolderName (required) and
bankAddress, and reference becomes optional (SWIFT collections are
attributed by the destination account, not a memo). New
INTERNAL_ACCOUNT.FUNDING_INSTRUCTIONS_UPDATED webhook type announces
funding-coordinate changes. IncomingTransactionFailureReason gains
COLLECTION_FAILED. Hygiene: PaymentAccountType gains the SWIFT_ACCOUNT
value its discriminator already maps; SwiftAccountInfoBase documents
accountNumber/IBAN co-presence; incoming-payment webhook docs cover
bank-rail pay-ins and their exemption from the approval gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLYJSn6VRoZeLV15wcuZHy
@mintlify

mintlify Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
Grid 🟢 Ready View Preview Aug 14, 2026, 5:15 AM

@vercel

vercel Bot commented Aug 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Actions Updated (UTC)
grid-flow-builder Ignored Ignored Preview Aug 14, 2026 8:51pm
grid-wallet-demo Ignored Ignored Preview Aug 14, 2026 8:51pm

Request Review

@github-actions github-actions Bot added the breaking-change Introduces a breaking change to the OpenAPI spec label Aug 14, 2026
@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

⚠️ Breaking OpenAPI changes detected

oasdiff reports 41 error / 1833 warning changes to openapi.yaml.
This PR will need approval from an API reviewer before merge.

Errors (41)

  • GET /agents/approvals — the response property data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /agents/approvals — the response property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /agents/me/actions — the response property data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /agents/me/actions — the response property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /agents/me/actions/{actionId} — the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /agents/me/actions/{actionId} — the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /agents/me/internal-accounts — the response property data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /agents/me/quotes — the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 201 [response-property-became-optional].
  • GET /agents/me/quotes/{quoteId} — the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /agents/me/quotes/{quoteId}/execute — the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /agents/me/quotes/{quoteId}/execute — the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /agents/me/transactions — the response property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /agents/me/transactions/{transactionId} — the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /agents/me/transfer-in — the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 201 [response-property-became-optional].
  • POST /agents/me/transfer-in — the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 201 [response-property-became-optional].
  • POST /agents/me/transfer-out — the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 201 [response-property-became-optional].
  • POST /agents/me/transfer-out — the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 201 [response-property-became-optional].
  • POST /agents/{agentId}/actions/{actionId}/approve — the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /agents/{agentId}/actions/{actionId}/approve — the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /agents/{agentId}/actions/{actionId}/reject — the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /agents/{agentId}/actions/{actionId}/reject — the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /customers/internal-accounts — the response property data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • PATCH /internal-accounts/{id} — the response property fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /platform/internal-accounts — the response property data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /quotes — the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 201 [response-property-became-optional].
  • POST /quotes — the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 202 [response-property-became-optional].
  • GET /quotes/{quoteId} — the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /quotes/{quoteId}/authorize — the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /quotes/{quoteId}/execute — the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /sandbox/internal-accounts/{accountId}/fund — the response property fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /sandbox/send — the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /transactions — the response property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • GET /transactions/{transactionId} — the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /transactions/{transactionId}/cancel — the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /transactions/{transactionId}/confirm — the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 200 [response-property-became-optional].
  • POST /transfer-in — the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 201 [response-property-became-optional].
  • POST /transfer-out — the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/reference became optional for the status 201 [response-property-became-optional].
  • POST webhook:agent-action — added the new required request property allOf[subschema #2]/data/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/accountHolderName [new-required-request-property].
  • POST webhook:agent-action — added the new required request property allOf[subschema #2]/data/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/accountHolderName [new-required-request-property].
  • POST webhook:internal-account-status — added the new required request property allOf[subschema #2]/data/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/accountHolderName [new-required-request-property].
  • POST webhook:outgoing-payment — added the new required request property allOf[subschema #2]/data/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #38: SWIFT Account]/allOf[subschema #3]/accountHolderName [new-required-request-property].

Warnings (1833)

Show sample
  • GET /agents/approvals — added the new COLLECTION_FAILED enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/failureReason response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #10: HKD Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #11: IDR Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #12: MYR Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #13: PHP Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #14: SGD Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #15: THB Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #16: VND Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #17: AED Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #18: KES Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #19: MWK Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #1: USD Bank Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #20: RWF Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #21: TZS Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #22: UGX Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #23: XOF Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #24: ZAR Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #25: ZMW Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #26: BWP Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #27: XAF Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #28: BDT Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #29: ARS Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #2: BRL Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #30: COP Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • GET /agents/approvals — added the new SWIFT_ACCOUNT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #31: EGP Account]/allOf[#/components/schemas/BasePaymentAccountInfo]/accountType response property for the response status 200 [response-property-enum-value-added]. Adding new enum values to response could be unexpected for clients, use x-extensible-enum instead.
  • …and 1808 more warnings.

Detected by oasdiff. Full report: job summary or the oasdiff-report artifact.

@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

✱ Stainless preview builds for grid

This PR will update the grid SDKs with the following commit messages.

cli

chore(internal): regenerate SDK with no functional changes

go

feat(api): add account holder/bank address to SWIFT, transaction/webhook enums

kotlin

feat(api): add fields to SwiftAccount, enum values to IncomingTransaction/webhooks

openapi

feat(api): add FUNDING_INSTRUCTIONS_UPDATED webhook, SWIFT_ACCOUNT type, COLLECTION_FAILED

php

feat(api): add SwiftAccount fields, update reference optionality, add enum cases

python

feat(api): add enum values to transaction/webhook, fields to payment instructions

ruby

feat(api): add payment_instructions swift fields, incoming_transaction/webhook enums

typescript

feat(api): add fields to SWIFT accounts, COLLECTION_FAILED reason, webhook event

Edit this comment to update them. They will appear in their respective SDK's changelogs.

grid-typescript studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ❗test ✅

npm install https://pkg.stainless.com/s/grid-typescript/9fc725d75ef81caeb321eefa34b0b5f0ef6434c8/dist.tar.gz
grid-openapi studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️

grid-ruby studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ✅test ✅

grid-go studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ❗test ❗

go get github.com/stainless-sdks/grid-go@a01be07d623ede44dabc4e68441ed100cfcc6c2f
grid-kotlin studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️build ✅lint ✅test ❗

grid-python studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ❗test ❗

pip install https://pkg.stainless.com/s/grid-python/0a0de6b0063386130acb7be2d4553a912791430f/grid-0.0.1-py3-none-any.whl
grid-php studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅lint ✅test ✅

grid-cli studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️build ❗lint ❗test ❗


This comment is auto-generated by GitHub Actions and is automatically kept up to date as you push.
If you push custom code to the preview branch, re-run this workflow to update the comment.
Last updated: 2026-08-14 20:55:24 UTC

A collection deposit can fail on either the provider's leg or Grid's
(compliance rejection on the incoming-balance leg, terminal flow
failure), and the producer cannot always distinguish them. The reason
describes the deposit outcome, not which side failed, and no longer
claims the provider has already returned the funds.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLYJSn6VRoZeLV15wcuZHy
Upstream #823 added COMPLIANCE_REJECTED to IncomingTransactionFailureReason;
this branch adds COLLECTION_FAILED. Both are additive enum members — the
merged description explains each. Bundles regenerated via lint:openapi
(0 errors).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLYJSn6VRoZeLV15wcuZHy
@greptile-apps

greptile-apps Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR adds the deferred SWIFT pay-in API surface and aligns webhook documentation with bank-rail semantics.

  • Adds beneficiary holder and optional bank-address fields to SWIFT funding instructions while making the reference optional.
  • Adds funding-instruction readiness and collection-failure enum values.
  • Clarifies that bank-rail incoming-payment webhooks are informational, including while pending.
  • Regenerates both committed OpenAPI bundles from the modular specification.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
openapi/components/schemas/common/PaymentSwiftAccountInfo.yaml Adds required account-holder details, optional bank address, and makes SWIFT payment references optional.
openapi/components/schemas/common/SwiftAccountInfoBase.yaml Documents the SWIFT identifier invariant without reintroducing the reverted request-contract constraint.
openapi/components/schemas/webhooks/WebhookType.yaml Registers the funding-instructions-updated internal-account webhook discriminator.
openapi/webhooks/internal-account-status.yaml Documents the funding-instruction readiness event and provides a complete SWIFT example.
openapi/webhooks/incoming-payment.yaml Consistently distinguishes informational bank-rail events from approval-mechanism payment events.
openapi.yaml Regenerated root bundle reflects the modular SWIFT and webhook contract changes.
mintlify/openapi.yaml Regenerated documentation bundle reflects the source specification.

Reviews (3): Last reviewed commit: "Revert "Enforce SwiftAccountInfoBase's a..." | Re-trigger Greptile

Comment thread openapi/components/schemas/common/SwiftAccountInfoBase.yaml
Comment thread openapi/webhooks/incoming-payment.yaml
Greptile P2 on the ready round: the operation description said bank-rail
PENDING events are informational, but the 200/202/403/422 response
descriptions still read as unconditional approve/reject/RFI semantics.
Each now carves out bank rails explicitly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLYJSn6VRoZeLV15wcuZHy
…cturally

The description already promised that accountNumber or iban is always
present; encode it as anyOf so validators and codegen see the invariant
instead of trusting prose. Both identifiers remain legal together. The
redocly ignore entries follow the existing precedent for anyOf branches
that reference parent-level properties.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLYJSn6VRoZeLV15wcuZHy

Copy link
Copy Markdown
Contributor Author

@greptileai review


Generated by Claude Code

Comment thread openapi/components/schemas/common/SwiftAccountInfoBase.yaml Outdated

Copy link
Copy Markdown
Contributor Author

@greptileai review


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking-change Introduces a breaking change to the OpenAPI spec

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants