docs: correct the ownership challenge behavior and list its account statuses - #898
docs: correct the ownership challenge behavior and list its account statuses#898shreyav wants to merge 3 commits into
Conversation
…tatuses Two claims on the challenge endpoints did not match what the API does, in both the customer and platform trees: - "Calling this endpoint again abandons any in-flight challenge". It returns the outstanding challenge unchanged instead, with the same messageToSign and expiresAt, so reloading a signing page does not invalidate the message the user is about to sign. - "An UNVERIFIED account returns to PENDING_OWNERSHIP_VERIFICATION when a new challenge is issued". It stays UNVERIFIED until a retry succeeds. Both were verified against the dev Striga platform. The endpoint descriptions now state the actual behavior, and note that requesting LIVENESS starts a liveness attempt even while a signature challenge is outstanding. The account status tables listed neither PENDING_OWNERSHIP_VERIFICATION nor UNVERIFIED, and the ramps table implied that any status other than ACTIVE cannot transact. Transfers below the regulatory threshold go through while a wallet is pending, so that table told integrators to build a block Grid does not impose. Both tables now carry the two statuses and say what they allow. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NrRvhfq3vabYreWe8yvFD1
|
Preview deployment for your docs. Learn more about Mintlify Previews.
|
|
The latest updates on your projects. Learn more about Vercel for GitHub. 2 Skipped Deployments
|
✱ 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-ruby studio · code · diff
✅ grid-kotlin 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. |
Ownership verification is likely to apply outside the EU, so the status notes now
state the rule generally and name the EU as an example, matching how the spec
already phrases region-conditional requirements ("Required in regions that verify
the email address before identity verification (e.g. the EU)"). The earlier
wording made the EU Travel Rule the defining condition.
Also adds the two statuses to the account model page, which carries a third copy
of the external account status list.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NrRvhfq3vabYreWe8yvFD1
The feature shipped with four endpoints, two verification methods, and no prose. `ownershipType`, `PENDING_OWNERSHIP_VERIFICATION` and `vaspName` appeared nowhere in the docs outside the changelog and the generated spec. Adds an Ownership Verification section to the account model page, next to the external account statuses it produces, following how Strong Customer Authentication is documented on the quote it attaches to rather than as a page of its own. Covers both methods, and the three things that are easy to get wrong: the signed message is matched character for character and carries a UTC date good for yesterday, today and tomorrow only; re-requesting a challenge returns the outstanding one rather than a fresh message; and `vaspName` belongs inside `accountInfo`, where at the top level it is ignored and a custodied wallet is treated as self-custody. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NrRvhfq3vabYreWe8yvFD1
Reason
Running the Travel Rule catalog against the dev Striga platform turned up two
endpoint descriptions that do not match what the API does, and two status tables
that omit the ownership statuses entirely.
Two wrong claims, present in both the customer and platform challenge files:
messageToSign, sameexpiresAtUNVERIFIEDaccount returns toPENDING_OWNERSHIP_VERIFICATIONwhen a new challenge is issued"UNVERIFIEDuntil a retry succeedsThe implemented behavior is the better one in the first case: a user who reloads
a signing page gets the same message back rather than invalidating the one they
were about to sign. So the docs move, not the code.
The status tables are incomplete and, in one place, misleading. Neither
snippets/external-accounts.mdxnorramps/accounts/external-accounts.mdxlisted
PENDING_OWNERSHIP_VERIFICATIONorUNVERIFIED. The ramps table has a"Can Use for Conversions" column marking everything other than
ACTIVEas❌,but transfers below the regulatory threshold go through while a wallet is
pending. As written it tells integrators to build a block that Grid does not
impose.
Overview
describe the real behavior, and adds that requesting
LIVENESSstarts aliveness attempt even while a signature challenge is outstanding.
PENDING_OWNERSHIP_VERIFICATIONandUNVERIFIEDto both status tables,with the ramps "can use" column reading "Below the regulatory threshold"
instead of a yes/no that cannot express the real rule.
clear it, naming both verification methods rather than only the signature.
No change to
ExternalAccountStatus.yaml. ItsUNVERIFIEDdescription becameaccurate once webdev #34316 landed: a refused signature now does move the account
there.
Test Plan
make buildthenmake lint— exits 0, zero errors, 55 warnings, which is thesame count as
main. The two informational notices mentioning challenge andownership schemas (
ScaChallenge.factor,OwnershipVerifyRequest.signatureSchememissing examples) are pre-existing and on schemas this PR does not touch.
Behavior confirmed against the dev Striga platform
019fe537-a313-b4db-0000-0f2ac35f082con 2026-09-04:messageToSignandexpiresAt.UNVERIFIED; acorrect signature then moved it to
ACTIVE.PENDING_OWNERSHIP_VERIFICATIONdestination was createdsuccessfully, confirming the status is not a block.
LIVENESSchallenge was issued while a signature challenge was outstanding,and a later signature request still returned the original message.
Follow-up
The feature still has no prose guide.
ownershipType,PENDING_OWNERSHIP_VERIFICATIONandvaspNameappear nowhere in the docsoutside the changelog and the generated spec, despite four endpoints and two
verification methods. Worth a snippet covering the declare, challenge, verify
flow, the UTC date window on the signed message, and the fact that
vaspNamebelongs inside
accountInfo(at the top level it is silently dropped and thewallet is treated as self-custody). Separate PR.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NrRvhfq3vabYreWe8yvFD1