Skip to content

Document USD payouts to Chinese suppliers - #64

Open
hallstain wants to merge 7 commits into
mainfrom
china-usd-payouts
Open

hallstain wants to merge 7 commits into
mainfrom
china-usd-payouts

Conversation

@hallstain

@hallstain hallstain commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

What this adds

  • api-reference/china-usd-payments.md, which covers USD payments to Chinese suppliers:
    • beneficiary fields, including a SWIFT/BIC of 8–13 letters and digits;
    • the account rules and the route each one takes (a 6–23-character field; NRA/OSA is the prefix followed by exactly 20 digits, onshore is exactly 20 digits);
    • the refusals a bill preflight and bill create can return: CHINA_USD_ACCOUNT_UNCONFIRMED, CHINA_USD_AMOUNT_OUT_OF_RANGE below USD 25, CHINA_USD_INVOICE_CHANNEL_UNAVAILABLE, and INVOICE_DOCUMENT_REQUIRED when an NRA/OSA bill names no invoice_document_id;
    • invoice documents, with the query parameters every read and delete requires, the 8 MiB limit and the 409 on a byte conflict;
    • how discovery describes the rail: payout-only, with the business schema in its top-level fields;
    • timing and returns;
    • that partner quote and initiate stay closed for USD to China while read-only estimates follow the rollout.
  • A link to the new page from the API reference index.
  • A changelog entry.

Before merging

Merging publishes the docs.

  • Changelog date. Replace "Unreleased" in the changelog heading with the release date.
  • Bill-payment endpoints. Confirm the /api/v1/bill-payment/* endpoints belong on this page.

Checks

  • redocly lint reports the same findings as on main.

🤖 Generated with Claude Code

hallstain and others added 7 commits September 16, 2026 13:07
Adds the reference page for paying a Chinese company in USD over the
`usd-wire-china` network: the bank contract and its field constraints, the
USD 25 minimum, onshore domestic USD versus NRA/OSA over SWIFT with the
original invoice up front, the invoice document endpoints, and the rollout
state a client reads (`provider_confirmation_pending`,
`CHINA_USD_INVOICE_CHANNEL_UNAVAILABLE`). The partner quote/initiate for
USD to CN stays closed and the page says so.

The page is linked from the API reference index, and the changelog gets a
China USD entry.

The spec gains `directions` on a payment rail. It was already returned and
already filtered discovery, but was undocumented.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… confirmed them

The provider corrected the onshore account length: it is 20 digits, not 10,
which was a typo in their earlier answer. An NRA or OSA account is that
three-character prefix followed by 20 digits and goes over SWIFT only.

Domestic USD is not same-day in every case. It usually arrives the same
working day when sent before about 3pm Singapore time, and a public holiday
in Singapore or China moves it to the next working day.

A payment the beneficiary's bank returns is refunded by hand, which can take
up to 7 days.

The corridor has no per-payment volume limit, so the maximum comes from the
executable quote alone.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…akes exactly 20 digits

An NRA/OSA account is its three-letter prefix followed by 20 digits, which
the 6–20 bound could not describe. A prefix followed by anything else is
saved but refused at execution, like any other unconfirmed format.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The supported-currencies and supported-payment-rails responses do not read
a network's `directions`, and rails carry no such property. Say that
usd-wire-china is payout-only instead, and remove the claim from the
changelog and the Rails schema.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
GET, GET /content and DELETE refuse a request without
recipient_destination_id and payout_currency, and a retained invoice is
read through its bill_id. The identifier must be the canonical
lowercase UUID, the limit is 8 MiB, and a byte conflict returns 409
invoice_document_mismatch.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Preflight and POST /bills refuse an NRA/OSA account without
invoice_document_id once the invoice channel is confirmed, and refuse
an amount below USD 25 with CHINA_USD_AMOUNT_OUT_OF_RANGE. Both
endpoints spell the unconfirmed-account code in upper case.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The payment-rails response has no beneficiary type field, so a client
waiting for beneficiary_type on usd-wire-china never gets it. Say the
rail's top-level fields are the business schema instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant