Skip to content

docs(sandbox): document the late-return account suffix - #1052

Closed
ls-bolt[bot] wants to merge 1 commit into
mainfrom
09-23-sandbox-late-return-suffix
Closed

ls-bolt[bot] wants to merge 1 commit into
mainfrom
09-23-sandbox-late-return-suffix

Conversation

@ls-bolt

@ls-bolt ls-bolt Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

This PR has been claimed. The active PR is now #1054.

Summary

The sandbox transfer pattern table stopped at 005, so there was no documented way to test the case that most often surprises an integration: money that arrives, settles, looks final for days, and is then taken back by the originating bank.

Adds 006 to the transfer table — the deposit completes, then is returned about 30 seconds later, moving the transaction to REFUNDED and reversing the credited balance. The note explains why that ordering matters: the deposit completes first, so any logic treating a completed incoming payment as final gets exercised before the return arrives. It also names the two webhooks you receive, in order.

Two smaller corrections while here:

  • The quote table's 005 row said "completes then transitions to failed" without naming the reason. It now names PAYOUT_RETURNED, which is what a returned payout reports.
  • 006 means different things depending on the account's role — a late inbound return when the account funds a transfer, a user cancellation when it's a quote destination. Both tables now say which one applies, since nothing previously distinguished them.

Also updates the inline suffix list on the ramps sandbox page, which enumerates the same values outside the shared snippet.

Test plan

Prose and table changes only — no OpenAPI edits, so no rebundle. The make lint-markdown target fails in this checkout with Missing script: "lint:markdown", which is pre-existing and unrelated to these files.

Reviewed how the snippets compose on every page that imports them (api-reference, payouts-and-b2b, ramps) and kept the cross-reference positional-independent, so it stays correct if a page reorders them.

Checked the rendered Mintlify preview: the new 006 row and its explanatory note appear in the transfer table, and the updated inline suffix list reads correctly in context.

@mintlify

mintlify Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

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

Project Status Preview Updated
Grid 🟢 Ready View Preview Sep 23, 2026, 12:42 AM

@vercel

vercel Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

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

3 Skipped Deployments
Project Deployment Actions Updated
grid-cards-demo Ignored Ignored Preview Sep 23, 2026 12:40am UTC
grid-flow-builder Ignored Ignored Preview Sep 23, 2026 12:40am UTC
grid-wallet-demo Ignored Ignored Preview Sep 23, 2026 12:40am UTC

Request Review

@ls-bolt ls-bolt Bot added the bolt label Sep 23, 2026
Adds suffix 006 to the transfer pattern table: a deposit that settles and
completes, then is returned about 30 seconds later. The existing table stopped
at 005, so there was no documented way to test money arriving and then being
taken back.

Names the failure reason a returned payout now reports on the quote table's 005
row, and says which table applies to which account role, since 006 means a late
inbound return for a funding account and a user cancellation for a quote
destination.

Co-Authored-By: akanter <akanter@users.noreply.github.com>
@ls-bolt
ls-bolt Bot force-pushed the 09-23-sandbox-late-return-suffix branch from af5c4fc to 3a52ea5 Compare September 23, 2026 00:40

Copy link
Copy Markdown

This stack of pull requests is managed by Graphite. Learn more about stacking.

@akanter akanter closed this Sep 23, 2026
akanter added a commit that referenced this pull request Sep 30, 2026
…ix (#1054)

## Summary

The sandbox suffix tables had no documented way to test the case that most often surprises an integration: money that arrives, settles, looks final, and is then taken back by the originating bank.

Adds **`009`** to the quote patterns as a **source-side** suffix. When a quote pulls funds from an external account ending in `009`, the pull settles and the transaction completes. About 30 seconds later the originating bank returns it, the credited balance is taken back, and the transaction moves to `FAILED`. The note explains why that ordering matters: the deposit completes first, so any logic treating a completed incoming payment as final runs before the return arrives. It also names the two webhooks you receive, in order: `INCOMING_PAYMENT.COMPLETED`, then `INCOMING_PAYMENT.FAILED`. Embedded Wallet destinations are excluded, since sandbox does not simulate the return for them.

It is a new number because every quote suffix from `002` to `008` already means something for a payout destination.

## The suffix tables apply to different account roles

A single set of suffixes means **two different things** depending on which side of a quote the account sits on, and nothing in the docs said so.

- The transfer table covers an account that **funds an incoming transfer**. The quote table covers one that is the **destination of a payout**, plus the `009` source suffix.
- Both tables now state their role up front, and the two pages that introduced the transfer table no longer claim it applies "whether you are pushing funds to it or pulling funds from it" — which was wrong for `002`–`005`.
- The ramps page renders the quote table too, so the off-ramp destination case is documented where a reader needs it.

The error-scenario walkthroughs had the same confusion, using an account as a quote **destination** while labelling it with transfer meanings:

- **Ramps "Failed conversions"** — `002` is a quote execution failure (and it fails on the way to settlement, not on the execute call as the page claimed), `003` is the ~6-minute long payment.
- **Payouts "Testing Error Scenarios"** — its pull scenario was correct; its two push scenarios were not. Those now use `004` and `005` with the outcomes a payout destination produces.
- **Payouts "Sandbox Limitations"** — the instant-settlement bullet now lists each delayed outcome with its table, including `009`.

Also names `PAYOUT_RETURNED` on the quote table's `005` row.

## Terminology

`009` is described as **"Return after settlement"**, not "late return". "Late return" is a NACHA term for a return sent past the two-business-day window, which generally requires a warranty claim. This suffix simulates a return arriving after the deposit settled, with no deadline modelled either way.

## Test plan

Prose and table changes only — no OpenAPI edits, so no rebundle.

- Verified the `009` outcome against the sandbox implementation: the suffix is read from the quote's source account, the return fails the transaction, and a quote crediting an internal account emits `INCOMING_PAYMENT.COMPLETED` then `INCOMING_PAYMENT.FAILED`.
- Verified the `002`/`003` quote-destination behaviour against the sandbox suffix map.
- `mint broken-links` reports the same results with and without this change.

Original PR: #1052

This branch was successfully deployed

1 active deployment
staging - mintlify — 3a52ea54 Deployed Sep 23, 2026 by mintlify[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants