Update transactions and travel rule documentation - #255
Open
ricardobcl wants to merge 2 commits into
Open
Conversation
There was a problem hiding this comment.
Pull request overview
This PR updates the Transactions and Travel Rule API documentation to better match current backend behavior, focusing on scope/authorization semantics, Travel Rule interactions, beneficiary handling, and response/field shapes.
Changes:
- Updates Travel Rule endpoint docs to state missing-scope failures return
400 invalid_scope(instead of 403). - Revises Transactions docs for create/commit scope requirements, Travel Rule requirement fields, reserve transaction authentication, and several transaction/beneficiary/validation details.
- Prunes and refreshes examples/tables to reflect the public masking behavior and current supported transaction networks/destinations.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| _travelrule.md | Updates auth error semantics for insufficient scopes to 400 invalid_scope across Travel Rule endpoints. |
| _transactions.md | Broad documentation refresh: scopes, commit/create behavior, Travel Rule/beneficiary sections, filtering, reserve endpoints, and example payloads. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
ricardobcl
force-pushed
the
support/update-transactions-documentation
branch
from
August 23, 2026 22:37
a132641 to
72eeae3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Fixes significant drift between the Transactions page and the current API behavior, verified against
uphold/backendmaster. This is the largest correction of the documentation-audit follow-ups._transactions.mdinvalid_beneficiaryerrors anymore. The backend persists onlyrelationship(free-form, 1–255 chars) —nameandaddressare stripped;email+nameare kept only for Interac withdrawals; ACH withdrawals are always recorded asrelationship: myself. Crypto-withdrawal originator/beneficiary data is collected via the Travel Rule endpoints, now cross-linked.?validate=trueis documented as generic quote validation plus commit-time scope/OTP checks.transactions:depositis not accepted at route level (a token holding only it fails withinvalid_scope); the route scopes are the transfer/withdraw/write set, with the deposit scope checked per transaction type after route authorization.GET /v0/reserve/transactionsrequires an OAuth token from anauthorization_codeclient with thereserve:readscope — not the previously claimed "API key" (which is defined nowhere); the sample now carries an Authorization header.GET /v0/reserve/transactions/:idis explicitly documented as requiring no authentication.message,network,normalized,CardId,description, origin/destinationtype,denomination.pair/rate,params.progress/ttl/type; addedapplicationandpriority).fastis no longer Dash-only: it enables instant US bank (ACH) withdrawals; on Dash it buys a higher network fee.securityCodefor card deposits is accepted as optional by this API ("may be required" — the card gateway can still require it).?commit=true; commit-time overrides (beneficiary,purpose,referencebesidesmessage); thedenomination.targetparameter;?q=filters on List User Transactions (createdAtcomparisons/ranges, origin/destination card ids withOR);requirements/requirementsDetailsappearing only on uncommitted transactions, with the optionalreasonfield.OTP-Token: Required→ lowercaserequired(matching the header the API actually sends), noted the OTP challenge can occur at create time with?commit=true, and several typos._travelrule.mdinvalid_scopeerror, not the documented 403 (all three endpoints).Notes for reviewers
amount/threshold) and the possiblerequirementsDetails.reasonvalues are owned by risk-assessment-service and proxied verbatim; they could not be verified fromuphold/backend(its test mocks disagree with the documented flat-string shape). Worth confirming with that team — not changed here.GET /v0/me/transactions/:id,GET /v0/me/transactions/:id/sources,GET /v0/reserve/transactions/:id/sources. Same for the exotic create parametersttlMilliseconds,order,parentTransactionId,recurringTypeandredirectUri.Related issues
Follow-up to #250 (documentation audit against
uphold/backendmaster).Impacted areas
Transactions and Travel Rule pages of the API reference.
Steps to reproduce or test
Development
Every claim was traced to the enforcing code in
uphold/backendmaster (card/transaction/reserve/travel-rule controllers,transaction-beneficiary-service.js,transaction-scope-resolver.js, quote and transaction models and their tests).QA
Render both pages; optionally verify against sandbox that an uncommitted create returns 202, that a deposit-only-scoped token is rejected with
invalid_scope, and that beneficiaryname/addressare not persisted.Checklist
Breaking Changeif it applies.package.json.Deploy notes
N/A — no files added or removed, so no slate index changes are needed.
🤖 Generated with Claude Code