Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer’s own card.
The customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers 202 with a USE_STORED_CARD action in PENDING_APPROVAL; once it is APPROVED, call again with only its actionId to collect the link. A use with needsCvc always waits, since the customer enters the security code when approving.
An approved use answers 200 with a single-use detailsUrl, valid for five minutes. The number reaches the agent through Evervault’s Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same actionId is refused with 409.
Every use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with 429 RATE_LIMITED. Requires the USE_STORED_CARDS permission and the customer’s permission for this agent to use the card.
Bearer token authentication for agent-scoped endpoints. The token is the accessToken returned when redeeming a device code via POST /agents/device-codes/redeem. Agent credentials are user-scoped: all requests are automatically bound to the agent's associated customer and subject to the agent's policy.
Either the purchase the agent wants the card for (merchant, amount, currency, purpose and optionally needsCvc), or actionId alone, to collect the link for a use the customer has since approved.
Where the card will be used: the merchant's website host (for example example-store.com) or name. Shown to the customer and used to match merchants they chose to auto-approve. Supplied by the agent and not verified by Grid.
The amount the agent expects to be charged, in the smallest unit of currency. Shown to the customer. Grid cannot enforce it: the charge is made by the merchant on the customer's own card.
Whether the checkout asks for the card's security code. Grid never stores it, so the customer enters it when approving: a use with needsCvc always waits for approval.
Example:
true
Response
Link issued
A single-use link to the card's details. Open detailsUrl once, right away, where the purchase is being made; it answers once and expires at expiresAt. The number reaches the agent through Evervault's Relay, which decrypts it on the way: Grid never sends it. Never store or log the URL or what it returns.
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"Lightspark Docs","description":"Lightspark Grid is an API for global payments across fiat, stablecoins, and Bitcoin. This documentation helps developers understand the Grid API and integrate with it.","colors":{"primary":"#1A1A1A","light":"#f0f0ee","dark":"#00B3E0"},"logo":{"light":"https://mintcdn.com/ramps/ujGiXSzMzyTCK9Q8/logo/light.svg?fit=max\u0026auto=format\u0026n=ujGiXSzMzyTCK9Q8\u0026q=85\u0026s=ecb69e0221bbec6bea0813e362b34d22","dark":"https://mintcdn.com/ramps/ujGiXSzMzyTCK9Q8/logo/dark.svg?fit=max\u0026auto=format\u0026n=ujGiXSzMzyTCK9Q8\u0026q=85\u0026s=d717317ca2a5e000b257229762d61352"},"favicon":{"light":"https://mintcdn.com/ramps/iSnT-NB4iMMUe72B/favicon-light.svg?fit=max\u0026auto=format\u0026n=iSnT-NB4iMMUe72B\u0026q=85\u0026s=f58f2239347fae3b1649e24b1c2c617a","dark":"https://mintcdn.com/ramps/iSnT-NB4iMMUe72B/favicon-dark.svg?fit=max\u0026auto=format\u0026n=iSnT-NB4iMMUe72B\u0026q=85\u0026s=d9a2cd1341660e8e49039a826dfd9ec8"},"api":{"playground":{"display":"interactive"},"examples":{"defaults":"all","languages":["curl","javascript","kotlin"],"prefill":true}},"background":{"color":{"light":"#F8F8F7","dark":"#000000"}},"navbar":{"links":[{"icon":"github","href":"https://github.com/lightsparkdev/grid-api","label":"GitHub"},{"href":"https://www.lightspark.com/contact","label":"Book a live demo"},{"href":"https://app.lightspark.com/login","label":"Dashboard"}]},"footer":{},"seo":{},"fonts":{"heading":{"family":"Suisse Intl","weight":500,"source":"fonts/suisse-intl/SuisseIntl-Medium.woff2","format":"woff2"},"body":{"family":"Suisse Intl","weight":400,"source":"fonts/suisse-intl/SuisseIntl-Regular.woff2","format":"woff2"}},"integrations":{"amplitude":{"apiKey":"7f2e340589501177fa6f8a5cc7b6bc51"},"gtm":{"tagId":"GTM-5R5NP3DS"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/ramps/XS9HmdN416idhWpQ/images/og/og-api-reference-generic.png?fit=max\u0026auto=format\u0026n=XS9HmdN416idhWpQ\u0026q=85\u0026s=c7ee8876de4e6c3cd9e9014a7f4a37b4"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ramps","hasAudioNarration":false,"actualSubdomain":"ramps","customDomains":["docs.lightspark.com"],"gitSource":{"type":"github","owner":"lightsparkdev","repo":"grid-api","deployBranch":"main","contentDirectory":"mintlify","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aee889f4f6fcf7ca462cdf6","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":251},{"language":"default","tag":"API documentation","count":245},{"language":"default","tag":"Cards","count":35},{"language":"default","tag":"Agent Operations","count":33},{"language":"default","tag":"Payouts \u0026 B2B","count":30},{"language":"default","tag":"Global Accounts","count":29},{"language":"default","tag":"Overview","count":26},{"language":"default","tag":"Agent Management","count":24},{"language":"default","tag":"Global P2P","count":23},{"language":"default","tag":"Strong Customer Authentication","count":22}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","href":"/_mintlify/custom/ramps/1d0cf883a2567caa/style.css"}],"page":{"pagePath":"api-reference/agent-operations/ask-for-a-stored-cards-details","slug":"/api-reference/agent-operations/ask-for-a-stored-cards-details","pageMetadata":{"title":"Ask for a stored card's details","description":"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer's own card.\n\nThe customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers `202` with a `USE_STORED_CARD` action in `PENDING_APPROVAL`; once it is `APPROVED`, call again with only its `actionId` to collect the link. A use with `needsCvc` always waits, since the customer enters the security code when approving.\n\nAn approved use answers `200` with a single-use `detailsUrl`, valid for five minutes. The number reaches the agent through Evervault's Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same `actionId` is refused with `409`.\n\nEvery use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with `429 RATE_LIMITED`. Requires the USE_STORED_CARDS permission and the customer's permission for this agent to use the card.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/stored-cards/{storedCardId}/reveal","href":"/api-reference/agent-operations/ask-for-a-stored-cards-details","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer’s own card.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers \", _jsx(_components.code, {\n children: \"202\"\n }), \" with a \", _jsx(_components.code, {\n children: \"USE_STORED_CARD\"\n }), \" action in \", _jsx(_components.code, {\n children: \"PENDING_APPROVAL\"\n }), \"; once it is \", _jsx(_components.code, {\n children: \"APPROVED\"\n }), \", call again with only its \", _jsx(_components.code, {\n children: \"actionId\"\n }), \" to collect the link. A use with \", _jsx(_components.code, {\n children: \"needsCvc\"\n }), \" always waits, since the customer enters the security code when approving.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"An approved use answers \", _jsx(_components.code, {\n children: \"200\"\n }), \" with a single-use \", _jsx(_components.code, {\n children: \"detailsUrl\"\n }), \", valid for five minutes. The number reaches the agent through Evervault’s Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same \", _jsx(_components.code, {\n children: \"actionId\"\n }), \" is refused with \", _jsx(_components.code, {\n children: \"409\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Every use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with \", _jsx(_components.code, {\n children: \"429 RATE_LIMITED\"\n }), \". Requires the USE_STORED_CARDS permission and the customer’s permission for this agent to use the card.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Ask for a stored card's details","description":"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer's own card.\n\nThe customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers `202` with a `USE_STORED_CARD` action in `PENDING_APPROVAL`; once it is `APPROVED`, call again with only its `actionId` to collect the link. A use with `needsCvc` always waits, since the customer enters the security code when approving.\n\nAn approved use answers `200` with a single-use `detailsUrl`, valid for five minutes. The number reaches the agent through Evervault's Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same `actionId` is refused with `409`.\n\nEvery use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with `429 RATE_LIMITED`. Requires the USE_STORED_CARDS permission and the customer's permission for this agent to use the card.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/stored-cards/{storedCardId}/reveal","href":"/api-reference/agent-operations/ask-for-a-stored-cards-details","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/ramps/7ebeec8d40dffb19/homepage.js","/_mintlify/custom/ramps/c0c92bf66eb04c41/sidebar-toggle.js","/_mintlify/custom/ramps/46fa8cc4a502b704/css-perf-patch.js","/_mintlify/custom/ramps/da7b02c7798913d5/corridor-fields.js"],"openApiReferenceData":{"operation":{"summary":"Ask for a stored card's details","description":"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer's own card.\n\nThe customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers `202` with a `USE_STORED_CARD` action in `PENDING_APPROVAL`; once it is `APPROVED`, call again with only its `actionId` to collect the link. A use with `needsCvc` always waits, since the customer enters the security code when approving.\n\nAn approved use answers `200` with a single-use `detailsUrl`, valid for five minutes. The number reaches the agent through Evervault's Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same `actionId` is refused with `409`.\n\nEvery use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with `429 RATE_LIMITED`. Requires the USE_STORED_CARDS permission and the customer's permission for this agent to use the card.\n","operationId":"agentRevealStoredCard","tags":["Agent Operations"],"security":["bc114bec-1883-4e5b-8c8f-d2a491e0a501"],"requestBody":"46e4b023-fe45-4075-83ca-cf116b86cf71","responses":{"200":"57f59830-2e34-42a7-af03-1d75d64c6482","202":"13cbb940-a4ca-4c0d-a646-fe9c2ff047d5","400":"cccac967-7331-4f20-b8f5-0b47ff468469","401":"2f53ff55-7816-4d47-b49a-3e0c45db38cc","403":"326f2610-1dcf-4a28-a81d-c6ed08a8159f","404":"2b5ac965-9995-4363-9b65-238b5f6dd972","409":"8c7c3f7c-e1be-446e-9611-6ace2d598c05","429":"bd999a0f-76c7-498b-ad9d-a2acce651c89","500":"4608b76c-e2e8-46f5-bb18-8c4657cab0cd"},"method":"post","type":"path","servers":["b65ea8aa-b4dc-4313-b492-d17545120bef"],"path":"/agents/me/stored-cards/{storedCardId}/reveal","baseUrlOptions":["https://api.lightspark.com/grid/2025-10-13"],"title":"Ask for a stored card's details","codeSamples":[],"requestExampleLanguages":["bash","javascript","kotlin"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.actionId":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","body.merchant":"example-store.com","body.amount":4999,"body.currency":"USD","body.purpose":"Running shoes, size 10","body.needsCvc":true}]},"dependencies":{"parameters":{"97ce2da1-df5e-4134-811d-4d7f50e87e01":{"name":"storedCardId","in":"path","description":"System-generated unique stored card identifier","required":true,"schema":{"type":"string","isRequired":true,"description":"System-generated unique stored card identifier","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Either the purchase the agent wants the card for (`merchant`, `amount`, `currency`, `purpose` and optionally `needsCvc`), or `actionId` alone, to collect the link for a use the customer has since approved.","properties":{"actionId":{"type":"string","maxLength":64,"description":"An `APPROVED` `USE_STORED_CARD` action of this agent for this card whose link has not been issued yet. Sent alone.","example":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","uniqueKey":"actionId","typeLabel":"string"},"merchant":{"type":"string","minLength":1,"maxLength":255,"description":"Where the card will be used: the merchant's website host (for example `example-store.com`) or name. Shown to the customer and used to match merchants they chose to auto-approve. Supplied by the agent and not verified by Grid.","example":"example-store.com","uniqueKey":"merchant","typeLabel":"string"},"amount":{"type":"integer","format":"int64","minimum":1,"description":"The amount the agent expects to be charged, in the smallest unit of `currency`. Shown to the customer. Grid cannot enforce it: the charge is made by the merchant on the customer's own card.","example":4999,"uniqueKey":"amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 code of `amount`.","example":"USD","uniqueKey":"currency","typeLabel":"string"},"purpose":{"type":"string","minLength":1,"maxLength":255,"description":"What the purchase is, shown to the customer.","example":"Running shoes, size 10","uniqueKey":"purpose","typeLabel":"string"},"needsCvc":{"type":"boolean","description":"Whether the checkout asks for the card's security code. Grid never stores it, so the customer enters it when approving: a use with `needsCvc` always waits for approval.","example":true,"uniqueKey":"needsCvc","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"actionId":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","merchant":"example-store.com","amount":4999,"currency":"USD","purpose":"Running shoes, size 10","needsCvc":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"57f59830-2e34-42a7-af03-1d75d64c6482":{"description":"Link issued","content":{"application/json":{"schema":{"type":"object","description":"A single-use link to the card's details. Open `detailsUrl` once, right away, where the purchase is being made; it answers once and expires at `expiresAt`. The number reaches the agent through Evervault's Relay, which decrypts it on the way: Grid never sends it. Never store or log the URL or what it returns.","required":["detailsUrl","expiresAt","actionId","cvcIncluded","card","holderName","billingAddress"],"properties":{"detailsUrl":{"type":"string","format":"uri","maxLength":2048,"description":"The single-use link. It answers JSON with `number`, `expiryMonth`, `expiryYear`, `holderName` and, when `cvcIncluded`, `cvc`.","example":"https://relay.example.com/grid/2025-10-13/stored-card-reveals/abc","isRequired":true,"uniqueKey":"detailsUrl","typeLabel":"string\u003curi>"},"expiresAt":{"type":"string","format":"date-time","description":"When the link stops working, five minutes after it is issued.","example":"2026-11-06T15:05:00Z","isRequired":true,"uniqueKey":"expiresAt","typeLabel":"string\u003cdate-time>"},"actionId":{"type":"string","maxLength":64,"description":"The `USE_STORED_CARD` action that records this use.","example":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","isRequired":true,"uniqueKey":"actionId","typeLabel":"string"},"cvcIncluded":{"type":"boolean","description":"Whether the link also returns the security code the customer entered when approving.","example":false,"isRequired":true,"uniqueKey":"cvcIncluded","typeLabel":"boolean"},"card":{"type":"object","description":"A stored card the agent may use: its display fields only. The number is reached only through `POST /agents/me/stored-cards/{storedCardId}/reveal`.","required":["id","lastFour","brand","funding","expiryMonth","expiryYear"],"properties":{"lastFour":{"type":"string","pattern":"^[0-9]{4}$","minLength":4,"maxLength":4,"description":"Last four digits of the card number.","example":"0005","isRequired":true,"uniqueKey":"card.lastFour","typeLabel":"string"},"brand":{"type":"string","maxLength":32,"description":"The card network, from the issuer's BIN data. Known values: `VISA`, `MASTERCARD`, `AMERICAN_EXPRESS`, `DISCOVER`, `DINERS_CLUB`, `JCB`, `UNIONPAY`, `UNKNOWN`. Treat an unrecognized value as `UNKNOWN` rather than an error.","example":"VISA","isRequired":true,"uniqueKey":"card.brand","typeLabel":"string"},"funding":{"type":"string","maxLength":32,"description":"How the card is funded, from the issuer's BIN data. Known values: `CREDIT`, `DEBIT`, `PREPAID`, `CHARGE`, `DEFERRED_DEBIT`, `UNKNOWN`. Treat an unrecognized value as `UNKNOWN` rather than an error.","example":"CREDIT","isRequired":true,"uniqueKey":"card.funding","typeLabel":"string"},"expiryMonth":{"type":"integer","minimum":1,"maximum":12,"description":"Expiry month, 1 to 12.","example":8,"isRequired":true,"uniqueKey":"card.expiryMonth","typeLabel":"integer"},"expiryYear":{"type":"integer","minimum":2000,"maximum":2199,"description":"Four-digit expiry year.","example":2029,"isRequired":true,"uniqueKey":"card.expiryYear","typeLabel":"integer"},"id":{"type":"string","maxLength":64,"description":"System-generated unique identifier of the stored card.","example":"StoredCard:019542f5-b3e7-1d02-0000-000000000077","isRequired":true,"uniqueKey":"card.id","typeLabel":"string"},"issuerCountry":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country of the card's issuer, when the BIN data names one.","example":"US","uniqueKey":"card.issuerCountry","typeLabel":"string"},"nickname":{"type":"string","maxLength":64,"description":"The customer's own label for the card.","example":"Personal Visa","uniqueKey":"card.nickname","typeLabel":"string"}},"isRequired":true,"uniqueKey":"card","typeLabel":"object"},"holderName":{"type":"string","maxLength":255,"description":"The name on the card, for the checkout form.","example":"Jane Doe","isRequired":true,"uniqueKey":"holderName","typeLabel":"string"},"billingAddress":{"type":"object","required":["line1","postalCode","country"],"properties":{"line1":{"type":"string","description":"Street address line 1","example":"123 Main Street","isRequired":true,"uniqueKey":"billingAddress.line1","typeLabel":"string"},"postalCode":{"type":"string","description":"Postal/ZIP code","example":"94105","isRequired":true,"uniqueKey":"billingAddress.postalCode","typeLabel":"string"},"country":{"type":"string","description":"Country code (ISO 3166-1 alpha-2)","example":"US","isRequired":true,"uniqueKey":"billingAddress.country","typeLabel":"string"},"line2":{"type":"string","description":"Street address line 2","example":"Apt 4B","uniqueKey":"billingAddress.line2","typeLabel":"string"},"city":{"type":"string","description":"City","example":"San Francisco","uniqueKey":"billingAddress.city","typeLabel":"string"},"state":{"type":"string","description":"State/Province/Region","example":"CA","uniqueKey":"billingAddress.state","typeLabel":"string"}},"description":"The card's billing address, for the checkout form.","isRequired":true,"uniqueKey":"billingAddress","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detailsUrl":"https://relay.example.com/grid/2025-10-13/stored-card-reveals/abc","expiresAt":"2026-11-06T15:05:00Z","actionId":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","cvcIncluded":false,"card":{"lastFour":"0005","brand":"VISA","funding":"CREDIT","expiryMonth":8,"expiryYear":2029,"id":"StoredCard:019542f5-b3e7-1d02-0000-000000000077","issuerCountry":"US","nickname":"Personal Visa"},"holderName":"Jane Doe","billingAddress":{"line1":"123 Main Street","postalCode":"94105","country":"US","line2":"Apt 4B","city":"San Francisco","state":"CA"}}}},"exampleType":"generated"}},"exampleType":"generated"},"13cbb940-a4ca-4c0d-a646-fe9c2ff047d5":{"description":"The use waits for the customer's approval","content":{"application/json":{"schema":{"type":"object","description":"An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.","required":["id","agentId","customerId","platformCustomerId","status","type","expiresAt","createdAt","updatedAt"],"properties":{"id":{"type":"string","description":"System-generated unique identifier for this action.","example":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"agentId":{"type":"string","description":"The agent that submitted this action.","example":"Agent:019542f5-b3e7-1d02-0000-000000000042","isRequired":true,"uniqueKey":"agentId","typeLabel":"string"},"customerId":{"type":"string","description":"The customer on whose behalf the action was submitted.","example":"Customer:019542f5-b3e7-1d02-0000-000000000010","isRequired":true,"uniqueKey":"customerId","typeLabel":"string"},"platformCustomerId":{"type":"string","description":"Platform-specific ID of the customer.","example":"user-a1b2c3","isRequired":true,"uniqueKey":"platformCustomerId","typeLabel":"string"},"status":{"type":"string","enum":["PENDING_APPROVAL","APPROVED","REJECTED","FAILED"],"description":"Status of an agent action.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution |\n| `APPROVED` | Approved by the platform; execution is in progress or completed |\n| `REJECTED` | Rejected by the platform; the underlying transaction was not executed |\n| `FAILED` | Not executed, or execution failed; see `failureReason` |\n","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["EXECUTE_QUOTE","ISSUE_PURCHASE_CARD","CLAIMABLE_PAYOUT","USE_STORED_CARD"],"description":"The type of action the agent is requesting.\n\n| Type | Description |\n|------|-------------|\n| `EXECUTE_QUOTE` | Execute a quote |\n| `ISSUE_PURCHASE_CARD` | Issue a purchase card: single-use, or recurring when `purchaseCard.recurring` is `true`. When `purchaseCard.increaseCardId` is set, raise the amount of that existing single-use card instead of issuing one. See `purchaseCard` |\n| `CLAIMABLE_PAYOUT` | Send a claimable payout to a person by phone number or email. See `claimablePayout` |\n| `USE_STORED_CARD` | Use one of the customer's stored cards for a purchase. See `storedCardUse` |\n","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"expiresAt":{"type":"string","format":"date-time","description":"When the action expires. For an `EXECUTE_QUOTE` action with `priceTolerance`, this is the end of the platform's approval window, independent of the quote's own expiry: approval executes a live quote and quotes the send again once it has expired, and a pending action that reaches this time fails with `APPROVAL_EXPIRED`. For any other `EXECUTE_QUOTE` action, this is the quote's own expiry; a pending action that reaches it fails with `QUOTE_EXPIRED`, and approval never creates a replacement quote. For `ISSUE_PURCHASE_CARD` and `USE_STORED_CARD`, this is the end of the approval window, after which a pending action fails with `APPROVAL_EXPIRED`.","example":"2025-10-03T15:05:00Z","isRequired":true,"uniqueKey":"expiresAt","typeLabel":"string\u003cdate-time>"},"createdAt":{"type":"string","format":"date-time","description":"When the action was submitted by the agent.","example":"2025-10-03T15:00:00Z","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"When the action was last updated.","example":"2025-10-03T15:02:00Z","isRequired":true,"uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time>"},"quote":{"type":"object","title":"Agent Quote","description":"The quote being executed. Contains the full amount, currency, destination, and rate details needed to present an approval decision to the user. Present for `EXECUTE_QUOTE`.","required":["id","status","expiresAt","createdAt","source","destination","sendingCurrency","receivingCurrency","totalSendingAmount","totalReceivingAmount","exchangeRate","feesIncluded","transactionId"],"properties":{"id":{"type":"string","description":"Unique identifier for this quote","example":"Quote:019542f5-b3e7-1d02-0000-000000000006","isRequired":true,"uniqueKey":"quote.id","typeLabel":"string"},"status":{"type":"string","enum":["PENDING","PENDING_AUTHORIZATION","PROCESSING","COMPLETED","FAILED","EXPIRED"],"description":"Current status of the quote. `PENDING_AUTHORIZATION` occurs only for customers in a region where Strong Customer Authentication is required (e.g. EU): the quote carries an `scaChallenge` that must be authorized before execution, and for realtime-funding sources `paymentInstructions` are withheld until it is satisfied.","example":"PENDING","isRequired":true,"uniqueKey":"quote.status","typeLabel":"enum\u003cstring>"},"createdAt":{"type":"string","format":"date-time","description":"When this quote was created","example":"2025-10-03T12:00:00Z","isRequired":true,"uniqueKey":"quote.createdAt","typeLabel":"string\u003cdate-time>"},"expiresAt":{"type":"string","format":"date-time","description":"Absolute UTC timestamp when the rate locked in this quote becomes invalid and the quote can no longer be executed. The window depends on the rail and corridor: instant rails (Lightning, Spark, USDC on Solana/Base/Polygon, RTP, SEPA Instant) typically expire in 1–5 minutes; corridors with longer settlement guarantees may have longer windows. Always rely on this timestamp rather than assuming a fixed window.","example":"2025-10-03T12:05:00Z","isRequired":true,"uniqueKey":"quote.expiresAt","typeLabel":"string\u003cdate-time>"},"source":{"oneOf":[{"type":"object","title":"Account","description":"Source account details","required":["accountId","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of quote funding source","enum":["ACCOUNT"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"quote.source.oneOf.0.sourceType","typeLabel":"enum\u003cstring>"},"accountId":{"type":"string","description":"Source account identifier","example":"InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","isRequired":true,"uniqueKey":"quote.source.oneOf.0.accountId","typeLabel":"string"},"customerId":{"type":"string","description":"The customer on whose behalf the transaction is being initiated. Required when funding from a `BULK_SETTLEMENT` account. The customer is never the account owner, because the platform owns the account. When funding from an FBO account, this field is optional. If you omit it, the transaction is initiated on behalf of the platform. For any other account, it defaults to the account owner's customerId.","example":"Customer:019542f5-b3e7-1d02-0000-000000000001","uniqueKey":"quote.source.oneOf.0.customerId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.source.oneOf.0","typeLabel":"Account · object"},{"type":"object","title":"Real-time Funding","description":"Fund the quote using a real-time funding source (RTP, SEPA Instant, Spark, Stables, etc.). This will require manual just-in-time funding using `paymentInstructions` in the response. Because quotes expire quickly, this option is only valid for instant payment methods. Do not try to fund a quote with a non-instant payment method (ACH, etc.).","required":["currency","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of quote funding source","enum":["REALTIME_FUNDING"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"quote.source.oneOf.1.sourceType","typeLabel":"enum\u003cstring>"},"currency":{"type":"string","description":"Currency code for the funding source. See [Supported Currencies](https://docs.lightspark.com/platform-overview/core-concepts/currencies-and-rails) for the full list of supported fiat and crypto currencies.","example":"USD","isRequired":true,"uniqueKey":"quote.source.oneOf.1.currency","typeLabel":"string"},"customerId":{"type":"string","description":"Source customer ID. If this transaction is being initiated on behalf of a customer, this is required. If customerId is not provided, the quote will be created on behalf of the platform itself.","example":"Customer:019542f5-b3e7-1d02-0000-000000000009","uniqueKey":"quote.source.oneOf.1.customerId","typeLabel":"string"},"cryptoNetwork":{"type":"string","description":"The crypto network to use for the funding source. Required when `currency` is a stablecoin (e.g. USDC, USDT). Specifies which network the customer will deposit on, so the correct deposit address can be generated. Example values: `SOLANA`, `ETHEREUM`, `BASE`, `POLYGON`, `TRON`, `PLASMA`, `ARBITRUM`, `SPARK`, `LIGHTNING`, `BITCOIN`.","example":"SOLANA","uniqueKey":"quote.source.oneOf.1.cryptoNetwork","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.source.oneOf.1","typeLabel":"Real-time Funding · object"}],"isRequired":true,"uniqueKey":"quote.source","typeLabel":"Account · object | Real-time Funding · object"},"destination":{"oneOf":[{"type":"object","title":"Account","description":"Destination account details","required":["accountId","destinationType"],"properties":{"destinationType":{"type":"string","description":"Type of payment destination","enum":["ACCOUNT"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"quote.destination.oneOf.0.destinationType","typeLabel":"enum\u003cstring>"},"accountId":{"type":"string","description":"Destination account identifier","example":"ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","isRequired":true,"uniqueKey":"quote.destination.oneOf.0.accountId","typeLabel":"string"},"paymentRail":{"type":"string","description":"The payment rail to use for the transfer. Must be one of the rails supported by the destination account. If not specified, the system will select a default rail.","enum":["ACH","ACH_COLOMBIA","ACH_SAME_DAY","BANK_TRANSFER","BRE_B","CIPS","FAST","FASTER_PAYMENTS","FEDNOW","INSTAPAY","MOBILE_MONEY","NEFT","PAYNOW","PESONET","PIX","RTGS","RTP","SEPA","SEPA_INSTANT","SPEI","SWIFT","UNIONPAY","UPI","WIRE"],"example":"ACH","uniqueKey":"quote.destination.oneOf.0.paymentRail","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.destination.oneOf.0","typeLabel":"Account · object"},{"type":"object","title":"UMA Address","description":"UMA address destination details","required":["umaAddress","destinationType","currency"],"properties":{"destinationType":{"type":"string","description":"Type of payment destination","enum":["UMA_ADDRESS"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"quote.destination.oneOf.1.destinationType","typeLabel":"enum\u003cstring>"},"umaAddress":{"type":"string","maxLength":200,"description":"UMA address of the recipient","example":"$receiver@uma.domain.com","isRequired":true,"uniqueKey":"quote.destination.oneOf.1.umaAddress","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the destination. See [Supported Currencies](https://docs.lightspark.com/platform-overview/core-concepts/currencies-and-rails) for the full list of supported fiat and crypto currencies.","example":"EUR","isRequired":true,"uniqueKey":"quote.destination.oneOf.1.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.destination.oneOf.1","typeLabel":"UMA Address · object"}],"isRequired":true,"uniqueKey":"quote.destination","typeLabel":"Account · object | UMA Address · object"},"sendingCurrency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"quote.sendingCurrency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"quote.sendingCurrency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"quote.sendingCurrency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"quote.sendingCurrency.decimals","typeLabel":"integer"}},"description":"Currency for the sending amount","isRequired":true,"uniqueKey":"quote.sendingCurrency","typeLabel":"object"},"receivingCurrency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"quote.receivingCurrency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"quote.receivingCurrency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"quote.receivingCurrency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"quote.receivingCurrency.decimals","typeLabel":"integer"}},"description":"Currency for the receiving amount","isRequired":true,"uniqueKey":"quote.receivingCurrency","typeLabel":"object"},"totalSendingAmount":{"type":"integer","format":"int64","description":"The total amount that will be sent in the smallest unit of the sending currency (eg. cents).","exclusiveMinimum":0,"example":123010,"isRequired":true,"uniqueKey":"quote.totalSendingAmount","typeLabel":"integer\u003cint64>"},"totalReceivingAmount":{"type":"integer","format":"int64","description":"The total amount that will be received in the smallest unit of the receiving currency (eg. cents).","exclusiveMinimum":0,"example":1000,"isRequired":true,"uniqueKey":"quote.totalReceivingAmount","typeLabel":"integer\u003cint64>"},"exchangeRate":{"type":"number","description":"Number of sending currency units per receiving currency unit. The rate is fee-exclusive: Grid deducts `feesIncluded` from `totalSendingAmount` first, then converts the remainder at this rate to reach `totalReceivingAmount`.","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"quote.exchangeRate","typeLabel":"number"},"feesIncluded":{"type":"integer","format":"int64","description":"The fees associated with the quote in the smallest unit of the sending currency (eg. cents). Note: this value may fluctuate between quotes — some underlying fee components are defined in the receiving currency, so their equivalent in the sending currency moves with the FX rate. The fees shown here are locked only for the lifetime of this quote.","minimum":0,"example":10,"isRequired":true,"uniqueKey":"quote.feesIncluded","typeLabel":"integer\u003cint64>"},"transactionId":{"type":"string","description":"The ID of the transaction created from this quote.","example":"Transaction:019542f5-b3e7-1d02-0000-000000000005","isRequired":true,"uniqueKey":"quote.transactionId","typeLabel":"string"},"platformFeesIncluded":{"type":"integer","format":"int64","description":"The portion of `feesIncluded` collected by the platform (platform-configured transaction fees), in the smallest unit of the sending currency. 0 when the platform has no applicable fee configured. Already included in `feesIncluded`. May be omitted from payloads produced before platform fees existed.","minimum":0,"example":5,"uniqueKey":"quote.platformFeesIncluded","typeLabel":"integer\u003cint64>"},"paymentInstructions":{"type":"array","description":"Payment instructions for executing the payment. This is not required when using an internal account source.","items":{"type":"object","required":["accountOrWalletInfo"],"properties":{"accountOrWalletInfo":{"oneOf":[{"type":"object","title":"USD Bank Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","accountNumber","routingNumber"],"example":{"accountType":"USD_ACCOUNT","accountNumber":"1234567890","routingNumber":"021000021","bankName":"Chase Bank","intermediaryBankName":"JPMorgan Chase Bank","intermediaryRoutingNumber":"021000021","fiToFiInformation":"/BNF/Invoice 4471","bankAccountType":"CHECKING"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["USD_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.accountType","typeLabel":"enum\u003cstring>"},"accountNumber":{"type":"string","description":"The account number of the bank","minLength":1,"maxLength":34,"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.accountNumber","typeLabel":"string"},"routingNumber":{"type":"string","description":"The ABA routing number","example":"021000021","minLength":9,"maxLength":9,"pattern":"^[0-9]{9}$","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.routingNumber","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["ACH","ACH_SAME_DAY","WIRE","RTP","FEDNOW"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Reference code for the payment. On a quote's `paymentInstructions`, include it with the payment, in the memo or remittance information, so Grid can match the payment to the quote. On an internal account's `fundingPaymentInstructions`, the account number is unique to that account and deposits are credited by account number, so the payer doesn't need to include the reference.","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.reference","typeLabel":"string"},"bankName":{"type":"string","description":"The name of the financial institution holding the account. Optional on every rail, and recommended for wires, where it identifies the beneficiary's institution on the payment message. Not checked against `GET /discoveries`.","minLength":1,"maxLength":140,"example":"Chase Bank","uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankName","typeLabel":"string"},"intermediaryBankName":{"type":"string","description":"The name of the intermediary financial institution, for accounts reachable only through a correspondent bank. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"JPMorgan Chase Bank","minLength":1,"maxLength":140,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.intermediaryBankName","typeLabel":"string"},"intermediaryRoutingNumber":{"type":"string","description":"The ABA routing number of the intermediary financial institution. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"021000021","minLength":9,"maxLength":9,"pattern":"^[0-9]{9}$","uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.intermediaryRoutingNumber","typeLabel":"string"},"fiToFiInformation":{"type":"string","description":"Bank-to-bank instructions carried alongside the payment. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"/BNF/Invoice 4471","maxLength":210,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.fiToFiInformation","typeLabel":"string"},"bankAccountType":{"type":"string","description":"Whether the account is a checking or a savings account. Grid uses this to set the ACH transaction code, so a value that does not match the account causes the receiving bank to return a notification of change.","enum":["CHECKING","SAVINGS"],"example":"CHECKING","uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankAccountType","typeLabel":"enum\u003cstring>"},"bankAddress":{"type":"string","description":"The postal address of the financial institution holding the account, on a single line. Optional on every rail, and recommended for wires, where some originating banks require the beneficiary institution's address before they will send.","example":"885 Teaneck Road, Teaneck, NJ 07666","minLength":1,"maxLength":255,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankAddress","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0","typeLabel":"USD Bank Account · object"},{"type":"object","title":"EUR Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","iban"],"example":{"accountType":"EUR_ACCOUNT","iban":"DE89370400440532013000","swiftCode":"DEUTDEFF"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["EUR_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.accountType","typeLabel":"enum\u003cstring>"},"iban":{"type":"string","description":"The IBAN of the bank account","example":"DE89370400440532013000","minLength":15,"maxLength":34,"pattern":"^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{11,30}$","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.iban","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SEPA","SEPA_INSTANT"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Unique reference code that must be included with the payment to properly credit it","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.reference","typeLabel":"string"},"swiftCode":{"type":"string","description":"The SWIFT/BIC code of the bank. When omitted, Grid derives it from the IBAN when possible. Provide it when automatic derivation is unavailable.","example":"DEUTDEFF","minLength":8,"maxLength":11,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.swiftCode","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1","typeLabel":"EUR Account · object"},{"type":"object","title":"SWIFT Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountHolderName","paymentRails","accountType","swiftCode","bankName","country"],"example":{"accountType":"SWIFT_ACCOUNT","country":"NG","swiftCode":"DEUTDEFF","bankName":"Deutsche Bank","accountNumber":"1234567890"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SWIFT_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountType","typeLabel":"enum\u003cstring>"},"country":{"type":"string","description":"The ISO 3166-1 alpha-2 country code of the bank account","example":"NG","minLength":2,"maxLength":2,"pattern":"^[A-Z]{2}$","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.country","typeLabel":"string"},"swiftCode":{"type":"string","description":"The SWIFT/BIC code of the bank","example":"DEUTDEFF","minLength":8,"maxLength":11,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.swiftCode","typeLabel":"string"},"bankName":{"type":"string","description":"The name of the bank","example":"Deutsche Bank","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.bankName","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SWIFT"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.paymentRails","typeLabel":"enum\u003cstring>[]"},"accountHolderName":{"type":"string","description":"The name of the account holder as it must appear on the wire. Remitting banks match this against the beneficiary name field, so payers should copy it exactly.","example":"Acme Exports Pte Ltd","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountHolderName","typeLabel":"string"},"accountNumber":{"type":"string","description":"The bank account number. Required for most corridors. Use iban instead for IBAN-only corridors (e.g. BR, GB).","example":"1234567890","minLength":1,"maxLength":34,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountNumber","typeLabel":"string"},"iban":{"type":"string","description":"The IBAN of the bank account. Required for IBAN-only corridors (e.g. BR, GB). Use accountNumber for all other corridors.","example":"GB29NWBK60161331926819","minLength":15,"maxLength":34,"pattern":"^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{11,30}$","uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.iban","typeLabel":"string"},"bankAddress":{"type":"string","description":"The address of the bank holding the account, when known.","example":"12 Marina Boulevard, Singapore 018982","minLength":1,"maxLength":1024,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.bankAddress","typeLabel":"string"},"reference":{"type":"string","description":"Reference code to include with the payment when present. SWIFT payments are attributed by the destination account number/IBAN, so this account type typically requires no reference.","example":"UMA-Q12345-REF","uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.reference","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2","typeLabel":"SWIFT Account · object"},{"type":"object","title":"MXN Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","clabeNumber"],"example":{"accountType":"MXN_ACCOUNT","clabeNumber":"123456789012345678"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["MXN_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.accountType","typeLabel":"enum\u003cstring>"},"clabeNumber":{"type":"string","description":"The CLABE number of the bank","example":"123456789012345678","minLength":18,"maxLength":18,"pattern":"^[0-9]{18}$","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.clabeNumber","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SPEI"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Unique reference code that must be included with the payment to properly credit it","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.reference","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3","typeLabel":"MXN Account · object"},{"type":"object","title":"BRL Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["qrCode","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BRL_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4.accountType","typeLabel":"enum\u003cstring>"},"qrCode":{"type":"string","description":"A PIX QR code payload that can be used to fund the transaction. This can be rendered as a QR code image or pasted into a PIX-compatible banking app.","minLength":1,"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4.qrCode","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4","typeLabel":"BRL Account · object"},{"type":"object","title":"COP Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["paymentUrl","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["COP_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5.accountType","typeLabel":"enum\u003cstring>"},"paymentUrl":{"type":"string","format":"uri","description":"A payment URL where the customer can complete their COP deposit.","example":"https://payments.example.com/t/abc123","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5.paymentUrl","typeLabel":"string\u003curi>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5","typeLabel":"COP Account · object"},{"type":"object","title":"ARS Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountNumber","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ARS_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6.accountType","typeLabel":"enum\u003cstring>"},"accountNumber":{"type":"string","description":"The static CVU (Clave Virtual Uniforme) bank account number to pay to.","minLength":22,"maxLength":22,"pattern":"^\\d{22}$","example":"0000003100074052501434","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6.accountNumber","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6","typeLabel":"ARS Account · object"},{"type":"object","title":"Spark Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["assetType","address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SPARK_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Spark wallet address","example":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset or configured Spark token currency code","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.assetType","typeLabel":"string"},"invoice":{"type":"string","description":"Invoice for the payment","example":"sparkrt1pgss8ter0fhc4c220f3zftmpz49h8wqte8eg3m5zkrraplgc048jucgszg3ssqgjzqqekv73mmh842yj7drsjwh7t7tz5zt8wf5kghm5v4ehggszppjp5s80cg3qjdzc55g2567tn3lj705hdsr577tg8ah795mlnt6807y657qhkmgfkf9w75p4wz3l8vhua85zdn6ryj32zuj0p00pv2l5z4u47mw6h4s","uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.invoice","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7","typeLabel":"Spark Wallet · object"},{"type":"object","title":"Lightning Invoice","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["invoice","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["LIGHTNING"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8.accountType","typeLabel":"enum\u003cstring>"},"invoice":{"type":"string","description":"Invoice for the payment","example":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8.invoice","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8","typeLabel":"Lightning Invoice · object"},{"type":"object","title":"Bitcoin L1 Deposit Address","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BITCOIN_L1"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"On-chain Bitcoin (L1) deposit address to send funds to","example":"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.address","typeLabel":"string"},"network":{"type":"string","description":"The blockchain network for the deposit address.","enum":["BITCOIN"],"example":"BITCOIN","uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.network","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9","typeLabel":"Bitcoin L1 Deposit Address · object"},{"type":"object","title":"Solana Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SOLANA_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Solana wallet address","example":"4Nd1m6Qkq7RfKuE5vQ9qP9Tn6H94Ueqb4xXHzsAbd8Wg","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10","typeLabel":"Solana Wallet · object"},{"type":"object","title":"Ethereum Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ETHEREUM_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Ethereum L1 wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11","typeLabel":"Ethereum Wallet · object"},{"type":"object","title":"Base Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BASE_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Base eth wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12","typeLabel":"Base Wallet · object"},{"type":"object","title":"Polygon Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["POLYGON_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Polygon eth wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13","typeLabel":"Polygon Wallet · object"},{"type":"object","title":"Arbitrum Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ARBITRUM_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Arbitrum wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14","typeLabel":"Arbitrum Wallet · object"},{"type":"object","title":"Tron Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["TRON_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Tron wallet address","example":"TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDT"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15","typeLabel":"Tron Wallet · object"},{"type":"object","title":"Plasma Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["PLASMA_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Plasma wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDT"],"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16","typeLabel":"Plasma Wallet · object"},{"type":"object","title":"Embedded Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountType","payloadToSign"],"properties":{"accountType":{"type":"string","description":"Discriminator value identifying this as Embedded Wallet payment instructions.","enum":["EMBEDDED_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17.accountType","typeLabel":"enum\u003cstring>"},"payloadToSign":{"type":"string","description":"JSON-encoded transaction signing payload that must be stamped, as-is (byte-for-byte, without re-serialization), with the session private key of a verified authentication credential on the source Embedded Wallet. The resulting Grid wallet signature is passed as the `Grid-Wallet-Signature` header on `POST /quotes/{quoteId}/execute` to authorize the outbound transfer from the wallet.","example":"{\"type\":\"ACTIVITY_TYPE_SIGN_TRANSACTION_V2\",\"timestampMs\":\"1746736509954\",\"organizationId\":\"org_abc123\",\"parameters\":{\"signWith\":\"wallet_abc123def456\",\"unsignedTransaction\":\"ea69b4bf05f775209f26ff0a34a05569180f7936579d5c4af9377ae550194f72\",\"type\":\"TRANSACTION_TYPE_ETHEREUM\"},\"generateAppProofs\":true}","isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17.payloadToSign","typeLabel":"string"}},"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17","typeLabel":"Embedded Wallet · object"}],"isRequired":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].accountOrWalletInfo","typeLabel":"USD Bank Account · object | EUR Account · object | SWIFT Account · object | MXN Account · object | BRL Account · object | COP Account · object | ARS Account · object | Spark Wallet · object | Lightning Invoice · object | Bitcoin L1 Deposit Address · object | Solana Wallet · object | Ethereum Wallet · object | Base Wallet · object | Polygon Wallet · object | Arbitrum Wallet · object | Tron Wallet · object | Plasma Wallet · object | Embedded Wallet · object"},"instructionsNotes":{"type":"string","description":"Additional human-readable instructions for making the payment","example":"Please ensure the reference code is included in the payment memo/description field","uniqueKey":"quote.paymentInstructions.items.[INDEX].instructionsNotes","typeLabel":"string"},"isPlatformAccount":{"type":"boolean","description":"Indicates whether the account is a platform account or a customer account.","example":true,"uniqueKey":"quote.paymentInstructions.items.[INDEX].isPlatformAccount","typeLabel":"boolean"}},"uniqueKey":"quote.paymentInstructions.items.[INDEX]","typeLabel":"object"},"example":[{"accountOrWalletInfo":{"accountType":"USD_ACCOUNT","paymentRails":["ACH","WIRE"],"accountNumber":"1234567890","routingNumber":"021000021","bankName":"Chase Bank","reference":"UMA-Q12345-REF"},"instructionsNotes":"Include reference UMA-Q12345-REF in memo"},{"accountOrWalletInfo":{"accountType":"SPARK_WALLET","assetType":"BTC","address":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","invoice":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs"}}],"uniqueKey":"quote.paymentInstructions","typeLabel":"object[]"},"counterpartyInformation":{"type":"object","description":"Additional information about the counterparty, if available and required by the platform in their configuration.","additionalProperties":true,"example":{"FULL_NAME":"John Sender","BIRTH_DATE":"1985-06-15","NATIONALITY":"DE"},"uniqueKey":"quote.counterpartyInformation","typeLabel":"object"},"rateDetails":{"description":"Details about the rate and fees for the transaction.","type":"object","required":["counterpartyMultiplier","counterpartyFixedFee","gridApiMultiplier","gridApiFixedFee","gridApiVariableFeeRate","gridApiVariableFeeAmount"],"properties":{"counterpartyMultiplier":{"type":"number","format":"double","description":"The underlying multiplier from mSATs to the receiving currency as returned by the counterparty institution.","exclusiveMinimum":0,"example":1.08,"isRequired":true,"uniqueKey":"quote.rateDetails.counterpartyMultiplier","typeLabel":"number\u003cdouble>"},"counterpartyFixedFee":{"type":"integer","format":"int64","description":"The fixed fee charged by the counterparty institution to execute the quote in the smallest unit of the receiving currency (eg. cents).","minimum":0,"example":10,"isRequired":true,"uniqueKey":"quote.rateDetails.counterpartyFixedFee","typeLabel":"integer\u003cint64>"},"gridApiMultiplier":{"type":"number","format":"double","description":"The underlying multiplier from the sending currency to mSATS, including variable fees.","exclusiveMinimum":0,"example":0.925,"isRequired":true,"uniqueKey":"quote.rateDetails.gridApiMultiplier","typeLabel":"number\u003cdouble>"},"gridApiFixedFee":{"type":"integer","format":"int64","description":"The fixed fee charged by the Grid product to execute the quote in the smallest unit of the sending currency (eg. cents).","minimum":0,"example":10,"isRequired":true,"uniqueKey":"quote.rateDetails.gridApiFixedFee","typeLabel":"integer\u003cint64>"},"gridApiVariableFeeRate":{"type":"number","format":"double","description":"The variable fee rate charged by the Grid product to execute the quote as a percentage of the sending currency amount.","minimum":0,"example":0.003,"isRequired":true,"uniqueKey":"quote.rateDetails.gridApiVariableFeeRate","typeLabel":"number\u003cdouble>"},"gridApiVariableFeeAmount":{"type":"number","format":"int64","description":"The variable fee amount charged by the Grid product to execute the quote in the smallest unit of the sending currency (eg. cents). This is the sending amount times gridApiVariableFeeRate.","minimum":0,"example":30,"isRequired":true,"uniqueKey":"quote.rateDetails.gridApiVariableFeeAmount","typeLabel":"number\u003cint64>"}},"uniqueKey":"quote.rateDetails","typeLabel":"object"},"purposeOfPayment":{"type":"string","description":"The purpose of payment the quote was created with. Present only when the quote request set `purposeOfPayment`.","enum":["GIFT","SELF","GOODS_OR_SERVICES","EDUCATION","HEALTH_OR_MEDICAL","REAL_ESTATE_PURCHASE","TAX_PAYMENT","LOAN_PAYMENT","UTILITY_BILL","DONATION","TRAVEL","FAMILY_SUPPORT","SALARY_PAYMENT","EXPORTED_GOODS_PREPAYMENT","EXPORTED_GOODS_POSTPAYMENT","SERVICE_CHARGES","OFFICE_EXPENSES","DELIVERY_FEES","HOTEL_ACCOMMODATION","COMMISSION_ON_GOODS","COMMISSION_ON_SERVICES","ACCOUNTING_SERVICES","EXHIBITION_SERVICES","OTHER"],"uniqueKey":"quote.purposeOfPayment","typeLabel":"enum\u003cstring>"},"documentIds":{"type":"array","description":"IDs of the supporting documents attached to the payment behind this quote, as passed in `documentIds` on `POST /quotes`. Present only when the quote was created with `documentIds`. Grid returns such a quote only after it has attached every document. Call `GET /payment-documents/{paymentDocumentId}` for each document's details, such as its `documentType` and its `ATTACHED` status.","items":{"type":"string","uniqueKey":"quote.documentIds.items.[INDEX]","typeLabel":"string"},"example":["PaymentDocument:019542f5-b3e7-1d02-0000-000000000001","PaymentDocument:019542f5-b3e7-1d02-0000-000000000002","PaymentDocument:019542f5-b3e7-1d02-0000-000000000003"],"uniqueKey":"quote.documentIds","typeLabel":"string[]"},"scaChallenge":{"type":"object","description":"Present only while `status` is `PENDING_AUTHORIZATION`: the Strong Customer Authentication challenge to satisfy before this quote can be executed (or, for realtime-funding sources, before `paymentInstructions` are issued). Omitted for customers outside SCA-regulated regions (non-EU).","required":["id","expiresAt","factor","availableFactors"],"properties":{"id":{"type":"string","description":"Unique identifier for this challenge. The server resolves the active challenge from the quote or transaction being authorized, so this field need not be supplied back; it is informational (e.g. for logging or correlation).","example":"ScaChallenge:019542f5-b3e7-1d02-0000-000000000007","isRequired":true,"uniqueKey":"quote.scaChallenge.id","typeLabel":"string"},"expiresAt":{"type":"string","format":"date-time","description":"Absolute UTC timestamp after which this challenge can no longer be authorized.","example":"2025-10-03T12:05:00Z","isRequired":true,"uniqueKey":"quote.scaChallenge.expiresAt","typeLabel":"string\u003cdate-time>"},"factor":{"type":"string","enum":["SMS_OTP","TOTP","PASSKEY"],"description":"The factor this challenge was issued for. Defaults to `SMS_OTP`.","isRequired":true,"uniqueKey":"quote.scaChallenge.factor","typeLabel":"enum\u003cstring>"},"availableFactors":{"type":"array","description":"The factors the customer may use to satisfy this challenge.","items":{"type":"string","enum":["SMS_OTP","TOTP","PASSKEY"],"description":"A Strong Customer Authentication factor.\n\n| Factor | Description |\n|--------|-------------|\n| `SMS_OTP` | One-time code sent by SMS to the customer's verified phone. Requires no prior enrollment. |\n| `TOTP` | Time-based one-time code from an authenticator app. Requires enrollment. Not valid for per-transaction challenges (cannot carry dynamic linking). |\n| `PASSKEY` | WebAuthn passkey assertion. Requires enrollment. |\n","uniqueKey":"quote.scaChallenge.availableFactors.items.[INDEX]","typeLabel":"enum\u003cstring>"},"example":["SMS_OTP"],"isRequired":true,"uniqueKey":"quote.scaChallenge.availableFactors","typeLabel":"enum\u003cstring>[]"},"purpose":{"oneOf":[{"type":"string","description":"Optional, informational label for what this particular challenge in the sequence authorizes — useful for step UX (e.g. \"Authorize the currency conversion\" vs \"Authorize the payout\"). Known values include `CURRENCY_CONVERSION`, `PAYOUT`, `TRANSFER`, and `STANDING_INSTRUCTION` (authorizing a rule-based account's sweep instruction), but the set is **non-exhaustive and may grow** — treat unrecognized values as a generic authorization step and do not branch program logic on it. Omitted when steps are not distinguished (e.g. a single-authorization flow).","example":"PAYOUT","uniqueKey":"quote.scaChallenge.purpose.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional, informational label for what this particular challenge in the sequence authorizes — useful for step UX (e.g. \"Authorize the currency conversion\" vs \"Authorize the payout\"). Known values include `CURRENCY_CONVERSION`, `PAYOUT`, `TRANSFER`, and `STANDING_INSTRUCTION` (authorizing a rule-based account's sweep instruction), but the set is **non-exhaustive and may grow** — treat unrecognized values as a generic authorization step and do not branch program logic on it. Omitted when steps are not distinguished (e.g. a single-authorization flow).","example":"PAYOUT","uniqueKey":"quote.scaChallenge.purpose.oneOf.1","typeLabel":"null"}],"uniqueKey":"quote.scaChallenge.purpose","typeLabel":"string | null"},"passkeyAssertionOptions":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Opaque WebAuthn assertion request options (including the relying-party id, challenge, and allowed credentials), present only when `factor` is `PASSKEY`. Pass to the device's WebAuthn API to produce the assertion submitted back in `ScaAuthorization.passkeyAssertion`.","uniqueKey":"quote.scaChallenge.passkeyAssertionOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Opaque WebAuthn assertion request options (including the relying-party id, challenge, and allowed credentials), present only when `factor` is `PASSKEY`. Pass to the device's WebAuthn API to produce the assertion submitted back in `ScaAuthorization.passkeyAssertion`.","uniqueKey":"quote.scaChallenge.passkeyAssertionOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"quote.scaChallenge.passkeyAssertionOptions","typeLabel":"object | null"},"passkeyAllowedOrigins":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"quote.scaChallenge.passkeyAllowedOrigins.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"The origins the WebAuthn ceremony may run against. Populated for enrollment and login passkey challenges; the origin the assertion is produced against must be one of these and echoed back as `ScaAuthorization.origin`. Per-transaction passkey challenges omit this (they carry `passkeyAssertionOptions` only) — see `ScaAuthorization.origin` for how to source the origin in that case.","example":["https://app.example.com"],"uniqueKey":"quote.scaChallenge.passkeyAllowedOrigins.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"The origins the WebAuthn ceremony may run against. Populated for enrollment and login passkey challenges; the origin the assertion is produced against must be one of these and echoed back as `ScaAuthorization.origin`. Per-transaction passkey challenges omit this (they carry `passkeyAssertionOptions` only) — see `ScaAuthorization.origin` for how to source the origin in that case.","example":["https://app.example.com"],"uniqueKey":"quote.scaChallenge.passkeyAllowedOrigins.oneOf.1","typeLabel":"null"}],"uniqueKey":"quote.scaChallenge.passkeyAllowedOrigins","typeLabel":"string[] | null"}},"uniqueKey":"quote.scaChallenge","typeLabel":"object"},"minimumReceivingAmount":{"oneOf":[{"type":"integer","format":"int64","description":"Smallest amount the recipient receives, in the smallest unit of `receivingCurrency`, for a quote to a `CHAIN_ADDRESS` destination. Grid pays the chain itself at a locked rate, so this equals `totalReceivingAmount`. Null for a quote whose destination is not `CHAIN_ADDRESS`.","example":1000,"uniqueKey":"quote.minimumReceivingAmount.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","format":"int64","description":"Smallest amount the recipient receives, in the smallest unit of `receivingCurrency`, for a quote to a `CHAIN_ADDRESS` destination. Grid pays the chain itself at a locked rate, so this equals `totalReceivingAmount`. Null for a quote whose destination is not `CHAIN_ADDRESS`.","example":1000,"uniqueKey":"quote.minimumReceivingAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"quote.minimumReceivingAmount","typeLabel":"integer\u003cint64> | null"},"destinationSparkAddress":{"type":"string","description":"The Spark address this quote pays, when its `destination` is one of the customer's `SPARK_WALLET` external accounts.","example":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","uniqueKey":"quote.destinationSparkAddress","typeLabel":"string"},"destinationChainAddress":{"title":"Chain Address","type":"object","required":["destinationType","network","currency","address"],"properties":{"destinationType":{"type":"string","enum":["CHAIN_ADDRESS"],"description":"Marks a destination on another chain.","example":"CHAIN_ADDRESS","isRequired":true,"uniqueKey":"quote.destinationChainAddress.destinationType","typeLabel":"enum\u003cstring>"},"network":{"type":"string","enum":["BASE","ETHEREUM","SOLANA","POLYGON","ARBITRUM","TRON"],"description":"Network the recipient receives on.","example":"BASE","isRequired":true,"uniqueKey":"quote.destinationChainAddress.network","typeLabel":"enum\u003cstring>"},"currency":{"type":"string","enum":["USDC","USDT"],"description":"Asset the recipient receives: `USDC` or `USDT`. `TRON` supports `USDT` only, and `BASE` supports `USDC` only.","example":"USDC","isRequired":true,"uniqueKey":"quote.destinationChainAddress.currency","typeLabel":"enum\u003cstring>"},"address":{"type":"string","maxLength":128,"description":"Recipient address on `network`.","example":"0x1234567890abcdef1234567890abcdef12345678","isRequired":true,"uniqueKey":"quote.destinationChainAddress.address","typeLabel":"string"}},"description":"The chain, address and stablecoin this quote pays, when it was created with a `CHAIN_ADDRESS` destination.","uniqueKey":"quote.destinationChainAddress","typeLabel":"Chain Address · object"},"destinationLightningInvoice":{"title":"Lightning Invoice","type":"object","required":["destinationType","invoice"],"properties":{"destinationType":{"type":"string","enum":["LIGHTNING_INVOICE"],"description":"Marks a BOLT11 Lightning invoice destination.","example":"LIGHTNING_INVOICE","isRequired":true,"uniqueKey":"quote.destinationLightningInvoice.destinationType","typeLabel":"enum\u003cstring>"},"invoice":{"type":"string","maxLength":4096,"description":"The BOLT11 invoice to pay. It must name an amount in whole satoshis, be for the platform's Bitcoin network, and not expire within the next minute.","example":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs","isRequired":true,"uniqueKey":"quote.destinationLightningInvoice.invoice","typeLabel":"string"}},"description":"The invoice this quote pays, when it was created with a `LIGHTNING_INVOICE` destination.","uniqueKey":"quote.destinationLightningInvoice","typeLabel":"Lightning Invoice · object"}},"uniqueKey":"quote","typeLabel":"Agent Quote · object"},"previousQuote":{"type":"object","title":"Agent Quote","description":"The quote the customer was shown before an approval found that the price had moved past `priceTolerance`. Present only while the action is `PENDING_APPROVAL` after such an approval; `quote` is then the new quote to show the customer, and approving it again repeats the check against it.","required":["id","status","expiresAt","createdAt","source","destination","sendingCurrency","receivingCurrency","totalSendingAmount","totalReceivingAmount","exchangeRate","feesIncluded","transactionId"],"properties":{"id":{"type":"string","description":"Unique identifier for this quote","example":"Quote:019542f5-b3e7-1d02-0000-000000000006","isRequired":true,"uniqueKey":"previousQuote.id","typeLabel":"string"},"status":{"type":"string","enum":["PENDING","PENDING_AUTHORIZATION","PROCESSING","COMPLETED","FAILED","EXPIRED"],"description":"Current status of the quote. `PENDING_AUTHORIZATION` occurs only for customers in a region where Strong Customer Authentication is required (e.g. EU): the quote carries an `scaChallenge` that must be authorized before execution, and for realtime-funding sources `paymentInstructions` are withheld until it is satisfied.","example":"PENDING","isRequired":true,"uniqueKey":"previousQuote.status","typeLabel":"enum\u003cstring>"},"createdAt":{"type":"string","format":"date-time","description":"When this quote was created","example":"2025-10-03T12:00:00Z","isRequired":true,"uniqueKey":"previousQuote.createdAt","typeLabel":"string\u003cdate-time>"},"expiresAt":{"type":"string","format":"date-time","description":"Absolute UTC timestamp when the rate locked in this quote becomes invalid and the quote can no longer be executed. The window depends on the rail and corridor: instant rails (Lightning, Spark, USDC on Solana/Base/Polygon, RTP, SEPA Instant) typically expire in 1–5 minutes; corridors with longer settlement guarantees may have longer windows. Always rely on this timestamp rather than assuming a fixed window.","example":"2025-10-03T12:05:00Z","isRequired":true,"uniqueKey":"previousQuote.expiresAt","typeLabel":"string\u003cdate-time>"},"source":{"oneOf":[{"type":"object","title":"Account","description":"Source account details","required":["accountId","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of quote funding source","enum":["ACCOUNT"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.source.oneOf.0.sourceType","typeLabel":"enum\u003cstring>"},"accountId":{"type":"string","description":"Source account identifier","example":"InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","isRequired":true,"uniqueKey":"previousQuote.source.oneOf.0.accountId","typeLabel":"string"},"customerId":{"type":"string","description":"The customer on whose behalf the transaction is being initiated. Required when funding from a `BULK_SETTLEMENT` account. The customer is never the account owner, because the platform owns the account. When funding from an FBO account, this field is optional. If you omit it, the transaction is initiated on behalf of the platform. For any other account, it defaults to the account owner's customerId.","example":"Customer:019542f5-b3e7-1d02-0000-000000000001","uniqueKey":"previousQuote.source.oneOf.0.customerId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.source.oneOf.0","typeLabel":"Account · object"},{"type":"object","title":"Real-time Funding","description":"Fund the quote using a real-time funding source (RTP, SEPA Instant, Spark, Stables, etc.). This will require manual just-in-time funding using `paymentInstructions` in the response. Because quotes expire quickly, this option is only valid for instant payment methods. Do not try to fund a quote with a non-instant payment method (ACH, etc.).","required":["currency","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of quote funding source","enum":["REALTIME_FUNDING"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.source.oneOf.1.sourceType","typeLabel":"enum\u003cstring>"},"currency":{"type":"string","description":"Currency code for the funding source. See [Supported Currencies](https://docs.lightspark.com/platform-overview/core-concepts/currencies-and-rails) for the full list of supported fiat and crypto currencies.","example":"USD","isRequired":true,"uniqueKey":"previousQuote.source.oneOf.1.currency","typeLabel":"string"},"customerId":{"type":"string","description":"Source customer ID. If this transaction is being initiated on behalf of a customer, this is required. If customerId is not provided, the quote will be created on behalf of the platform itself.","example":"Customer:019542f5-b3e7-1d02-0000-000000000009","uniqueKey":"previousQuote.source.oneOf.1.customerId","typeLabel":"string"},"cryptoNetwork":{"type":"string","description":"The crypto network to use for the funding source. Required when `currency` is a stablecoin (e.g. USDC, USDT). Specifies which network the customer will deposit on, so the correct deposit address can be generated. Example values: `SOLANA`, `ETHEREUM`, `BASE`, `POLYGON`, `TRON`, `PLASMA`, `ARBITRUM`, `SPARK`, `LIGHTNING`, `BITCOIN`.","example":"SOLANA","uniqueKey":"previousQuote.source.oneOf.1.cryptoNetwork","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.source.oneOf.1","typeLabel":"Real-time Funding · object"}],"isRequired":true,"uniqueKey":"previousQuote.source","typeLabel":"Account · object | Real-time Funding · object"},"destination":{"oneOf":[{"type":"object","title":"Account","description":"Destination account details","required":["accountId","destinationType"],"properties":{"destinationType":{"type":"string","description":"Type of payment destination","enum":["ACCOUNT"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.destination.oneOf.0.destinationType","typeLabel":"enum\u003cstring>"},"accountId":{"type":"string","description":"Destination account identifier","example":"ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","isRequired":true,"uniqueKey":"previousQuote.destination.oneOf.0.accountId","typeLabel":"string"},"paymentRail":{"type":"string","description":"The payment rail to use for the transfer. Must be one of the rails supported by the destination account. If not specified, the system will select a default rail.","enum":["ACH","ACH_COLOMBIA","ACH_SAME_DAY","BANK_TRANSFER","BRE_B","CIPS","FAST","FASTER_PAYMENTS","FEDNOW","INSTAPAY","MOBILE_MONEY","NEFT","PAYNOW","PESONET","PIX","RTGS","RTP","SEPA","SEPA_INSTANT","SPEI","SWIFT","UNIONPAY","UPI","WIRE"],"example":"ACH","uniqueKey":"previousQuote.destination.oneOf.0.paymentRail","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.destination.oneOf.0","typeLabel":"Account · object"},{"type":"object","title":"UMA Address","description":"UMA address destination details","required":["umaAddress","destinationType","currency"],"properties":{"destinationType":{"type":"string","description":"Type of payment destination","enum":["UMA_ADDRESS"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.destination.oneOf.1.destinationType","typeLabel":"enum\u003cstring>"},"umaAddress":{"type":"string","maxLength":200,"description":"UMA address of the recipient","example":"$receiver@uma.domain.com","isRequired":true,"uniqueKey":"previousQuote.destination.oneOf.1.umaAddress","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the destination. See [Supported Currencies](https://docs.lightspark.com/platform-overview/core-concepts/currencies-and-rails) for the full list of supported fiat and crypto currencies.","example":"EUR","isRequired":true,"uniqueKey":"previousQuote.destination.oneOf.1.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.destination.oneOf.1","typeLabel":"UMA Address · object"}],"isRequired":true,"uniqueKey":"previousQuote.destination","typeLabel":"Account · object | UMA Address · object"},"sendingCurrency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"previousQuote.sendingCurrency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"previousQuote.sendingCurrency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"previousQuote.sendingCurrency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"previousQuote.sendingCurrency.decimals","typeLabel":"integer"}},"description":"Currency for the sending amount","isRequired":true,"uniqueKey":"previousQuote.sendingCurrency","typeLabel":"object"},"receivingCurrency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"previousQuote.receivingCurrency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"previousQuote.receivingCurrency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"previousQuote.receivingCurrency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"previousQuote.receivingCurrency.decimals","typeLabel":"integer"}},"description":"Currency for the receiving amount","isRequired":true,"uniqueKey":"previousQuote.receivingCurrency","typeLabel":"object"},"totalSendingAmount":{"type":"integer","format":"int64","description":"The total amount that will be sent in the smallest unit of the sending currency (eg. cents).","exclusiveMinimum":0,"example":123010,"isRequired":true,"uniqueKey":"previousQuote.totalSendingAmount","typeLabel":"integer\u003cint64>"},"totalReceivingAmount":{"type":"integer","format":"int64","description":"The total amount that will be received in the smallest unit of the receiving currency (eg. cents).","exclusiveMinimum":0,"example":1000,"isRequired":true,"uniqueKey":"previousQuote.totalReceivingAmount","typeLabel":"integer\u003cint64>"},"exchangeRate":{"type":"number","description":"Number of sending currency units per receiving currency unit. The rate is fee-exclusive: Grid deducts `feesIncluded` from `totalSendingAmount` first, then converts the remainder at this rate to reach `totalReceivingAmount`.","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"previousQuote.exchangeRate","typeLabel":"number"},"feesIncluded":{"type":"integer","format":"int64","description":"The fees associated with the quote in the smallest unit of the sending currency (eg. cents). Note: this value may fluctuate between quotes — some underlying fee components are defined in the receiving currency, so their equivalent in the sending currency moves with the FX rate. The fees shown here are locked only for the lifetime of this quote.","minimum":0,"example":10,"isRequired":true,"uniqueKey":"previousQuote.feesIncluded","typeLabel":"integer\u003cint64>"},"transactionId":{"type":"string","description":"The ID of the transaction created from this quote.","example":"Transaction:019542f5-b3e7-1d02-0000-000000000005","isRequired":true,"uniqueKey":"previousQuote.transactionId","typeLabel":"string"},"platformFeesIncluded":{"type":"integer","format":"int64","description":"The portion of `feesIncluded` collected by the platform (platform-configured transaction fees), in the smallest unit of the sending currency. 0 when the platform has no applicable fee configured. Already included in `feesIncluded`. May be omitted from payloads produced before platform fees existed.","minimum":0,"example":5,"uniqueKey":"previousQuote.platformFeesIncluded","typeLabel":"integer\u003cint64>"},"paymentInstructions":{"type":"array","description":"Payment instructions for executing the payment. This is not required when using an internal account source.","items":{"type":"object","required":["accountOrWalletInfo"],"properties":{"accountOrWalletInfo":{"oneOf":[{"type":"object","title":"USD Bank Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","accountNumber","routingNumber"],"example":{"accountType":"USD_ACCOUNT","accountNumber":"1234567890","routingNumber":"021000021","bankName":"Chase Bank","intermediaryBankName":"JPMorgan Chase Bank","intermediaryRoutingNumber":"021000021","fiToFiInformation":"/BNF/Invoice 4471","bankAccountType":"CHECKING"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["USD_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.accountType","typeLabel":"enum\u003cstring>"},"accountNumber":{"type":"string","description":"The account number of the bank","minLength":1,"maxLength":34,"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.accountNumber","typeLabel":"string"},"routingNumber":{"type":"string","description":"The ABA routing number","example":"021000021","minLength":9,"maxLength":9,"pattern":"^[0-9]{9}$","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.routingNumber","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["ACH","ACH_SAME_DAY","WIRE","RTP","FEDNOW"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Reference code for the payment. On a quote's `paymentInstructions`, include it with the payment, in the memo or remittance information, so Grid can match the payment to the quote. On an internal account's `fundingPaymentInstructions`, the account number is unique to that account and deposits are credited by account number, so the payer doesn't need to include the reference.","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.reference","typeLabel":"string"},"bankName":{"type":"string","description":"The name of the financial institution holding the account. Optional on every rail, and recommended for wires, where it identifies the beneficiary's institution on the payment message. Not checked against `GET /discoveries`.","minLength":1,"maxLength":140,"example":"Chase Bank","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankName","typeLabel":"string"},"intermediaryBankName":{"type":"string","description":"The name of the intermediary financial institution, for accounts reachable only through a correspondent bank. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"JPMorgan Chase Bank","minLength":1,"maxLength":140,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.intermediaryBankName","typeLabel":"string"},"intermediaryRoutingNumber":{"type":"string","description":"The ABA routing number of the intermediary financial institution. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"021000021","minLength":9,"maxLength":9,"pattern":"^[0-9]{9}$","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.intermediaryRoutingNumber","typeLabel":"string"},"fiToFiInformation":{"type":"string","description":"Bank-to-bank instructions carried alongside the payment. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"/BNF/Invoice 4471","maxLength":210,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.fiToFiInformation","typeLabel":"string"},"bankAccountType":{"type":"string","description":"Whether the account is a checking or a savings account. Grid uses this to set the ACH transaction code, so a value that does not match the account causes the receiving bank to return a notification of change.","enum":["CHECKING","SAVINGS"],"example":"CHECKING","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankAccountType","typeLabel":"enum\u003cstring>"},"bankAddress":{"type":"string","description":"The postal address of the financial institution holding the account, on a single line. Optional on every rail, and recommended for wires, where some originating banks require the beneficiary institution's address before they will send.","example":"885 Teaneck Road, Teaneck, NJ 07666","minLength":1,"maxLength":255,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankAddress","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0","typeLabel":"USD Bank Account · object"},{"type":"object","title":"EUR Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","iban"],"example":{"accountType":"EUR_ACCOUNT","iban":"DE89370400440532013000","swiftCode":"DEUTDEFF"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["EUR_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.accountType","typeLabel":"enum\u003cstring>"},"iban":{"type":"string","description":"The IBAN of the bank account","example":"DE89370400440532013000","minLength":15,"maxLength":34,"pattern":"^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{11,30}$","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.iban","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SEPA","SEPA_INSTANT"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Unique reference code that must be included with the payment to properly credit it","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.reference","typeLabel":"string"},"swiftCode":{"type":"string","description":"The SWIFT/BIC code of the bank. When omitted, Grid derives it from the IBAN when possible. Provide it when automatic derivation is unavailable.","example":"DEUTDEFF","minLength":8,"maxLength":11,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.swiftCode","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1","typeLabel":"EUR Account · object"},{"type":"object","title":"SWIFT Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountHolderName","paymentRails","accountType","swiftCode","bankName","country"],"example":{"accountType":"SWIFT_ACCOUNT","country":"NG","swiftCode":"DEUTDEFF","bankName":"Deutsche Bank","accountNumber":"1234567890"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SWIFT_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountType","typeLabel":"enum\u003cstring>"},"country":{"type":"string","description":"The ISO 3166-1 alpha-2 country code of the bank account","example":"NG","minLength":2,"maxLength":2,"pattern":"^[A-Z]{2}$","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.country","typeLabel":"string"},"swiftCode":{"type":"string","description":"The SWIFT/BIC code of the bank","example":"DEUTDEFF","minLength":8,"maxLength":11,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.swiftCode","typeLabel":"string"},"bankName":{"type":"string","description":"The name of the bank","example":"Deutsche Bank","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.bankName","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SWIFT"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.paymentRails","typeLabel":"enum\u003cstring>[]"},"accountHolderName":{"type":"string","description":"The name of the account holder as it must appear on the wire. Remitting banks match this against the beneficiary name field, so payers should copy it exactly.","example":"Acme Exports Pte Ltd","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountHolderName","typeLabel":"string"},"accountNumber":{"type":"string","description":"The bank account number. Required for most corridors. Use iban instead for IBAN-only corridors (e.g. BR, GB).","example":"1234567890","minLength":1,"maxLength":34,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountNumber","typeLabel":"string"},"iban":{"type":"string","description":"The IBAN of the bank account. Required for IBAN-only corridors (e.g. BR, GB). Use accountNumber for all other corridors.","example":"GB29NWBK60161331926819","minLength":15,"maxLength":34,"pattern":"^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{11,30}$","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.iban","typeLabel":"string"},"bankAddress":{"type":"string","description":"The address of the bank holding the account, when known.","example":"12 Marina Boulevard, Singapore 018982","minLength":1,"maxLength":1024,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.bankAddress","typeLabel":"string"},"reference":{"type":"string","description":"Reference code to include with the payment when present. SWIFT payments are attributed by the destination account number/IBAN, so this account type typically requires no reference.","example":"UMA-Q12345-REF","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.reference","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2","typeLabel":"SWIFT Account · object"},{"type":"object","title":"MXN Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","clabeNumber"],"example":{"accountType":"MXN_ACCOUNT","clabeNumber":"123456789012345678"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["MXN_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.accountType","typeLabel":"enum\u003cstring>"},"clabeNumber":{"type":"string","description":"The CLABE number of the bank","example":"123456789012345678","minLength":18,"maxLength":18,"pattern":"^[0-9]{18}$","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.clabeNumber","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SPEI"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Unique reference code that must be included with the payment to properly credit it","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.reference","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3","typeLabel":"MXN Account · object"},{"type":"object","title":"BRL Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["qrCode","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BRL_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4.accountType","typeLabel":"enum\u003cstring>"},"qrCode":{"type":"string","description":"A PIX QR code payload that can be used to fund the transaction. This can be rendered as a QR code image or pasted into a PIX-compatible banking app.","minLength":1,"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4.qrCode","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4","typeLabel":"BRL Account · object"},{"type":"object","title":"COP Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["paymentUrl","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["COP_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5.accountType","typeLabel":"enum\u003cstring>"},"paymentUrl":{"type":"string","format":"uri","description":"A payment URL where the customer can complete their COP deposit.","example":"https://payments.example.com/t/abc123","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5.paymentUrl","typeLabel":"string\u003curi>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5","typeLabel":"COP Account · object"},{"type":"object","title":"ARS Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountNumber","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ARS_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6.accountType","typeLabel":"enum\u003cstring>"},"accountNumber":{"type":"string","description":"The static CVU (Clave Virtual Uniforme) bank account number to pay to.","minLength":22,"maxLength":22,"pattern":"^\\d{22}$","example":"0000003100074052501434","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6.accountNumber","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6","typeLabel":"ARS Account · object"},{"type":"object","title":"Spark Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["assetType","address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SPARK_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Spark wallet address","example":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset or configured Spark token currency code","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.assetType","typeLabel":"string"},"invoice":{"type":"string","description":"Invoice for the payment","example":"sparkrt1pgss8ter0fhc4c220f3zftmpz49h8wqte8eg3m5zkrraplgc048jucgszg3ssqgjzqqekv73mmh842yj7drsjwh7t7tz5zt8wf5kghm5v4ehggszppjp5s80cg3qjdzc55g2567tn3lj705hdsr577tg8ah795mlnt6807y657qhkmgfkf9w75p4wz3l8vhua85zdn6ryj32zuj0p00pv2l5z4u47mw6h4s","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.invoice","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7","typeLabel":"Spark Wallet · object"},{"type":"object","title":"Lightning Invoice","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["invoice","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["LIGHTNING"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8.accountType","typeLabel":"enum\u003cstring>"},"invoice":{"type":"string","description":"Invoice for the payment","example":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8.invoice","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8","typeLabel":"Lightning Invoice · object"},{"type":"object","title":"Bitcoin L1 Deposit Address","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BITCOIN_L1"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"On-chain Bitcoin (L1) deposit address to send funds to","example":"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.address","typeLabel":"string"},"network":{"type":"string","description":"The blockchain network for the deposit address.","enum":["BITCOIN"],"example":"BITCOIN","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.network","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9","typeLabel":"Bitcoin L1 Deposit Address · object"},{"type":"object","title":"Solana Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SOLANA_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Solana wallet address","example":"4Nd1m6Qkq7RfKuE5vQ9qP9Tn6H94Ueqb4xXHzsAbd8Wg","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10","typeLabel":"Solana Wallet · object"},{"type":"object","title":"Ethereum Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ETHEREUM_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Ethereum L1 wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11","typeLabel":"Ethereum Wallet · object"},{"type":"object","title":"Base Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BASE_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Base eth wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12","typeLabel":"Base Wallet · object"},{"type":"object","title":"Polygon Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["POLYGON_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Polygon eth wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13","typeLabel":"Polygon Wallet · object"},{"type":"object","title":"Arbitrum Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ARBITRUM_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Arbitrum wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14","typeLabel":"Arbitrum Wallet · object"},{"type":"object","title":"Tron Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["TRON_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Tron wallet address","example":"TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDT"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15","typeLabel":"Tron Wallet · object"},{"type":"object","title":"Plasma Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["PLASMA_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Plasma wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDT"],"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16","typeLabel":"Plasma Wallet · object"},{"type":"object","title":"Embedded Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountType","payloadToSign"],"properties":{"accountType":{"type":"string","description":"Discriminator value identifying this as Embedded Wallet payment instructions.","enum":["EMBEDDED_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17.accountType","typeLabel":"enum\u003cstring>"},"payloadToSign":{"type":"string","description":"JSON-encoded transaction signing payload that must be stamped, as-is (byte-for-byte, without re-serialization), with the session private key of a verified authentication credential on the source Embedded Wallet. The resulting Grid wallet signature is passed as the `Grid-Wallet-Signature` header on `POST /quotes/{quoteId}/execute` to authorize the outbound transfer from the wallet.","example":"{\"type\":\"ACTIVITY_TYPE_SIGN_TRANSACTION_V2\",\"timestampMs\":\"1746736509954\",\"organizationId\":\"org_abc123\",\"parameters\":{\"signWith\":\"wallet_abc123def456\",\"unsignedTransaction\":\"ea69b4bf05f775209f26ff0a34a05569180f7936579d5c4af9377ae550194f72\",\"type\":\"TRANSACTION_TYPE_ETHEREUM\"},\"generateAppProofs\":true}","isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17.payloadToSign","typeLabel":"string"}},"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17","typeLabel":"Embedded Wallet · object"}],"isRequired":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].accountOrWalletInfo","typeLabel":"USD Bank Account · object | EUR Account · object | SWIFT Account · object | MXN Account · object | BRL Account · object | COP Account · object | ARS Account · object | Spark Wallet · object | Lightning Invoice · object | Bitcoin L1 Deposit Address · object | Solana Wallet · object | Ethereum Wallet · object | Base Wallet · object | Polygon Wallet · object | Arbitrum Wallet · object | Tron Wallet · object | Plasma Wallet · object | Embedded Wallet · object"},"instructionsNotes":{"type":"string","description":"Additional human-readable instructions for making the payment","example":"Please ensure the reference code is included in the payment memo/description field","uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].instructionsNotes","typeLabel":"string"},"isPlatformAccount":{"type":"boolean","description":"Indicates whether the account is a platform account or a customer account.","example":true,"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX].isPlatformAccount","typeLabel":"boolean"}},"uniqueKey":"previousQuote.paymentInstructions.items.[INDEX]","typeLabel":"object"},"example":[{"accountOrWalletInfo":{"accountType":"USD_ACCOUNT","paymentRails":["ACH","WIRE"],"accountNumber":"1234567890","routingNumber":"021000021","bankName":"Chase Bank","reference":"UMA-Q12345-REF"},"instructionsNotes":"Include reference UMA-Q12345-REF in memo"},{"accountOrWalletInfo":{"accountType":"SPARK_WALLET","assetType":"BTC","address":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","invoice":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs"}}],"uniqueKey":"previousQuote.paymentInstructions","typeLabel":"object[]"},"counterpartyInformation":{"type":"object","description":"Additional information about the counterparty, if available and required by the platform in their configuration.","additionalProperties":true,"example":{"FULL_NAME":"John Sender","BIRTH_DATE":"1985-06-15","NATIONALITY":"DE"},"uniqueKey":"previousQuote.counterpartyInformation","typeLabel":"object"},"rateDetails":{"description":"Details about the rate and fees for the transaction.","type":"object","required":["counterpartyMultiplier","counterpartyFixedFee","gridApiMultiplier","gridApiFixedFee","gridApiVariableFeeRate","gridApiVariableFeeAmount"],"properties":{"counterpartyMultiplier":{"type":"number","format":"double","description":"The underlying multiplier from mSATs to the receiving currency as returned by the counterparty institution.","exclusiveMinimum":0,"example":1.08,"isRequired":true,"uniqueKey":"previousQuote.rateDetails.counterpartyMultiplier","typeLabel":"number\u003cdouble>"},"counterpartyFixedFee":{"type":"integer","format":"int64","description":"The fixed fee charged by the counterparty institution to execute the quote in the smallest unit of the receiving currency (eg. cents).","minimum":0,"example":10,"isRequired":true,"uniqueKey":"previousQuote.rateDetails.counterpartyFixedFee","typeLabel":"integer\u003cint64>"},"gridApiMultiplier":{"type":"number","format":"double","description":"The underlying multiplier from the sending currency to mSATS, including variable fees.","exclusiveMinimum":0,"example":0.925,"isRequired":true,"uniqueKey":"previousQuote.rateDetails.gridApiMultiplier","typeLabel":"number\u003cdouble>"},"gridApiFixedFee":{"type":"integer","format":"int64","description":"The fixed fee charged by the Grid product to execute the quote in the smallest unit of the sending currency (eg. cents).","minimum":0,"example":10,"isRequired":true,"uniqueKey":"previousQuote.rateDetails.gridApiFixedFee","typeLabel":"integer\u003cint64>"},"gridApiVariableFeeRate":{"type":"number","format":"double","description":"The variable fee rate charged by the Grid product to execute the quote as a percentage of the sending currency amount.","minimum":0,"example":0.003,"isRequired":true,"uniqueKey":"previousQuote.rateDetails.gridApiVariableFeeRate","typeLabel":"number\u003cdouble>"},"gridApiVariableFeeAmount":{"type":"number","format":"int64","description":"The variable fee amount charged by the Grid product to execute the quote in the smallest unit of the sending currency (eg. cents). This is the sending amount times gridApiVariableFeeRate.","minimum":0,"example":30,"isRequired":true,"uniqueKey":"previousQuote.rateDetails.gridApiVariableFeeAmount","typeLabel":"number\u003cint64>"}},"uniqueKey":"previousQuote.rateDetails","typeLabel":"object"},"purposeOfPayment":{"type":"string","description":"The purpose of payment the quote was created with. Present only when the quote request set `purposeOfPayment`.","enum":["GIFT","SELF","GOODS_OR_SERVICES","EDUCATION","HEALTH_OR_MEDICAL","REAL_ESTATE_PURCHASE","TAX_PAYMENT","LOAN_PAYMENT","UTILITY_BILL","DONATION","TRAVEL","FAMILY_SUPPORT","SALARY_PAYMENT","EXPORTED_GOODS_PREPAYMENT","EXPORTED_GOODS_POSTPAYMENT","SERVICE_CHARGES","OFFICE_EXPENSES","DELIVERY_FEES","HOTEL_ACCOMMODATION","COMMISSION_ON_GOODS","COMMISSION_ON_SERVICES","ACCOUNTING_SERVICES","EXHIBITION_SERVICES","OTHER"],"uniqueKey":"previousQuote.purposeOfPayment","typeLabel":"enum\u003cstring>"},"documentIds":{"type":"array","description":"IDs of the supporting documents attached to the payment behind this quote, as passed in `documentIds` on `POST /quotes`. Present only when the quote was created with `documentIds`. Grid returns such a quote only after it has attached every document. Call `GET /payment-documents/{paymentDocumentId}` for each document's details, such as its `documentType` and its `ATTACHED` status.","items":{"type":"string","uniqueKey":"previousQuote.documentIds.items.[INDEX]","typeLabel":"string"},"example":["PaymentDocument:019542f5-b3e7-1d02-0000-000000000001","PaymentDocument:019542f5-b3e7-1d02-0000-000000000002","PaymentDocument:019542f5-b3e7-1d02-0000-000000000003"],"uniqueKey":"previousQuote.documentIds","typeLabel":"string[]"},"scaChallenge":{"type":"object","description":"Present only while `status` is `PENDING_AUTHORIZATION`: the Strong Customer Authentication challenge to satisfy before this quote can be executed (or, for realtime-funding sources, before `paymentInstructions` are issued). Omitted for customers outside SCA-regulated regions (non-EU).","required":["id","expiresAt","factor","availableFactors"],"properties":{"id":{"type":"string","description":"Unique identifier for this challenge. The server resolves the active challenge from the quote or transaction being authorized, so this field need not be supplied back; it is informational (e.g. for logging or correlation).","example":"ScaChallenge:019542f5-b3e7-1d02-0000-000000000007","isRequired":true,"uniqueKey":"previousQuote.scaChallenge.id","typeLabel":"string"},"expiresAt":{"type":"string","format":"date-time","description":"Absolute UTC timestamp after which this challenge can no longer be authorized.","example":"2025-10-03T12:05:00Z","isRequired":true,"uniqueKey":"previousQuote.scaChallenge.expiresAt","typeLabel":"string\u003cdate-time>"},"factor":{"type":"string","enum":["SMS_OTP","TOTP","PASSKEY"],"description":"The factor this challenge was issued for. Defaults to `SMS_OTP`.","isRequired":true,"uniqueKey":"previousQuote.scaChallenge.factor","typeLabel":"enum\u003cstring>"},"availableFactors":{"type":"array","description":"The factors the customer may use to satisfy this challenge.","items":{"type":"string","enum":["SMS_OTP","TOTP","PASSKEY"],"description":"A Strong Customer Authentication factor.\n\n| Factor | Description |\n|--------|-------------|\n| `SMS_OTP` | One-time code sent by SMS to the customer's verified phone. Requires no prior enrollment. |\n| `TOTP` | Time-based one-time code from an authenticator app. Requires enrollment. Not valid for per-transaction challenges (cannot carry dynamic linking). |\n| `PASSKEY` | WebAuthn passkey assertion. Requires enrollment. |\n","uniqueKey":"previousQuote.scaChallenge.availableFactors.items.[INDEX]","typeLabel":"enum\u003cstring>"},"example":["SMS_OTP"],"isRequired":true,"uniqueKey":"previousQuote.scaChallenge.availableFactors","typeLabel":"enum\u003cstring>[]"},"purpose":{"oneOf":[{"type":"string","description":"Optional, informational label for what this particular challenge in the sequence authorizes — useful for step UX (e.g. \"Authorize the currency conversion\" vs \"Authorize the payout\"). Known values include `CURRENCY_CONVERSION`, `PAYOUT`, `TRANSFER`, and `STANDING_INSTRUCTION` (authorizing a rule-based account's sweep instruction), but the set is **non-exhaustive and may grow** — treat unrecognized values as a generic authorization step and do not branch program logic on it. Omitted when steps are not distinguished (e.g. a single-authorization flow).","example":"PAYOUT","uniqueKey":"previousQuote.scaChallenge.purpose.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional, informational label for what this particular challenge in the sequence authorizes — useful for step UX (e.g. \"Authorize the currency conversion\" vs \"Authorize the payout\"). Known values include `CURRENCY_CONVERSION`, `PAYOUT`, `TRANSFER`, and `STANDING_INSTRUCTION` (authorizing a rule-based account's sweep instruction), but the set is **non-exhaustive and may grow** — treat unrecognized values as a generic authorization step and do not branch program logic on it. Omitted when steps are not distinguished (e.g. a single-authorization flow).","example":"PAYOUT","uniqueKey":"previousQuote.scaChallenge.purpose.oneOf.1","typeLabel":"null"}],"uniqueKey":"previousQuote.scaChallenge.purpose","typeLabel":"string | null"},"passkeyAssertionOptions":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Opaque WebAuthn assertion request options (including the relying-party id, challenge, and allowed credentials), present only when `factor` is `PASSKEY`. Pass to the device's WebAuthn API to produce the assertion submitted back in `ScaAuthorization.passkeyAssertion`.","uniqueKey":"previousQuote.scaChallenge.passkeyAssertionOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Opaque WebAuthn assertion request options (including the relying-party id, challenge, and allowed credentials), present only when `factor` is `PASSKEY`. Pass to the device's WebAuthn API to produce the assertion submitted back in `ScaAuthorization.passkeyAssertion`.","uniqueKey":"previousQuote.scaChallenge.passkeyAssertionOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"previousQuote.scaChallenge.passkeyAssertionOptions","typeLabel":"object | null"},"passkeyAllowedOrigins":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"previousQuote.scaChallenge.passkeyAllowedOrigins.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"The origins the WebAuthn ceremony may run against. Populated for enrollment and login passkey challenges; the origin the assertion is produced against must be one of these and echoed back as `ScaAuthorization.origin`. Per-transaction passkey challenges omit this (they carry `passkeyAssertionOptions` only) — see `ScaAuthorization.origin` for how to source the origin in that case.","example":["https://app.example.com"],"uniqueKey":"previousQuote.scaChallenge.passkeyAllowedOrigins.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"The origins the WebAuthn ceremony may run against. Populated for enrollment and login passkey challenges; the origin the assertion is produced against must be one of these and echoed back as `ScaAuthorization.origin`. Per-transaction passkey challenges omit this (they carry `passkeyAssertionOptions` only) — see `ScaAuthorization.origin` for how to source the origin in that case.","example":["https://app.example.com"],"uniqueKey":"previousQuote.scaChallenge.passkeyAllowedOrigins.oneOf.1","typeLabel":"null"}],"uniqueKey":"previousQuote.scaChallenge.passkeyAllowedOrigins","typeLabel":"string[] | null"}},"uniqueKey":"previousQuote.scaChallenge","typeLabel":"object"},"minimumReceivingAmount":{"oneOf":[{"type":"integer","format":"int64","description":"Smallest amount the recipient receives, in the smallest unit of `receivingCurrency`, for a quote to a `CHAIN_ADDRESS` destination. Grid pays the chain itself at a locked rate, so this equals `totalReceivingAmount`. Null for a quote whose destination is not `CHAIN_ADDRESS`.","example":1000,"uniqueKey":"previousQuote.minimumReceivingAmount.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","format":"int64","description":"Smallest amount the recipient receives, in the smallest unit of `receivingCurrency`, for a quote to a `CHAIN_ADDRESS` destination. Grid pays the chain itself at a locked rate, so this equals `totalReceivingAmount`. Null for a quote whose destination is not `CHAIN_ADDRESS`.","example":1000,"uniqueKey":"previousQuote.minimumReceivingAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"previousQuote.minimumReceivingAmount","typeLabel":"integer\u003cint64> | null"},"destinationSparkAddress":{"type":"string","description":"The Spark address this quote pays, when its `destination` is one of the customer's `SPARK_WALLET` external accounts.","example":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","uniqueKey":"previousQuote.destinationSparkAddress","typeLabel":"string"},"destinationChainAddress":{"title":"Chain Address","type":"object","required":["destinationType","network","currency","address"],"properties":{"destinationType":{"type":"string","enum":["CHAIN_ADDRESS"],"description":"Marks a destination on another chain.","example":"CHAIN_ADDRESS","isRequired":true,"uniqueKey":"previousQuote.destinationChainAddress.destinationType","typeLabel":"enum\u003cstring>"},"network":{"type":"string","enum":["BASE","ETHEREUM","SOLANA","POLYGON","ARBITRUM","TRON"],"description":"Network the recipient receives on.","example":"BASE","isRequired":true,"uniqueKey":"previousQuote.destinationChainAddress.network","typeLabel":"enum\u003cstring>"},"currency":{"type":"string","enum":["USDC","USDT"],"description":"Asset the recipient receives: `USDC` or `USDT`. `TRON` supports `USDT` only, and `BASE` supports `USDC` only.","example":"USDC","isRequired":true,"uniqueKey":"previousQuote.destinationChainAddress.currency","typeLabel":"enum\u003cstring>"},"address":{"type":"string","maxLength":128,"description":"Recipient address on `network`.","example":"0x1234567890abcdef1234567890abcdef12345678","isRequired":true,"uniqueKey":"previousQuote.destinationChainAddress.address","typeLabel":"string"}},"description":"The chain, address and stablecoin this quote pays, when it was created with a `CHAIN_ADDRESS` destination.","uniqueKey":"previousQuote.destinationChainAddress","typeLabel":"Chain Address · object"},"destinationLightningInvoice":{"title":"Lightning Invoice","type":"object","required":["destinationType","invoice"],"properties":{"destinationType":{"type":"string","enum":["LIGHTNING_INVOICE"],"description":"Marks a BOLT11 Lightning invoice destination.","example":"LIGHTNING_INVOICE","isRequired":true,"uniqueKey":"previousQuote.destinationLightningInvoice.destinationType","typeLabel":"enum\u003cstring>"},"invoice":{"type":"string","maxLength":4096,"description":"The BOLT11 invoice to pay. It must name an amount in whole satoshis, be for the platform's Bitcoin network, and not expire within the next minute.","example":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs","isRequired":true,"uniqueKey":"previousQuote.destinationLightningInvoice.invoice","typeLabel":"string"}},"description":"The invoice this quote pays, when it was created with a `LIGHTNING_INVOICE` destination.","uniqueKey":"previousQuote.destinationLightningInvoice","typeLabel":"Lightning Invoice · object"}},"uniqueKey":"previousQuote","typeLabel":"Agent Quote · object"},"priceTolerance":{"type":"object","description":"Present on a `PENDING_APPROVAL` `EXECUTE_QUOTE` action that Grid quotes again when it is approved after its quote expired: how far the price may move against the customer before they are asked again. Fixed when the action is created. Absent when approval can only execute `quote` as it is.","required":["basisPoints","minimumAmount","currency"],"properties":{"basisPoints":{"type":"integer","minimum":0,"description":"The share of the amount shown, in basis points. 100 is 1%.","example":100,"isRequired":true,"uniqueKey":"priceTolerance.basisPoints","typeLabel":"integer"},"minimumAmount":{"type":"integer","format":"int64","minimum":0,"description":"The least the price may move by, in the smallest unit of `currency`.","example":100,"isRequired":true,"uniqueKey":"priceTolerance.minimumAmount","typeLabel":"integer\u003cint64>"},"currency":{"type":"string","description":"ISO 4217 code of `minimumAmount`. Known values are `USD`.","example":"USD","isRequired":true,"uniqueKey":"priceTolerance.currency","typeLabel":"string"}},"uniqueKey":"priceTolerance","typeLabel":"object"},"purchaseCard":{"type":"object","description":"The purchase card the agent asked for, so an approval decision can show its amount, limit, description and funding account. Present for `ISSUE_PURCHASE_CARD`.","required":["amount","spendLimit","currency","fundingSource"],"properties":{"amount":{"type":"integer","format":"int64","minimum":1,"description":"The purchase amount the agent asked for, in the smallest unit of `currency`.","example":4999,"isRequired":true,"uniqueKey":"purchaseCard.amount","typeLabel":"integer\u003cint64>"},"spendLimit":{"type":"integer","format":"int64","minimum":1,"description":"The most the card can be charged in its one purchase, in the smallest unit of `currency`: `amount` plus an allowance for tax and shipping of 15% of `amount`, at most 1000 (USD 10.00). For a recurring card it is `amount`, and it caps what the card can be charged in any trailing month: from a charge back to the same date a month earlier. The card issuer declines a charge above it, and it is the amount checked against the agent's policy when the card is requested.","example":5749,"isRequired":true,"uniqueKey":"purchaseCard.spendLimit","typeLabel":"integer\u003cint64>"},"currency":{"type":"string","description":"ISO 4217 code of the purchase currency. Known values: `USD`. Treat an unrecognized value as a currency you cannot display rather than an error.","example":"USD","isRequired":true,"uniqueKey":"purchaseCard.currency","typeLabel":"string"},"fundingSource":{"type":"string","description":"The customer's Embedded Wallet internal account that pays for the purchase.","example":"InternalAccount:019542f5-b3e7-1d02-0000-000000000002","isRequired":true,"uniqueKey":"purchaseCard.fundingSource","typeLabel":"string"},"increaseCardId":{"type":"string","description":"The existing card being increased, present only on increase actions.","example":"Card:019542f5-b3e7-1d02-0000-000000000011","uniqueKey":"purchaseCard.increaseCardId","typeLabel":"string"},"previousAmount":{"type":"integer","format":"int64","minimum":1,"description":"Purchase amount before this increase, in USD cents.","example":4999,"uniqueKey":"purchaseCard.previousAmount","typeLabel":"integer\u003cint64>"},"previousSpendLimit":{"type":"integer","format":"int64","minimum":1,"description":"Issuer-enforced limit before this increase, in USD cents.","example":5749,"uniqueKey":"purchaseCard.previousSpendLimit","typeLabel":"integer\u003cint64>"},"description":{"type":"string","maxLength":255,"description":"What the agent said the card is for, such as the merchant and item. On an increase action, the agent's `reason` for the higher amount. Shown to the customer when they approve the card or the increase. Supplied by the agent and not verified by Grid.","example":"Running shoes from example-store.com","uniqueKey":"purchaseCard.description","typeLabel":"string"},"recurring":{"type":"boolean","description":"Whether the card is a recurring purchase card: locked to the first merchant that charges it and reusable there, up to `spendLimit` each trailing month, until it is closed. Absent or `false` for a single-use card.","example":false,"uniqueKey":"purchaseCard.recurring","typeLabel":"boolean"},"expiresAt":{"type":"string","format":"date-time","description":"When Grid closes the card if it has not been used. Present once a single-use card is issued; a recurring card has none.","example":"2026-10-26T15:30:00Z","uniqueKey":"purchaseCard.expiresAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"purchaseCard","typeLabel":"object"},"claimablePayout":{"type":"object","description":"The claimable payout the agent asked to send, so an approval decision can show its amount and recipient. Present for `CLAIMABLE_PAYOUT`. Approving the action makes the payout `AWAITING_CLAIM`; rejecting it, or letting it expire, ends the payout and releases its hold.","required":["id","agentId","customerId","platformCustomerId","status","sourceAccountId","amount","recipient","expiresAt","createdAt","updatedAt"],"properties":{"id":{"type":"string","description":"System-generated unique identifier.","example":"ClaimablePayout:019542f5-b3e7-1d02-0000-000000000077","isRequired":true,"uniqueKey":"claimablePayout.id","typeLabel":"string"},"agentId":{"type":"string","description":"The agent that sent the payout.","example":"Agent:019542f5-b3e7-1d02-0000-000000000042","isRequired":true,"uniqueKey":"claimablePayout.agentId","typeLabel":"string"},"customerId":{"type":"string","description":"The sender, the agent's customer.","example":"Customer:019542f5-b3e7-1d02-0000-000000000010","isRequired":true,"uniqueKey":"claimablePayout.customerId","typeLabel":"string"},"platformCustomerId":{"type":"string","description":"Platform-specific ID of the sender.","example":"user-a1b2c3","isRequired":true,"uniqueKey":"claimablePayout.platformCustomerId","typeLabel":"string"},"status":{"type":"string","enum":["PENDING_APPROVAL","AWAITING_CLAIM","CLAIMED","PAID","EXPIRED","CANCELLED","FAILED"],"description":"Status of a claimable payout. Grid holds the amount against the sender's\nEmbedded Wallet balance and the agent's spending limits from creation until\nthe payout is `PAID`, or releases it when the payout ends in any other\nstatus.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING_APPROVAL` | Waiting for the customer to approve the agent's request. No claim token can be issued yet |\n| `AWAITING_CLAIM` | Approved; the recipient can claim it with a claim token until `expiresAt` |\n| `CLAIMED` | The recipient confirmed a locked quote and Grid is paying her |\n| `PAID` | The payout reached the recipient's account |\n| `EXPIRED` | Not claimed by `expiresAt`, or not approved in time. The hold is released |\n| `CANCELLED` | Cancelled by the agent, or rejected by the customer. The hold is released |\n| `FAILED` | The payout could not be made; see `failureReason`. The hold is released |\n","isRequired":true,"uniqueKey":"claimablePayout.status","typeLabel":"enum\u003cstring>"},"sourceAccountId":{"type":"string","description":"The sender's `EMBEDDED_WALLET` internal account the payout is paid from.","example":"InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","isRequired":true,"uniqueKey":"claimablePayout.sourceAccountId","typeLabel":"string"},"amount":{"type":"object","description":"The amount held and sent, in the source account's currency.","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","example":12550,"isRequired":true,"uniqueKey":"claimablePayout.amount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"claimablePayout.amount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"claimablePayout.amount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"claimablePayout.amount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"claimablePayout.amount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"claimablePayout.amount.currency","typeLabel":"object"}},"isRequired":true,"uniqueKey":"claimablePayout.amount","typeLabel":"object"},"recipient":{"type":"object","description":"The person a claimable payout is for. Exactly one of `phoneNumber` and `email` is set: the one-time code that proves the recipient holds the link goes there.","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"What the sender calls the recipient. Shown to the customer when they approve the payout and in the message that carries the link; the recipient gives her legal name with her payout details.","example":"Maria","isRequired":true,"uniqueKey":"claimablePayout.recipient.name","typeLabel":"string"},"phoneNumber":{"type":"string","description":"The recipient's mobile number in E.164 format.","example":"+639171234567","uniqueKey":"claimablePayout.recipient.phoneNumber","typeLabel":"string"},"email":{"type":"string","format":"email","maxLength":254,"description":"The recipient's email address.","example":"maria@example.com","uniqueKey":"claimablePayout.recipient.email","typeLabel":"string\u003cemail>"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country the recipient is paid in. Defaults to the country of `phoneNumber`'s dialing code; required with `email`. Always present on a payout Grid returns. The recipient can choose another country when she claims.","pattern":"^[A-Z]{2}$","example":"PH","uniqueKey":"claimablePayout.recipient.country","typeLabel":"string"}},"isRequired":true,"uniqueKey":"claimablePayout.recipient","typeLabel":"object"},"expiresAt":{"type":"string","format":"date-time","description":"While `PENDING_APPROVAL`, the end of the approval window; from `AWAITING_CLAIM`, when the claim window ends, 7 days after approval. A payout not `PAID` by then, and not being paid, expires and its hold is released.","example":"2025-10-10T15:00:00Z","isRequired":true,"uniqueKey":"claimablePayout.expiresAt","typeLabel":"string\u003cdate-time>"},"createdAt":{"type":"string","format":"date-time","description":"When the agent sent the payout.","example":"2025-10-03T15:00:00Z","isRequired":true,"uniqueKey":"claimablePayout.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"When the payout last changed.","example":"2025-10-03T15:02:00Z","isRequired":true,"uniqueKey":"claimablePayout.updatedAt","typeLabel":"string\u003cdate-time>"},"note":{"type":"string","maxLength":140,"description":"The sender's note to the recipient.","example":"Happy birthday, Mom","uniqueKey":"claimablePayout.note","typeLabel":"string"},"agentActionId":{"type":"string","description":"The `CLAIMABLE_PAYOUT` agent action the customer approves or rejects.","example":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","uniqueKey":"claimablePayout.agentActionId","typeLabel":"string"},"externalAccountId":{"type":"string","description":"The external account Grid saved under the sender's customer for the recipient's payout details. Present once the recipient has claimed. An agent can pay it again as a saved recipient.","example":"ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","uniqueKey":"claimablePayout.externalAccountId","typeLabel":"string"},"transactionId":{"type":"string","description":"The outgoing transaction that paid the recipient. Present once Grid sends the payout.","example":"Transaction:019542f5-b3e7-1d02-0000-000000000030","uniqueKey":"claimablePayout.transactionId","typeLabel":"string"},"receivedAmount":{"type":"object","description":"What the recipient receives, in her currency. Present once she has a locked quote.","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","example":12550,"isRequired":true,"uniqueKey":"claimablePayout.receivedAmount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"claimablePayout.receivedAmount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"claimablePayout.receivedAmount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"claimablePayout.receivedAmount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"claimablePayout.receivedAmount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"claimablePayout.receivedAmount.currency","typeLabel":"object"}},"uniqueKey":"claimablePayout.receivedAmount","typeLabel":"object"},"paymentRail":{"type":"string","description":"The rail the recipient chose. Present once she has claimed.","enum":["ACH","ACH_COLOMBIA","ACH_SAME_DAY","BANK_TRANSFER","BRE_B","CIPS","FAST","FASTER_PAYMENTS","FEDNOW","INSTAPAY","MOBILE_MONEY","NEFT","PAYNOW","PESONET","PIX","RTGS","RTP","SEPA","SEPA_INSTANT","SPEI","SWIFT","UNIONPAY","UPI","WIRE"],"example":"ACH","uniqueKey":"claimablePayout.paymentRail","typeLabel":"enum\u003cstring>"},"failureReason":{"type":"string","description":"Present only when `status` is `FAILED`.","enum":["INSUFFICIENT_FUNDS","RECIPIENT_REFUSED","AGENT_INACTIVE","PAYOUT_FAILED"],"uniqueKey":"claimablePayout.failureReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"claimablePayout","typeLabel":"object"},"storedCardUse":{"type":"object","description":"The stored card the agent asked to use, where, and for how much, so an approval decision can show them. Present for `USE_STORED_CARD`. Approving the action lets the agent collect a single-use link with `POST /agents/me/stored-cards/{storedCardId}/reveal` and `actionId`.","required":["storedCardId","card","merchant","amount","currency","purpose","needsCvc","autoApproved"],"properties":{"storedCardId":{"type":"string","maxLength":64,"description":"The stored card.","example":"StoredCard:019542f5-b3e7-1d02-0000-000000000077","isRequired":true,"uniqueKey":"storedCardUse.storedCardId","typeLabel":"string"},"card":{"type":"object","description":"What can be shown about a stored card. None of it is cardholder data a merchant could charge.","required":["lastFour","brand","funding","expiryMonth","expiryYear"],"properties":{"lastFour":{"type":"string","pattern":"^[0-9]{4}$","minLength":4,"maxLength":4,"description":"Last four digits of the card number.","example":"0005","isRequired":true,"uniqueKey":"storedCardUse.card.lastFour","typeLabel":"string"},"brand":{"type":"string","maxLength":32,"description":"The card network, from the issuer's BIN data. Known values: `VISA`, `MASTERCARD`, `AMERICAN_EXPRESS`, `DISCOVER`, `DINERS_CLUB`, `JCB`, `UNIONPAY`, `UNKNOWN`. Treat an unrecognized value as `UNKNOWN` rather than an error.","example":"VISA","isRequired":true,"uniqueKey":"storedCardUse.card.brand","typeLabel":"string"},"funding":{"type":"string","maxLength":32,"description":"How the card is funded, from the issuer's BIN data. Known values: `CREDIT`, `DEBIT`, `PREPAID`, `CHARGE`, `DEFERRED_DEBIT`, `UNKNOWN`. Treat an unrecognized value as `UNKNOWN` rather than an error.","example":"CREDIT","isRequired":true,"uniqueKey":"storedCardUse.card.funding","typeLabel":"string"},"expiryMonth":{"type":"integer","minimum":1,"maximum":12,"description":"Expiry month, 1 to 12.","example":8,"isRequired":true,"uniqueKey":"storedCardUse.card.expiryMonth","typeLabel":"integer"},"expiryYear":{"type":"integer","minimum":2000,"maximum":2199,"description":"Four-digit expiry year.","example":2029,"isRequired":true,"uniqueKey":"storedCardUse.card.expiryYear","typeLabel":"integer"},"issuerCountry":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country of the card's issuer, when the BIN data names one.","example":"US","uniqueKey":"storedCardUse.card.issuerCountry","typeLabel":"string"},"nickname":{"type":"string","maxLength":64,"description":"The customer's own label for the card.","example":"Personal Visa","uniqueKey":"storedCardUse.card.nickname","typeLabel":"string"}},"isRequired":true,"uniqueKey":"storedCardUse.card","typeLabel":"object"},"merchant":{"type":"string","maxLength":255,"description":"Where the agent said the card will be used.","example":"example-store.com","isRequired":true,"uniqueKey":"storedCardUse.merchant","typeLabel":"string"},"amount":{"type":"integer","format":"int64","minimum":1,"description":"The amount the agent said it expects to be charged, in the smallest unit of `currency`.","example":4999,"isRequired":true,"uniqueKey":"storedCardUse.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 code of `amount`.","example":"USD","isRequired":true,"uniqueKey":"storedCardUse.currency","typeLabel":"string"},"purpose":{"type":"string","maxLength":255,"description":"What the agent said the purchase is.","example":"Running shoes, size 10","isRequired":true,"uniqueKey":"storedCardUse.purpose","typeLabel":"string"},"needsCvc":{"type":"boolean","description":"Whether the agent asked for the security code. Approving such a use needs `storedCardCvc` on `POST /agents/{agentId}/actions/{actionId}/approve`.","example":false,"isRequired":true,"uniqueKey":"storedCardUse.needsCvc","typeLabel":"boolean"},"autoApproved":{"type":"boolean","description":"Whether Grid approved the use without asking, because the customer had chosen to auto-approve this agent at this merchant up to this amount. Such a use is created `APPROVED` and sent as an `AGENT_ACTION.APPROVED` webhook, so the platform can tell the customer of every use.","example":false,"isRequired":true,"uniqueKey":"storedCardUse.autoApproved","typeLabel":"boolean"},"linkIssuedAt":{"type":"string","format":"date-time","description":"When Grid issued the agent's single-use link. Absent until then.","example":"2026-11-06T15:00:30Z","uniqueKey":"storedCardUse.linkIssuedAt","typeLabel":"string\u003cdate-time>"},"revealedAt":{"type":"string","format":"date-time","description":"When the agent opened the link. Absent until then.","example":"2026-11-06T15:00:41Z","uniqueKey":"storedCardUse.revealedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"storedCardUse","typeLabel":"object"},"cardId":{"type":"string","description":"The purchase card the action issued, or for an increase the card whose amount it raised. Present for an `ISSUE_PURCHASE_CARD` action once it is `APPROVED` and the card is issued or increased; read it with `GET /agents/me/cards/{cardId}`.","example":"Card:019542f5-b3e7-1d02-0000-000000000011","uniqueKey":"cardId","typeLabel":"string"},"transaction":{"oneOf":[{"type":"object","title":"Incoming Transaction","description":"The resulting transaction, populated once the action has been approved and execution has begun. Absent while the action is `PENDING_APPROVAL` or `REJECTED`.","required":["type","id","status","direction","destination","customerId","platformCustomerId"],"properties":{"id":{"type":"string","description":"Unique identifier for the transaction","example":"Transaction:019542f5-b3e7-1d02-0000-000000000004","isRequired":true,"uniqueKey":"transaction.oneOf.0.id","typeLabel":"string"},"status":{"type":"string","enum":["CREATED","PENDING","PENDING_AUTHORIZATION","PROCESSING","COMPLETED","REJECTED","FAILED","REFUNDED","EXPIRED"],"description":"Status of a payment transaction.\n\n| Status | Description |\n|--------|-------------|\n| `CREATED` | Initial lookup has been created |\n| `PENDING` | Quote has been created |\n| `PENDING_AUTHORIZATION` | Awaiting Strong Customer Authentication. Only occurs for customers in a region where SCA is required (e.g. EU). The challenge is carried by the quote, not the transaction — fetch `GET /quotes/{quoteId}` using the transaction's `quoteId`, then authorize its `scaChallenge` via `POST /quotes/{quoteId}/authorize`. |\n| `PROCESSING` | Funding has been received and payment initiated |\n| `COMPLETED` | The funds are where settlement put them. A return that takes them back moves the transaction to `FAILED`, and the returned side's `railDetails` shows `RETURNED`. A transaction stays `COMPLETED` through a return only when a later step that can't be undone already used the funds |\n| `REJECTED` | Receiving institution or wallet rejected payment, payment has been refunded |\n| `FAILED` | The payment did not reach its destination, or the funds were sent back after it did. Not terminal for an incoming payment: a dishonored return restores the credit and moves it to `COMPLETED`. A returned payout stays `FAILED`, since it has already been refunded. Each step shows on the returned side's `railDetails` |\n| `REFUNDED` | Deprecated. A refund is reported on the transaction's `refund` object, and the status stays `FAILED` |\n| `EXPIRED` | Quote has expired. Terminal |\n","isRequired":true,"uniqueKey":"transaction.oneOf.0.status","typeLabel":"enum\u003cstring>"},"type":{"type":"string","description":"Type of transaction","enum":["INCOMING"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.type","typeLabel":"enum\u003cstring>"},"direction":{"type":"string","enum":["CREDIT","DEBIT"],"description":"Whether this transaction credits or debits the customer's account.","isRequired":true,"uniqueKey":"transaction.oneOf.0.direction","typeLabel":"enum\u003cstring>"},"destination":{"oneOf":[{"type":"object","title":"Account Destination","description":"Destination account details","required":["accountId","destinationType"],"properties":{"destinationType":{"type":"string","description":"Type of transaction destination","enum":["ACCOUNT"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.destinationType","typeLabel":"enum\u003cstring>"},"accountId":{"type":"string","description":"Destination account identifier","example":"ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.accountId","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the destination","example":"EUR","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.currency","typeLabel":"string"},"railDetails":{"oneOf":[{"type":"object","title":"On-Chain Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","transactionHash","network"],"properties":{"paymentRail":{"type":"string","enum":["ONCHAIN"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.0.paymentRail","typeLabel":"enum\u003cstring>"},"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.0.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.0.network","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.0","typeLabel":"On-Chain Transfer · object"},{"type":"object","title":"ACH Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["ACH","ACH_SAME_DAY"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","RETURNED","RETURN_DISHONORED","RETURN_CONTESTED","REVERSED","FAILED"],"description":"Status of the entry on the ACH network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to the ACH network and not yet settled. |\n| `SETTLED` | The entry settled. |\n| `RETURNED` | The receiving bank returned the entry, before or after it settled. |\n| `RETURN_DISHONORED` | The originating bank dishonored the return, so the returned funds came back. |\n| `RETURN_CONTESTED` | The receiving bank contested the dishonor, so the funds went back again. |\n| `REVERSED` | The originator reversed the entry after it settled. |\n| `FAILED` | The entry was rejected before submission and no funds moved. |\n\nA return, dishonor or contest can arrive days after the step before it. This status\nreports the ACH entry; the transaction's top-level `status` reports where the funds\nare now. A return moves the transaction to `FAILED`. On an incoming payment, a\ndishonor brings the credit back and moves it to `COMPLETED`, and a contest moves it\nto `FAILED` again. A returned payout stays `FAILED` through a dishonor, since it has\nalready been refunded; the rail status still records the dishonor.","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.settledAt","typeLabel":"string\u003cdate-time>"},"traceNumber":{"type":"string","description":"15-digit ACH trace number of the entry.","example":"021000020123456","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.traceNumber","typeLabel":"string"},"statementDescriptor":{"type":"string","maxLength":10,"description":"The entry's Company Entry Description, which the receiving bank shows on the account holder's statement. On payments you originate, this is the quote's `statementDescriptor`, or Grid's default.","example":"PAYROLL","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.statementDescriptor","typeLabel":"string"},"addenda":{"type":"string","description":"Payment-related text carried in the entry's addenda record. On payments you originate, this is the `remittanceInformation` you provided.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.addenda","typeLabel":"string"},"returnedAt":{"type":"string","format":"date-time","description":"When the receiving bank returned the entry. Present once the entry has been returned, including after a later dishonor or contest.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.returnedAt","typeLabel":"string\u003cdate-time>"},"returnCode":{"type":"string","pattern":"^R[0-9]{2}$","description":"The NACHA return reason code the receiving bank returned the entry under, such as `R01` (insufficient funds) or `R10` (customer advises unauthorized). Present whenever `returnedAt` is. Group returns by this code to track your return rate for each reason, or by `returnCategory` for Nacha's threshold categories. NACHA may add codes, so accept any value matching the pattern.","example":"R01","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.returnCode","typeLabel":"string"},"returnCategory":{"type":"string","enum":["ADMINISTRATIVE","UNAUTHORIZED"],"description":"The Nacha return-rate category `returnCode` counts toward. Present only when the code is in one, so a return such as `R01` has `returnCode` but no `returnCategory`.","example":"UNAUTHORIZED","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.returnCategory","typeLabel":"enum\u003cstring>"},"dishonoredAt":{"type":"string","format":"date-time","description":"When the originating bank dishonored the return. Present once `status` has reached `RETURN_DISHONORED`.","example":"2026-10-04T14:00:00Z","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.dishonoredAt","typeLabel":"string\u003cdate-time>"},"contestedAt":{"type":"string","format":"date-time","description":"When the receiving bank contested the dishonor. Present when `status` is `RETURN_CONTESTED`.","example":"2026-10-07T14:00:00Z","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.contestedAt","typeLabel":"string\u003cdate-time>"},"reversedAt":{"type":"string","format":"date-time","description":"When the originator reversed the entry. Present when `status` is `REVERSED`.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1.reversedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.1","typeLabel":"ACH Transfer · object"},{"type":"object","title":"Wire Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["WIRE"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the wire on Fedwire.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to Fedwire and not yet delivered. |\n| `SETTLED` | Fedwire delivered the wire. |\n| `FAILED` | Fedwire or the receiving bank rejected the wire and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"type":"object","title":"Wire Bank Account Details","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.bankAccount.accountNumber","typeLabel":"string"},"bankName":{"type":"string","description":"Name of the account's bank.","example":"Chase Bank","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.bankAccount.bankName","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.bankAccount","typeLabel":"Wire Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.settledAt","typeLabel":"string\u003cdate-time>"},"imad":{"type":"string","description":"Fedwire Input Message Accountability Data assigned when the wire was sent.","example":"20260929MMQFMP9C000123","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.imad","typeLabel":"string"},"originatorToBeneficiaryInformation":{"type":"string","description":"Free-form originator-to-beneficiary information (OBI) sent with the wire.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2.originatorToBeneficiaryInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.2","typeLabel":"Wire Transfer · object"},{"type":"object","title":"FedNow Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["FEDNOW"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on FedNow.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.3","typeLabel":"FedNow Transfer · object"},{"type":"object","title":"RTP Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["RTP"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on the RTP network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.4","typeLabel":"RTP Transfer · object"},{"type":"object","title":"SWIFT Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail"],"properties":{"paymentRail":{"type":"string","enum":["SWIFT"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.5.paymentRail","typeLabel":"enum\u003cstring>"},"uetr":{"type":"string","format":"uuid","description":"Unique End-to-end Transaction Reference of the wire. Give it to the beneficiary's bank to trace the payment.","example":"f47bbdd1-3d90-44c4-998d-a02bd814d5d3","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.5.uetr","typeLabel":"string\u003cuuid>"}},"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails.oneOf.5","typeLabel":"SWIFT Transfer · object"}],"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.railDetails","typeLabel":"On-Chain Transfer · object | ACH Transfer · object | Wire Transfer · object | FedNow Transfer · object | RTP Transfer · object | SWIFT Transfer · object"},"onChainTransaction":{"type":"object","required":["transactionHash","network"],"properties":{"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.onChainTransaction.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0.onChainTransaction.network","typeLabel":"enum\u003cstring>"}},"deprecated":true,"description":"Deprecated. Use `railDetails`, which carries the same hash and network when `paymentRail` is `ONCHAIN`.","uniqueKey":"transaction.oneOf.0.destination.oneOf.0.onChainTransaction","typeLabel":"object"}},"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.0","typeLabel":"Account Destination · object"},{"type":"object","title":"UMA Address Destination","description":"UMA address destination details","required":["umaAddress","destinationType"],"properties":{"destinationType":{"type":"string","description":"Type of transaction destination","enum":["UMA_ADDRESS"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.1.destinationType","typeLabel":"enum\u003cstring>"},"umaAddress":{"type":"string","description":"UMA address of the recipient","example":"$receiver@uma.domain.com","isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.1.umaAddress","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the destination","example":"EUR","uniqueKey":"transaction.oneOf.0.destination.oneOf.1.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination.oneOf.1","typeLabel":"UMA Address Destination · object"}],"isRequired":true,"uniqueKey":"transaction.oneOf.0.destination","typeLabel":"Account Destination · object | UMA Address Destination · object"},"customerId":{"type":"string","description":"System ID of the customer this transaction belongs to","example":"Customer:019542f5-b3e7-1d02-0000-000000000001","isRequired":true,"uniqueKey":"transaction.oneOf.0.customerId","typeLabel":"string"},"platformCustomerId":{"type":"string","description":"Platform-specific ID of the customer this transaction belongs to","example":"18d3e5f7b4a9c2","isRequired":true,"uniqueKey":"transaction.oneOf.0.platformCustomerId","typeLabel":"string"},"pendingReason":{"type":"string","enum":["COUNTERPARTY_DECLARATION_REQUIRED","WALLET_VERIFICATION_REQUIRED","COUNTERPARTY_INFORMATION_REQUIRED","COMPLIANCE_REVIEW"],"description":"Present when compliance review or required customer action is delaying settlement.","uniqueKey":"transaction.oneOf.0.pendingReason","typeLabel":"enum\u003cstring>"},"ruleBasedAccountId":{"type":"string","description":"The `RULE_BASED` internal account whose deposit this transaction sweeps. Present only on sweep transactions. For these, `source` describes the party that made the deposit when it is known, and is this account otherwise.","example":"InternalAccount:019542f5-b3e7-1d02-0000-000000000011","uniqueKey":"transaction.oneOf.0.ruleBasedAccountId","typeLabel":"string"},"settledAt":{"type":"string","format":"date-time","description":"When the payment was or will be settled","example":"2025-08-15T14:30:00Z","uniqueKey":"transaction.oneOf.0.settledAt","typeLabel":"string\u003cdate-time>"},"createdAt":{"type":"string","format":"date-time","description":"When the transaction was created","example":"2025-08-15T14:25:18Z","uniqueKey":"transaction.oneOf.0.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"When the transaction was last updated","example":"2025-08-15T14:30:00Z","uniqueKey":"transaction.oneOf.0.updatedAt","typeLabel":"string\u003cdate-time>"},"receiptDeliveryConfirmedAt":{"type":"string","format":"date-time","description":"The time at which the platform confirmed delivery of the receipt to their customer.","example":"2025-08-15T14:31:00Z","uniqueKey":"transaction.oneOf.0.receiptDeliveryConfirmedAt","typeLabel":"string\u003cdate-time>"},"agentId":{"type":"string","description":"If this transaction was initiated by an agent, the system-generated ID of that agent. Absent for platform-initiated transactions.","example":"Agent:019542f5-b3e7-1d02-0000-000000000042","uniqueKey":"transaction.oneOf.0.agentId","typeLabel":"string"},"description":{"type":"string","description":"Optional memo or description for the payment","example":"Payment for invoice #1234","uniqueKey":"transaction.oneOf.0.description","typeLabel":"string"},"sentAmount":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","example":12550,"isRequired":true,"uniqueKey":"transaction.oneOf.0.sentAmount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"transaction.oneOf.0.sentAmount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"transaction.oneOf.0.sentAmount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"transaction.oneOf.0.sentAmount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"transaction.oneOf.0.sentAmount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"transaction.oneOf.0.sentAmount.currency","typeLabel":"object"}},"description":"Amount sent in the sender's currency","uniqueKey":"transaction.oneOf.0.sentAmount","typeLabel":"object"},"exchangeRate":{"type":"number","description":"Number of sending currency units per receiving currency unit. The rate is fee-exclusive: Grid deducts fees from the sending amount before converting at this rate.","exclusiveMinimum":0,"example":1.08,"uniqueKey":"transaction.oneOf.0.exchangeRate","typeLabel":"number"},"quoteId":{"type":"string","description":"The ID of the quote that was used to trigger this payment","example":"Quote:019542f5-b3e7-1d02-0000-000000000006","uniqueKey":"transaction.oneOf.0.quoteId","typeLabel":"string"},"refund":{"type":"object","required":["reference","initiatedAt","status"],"properties":{"reference":{"type":"string","description":"The unique reference ID of the refund","example":"UMA-Q12345-REFUND","isRequired":true,"uniqueKey":"transaction.oneOf.0.refund.reference","typeLabel":"string"},"initiatedAt":{"type":"string","format":"date-time","description":"When the refund was initiated","example":"2025-08-15T14:30:00Z","isRequired":true,"uniqueKey":"transaction.oneOf.0.refund.initiatedAt","typeLabel":"string\u003cdate-time>"},"status":{"type":"string","enum":["PENDING","COMPLETED","FAILED"],"description":"Current status of the refund","example":"COMPLETED","isRequired":true,"uniqueKey":"transaction.oneOf.0.refund.status","typeLabel":"enum\u003cstring>"},"settledAt":{"type":"string","format":"date-time","description":"When the refund was settled","example":"2025-08-15T14:35:00Z","uniqueKey":"transaction.oneOf.0.refund.settledAt","typeLabel":"string\u003cdate-time>"},"reason":{"type":"string","enum":["TRANSACTION_FAILED","USER_CANCELLATION","TIMEOUT"],"description":"Reason for the refund","example":"TRANSACTION_FAILED","uniqueKey":"transaction.oneOf.0.refund.reason","typeLabel":"enum\u003cstring>"}},"description":"The refund if transaction was refunded.","uniqueKey":"transaction.oneOf.0.refund","typeLabel":"object"},"counterpartyInformation":{"type":"object","description":"Additional information about the counterparty, if available and relevant to the transaction and platform.","additionalProperties":true,"example":{"FULL_NAME":"John Sender","BIRTH_DATE":"1985-06-15","NATIONALITY":"DE"},"uniqueKey":"transaction.oneOf.0.counterpartyInformation","typeLabel":"object"},"source":{"oneOf":[{"type":"object","title":"Account Source","description":"Source account details","required":["accountId","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of transaction source","enum":["ACCOUNT"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.sourceType","typeLabel":"enum\u003cstring>"},"accountId":{"type":"string","description":"Source account identifier","example":"InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.accountId","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the source","example":"USD","uniqueKey":"transaction.oneOf.0.source.oneOf.0.currency","typeLabel":"string"},"railDetails":{"oneOf":[{"type":"object","title":"On-Chain Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","transactionHash","network"],"properties":{"paymentRail":{"type":"string","enum":["ONCHAIN"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.0.paymentRail","typeLabel":"enum\u003cstring>"},"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.0.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.0.network","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.0","typeLabel":"On-Chain Transfer · object"},{"type":"object","title":"ACH Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["ACH","ACH_SAME_DAY"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","RETURNED","RETURN_DISHONORED","RETURN_CONTESTED","REVERSED","FAILED"],"description":"Status of the entry on the ACH network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to the ACH network and not yet settled. |\n| `SETTLED` | The entry settled. |\n| `RETURNED` | The receiving bank returned the entry, before or after it settled. |\n| `RETURN_DISHONORED` | The originating bank dishonored the return, so the returned funds came back. |\n| `RETURN_CONTESTED` | The receiving bank contested the dishonor, so the funds went back again. |\n| `REVERSED` | The originator reversed the entry after it settled. |\n| `FAILED` | The entry was rejected before submission and no funds moved. |\n\nA return, dishonor or contest can arrive days after the step before it. This status\nreports the ACH entry; the transaction's top-level `status` reports where the funds\nare now. A return moves the transaction to `FAILED`. On an incoming payment, a\ndishonor brings the credit back and moves it to `COMPLETED`, and a contest moves it\nto `FAILED` again. A returned payout stays `FAILED` through a dishonor, since it has\nalready been refunded; the rail status still records the dishonor.","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.settledAt","typeLabel":"string\u003cdate-time>"},"traceNumber":{"type":"string","description":"15-digit ACH trace number of the entry.","example":"021000020123456","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.traceNumber","typeLabel":"string"},"statementDescriptor":{"type":"string","maxLength":10,"description":"The entry's Company Entry Description, which the receiving bank shows on the account holder's statement. On payments you originate, this is the quote's `statementDescriptor`, or Grid's default.","example":"PAYROLL","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.statementDescriptor","typeLabel":"string"},"addenda":{"type":"string","description":"Payment-related text carried in the entry's addenda record. On payments you originate, this is the `remittanceInformation` you provided.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.addenda","typeLabel":"string"},"returnedAt":{"type":"string","format":"date-time","description":"When the receiving bank returned the entry. Present once the entry has been returned, including after a later dishonor or contest.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.returnedAt","typeLabel":"string\u003cdate-time>"},"returnCode":{"type":"string","pattern":"^R[0-9]{2}$","description":"The NACHA return reason code the receiving bank returned the entry under, such as `R01` (insufficient funds) or `R10` (customer advises unauthorized). Present whenever `returnedAt` is. Group returns by this code to track your return rate for each reason, or by `returnCategory` for Nacha's threshold categories. NACHA may add codes, so accept any value matching the pattern.","example":"R01","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.returnCode","typeLabel":"string"},"returnCategory":{"type":"string","enum":["ADMINISTRATIVE","UNAUTHORIZED"],"description":"The Nacha return-rate category `returnCode` counts toward. Present only when the code is in one, so a return such as `R01` has `returnCode` but no `returnCategory`.","example":"UNAUTHORIZED","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.returnCategory","typeLabel":"enum\u003cstring>"},"dishonoredAt":{"type":"string","format":"date-time","description":"When the originating bank dishonored the return. Present once `status` has reached `RETURN_DISHONORED`.","example":"2026-10-04T14:00:00Z","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.dishonoredAt","typeLabel":"string\u003cdate-time>"},"contestedAt":{"type":"string","format":"date-time","description":"When the receiving bank contested the dishonor. Present when `status` is `RETURN_CONTESTED`.","example":"2026-10-07T14:00:00Z","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.contestedAt","typeLabel":"string\u003cdate-time>"},"reversedAt":{"type":"string","format":"date-time","description":"When the originator reversed the entry. Present when `status` is `REVERSED`.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1.reversedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.1","typeLabel":"ACH Transfer · object"},{"type":"object","title":"Wire Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["WIRE"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the wire on Fedwire.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to Fedwire and not yet delivered. |\n| `SETTLED` | Fedwire delivered the wire. |\n| `FAILED` | Fedwire or the receiving bank rejected the wire and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"type":"object","title":"Wire Bank Account Details","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.bankAccount.accountNumber","typeLabel":"string"},"bankName":{"type":"string","description":"Name of the account's bank.","example":"Chase Bank","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.bankAccount.bankName","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.bankAccount","typeLabel":"Wire Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.settledAt","typeLabel":"string\u003cdate-time>"},"imad":{"type":"string","description":"Fedwire Input Message Accountability Data assigned when the wire was sent.","example":"20260929MMQFMP9C000123","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.imad","typeLabel":"string"},"originatorToBeneficiaryInformation":{"type":"string","description":"Free-form originator-to-beneficiary information (OBI) sent with the wire.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2.originatorToBeneficiaryInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.2","typeLabel":"Wire Transfer · object"},{"type":"object","title":"FedNow Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["FEDNOW"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on FedNow.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.3","typeLabel":"FedNow Transfer · object"},{"type":"object","title":"RTP Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["RTP"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on the RTP network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.4","typeLabel":"RTP Transfer · object"},{"type":"object","title":"SWIFT Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail"],"properties":{"paymentRail":{"type":"string","enum":["SWIFT"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.5.paymentRail","typeLabel":"enum\u003cstring>"},"uetr":{"type":"string","format":"uuid","description":"Unique End-to-end Transaction Reference of the wire. Give it to the beneficiary's bank to trace the payment.","example":"f47bbdd1-3d90-44c4-998d-a02bd814d5d3","uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.5.uetr","typeLabel":"string\u003cuuid>"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails.oneOf.5","typeLabel":"SWIFT Transfer · object"}],"uniqueKey":"transaction.oneOf.0.source.oneOf.0.railDetails","typeLabel":"On-Chain Transfer · object | ACH Transfer · object | Wire Transfer · object | FedNow Transfer · object | RTP Transfer · object | SWIFT Transfer · object"},"onChainTransaction":{"type":"object","required":["transactionHash","network"],"properties":{"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.onChainTransaction.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.0.onChainTransaction.network","typeLabel":"enum\u003cstring>"}},"deprecated":true,"description":"Deprecated. Use `railDetails`, which carries the same hash and network when `paymentRail` is `ONCHAIN`.","uniqueKey":"transaction.oneOf.0.source.oneOf.0.onChainTransaction","typeLabel":"object"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.0","typeLabel":"Account Source · object"},{"type":"object","title":"UMA Address Source","description":"UMA address source details","required":["umaAddress","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of transaction source","enum":["UMA_ADDRESS"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.1.sourceType","typeLabel":"enum\u003cstring>"},"umaAddress":{"type":"string","description":"UMA address of the sender","example":"$sender@uma.domain.com","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.1.umaAddress","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the source","example":"USD","uniqueKey":"transaction.oneOf.0.source.oneOf.1.currency","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.1","typeLabel":"UMA Address Source · object"},{"type":"object","title":"External Funding Source","description":"Transaction was funded using an external funding source. `railDetails` describes the transfer that delivered the funds; its fields are populated on a best-effort basis depending on what the funding source provides. Rails without a `railDetails` variant, such as SWIFT, carry the originator's details in the deprecated flat fields only.","required":["currency","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of transaction source","enum":["REALTIME_FUNDING"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.sourceType","typeLabel":"enum\u003cstring>"},"currency":{"type":"string","description":"Currency code for the funding source","example":"USDC","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.currency","typeLabel":"string"},"customerId":{"type":"string","description":"The customer on whose behalf the transaction was initiated.","example":"Customer:019542f5-b3e7-1d02-0000-000000000009","uniqueKey":"transaction.oneOf.0.source.oneOf.2.customerId","typeLabel":"string"},"accountHolderName":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.bankAccount.accountHolderName`. The name of the originator (sender) of the payment. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.2.accountHolderName","typeLabel":"string"},"accountIdentifier":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.bankAccount.accountNumber`. The originator's account number or IBAN. May be masked or partial depending on the rail. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.2.accountIdentifier","typeLabel":"string"},"bankName":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.bankAccount.bankName` on wires. The name of the originating bank. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"Chase Bank","uniqueKey":"transaction.oneOf.0.source.oneOf.2.bankName","typeLabel":"string"},"bankIdentifier":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.bankAccount.routingNumber`. The identifier of the originating bank, such as a routing number, BIC, or SWIFT code. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.2.bankIdentifier","typeLabel":"string"},"paymentRail":{"type":"string","description":"Deprecated. Use `railDetails.paymentRail`. The payment rail the funds arrived on. Still populated on rails without a `railDetails` variant, such as SWIFT.","enum":["ACH","ACH_COLOMBIA","ACH_SAME_DAY","BANK_TRANSFER","BRE_B","CIPS","FAST","FASTER_PAYMENTS","FEDNOW","INSTAPAY","MOBILE_MONEY","NEFT","PAYNOW","PESONET","PIX","RTGS","RTP","SEPA","SEPA_INSTANT","SPEI","SWIFT","UNIONPAY","UPI","WIRE"],"deprecated":true,"example":"ACH","uniqueKey":"transaction.oneOf.0.source.oneOf.2.paymentRail","typeLabel":"enum\u003cstring>"},"remittanceInformation":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.addenda` for ACH, `railDetails.originatorToBeneficiaryInformation` for wires and `railDetails.remittanceInformation` for RTP and FedNow. Free-form information about the payment provided by the originator. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"12345","uniqueKey":"transaction.oneOf.0.source.oneOf.2.remittanceInformation","typeLabel":"string"},"endToEndId":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.endToEndId`. The originator's own end-to-end reference for the payment. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.0.source.oneOf.2.endToEndId","typeLabel":"string"},"traceNumber":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.traceNumber` for ACH and `railDetails.imad` for wires. Rail-level tracking identifier for the payment. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"021000020123456","uniqueKey":"transaction.oneOf.0.source.oneOf.2.traceNumber","typeLabel":"string"},"railDetails":{"oneOf":[{"type":"object","title":"On-Chain Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","transactionHash","network"],"properties":{"paymentRail":{"type":"string","enum":["ONCHAIN"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.0.paymentRail","typeLabel":"enum\u003cstring>"},"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.0.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.0.network","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.0","typeLabel":"On-Chain Transfer · object"},{"type":"object","title":"ACH Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["ACH","ACH_SAME_DAY"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","RETURNED","RETURN_DISHONORED","RETURN_CONTESTED","REVERSED","FAILED"],"description":"Status of the entry on the ACH network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to the ACH network and not yet settled. |\n| `SETTLED` | The entry settled. |\n| `RETURNED` | The receiving bank returned the entry, before or after it settled. |\n| `RETURN_DISHONORED` | The originating bank dishonored the return, so the returned funds came back. |\n| `RETURN_CONTESTED` | The receiving bank contested the dishonor, so the funds went back again. |\n| `REVERSED` | The originator reversed the entry after it settled. |\n| `FAILED` | The entry was rejected before submission and no funds moved. |\n\nA return, dishonor or contest can arrive days after the step before it. This status\nreports the ACH entry; the transaction's top-level `status` reports where the funds\nare now. A return moves the transaction to `FAILED`. On an incoming payment, a\ndishonor brings the credit back and moves it to `COMPLETED`, and a contest moves it\nto `FAILED` again. A returned payout stays `FAILED` through a dishonor, since it has\nalready been refunded; the rail status still records the dishonor.","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.settledAt","typeLabel":"string\u003cdate-time>"},"traceNumber":{"type":"string","description":"15-digit ACH trace number of the entry.","example":"021000020123456","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.traceNumber","typeLabel":"string"},"statementDescriptor":{"type":"string","maxLength":10,"description":"The entry's Company Entry Description, which the receiving bank shows on the account holder's statement. On payments you originate, this is the quote's `statementDescriptor`, or Grid's default.","example":"PAYROLL","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.statementDescriptor","typeLabel":"string"},"addenda":{"type":"string","description":"Payment-related text carried in the entry's addenda record. On payments you originate, this is the `remittanceInformation` you provided.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.addenda","typeLabel":"string"},"returnedAt":{"type":"string","format":"date-time","description":"When the receiving bank returned the entry. Present once the entry has been returned, including after a later dishonor or contest.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.returnedAt","typeLabel":"string\u003cdate-time>"},"returnCode":{"type":"string","pattern":"^R[0-9]{2}$","description":"The NACHA return reason code the receiving bank returned the entry under, such as `R01` (insufficient funds) or `R10` (customer advises unauthorized). Present whenever `returnedAt` is. Group returns by this code to track your return rate for each reason, or by `returnCategory` for Nacha's threshold categories. NACHA may add codes, so accept any value matching the pattern.","example":"R01","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.returnCode","typeLabel":"string"},"returnCategory":{"type":"string","enum":["ADMINISTRATIVE","UNAUTHORIZED"],"description":"The Nacha return-rate category `returnCode` counts toward. Present only when the code is in one, so a return such as `R01` has `returnCode` but no `returnCategory`.","example":"UNAUTHORIZED","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.returnCategory","typeLabel":"enum\u003cstring>"},"dishonoredAt":{"type":"string","format":"date-time","description":"When the originating bank dishonored the return. Present once `status` has reached `RETURN_DISHONORED`.","example":"2026-10-04T14:00:00Z","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.dishonoredAt","typeLabel":"string\u003cdate-time>"},"contestedAt":{"type":"string","format":"date-time","description":"When the receiving bank contested the dishonor. Present when `status` is `RETURN_CONTESTED`.","example":"2026-10-07T14:00:00Z","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.contestedAt","typeLabel":"string\u003cdate-time>"},"reversedAt":{"type":"string","format":"date-time","description":"When the originator reversed the entry. Present when `status` is `REVERSED`.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1.reversedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.1","typeLabel":"ACH Transfer · object"},{"type":"object","title":"Wire Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["WIRE"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the wire on Fedwire.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to Fedwire and not yet delivered. |\n| `SETTLED` | Fedwire delivered the wire. |\n| `FAILED` | Fedwire or the receiving bank rejected the wire and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"type":"object","title":"Wire Bank Account Details","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.bankAccount.accountNumber","typeLabel":"string"},"bankName":{"type":"string","description":"Name of the account's bank.","example":"Chase Bank","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.bankAccount.bankName","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.bankAccount","typeLabel":"Wire Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.settledAt","typeLabel":"string\u003cdate-time>"},"imad":{"type":"string","description":"Fedwire Input Message Accountability Data assigned when the wire was sent.","example":"20260929MMQFMP9C000123","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.imad","typeLabel":"string"},"originatorToBeneficiaryInformation":{"type":"string","description":"Free-form originator-to-beneficiary information (OBI) sent with the wire.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2.originatorToBeneficiaryInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.2","typeLabel":"Wire Transfer · object"},{"type":"object","title":"FedNow Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["FEDNOW"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on FedNow.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.3","typeLabel":"FedNow Transfer · object"},{"type":"object","title":"RTP Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["RTP"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on the RTP network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.4","typeLabel":"RTP Transfer · object"},{"type":"object","title":"SWIFT Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail"],"properties":{"paymentRail":{"type":"string","enum":["SWIFT"],"isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.5.paymentRail","typeLabel":"enum\u003cstring>"},"uetr":{"type":"string","format":"uuid","description":"Unique End-to-end Transaction Reference of the wire. Give it to the beneficiary's bank to trace the payment.","example":"f47bbdd1-3d90-44c4-998d-a02bd814d5d3","uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.5.uetr","typeLabel":"string\u003cuuid>"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails.oneOf.5","typeLabel":"SWIFT Transfer · object"}],"uniqueKey":"transaction.oneOf.0.source.oneOf.2.railDetails","typeLabel":"On-Chain Transfer · object | ACH Transfer · object | Wire Transfer · object | FedNow Transfer · object | RTP Transfer · object | SWIFT Transfer · object"},"onChainTransaction":{"type":"object","required":["transactionHash","network"],"properties":{"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.onChainTransaction.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.0.source.oneOf.2.onChainTransaction.network","typeLabel":"enum\u003cstring>"}},"deprecated":true,"description":"Deprecated. Use `railDetails`, which carries the same hash and network when `paymentRail` is `ONCHAIN`.","uniqueKey":"transaction.oneOf.0.source.oneOf.2.onChainTransaction","typeLabel":"object"}},"uniqueKey":"transaction.oneOf.0.source.oneOf.2","typeLabel":"External Funding Source · object"}],"uniqueKey":"transaction.oneOf.0.source","typeLabel":"Account Source · object | UMA Address Source · object | External Funding Source · object"},"receivedAmount":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","example":12550,"isRequired":true,"uniqueKey":"transaction.oneOf.0.receivedAmount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"transaction.oneOf.0.receivedAmount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"transaction.oneOf.0.receivedAmount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"transaction.oneOf.0.receivedAmount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"transaction.oneOf.0.receivedAmount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"transaction.oneOf.0.receivedAmount.currency","typeLabel":"object"}},"description":"Amount received in the recipient's currency. This is only absent for rule-based account sweeps if the sweep couldn't be quoted. It's always present otherwise.","uniqueKey":"transaction.oneOf.0.receivedAmount","typeLabel":"object"},"fees":{"type":"integer","format":"int64","description":"The total fees available from the receive quote in the smallest unit of the sending currency (eg. cents).","minimum":0,"example":10,"uniqueKey":"transaction.oneOf.0.fees","typeLabel":"integer\u003cint64>"},"reconciliationInstructions":{"type":"object","minProperties":1,"description":"Included for all transactions except those with \"CREATED\" status","properties":{"reference":{"type":"string","description":"Unique reference code to include with the payment to match it with the correct incoming transaction, when available.","example":"UMA-Q12345-REF","uniqueKey":"transaction.oneOf.0.reconciliationInstructions.reference","typeLabel":"string"},"transactionHash":{"deprecated":true,"type":"string","description":"Transaction hash of the settlement transfer, when available. This field reports two different transfers, and only one of them has a replacement today:\n\nFor a crypto transfer to or from a customer's own external wallet, use the `railDetails` on the relevant source or destination instead — it names the network alongside the hash. That is the transfer this field is deprecated for.\n\nFor the inter-VASP settlement leg of a UMA payment (e.g. USDC on Solana to the receiving partner), this field remains the only place the hash is reported: a UMA address is not a wallet you hold, so its source and destination carry no `railDetails`. The field will not be removed before that leg has a replacement.","example":"0x9f2c6b6f4b6c8f2a8d9e0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566","uniqueKey":"transaction.oneOf.0.reconciliationInstructions.transactionHash","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0.reconciliationInstructions","typeLabel":"object"},"failureReason":{"type":"string","enum":["LNURLP_FAILED","PAY_REQUEST_FAILED","PAYMENT_APPROVAL_WEBHOOK_ERROR","PAYMENT_APPROVAL_TIMED_OUT","OFFRAMP_FAILED","MISSING_MANDATORY_PAYEE_DATA","QUOTE_EXPIRED","QUOTE_EXECUTION_FAILED","COMPLIANCE_REJECTED","COLLECTION_FAILED","SWEEP_AMOUNT_OUT_OF_RANGE","SWEEP_QUOTE_FAILED"],"description":"If the transaction failed, this field provides the reason for failure.","uniqueKey":"transaction.oneOf.0.failureReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transaction.oneOf.0","typeLabel":"Incoming Transaction · object"},{"type":"object","title":"Outgoing Transaction","description":"The resulting transaction, populated once the action has been approved and execution has begun. Absent while the action is `PENDING_APPROVAL` or `REJECTED`.","required":["type","sentAmount","source","id","status","direction","destination","customerId","platformCustomerId"],"properties":{"id":{"type":"string","description":"Unique identifier for the transaction","example":"Transaction:019542f5-b3e7-1d02-0000-000000000004","isRequired":true,"uniqueKey":"transaction.oneOf.1.id","typeLabel":"string"},"status":{"type":"string","description":"Status of an outgoing payment transaction.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Quote is pending confirmation |\n| `PENDING_AUTHORIZATION` | Awaiting Strong Customer Authentication. Only occurs for customers in a region where SCA is required (e.g. EU). The challenge is carried by the quote, not the transaction — fetch `GET /quotes/{quoteId}` using the transaction's `quoteId`, then authorize its `scaChallenge` via `POST /quotes/{quoteId}/authorize`. |\n| `EXPIRED` | Quote wasn't executed before expiry window. Terminal |\n| `PROCESSING` | Executing the quote after receiving funds |\n| `COMPLETED` | The funds are at the destination. A bank return moves the payout to `FAILED` |\n| `FAILED` | The payout did not reach the destination, or was returned after it did — accompanied by a `failureReason`, and refunded to the source. A returned payout stays `FAILED` even if the return is later dishonored, since the refund has already been posted; the dishonor shows on `destination.railDetails` |\n","enum":["PENDING","PENDING_AUTHORIZATION","EXPIRED","PROCESSING","COMPLETED","FAILED"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.status","typeLabel":"enum\u003cstring>"},"type":{"type":"string","description":"Type of transaction","enum":["OUTGOING"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.type","typeLabel":"enum\u003cstring>"},"direction":{"type":"string","enum":["CREDIT","DEBIT"],"description":"Whether this transaction credits or debits the customer's account.","isRequired":true,"uniqueKey":"transaction.oneOf.1.direction","typeLabel":"enum\u003cstring>"},"destination":{"oneOf":[{"type":"object","title":"Account Destination","description":"Destination account details","required":["accountId","destinationType"],"properties":{"destinationType":{"type":"string","description":"Type of transaction destination","enum":["ACCOUNT"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.destinationType","typeLabel":"enum\u003cstring>"},"accountId":{"type":"string","description":"Destination account identifier","example":"ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.accountId","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the destination","example":"EUR","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.currency","typeLabel":"string"},"railDetails":{"oneOf":[{"type":"object","title":"On-Chain Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","transactionHash","network"],"properties":{"paymentRail":{"type":"string","enum":["ONCHAIN"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.0.paymentRail","typeLabel":"enum\u003cstring>"},"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.0.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.0.network","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.0","typeLabel":"On-Chain Transfer · object"},{"type":"object","title":"ACH Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["ACH","ACH_SAME_DAY"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","RETURNED","RETURN_DISHONORED","RETURN_CONTESTED","REVERSED","FAILED"],"description":"Status of the entry on the ACH network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to the ACH network and not yet settled. |\n| `SETTLED` | The entry settled. |\n| `RETURNED` | The receiving bank returned the entry, before or after it settled. |\n| `RETURN_DISHONORED` | The originating bank dishonored the return, so the returned funds came back. |\n| `RETURN_CONTESTED` | The receiving bank contested the dishonor, so the funds went back again. |\n| `REVERSED` | The originator reversed the entry after it settled. |\n| `FAILED` | The entry was rejected before submission and no funds moved. |\n\nA return, dishonor or contest can arrive days after the step before it. This status\nreports the ACH entry; the transaction's top-level `status` reports where the funds\nare now. A return moves the transaction to `FAILED`. On an incoming payment, a\ndishonor brings the credit back and moves it to `COMPLETED`, and a contest moves it\nto `FAILED` again. A returned payout stays `FAILED` through a dishonor, since it has\nalready been refunded; the rail status still records the dishonor.","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.settledAt","typeLabel":"string\u003cdate-time>"},"traceNumber":{"type":"string","description":"15-digit ACH trace number of the entry.","example":"021000020123456","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.traceNumber","typeLabel":"string"},"statementDescriptor":{"type":"string","maxLength":10,"description":"The entry's Company Entry Description, which the receiving bank shows on the account holder's statement. On payments you originate, this is the quote's `statementDescriptor`, or Grid's default.","example":"PAYROLL","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.statementDescriptor","typeLabel":"string"},"addenda":{"type":"string","description":"Payment-related text carried in the entry's addenda record. On payments you originate, this is the `remittanceInformation` you provided.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.addenda","typeLabel":"string"},"returnedAt":{"type":"string","format":"date-time","description":"When the receiving bank returned the entry. Present once the entry has been returned, including after a later dishonor or contest.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.returnedAt","typeLabel":"string\u003cdate-time>"},"returnCode":{"type":"string","pattern":"^R[0-9]{2}$","description":"The NACHA return reason code the receiving bank returned the entry under, such as `R01` (insufficient funds) or `R10` (customer advises unauthorized). Present whenever `returnedAt` is. Group returns by this code to track your return rate for each reason, or by `returnCategory` for Nacha's threshold categories. NACHA may add codes, so accept any value matching the pattern.","example":"R01","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.returnCode","typeLabel":"string"},"returnCategory":{"type":"string","enum":["ADMINISTRATIVE","UNAUTHORIZED"],"description":"The Nacha return-rate category `returnCode` counts toward. Present only when the code is in one, so a return such as `R01` has `returnCode` but no `returnCategory`.","example":"UNAUTHORIZED","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.returnCategory","typeLabel":"enum\u003cstring>"},"dishonoredAt":{"type":"string","format":"date-time","description":"When the originating bank dishonored the return. Present once `status` has reached `RETURN_DISHONORED`.","example":"2026-10-04T14:00:00Z","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.dishonoredAt","typeLabel":"string\u003cdate-time>"},"contestedAt":{"type":"string","format":"date-time","description":"When the receiving bank contested the dishonor. Present when `status` is `RETURN_CONTESTED`.","example":"2026-10-07T14:00:00Z","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.contestedAt","typeLabel":"string\u003cdate-time>"},"reversedAt":{"type":"string","format":"date-time","description":"When the originator reversed the entry. Present when `status` is `REVERSED`.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1.reversedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.1","typeLabel":"ACH Transfer · object"},{"type":"object","title":"Wire Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["WIRE"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the wire on Fedwire.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to Fedwire and not yet delivered. |\n| `SETTLED` | Fedwire delivered the wire. |\n| `FAILED` | Fedwire or the receiving bank rejected the wire and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"type":"object","title":"Wire Bank Account Details","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.bankAccount.accountNumber","typeLabel":"string"},"bankName":{"type":"string","description":"Name of the account's bank.","example":"Chase Bank","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.bankAccount.bankName","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.bankAccount","typeLabel":"Wire Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.settledAt","typeLabel":"string\u003cdate-time>"},"imad":{"type":"string","description":"Fedwire Input Message Accountability Data assigned when the wire was sent.","example":"20260929MMQFMP9C000123","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.imad","typeLabel":"string"},"originatorToBeneficiaryInformation":{"type":"string","description":"Free-form originator-to-beneficiary information (OBI) sent with the wire.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2.originatorToBeneficiaryInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.2","typeLabel":"Wire Transfer · object"},{"type":"object","title":"FedNow Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["FEDNOW"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on FedNow.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.3","typeLabel":"FedNow Transfer · object"},{"type":"object","title":"RTP Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["RTP"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on the RTP network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.4","typeLabel":"RTP Transfer · object"},{"type":"object","title":"SWIFT Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail"],"properties":{"paymentRail":{"type":"string","enum":["SWIFT"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.5.paymentRail","typeLabel":"enum\u003cstring>"},"uetr":{"type":"string","format":"uuid","description":"Unique End-to-end Transaction Reference of the wire. Give it to the beneficiary's bank to trace the payment.","example":"f47bbdd1-3d90-44c4-998d-a02bd814d5d3","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.5.uetr","typeLabel":"string\u003cuuid>"}},"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails.oneOf.5","typeLabel":"SWIFT Transfer · object"}],"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.railDetails","typeLabel":"On-Chain Transfer · object | ACH Transfer · object | Wire Transfer · object | FedNow Transfer · object | RTP Transfer · object | SWIFT Transfer · object"},"onChainTransaction":{"type":"object","required":["transactionHash","network"],"properties":{"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.onChainTransaction.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0.onChainTransaction.network","typeLabel":"enum\u003cstring>"}},"deprecated":true,"description":"Deprecated. Use `railDetails`, which carries the same hash and network when `paymentRail` is `ONCHAIN`.","uniqueKey":"transaction.oneOf.1.destination.oneOf.0.onChainTransaction","typeLabel":"object"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.0","typeLabel":"Account Destination · object"},{"type":"object","title":"UMA Address Destination","description":"UMA address destination details","required":["umaAddress","destinationType"],"properties":{"destinationType":{"type":"string","description":"Type of transaction destination","enum":["UMA_ADDRESS"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.1.destinationType","typeLabel":"enum\u003cstring>"},"umaAddress":{"type":"string","description":"UMA address of the recipient","example":"$receiver@uma.domain.com","isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.1.umaAddress","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the destination","example":"EUR","uniqueKey":"transaction.oneOf.1.destination.oneOf.1.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination.oneOf.1","typeLabel":"UMA Address Destination · object"}],"isRequired":true,"uniqueKey":"transaction.oneOf.1.destination","typeLabel":"Account Destination · object | UMA Address Destination · object"},"customerId":{"type":"string","description":"System ID of the customer this transaction belongs to","example":"Customer:019542f5-b3e7-1d02-0000-000000000001","isRequired":true,"uniqueKey":"transaction.oneOf.1.customerId","typeLabel":"string"},"platformCustomerId":{"type":"string","description":"Platform-specific ID of the customer this transaction belongs to","example":"18d3e5f7b4a9c2","isRequired":true,"uniqueKey":"transaction.oneOf.1.platformCustomerId","typeLabel":"string"},"sentAmount":{"type":"object","description":"Amount sent in the sender's currency","required":["amount","currency"],"properties":{"amount":{"type":"integer","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","format":"int64","example":12550,"isRequired":true,"uniqueKey":"transaction.oneOf.1.sentAmount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"transaction.oneOf.1.sentAmount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"transaction.oneOf.1.sentAmount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"transaction.oneOf.1.sentAmount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"transaction.oneOf.1.sentAmount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.sentAmount.currency","typeLabel":"object"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.sentAmount","typeLabel":"object"},"source":{"oneOf":[{"type":"object","title":"Account Source","description":"Source account details","required":["accountId","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of transaction source","enum":["ACCOUNT"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.sourceType","typeLabel":"enum\u003cstring>"},"accountId":{"type":"string","description":"Source account identifier","example":"InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.accountId","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the source","example":"USD","uniqueKey":"transaction.oneOf.1.source.oneOf.0.currency","typeLabel":"string"},"railDetails":{"oneOf":[{"type":"object","title":"On-Chain Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","transactionHash","network"],"properties":{"paymentRail":{"type":"string","enum":["ONCHAIN"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.0.paymentRail","typeLabel":"enum\u003cstring>"},"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.0.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.0.network","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.0","typeLabel":"On-Chain Transfer · object"},{"type":"object","title":"ACH Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["ACH","ACH_SAME_DAY"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","RETURNED","RETURN_DISHONORED","RETURN_CONTESTED","REVERSED","FAILED"],"description":"Status of the entry on the ACH network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to the ACH network and not yet settled. |\n| `SETTLED` | The entry settled. |\n| `RETURNED` | The receiving bank returned the entry, before or after it settled. |\n| `RETURN_DISHONORED` | The originating bank dishonored the return, so the returned funds came back. |\n| `RETURN_CONTESTED` | The receiving bank contested the dishonor, so the funds went back again. |\n| `REVERSED` | The originator reversed the entry after it settled. |\n| `FAILED` | The entry was rejected before submission and no funds moved. |\n\nA return, dishonor or contest can arrive days after the step before it. This status\nreports the ACH entry; the transaction's top-level `status` reports where the funds\nare now. A return moves the transaction to `FAILED`. On an incoming payment, a\ndishonor brings the credit back and moves it to `COMPLETED`, and a contest moves it\nto `FAILED` again. A returned payout stays `FAILED` through a dishonor, since it has\nalready been refunded; the rail status still records the dishonor.","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.settledAt","typeLabel":"string\u003cdate-time>"},"traceNumber":{"type":"string","description":"15-digit ACH trace number of the entry.","example":"021000020123456","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.traceNumber","typeLabel":"string"},"statementDescriptor":{"type":"string","maxLength":10,"description":"The entry's Company Entry Description, which the receiving bank shows on the account holder's statement. On payments you originate, this is the quote's `statementDescriptor`, or Grid's default.","example":"PAYROLL","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.statementDescriptor","typeLabel":"string"},"addenda":{"type":"string","description":"Payment-related text carried in the entry's addenda record. On payments you originate, this is the `remittanceInformation` you provided.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.addenda","typeLabel":"string"},"returnedAt":{"type":"string","format":"date-time","description":"When the receiving bank returned the entry. Present once the entry has been returned, including after a later dishonor or contest.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.returnedAt","typeLabel":"string\u003cdate-time>"},"returnCode":{"type":"string","pattern":"^R[0-9]{2}$","description":"The NACHA return reason code the receiving bank returned the entry under, such as `R01` (insufficient funds) or `R10` (customer advises unauthorized). Present whenever `returnedAt` is. Group returns by this code to track your return rate for each reason, or by `returnCategory` for Nacha's threshold categories. NACHA may add codes, so accept any value matching the pattern.","example":"R01","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.returnCode","typeLabel":"string"},"returnCategory":{"type":"string","enum":["ADMINISTRATIVE","UNAUTHORIZED"],"description":"The Nacha return-rate category `returnCode` counts toward. Present only when the code is in one, so a return such as `R01` has `returnCode` but no `returnCategory`.","example":"UNAUTHORIZED","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.returnCategory","typeLabel":"enum\u003cstring>"},"dishonoredAt":{"type":"string","format":"date-time","description":"When the originating bank dishonored the return. Present once `status` has reached `RETURN_DISHONORED`.","example":"2026-10-04T14:00:00Z","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.dishonoredAt","typeLabel":"string\u003cdate-time>"},"contestedAt":{"type":"string","format":"date-time","description":"When the receiving bank contested the dishonor. Present when `status` is `RETURN_CONTESTED`.","example":"2026-10-07T14:00:00Z","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.contestedAt","typeLabel":"string\u003cdate-time>"},"reversedAt":{"type":"string","format":"date-time","description":"When the originator reversed the entry. Present when `status` is `REVERSED`.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1.reversedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.1","typeLabel":"ACH Transfer · object"},{"type":"object","title":"Wire Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["WIRE"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the wire on Fedwire.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to Fedwire and not yet delivered. |\n| `SETTLED` | Fedwire delivered the wire. |\n| `FAILED` | Fedwire or the receiving bank rejected the wire and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"type":"object","title":"Wire Bank Account Details","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.bankAccount.accountNumber","typeLabel":"string"},"bankName":{"type":"string","description":"Name of the account's bank.","example":"Chase Bank","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.bankAccount.bankName","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.bankAccount","typeLabel":"Wire Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.settledAt","typeLabel":"string\u003cdate-time>"},"imad":{"type":"string","description":"Fedwire Input Message Accountability Data assigned when the wire was sent.","example":"20260929MMQFMP9C000123","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.imad","typeLabel":"string"},"originatorToBeneficiaryInformation":{"type":"string","description":"Free-form originator-to-beneficiary information (OBI) sent with the wire.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2.originatorToBeneficiaryInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.2","typeLabel":"Wire Transfer · object"},{"type":"object","title":"FedNow Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["FEDNOW"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on FedNow.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.3","typeLabel":"FedNow Transfer · object"},{"type":"object","title":"RTP Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["RTP"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on the RTP network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.4","typeLabel":"RTP Transfer · object"},{"type":"object","title":"SWIFT Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail"],"properties":{"paymentRail":{"type":"string","enum":["SWIFT"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.5.paymentRail","typeLabel":"enum\u003cstring>"},"uetr":{"type":"string","format":"uuid","description":"Unique End-to-end Transaction Reference of the wire. Give it to the beneficiary's bank to trace the payment.","example":"f47bbdd1-3d90-44c4-998d-a02bd814d5d3","uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.5.uetr","typeLabel":"string\u003cuuid>"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails.oneOf.5","typeLabel":"SWIFT Transfer · object"}],"uniqueKey":"transaction.oneOf.1.source.oneOf.0.railDetails","typeLabel":"On-Chain Transfer · object | ACH Transfer · object | Wire Transfer · object | FedNow Transfer · object | RTP Transfer · object | SWIFT Transfer · object"},"onChainTransaction":{"type":"object","required":["transactionHash","network"],"properties":{"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.onChainTransaction.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0.onChainTransaction.network","typeLabel":"enum\u003cstring>"}},"deprecated":true,"description":"Deprecated. Use `railDetails`, which carries the same hash and network when `paymentRail` is `ONCHAIN`.","uniqueKey":"transaction.oneOf.1.source.oneOf.0.onChainTransaction","typeLabel":"object"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.0","typeLabel":"Account Source · object"},{"type":"object","title":"UMA Address Source","description":"UMA address source details","required":["umaAddress","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of transaction source","enum":["UMA_ADDRESS"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.1.sourceType","typeLabel":"enum\u003cstring>"},"umaAddress":{"type":"string","description":"UMA address of the sender","example":"$sender@uma.domain.com","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.1.umaAddress","typeLabel":"string"},"currency":{"type":"string","description":"Currency code for the source","example":"USD","uniqueKey":"transaction.oneOf.1.source.oneOf.1.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.1","typeLabel":"UMA Address Source · object"},{"type":"object","title":"External Funding Source","description":"Transaction was funded using an external funding source. `railDetails` describes the transfer that delivered the funds; its fields are populated on a best-effort basis depending on what the funding source provides. Rails without a `railDetails` variant, such as SWIFT, carry the originator's details in the deprecated flat fields only.","required":["currency","sourceType"],"properties":{"sourceType":{"type":"string","description":"Type of transaction source","enum":["REALTIME_FUNDING"],"example":"ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.sourceType","typeLabel":"enum\u003cstring>"},"currency":{"type":"string","description":"Currency code for the funding source","example":"USDC","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.currency","typeLabel":"string"},"customerId":{"type":"string","description":"The customer on whose behalf the transaction was initiated.","example":"Customer:019542f5-b3e7-1d02-0000-000000000009","uniqueKey":"transaction.oneOf.1.source.oneOf.2.customerId","typeLabel":"string"},"accountHolderName":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.bankAccount.accountHolderName`. The name of the originator (sender) of the payment. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.2.accountHolderName","typeLabel":"string"},"accountIdentifier":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.bankAccount.accountNumber`. The originator's account number or IBAN. May be masked or partial depending on the rail. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.2.accountIdentifier","typeLabel":"string"},"bankName":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.bankAccount.bankName` on wires. The name of the originating bank. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"Chase Bank","uniqueKey":"transaction.oneOf.1.source.oneOf.2.bankName","typeLabel":"string"},"bankIdentifier":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.bankAccount.routingNumber`. The identifier of the originating bank, such as a routing number, BIC, or SWIFT code. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.2.bankIdentifier","typeLabel":"string"},"paymentRail":{"type":"string","description":"Deprecated. Use `railDetails.paymentRail`. The payment rail the funds arrived on. Still populated on rails without a `railDetails` variant, such as SWIFT.","enum":["ACH","ACH_COLOMBIA","ACH_SAME_DAY","BANK_TRANSFER","BRE_B","CIPS","FAST","FASTER_PAYMENTS","FEDNOW","INSTAPAY","MOBILE_MONEY","NEFT","PAYNOW","PESONET","PIX","RTGS","RTP","SEPA","SEPA_INSTANT","SPEI","SWIFT","UNIONPAY","UPI","WIRE"],"deprecated":true,"example":"ACH","uniqueKey":"transaction.oneOf.1.source.oneOf.2.paymentRail","typeLabel":"enum\u003cstring>"},"remittanceInformation":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.addenda` for ACH, `railDetails.originatorToBeneficiaryInformation` for wires and `railDetails.remittanceInformation` for RTP and FedNow. Free-form information about the payment provided by the originator. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"12345","uniqueKey":"transaction.oneOf.1.source.oneOf.2.remittanceInformation","typeLabel":"string"},"endToEndId":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.endToEndId`. The originator's own end-to-end reference for the payment. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.1.source.oneOf.2.endToEndId","typeLabel":"string"},"traceNumber":{"type":"string","deprecated":true,"description":"Deprecated. Use `railDetails.traceNumber` for ACH and `railDetails.imad` for wires. Rail-level tracking identifier for the payment. Still populated on rails without a `railDetails` variant, such as SWIFT.","example":"021000020123456","uniqueKey":"transaction.oneOf.1.source.oneOf.2.traceNumber","typeLabel":"string"},"railDetails":{"oneOf":[{"type":"object","title":"On-Chain Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","transactionHash","network"],"properties":{"paymentRail":{"type":"string","enum":["ONCHAIN"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.0.paymentRail","typeLabel":"enum\u003cstring>"},"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.0.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.0.network","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.0","typeLabel":"On-Chain Transfer · object"},{"type":"object","title":"ACH Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["ACH","ACH_SAME_DAY"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","RETURNED","RETURN_DISHONORED","RETURN_CONTESTED","REVERSED","FAILED"],"description":"Status of the entry on the ACH network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to the ACH network and not yet settled. |\n| `SETTLED` | The entry settled. |\n| `RETURNED` | The receiving bank returned the entry, before or after it settled. |\n| `RETURN_DISHONORED` | The originating bank dishonored the return, so the returned funds came back. |\n| `RETURN_CONTESTED` | The receiving bank contested the dishonor, so the funds went back again. |\n| `REVERSED` | The originator reversed the entry after it settled. |\n| `FAILED` | The entry was rejected before submission and no funds moved. |\n\nA return, dishonor or contest can arrive days after the step before it. This status\nreports the ACH entry; the transaction's top-level `status` reports where the funds\nare now. A return moves the transaction to `FAILED`. On an incoming payment, a\ndishonor brings the credit back and moves it to `COMPLETED`, and a contest moves it\nto `FAILED` again. A returned payout stays `FAILED` through a dishonor, since it has\nalready been refunded; the rail status still records the dishonor.","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.settledAt","typeLabel":"string\u003cdate-time>"},"traceNumber":{"type":"string","description":"15-digit ACH trace number of the entry.","example":"021000020123456","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.traceNumber","typeLabel":"string"},"statementDescriptor":{"type":"string","maxLength":10,"description":"The entry's Company Entry Description, which the receiving bank shows on the account holder's statement. On payments you originate, this is the quote's `statementDescriptor`, or Grid's default.","example":"PAYROLL","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.statementDescriptor","typeLabel":"string"},"addenda":{"type":"string","description":"Payment-related text carried in the entry's addenda record. On payments you originate, this is the `remittanceInformation` you provided.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.addenda","typeLabel":"string"},"returnedAt":{"type":"string","format":"date-time","description":"When the receiving bank returned the entry. Present once the entry has been returned, including after a later dishonor or contest.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.returnedAt","typeLabel":"string\u003cdate-time>"},"returnCode":{"type":"string","pattern":"^R[0-9]{2}$","description":"The NACHA return reason code the receiving bank returned the entry under, such as `R01` (insufficient funds) or `R10` (customer advises unauthorized). Present whenever `returnedAt` is. Group returns by this code to track your return rate for each reason, or by `returnCategory` for Nacha's threshold categories. NACHA may add codes, so accept any value matching the pattern.","example":"R01","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.returnCode","typeLabel":"string"},"returnCategory":{"type":"string","enum":["ADMINISTRATIVE","UNAUTHORIZED"],"description":"The Nacha return-rate category `returnCode` counts toward. Present only when the code is in one, so a return such as `R01` has `returnCode` but no `returnCategory`.","example":"UNAUTHORIZED","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.returnCategory","typeLabel":"enum\u003cstring>"},"dishonoredAt":{"type":"string","format":"date-time","description":"When the originating bank dishonored the return. Present once `status` has reached `RETURN_DISHONORED`.","example":"2026-10-04T14:00:00Z","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.dishonoredAt","typeLabel":"string\u003cdate-time>"},"contestedAt":{"type":"string","format":"date-time","description":"When the receiving bank contested the dishonor. Present when `status` is `RETURN_CONTESTED`.","example":"2026-10-07T14:00:00Z","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.contestedAt","typeLabel":"string\u003cdate-time>"},"reversedAt":{"type":"string","format":"date-time","description":"When the originator reversed the entry. Present when `status` is `REVERSED`.","example":"2026-10-01T14:00:00Z","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1.reversedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.1","typeLabel":"ACH Transfer · object"},{"type":"object","title":"Wire Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["WIRE"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the wire on Fedwire.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted to Fedwire and not yet delivered. |\n| `SETTLED` | Fedwire delivered the wire. |\n| `FAILED` | Fedwire or the receiving bank rejected the wire and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"type":"object","title":"Wire Bank Account Details","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.bankAccount.accountNumber","typeLabel":"string"},"bankName":{"type":"string","description":"Name of the account's bank.","example":"Chase Bank","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.bankAccount.bankName","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.bankAccount","typeLabel":"Wire Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.settledAt","typeLabel":"string\u003cdate-time>"},"imad":{"type":"string","description":"Fedwire Input Message Accountability Data assigned when the wire was sent.","example":"20260929MMQFMP9C000123","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.imad","typeLabel":"string"},"originatorToBeneficiaryInformation":{"type":"string","description":"Free-form originator-to-beneficiary information (OBI) sent with the wire.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2.originatorToBeneficiaryInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.2","typeLabel":"Wire Transfer · object"},{"type":"object","title":"FedNow Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["FEDNOW"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on FedNow.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.3","typeLabel":"FedNow Transfer · object"},{"type":"object","title":"RTP Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail","status"],"properties":{"paymentRail":{"type":"string","enum":["RTP"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.paymentRail","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PENDING","SETTLED","FAILED"],"description":"Status of the payment on the RTP network.\n\n| Status | Description |\n|--------|-------------|\n| `PENDING` | Submitted and awaiting the receiving bank's response. |\n| `SETTLED` | The receiving bank accepted the payment and the funds settled. |\n| `FAILED` | The receiving bank or the network rejected the payment and no funds moved. |","example":"SETTLED","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.status","typeLabel":"enum\u003cstring>"},"bankAccount":{"title":"US Bank Account Details","type":"object","description":"The account on the other end of the transfer: the sender's account on a source, the recipient's account on a destination.","properties":{"accountHolderName":{"type":"string","description":"Name of the account holder.","example":"John Sender","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.bankAccount.accountHolderName","typeLabel":"string"},"routingNumber":{"type":"string","description":"9-digit ABA routing number of the account's bank.","example":"021000021","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.bankAccount.routingNumber","typeLabel":"string"},"accountNumber":{"type":"string","description":"Account number, masked to its last four digits.","example":"****6789","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.bankAccount.accountNumber","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.bankAccount","typeLabel":"US Bank Account Details · object"},"settledAt":{"type":"string","format":"date-time","description":"When the transfer settled.","example":"2026-09-29T15:04:12Z","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.settledAt","typeLabel":"string\u003cdate-time>"},"endToEndId":{"type":"string","description":"The originator's end-to-end reference for the payment.","example":"E2E-9f2c6b6f","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.endToEndId","typeLabel":"string"},"remittanceInformation":{"type":"string","description":"Unstructured remittance information sent with the payment.","example":"INV-12345","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4.remittanceInformation","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.4","typeLabel":"RTP Transfer · object"},{"type":"object","title":"SWIFT Transfer","description":"The rail transfer that moved funds for this side of the transaction. `paymentRail` determines the shape: each rail carries its own identifiers. Absent until a rail transfer exists for this side, and on sides whose funds move within Grid.","required":["paymentRail"],"properties":{"paymentRail":{"type":"string","enum":["SWIFT"],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.5.paymentRail","typeLabel":"enum\u003cstring>"},"uetr":{"type":"string","format":"uuid","description":"Unique End-to-end Transaction Reference of the wire. Give it to the beneficiary's bank to trace the payment.","example":"f47bbdd1-3d90-44c4-998d-a02bd814d5d3","uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.5.uetr","typeLabel":"string\u003cuuid>"}},"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails.oneOf.5","typeLabel":"SWIFT Transfer · object"}],"uniqueKey":"transaction.oneOf.1.source.oneOf.2.railDetails","typeLabel":"On-Chain Transfer · object | ACH Transfer · object | Wire Transfer · object | FedNow Transfer · object | RTP Transfer · object | SWIFT Transfer · object"},"onChainTransaction":{"type":"object","required":["transactionHash","network"],"properties":{"transactionHash":{"type":"string","description":"On-chain transaction hash of the crypto transfer for this leg of the transaction.","example":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.onChainTransaction.transactionHash","typeLabel":"string"},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","SOLANA","BASE","POLYGON","TRON","PLASMA","ARBITRUM","SPARK"],"description":"Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).","example":"SOLANA","isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2.onChainTransaction.network","typeLabel":"enum\u003cstring>"}},"deprecated":true,"description":"Deprecated. Use `railDetails`, which carries the same hash and network when `paymentRail` is `ONCHAIN`.","uniqueKey":"transaction.oneOf.1.source.oneOf.2.onChainTransaction","typeLabel":"object"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.source.oneOf.2","typeLabel":"External Funding Source · object"}],"isRequired":true,"uniqueKey":"transaction.oneOf.1.source","typeLabel":"Account Source · object | UMA Address Source · object | External Funding Source · object"},"pendingReason":{"type":"string","enum":["COUNTERPARTY_DECLARATION_REQUIRED","WALLET_VERIFICATION_REQUIRED","COUNTERPARTY_INFORMATION_REQUIRED","COMPLIANCE_REVIEW"],"description":"Present when compliance review or required customer action is delaying settlement.","uniqueKey":"transaction.oneOf.1.pendingReason","typeLabel":"enum\u003cstring>"},"ruleBasedAccountId":{"type":"string","description":"The `RULE_BASED` internal account whose deposit this transaction sweeps. Present only on sweep transactions. For these, `source` describes the party that made the deposit when it is known, and is this account otherwise.","example":"InternalAccount:019542f5-b3e7-1d02-0000-000000000011","uniqueKey":"transaction.oneOf.1.ruleBasedAccountId","typeLabel":"string"},"settledAt":{"type":"string","format":"date-time","description":"When the payment was or will be settled","example":"2025-08-15T14:30:00Z","uniqueKey":"transaction.oneOf.1.settledAt","typeLabel":"string\u003cdate-time>"},"createdAt":{"type":"string","format":"date-time","description":"When the transaction was created","example":"2025-08-15T14:25:18Z","uniqueKey":"transaction.oneOf.1.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"When the transaction was last updated","example":"2025-08-15T14:30:00Z","uniqueKey":"transaction.oneOf.1.updatedAt","typeLabel":"string\u003cdate-time>"},"receiptDeliveryConfirmedAt":{"type":"string","format":"date-time","description":"The time at which the platform confirmed delivery of the receipt to their customer.","example":"2025-08-15T14:31:00Z","uniqueKey":"transaction.oneOf.1.receiptDeliveryConfirmedAt","typeLabel":"string\u003cdate-time>"},"agentId":{"type":"string","description":"If this transaction was initiated by an agent, the system-generated ID of that agent. Absent for platform-initiated transactions.","example":"Agent:019542f5-b3e7-1d02-0000-000000000042","uniqueKey":"transaction.oneOf.1.agentId","typeLabel":"string"},"description":{"type":"string","description":"Optional memo or description for the payment","example":"Payment for invoice #1234","uniqueKey":"transaction.oneOf.1.description","typeLabel":"string"},"exchangeRate":{"type":"number","description":"Number of sending currency units per receiving currency unit. The rate is fee-exclusive: Grid deducts fees from the sending amount before converting at this rate.","exclusiveMinimum":0,"example":1.08,"uniqueKey":"transaction.oneOf.1.exchangeRate","typeLabel":"number"},"quoteId":{"type":"string","description":"The ID of the quote that was used to trigger this payment","example":"Quote:019542f5-b3e7-1d02-0000-000000000006","uniqueKey":"transaction.oneOf.1.quoteId","typeLabel":"string"},"refund":{"type":"object","required":["reference","initiatedAt","status"],"properties":{"reference":{"type":"string","description":"The unique reference ID of the refund","example":"UMA-Q12345-REFUND","isRequired":true,"uniqueKey":"transaction.oneOf.1.refund.reference","typeLabel":"string"},"initiatedAt":{"type":"string","format":"date-time","description":"When the refund was initiated","example":"2025-08-15T14:30:00Z","isRequired":true,"uniqueKey":"transaction.oneOf.1.refund.initiatedAt","typeLabel":"string\u003cdate-time>"},"status":{"type":"string","enum":["PENDING","COMPLETED","FAILED"],"description":"Current status of the refund","example":"COMPLETED","isRequired":true,"uniqueKey":"transaction.oneOf.1.refund.status","typeLabel":"enum\u003cstring>"},"settledAt":{"type":"string","format":"date-time","description":"When the refund was settled","example":"2025-08-15T14:35:00Z","uniqueKey":"transaction.oneOf.1.refund.settledAt","typeLabel":"string\u003cdate-time>"},"reason":{"type":"string","enum":["TRANSACTION_FAILED","USER_CANCELLATION","TIMEOUT"],"description":"Reason for the refund","example":"TRANSACTION_FAILED","uniqueKey":"transaction.oneOf.1.refund.reason","typeLabel":"enum\u003cstring>"}},"description":"The refund if transaction was refunded.","uniqueKey":"transaction.oneOf.1.refund","typeLabel":"object"},"counterpartyInformation":{"type":"object","description":"Additional information about the counterparty, if available and relevant to the transaction and platform.","additionalProperties":true,"example":{"FULL_NAME":"John Sender","BIRTH_DATE":"1985-06-15","NATIONALITY":"DE"},"uniqueKey":"transaction.oneOf.1.counterpartyInformation","typeLabel":"object"},"receivedAmount":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","example":12550,"isRequired":true,"uniqueKey":"transaction.oneOf.1.receivedAmount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"transaction.oneOf.1.receivedAmount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"transaction.oneOf.1.receivedAmount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"transaction.oneOf.1.receivedAmount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"transaction.oneOf.1.receivedAmount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.receivedAmount.currency","typeLabel":"object"}},"description":"Amount to be received by recipient in the recipient's currency","uniqueKey":"transaction.oneOf.1.receivedAmount","typeLabel":"object"},"fees":{"type":"integer","format":"int64","description":"The fees associated with the quote in the smallest unit of the sending currency (eg. cents).","minimum":0,"example":10,"uniqueKey":"transaction.oneOf.1.fees","typeLabel":"integer\u003cint64>"},"platformFees":{"type":"integer","format":"int64","description":"The portion of `fees` collected by the platform (platform-configured transaction fees), in the smallest unit of the sending currency. 0 when the platform has no applicable fee configured. Already included in `fees`.","minimum":0,"example":5,"uniqueKey":"transaction.oneOf.1.platformFees","typeLabel":"integer\u003cint64>"},"reconciliationInstructions":{"type":"object","minProperties":1,"description":"Reconciliation details for this transaction. For the on-chain hash of a crypto payout to an external wallet, see the destination's `railDetails` instead.","properties":{"reference":{"type":"string","description":"Unique reference code to include with the payment to match it with the correct incoming transaction, when available.","example":"UMA-Q12345-REF","uniqueKey":"transaction.oneOf.1.reconciliationInstructions.reference","typeLabel":"string"},"transactionHash":{"deprecated":true,"type":"string","description":"Transaction hash of the settlement transfer, when available. This field reports two different transfers, and only one of them has a replacement today:\n\nFor a crypto transfer to or from a customer's own external wallet, use the `railDetails` on the relevant source or destination instead — it names the network alongside the hash. That is the transfer this field is deprecated for.\n\nFor the inter-VASP settlement leg of a UMA payment (e.g. USDC on Solana to the receiving partner), this field remains the only place the hash is reported: a UMA address is not a wallet you hold, so its source and destination carry no `railDetails`. The field will not be removed before that leg has a replacement.","example":"0x9f2c6b6f4b6c8f2a8d9e0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566","uniqueKey":"transaction.oneOf.1.reconciliationInstructions.transactionHash","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.1.reconciliationInstructions","typeLabel":"object"},"paymentInstructions":{"type":"array","description":"Payment instructions for executing the payment.","items":{"type":"object","required":["accountOrWalletInfo"],"properties":{"accountOrWalletInfo":{"oneOf":[{"type":"object","title":"USD Bank Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","accountNumber","routingNumber"],"example":{"accountType":"USD_ACCOUNT","accountNumber":"1234567890","routingNumber":"021000021","bankName":"Chase Bank","intermediaryBankName":"JPMorgan Chase Bank","intermediaryRoutingNumber":"021000021","fiToFiInformation":"/BNF/Invoice 4471","bankAccountType":"CHECKING"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["USD_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.accountType","typeLabel":"enum\u003cstring>"},"accountNumber":{"type":"string","description":"The account number of the bank","minLength":1,"maxLength":34,"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.accountNumber","typeLabel":"string"},"routingNumber":{"type":"string","description":"The ABA routing number","example":"021000021","minLength":9,"maxLength":9,"pattern":"^[0-9]{9}$","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.routingNumber","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["ACH","ACH_SAME_DAY","WIRE","RTP","FEDNOW"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Reference code for the payment. On a quote's `paymentInstructions`, include it with the payment, in the memo or remittance information, so Grid can match the payment to the quote. On an internal account's `fundingPaymentInstructions`, the account number is unique to that account and deposits are credited by account number, so the payer doesn't need to include the reference.","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.reference","typeLabel":"string"},"bankName":{"type":"string","description":"The name of the financial institution holding the account. Optional on every rail, and recommended for wires, where it identifies the beneficiary's institution on the payment message. Not checked against `GET /discoveries`.","minLength":1,"maxLength":140,"example":"Chase Bank","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankName","typeLabel":"string"},"intermediaryBankName":{"type":"string","description":"The name of the intermediary financial institution, for accounts reachable only through a correspondent bank. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"JPMorgan Chase Bank","minLength":1,"maxLength":140,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.intermediaryBankName","typeLabel":"string"},"intermediaryRoutingNumber":{"type":"string","description":"The ABA routing number of the intermediary financial institution. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"021000021","minLength":9,"maxLength":9,"pattern":"^[0-9]{9}$","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.intermediaryRoutingNumber","typeLabel":"string"},"fiToFiInformation":{"type":"string","description":"Bank-to-bank instructions carried alongside the payment. Used on the WIRE rail; ignored on ACH, RTP and FEDNOW.","example":"/BNF/Invoice 4471","maxLength":210,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.fiToFiInformation","typeLabel":"string"},"bankAccountType":{"type":"string","description":"Whether the account is a checking or a savings account. Grid uses this to set the ACH transaction code, so a value that does not match the account causes the receiving bank to return a notification of change.","enum":["CHECKING","SAVINGS"],"example":"CHECKING","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankAccountType","typeLabel":"enum\u003cstring>"},"bankAddress":{"type":"string","description":"The postal address of the financial institution holding the account, on a single line. Optional on every rail, and recommended for wires, where some originating banks require the beneficiary institution's address before they will send.","example":"885 Teaneck Road, Teaneck, NJ 07666","minLength":1,"maxLength":255,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0.bankAddress","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.0","typeLabel":"USD Bank Account · object"},{"type":"object","title":"EUR Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","iban"],"example":{"accountType":"EUR_ACCOUNT","iban":"DE89370400440532013000","swiftCode":"DEUTDEFF"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["EUR_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.accountType","typeLabel":"enum\u003cstring>"},"iban":{"type":"string","description":"The IBAN of the bank account","example":"DE89370400440532013000","minLength":15,"maxLength":34,"pattern":"^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{11,30}$","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.iban","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SEPA","SEPA_INSTANT"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Unique reference code that must be included with the payment to properly credit it","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.reference","typeLabel":"string"},"swiftCode":{"type":"string","description":"The SWIFT/BIC code of the bank. When omitted, Grid derives it from the IBAN when possible. Provide it when automatic derivation is unavailable.","example":"DEUTDEFF","minLength":8,"maxLength":11,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1.swiftCode","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.1","typeLabel":"EUR Account · object"},{"type":"object","title":"SWIFT Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountHolderName","paymentRails","accountType","swiftCode","bankName","country"],"example":{"accountType":"SWIFT_ACCOUNT","country":"NG","swiftCode":"DEUTDEFF","bankName":"Deutsche Bank","accountNumber":"1234567890"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SWIFT_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountType","typeLabel":"enum\u003cstring>"},"country":{"type":"string","description":"The ISO 3166-1 alpha-2 country code of the bank account","example":"NG","minLength":2,"maxLength":2,"pattern":"^[A-Z]{2}$","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.country","typeLabel":"string"},"swiftCode":{"type":"string","description":"The SWIFT/BIC code of the bank","example":"DEUTDEFF","minLength":8,"maxLength":11,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.swiftCode","typeLabel":"string"},"bankName":{"type":"string","description":"The name of the bank","example":"Deutsche Bank","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.bankName","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SWIFT"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.paymentRails","typeLabel":"enum\u003cstring>[]"},"accountHolderName":{"type":"string","description":"The name of the account holder as it must appear on the wire. Remitting banks match this against the beneficiary name field, so payers should copy it exactly.","example":"Acme Exports Pte Ltd","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountHolderName","typeLabel":"string"},"accountNumber":{"type":"string","description":"The bank account number. Required for most corridors. Use iban instead for IBAN-only corridors (e.g. BR, GB).","example":"1234567890","minLength":1,"maxLength":34,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.accountNumber","typeLabel":"string"},"iban":{"type":"string","description":"The IBAN of the bank account. Required for IBAN-only corridors (e.g. BR, GB). Use accountNumber for all other corridors.","example":"GB29NWBK60161331926819","minLength":15,"maxLength":34,"pattern":"^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{11,30}$","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.iban","typeLabel":"string"},"bankAddress":{"type":"string","description":"The address of the bank holding the account, when known.","example":"12 Marina Boulevard, Singapore 018982","minLength":1,"maxLength":1024,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.bankAddress","typeLabel":"string"},"reference":{"type":"string","description":"Reference code to include with the payment when present. SWIFT payments are attributed by the destination account number/IBAN, so this account type typically requires no reference.","example":"UMA-Q12345-REF","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2.reference","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.2","typeLabel":"SWIFT Account · object"},{"type":"object","title":"MXN Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["reference","paymentRails","accountType","clabeNumber"],"example":{"accountType":"MXN_ACCOUNT","clabeNumber":"123456789012345678"},"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["MXN_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.accountType","typeLabel":"enum\u003cstring>"},"clabeNumber":{"type":"string","description":"The CLABE number of the bank","example":"123456789012345678","minLength":18,"maxLength":18,"pattern":"^[0-9]{18}$","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.clabeNumber","typeLabel":"string"},"paymentRails":{"type":"array","items":{"type":"string","enum":["SPEI"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.paymentRails.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.paymentRails","typeLabel":"enum\u003cstring>[]"},"reference":{"type":"string","description":"Unique reference code that must be included with the payment to properly credit it","example":"UMA-Q12345-REF","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3.reference","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.3","typeLabel":"MXN Account · object"},{"type":"object","title":"BRL Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["qrCode","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BRL_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4.accountType","typeLabel":"enum\u003cstring>"},"qrCode":{"type":"string","description":"A PIX QR code payload that can be used to fund the transaction. This can be rendered as a QR code image or pasted into a PIX-compatible banking app.","minLength":1,"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4.qrCode","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.4","typeLabel":"BRL Account · object"},{"type":"object","title":"COP Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["paymentUrl","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["COP_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5.accountType","typeLabel":"enum\u003cstring>"},"paymentUrl":{"type":"string","format":"uri","description":"A payment URL where the customer can complete their COP deposit.","example":"https://payments.example.com/t/abc123","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5.paymentUrl","typeLabel":"string\u003curi>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.5","typeLabel":"COP Account · object"},{"type":"object","title":"ARS Account","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountNumber","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ARS_ACCOUNT"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6.accountType","typeLabel":"enum\u003cstring>"},"accountNumber":{"type":"string","description":"The static CVU (Clave Virtual Uniforme) bank account number to pay to.","minLength":22,"maxLength":22,"pattern":"^\\d{22}$","example":"0000003100074052501434","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6.accountNumber","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.6","typeLabel":"ARS Account · object"},{"type":"object","title":"Spark Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["assetType","address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SPARK_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Spark wallet address","example":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset or configured Spark token currency code","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.assetType","typeLabel":"string"},"invoice":{"type":"string","description":"Invoice for the payment","example":"sparkrt1pgss8ter0fhc4c220f3zftmpz49h8wqte8eg3m5zkrraplgc048jucgszg3ssqgjzqqekv73mmh842yj7drsjwh7t7tz5zt8wf5kghm5v4ehggszppjp5s80cg3qjdzc55g2567tn3lj705hdsr577tg8ah795mlnt6807y657qhkmgfkf9w75p4wz3l8vhua85zdn6ryj32zuj0p00pv2l5z4u47mw6h4s","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7.invoice","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.7","typeLabel":"Spark Wallet · object"},{"type":"object","title":"Lightning Invoice","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["invoice","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["LIGHTNING"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8.accountType","typeLabel":"enum\u003cstring>"},"invoice":{"type":"string","description":"Invoice for the payment","example":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8.invoice","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.8","typeLabel":"Lightning Invoice · object"},{"type":"object","title":"Bitcoin L1 Deposit Address","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BITCOIN_L1"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"On-chain Bitcoin (L1) deposit address to send funds to","example":"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.address","typeLabel":"string"},"network":{"type":"string","description":"The blockchain network for the deposit address.","enum":["BITCOIN"],"example":"BITCOIN","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9.network","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.9","typeLabel":"Bitcoin L1 Deposit Address · object"},{"type":"object","title":"Solana Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["SOLANA_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Solana wallet address","example":"4Nd1m6Qkq7RfKuE5vQ9qP9Tn6H94Ueqb4xXHzsAbd8Wg","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.10","typeLabel":"Solana Wallet · object"},{"type":"object","title":"Ethereum Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ETHEREUM_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Ethereum L1 wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.11","typeLabel":"Ethereum Wallet · object"},{"type":"object","title":"Base Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["BASE_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Base eth wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.12","typeLabel":"Base Wallet · object"},{"type":"object","title":"Polygon Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["POLYGON_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Polygon eth wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.13","typeLabel":"Polygon Wallet · object"},{"type":"object","title":"Arbitrum Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["ARBITRUM_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Arbitrum wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDC","USDT"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.14","typeLabel":"Arbitrum Wallet · object"},{"type":"object","title":"Tron Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["TRON_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Tron wallet address","example":"TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDT"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.15","typeLabel":"Tron Wallet · object"},{"type":"object","title":"Plasma Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["address","accountType"],"properties":{"accountType":{"type":"string","description":"Type of payment account or wallet","enum":["PLASMA_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.accountType","typeLabel":"enum\u003cstring>"},"address":{"type":"string","description":"Plasma wallet address","example":"0xAbCDEF1234567890aBCdEf1234567890ABcDef12","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.address","typeLabel":"string"},"assetType":{"type":"string","description":"Type of asset","enum":["USDT"],"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16.assetType","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.16","typeLabel":"Plasma Wallet · object"},{"type":"object","title":"Embedded Wallet","description":"Where to send the funds. Quotes can carry any of these types. Internal accounts return only `USD_ACCOUNT`, `EUR_ACCOUNT`, `SWIFT_ACCOUNT`, and the network wallet types; MXN, BRL, COP, ARS, Lightning, and Bitcoin L1 instructions appear only on real-time funded quotes.","required":["accountType","payloadToSign"],"properties":{"accountType":{"type":"string","description":"Discriminator value identifying this as Embedded Wallet payment instructions.","enum":["EMBEDDED_WALLET"],"example":"USD_ACCOUNT","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17.accountType","typeLabel":"enum\u003cstring>"},"payloadToSign":{"type":"string","description":"JSON-encoded transaction signing payload that must be stamped, as-is (byte-for-byte, without re-serialization), with the session private key of a verified authentication credential on the source Embedded Wallet. The resulting Grid wallet signature is passed as the `Grid-Wallet-Signature` header on `POST /quotes/{quoteId}/execute` to authorize the outbound transfer from the wallet.","example":"{\"type\":\"ACTIVITY_TYPE_SIGN_TRANSACTION_V2\",\"timestampMs\":\"1746736509954\",\"organizationId\":\"org_abc123\",\"parameters\":{\"signWith\":\"wallet_abc123def456\",\"unsignedTransaction\":\"ea69b4bf05f775209f26ff0a34a05569180f7936579d5c4af9377ae550194f72\",\"type\":\"TRANSACTION_TYPE_ETHEREUM\"},\"generateAppProofs\":true}","isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17.payloadToSign","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo.oneOf.17","typeLabel":"Embedded Wallet · object"}],"isRequired":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].accountOrWalletInfo","typeLabel":"USD Bank Account · object | EUR Account · object | SWIFT Account · object | MXN Account · object | BRL Account · object | COP Account · object | ARS Account · object | Spark Wallet · object | Lightning Invoice · object | Bitcoin L1 Deposit Address · object | Solana Wallet · object | Ethereum Wallet · object | Base Wallet · object | Polygon Wallet · object | Arbitrum Wallet · object | Tron Wallet · object | Plasma Wallet · object | Embedded Wallet · object"},"instructionsNotes":{"type":"string","description":"Additional human-readable instructions for making the payment","example":"Please ensure the reference code is included in the payment memo/description field","uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].instructionsNotes","typeLabel":"string"},"isPlatformAccount":{"type":"boolean","description":"Indicates whether the account is a platform account or a customer account.","example":true,"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX].isPlatformAccount","typeLabel":"boolean"}},"uniqueKey":"transaction.oneOf.1.paymentInstructions.items.[INDEX]","typeLabel":"object"},"example":[{"accountOrWalletInfo":{"accountType":"USD_ACCOUNT","paymentRails":["ACH","WIRE"],"accountNumber":"1234567890","routingNumber":"021000021","bankName":"Chase Bank","reference":"UMA-Q12345-REF"},"instructionsNotes":"Include reference UMA-Q12345-REF in memo"},{"accountOrWalletInfo":{"accountType":"SPARK_WALLET","assetType":"BTC","address":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","invoice":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs"}}],"uniqueKey":"transaction.oneOf.1.paymentInstructions","typeLabel":"object[]"},"rateDetails":{"description":"Details about the rate and fees for the transaction.","type":"object","required":["counterpartyMultiplier","counterpartyFixedFee","gridApiMultiplier","gridApiFixedFee","gridApiVariableFeeRate","gridApiVariableFeeAmount"],"properties":{"counterpartyMultiplier":{"type":"number","format":"double","description":"The underlying multiplier from mSATs to the receiving currency as returned by the counterparty institution.","exclusiveMinimum":0,"example":1.08,"isRequired":true,"uniqueKey":"transaction.oneOf.1.rateDetails.counterpartyMultiplier","typeLabel":"number\u003cdouble>"},"counterpartyFixedFee":{"type":"integer","format":"int64","description":"The fixed fee charged by the counterparty institution to execute the quote in the smallest unit of the receiving currency (eg. cents).","minimum":0,"example":10,"isRequired":true,"uniqueKey":"transaction.oneOf.1.rateDetails.counterpartyFixedFee","typeLabel":"integer\u003cint64>"},"gridApiMultiplier":{"type":"number","format":"double","description":"The underlying multiplier from the sending currency to mSATS, including variable fees.","exclusiveMinimum":0,"example":0.925,"isRequired":true,"uniqueKey":"transaction.oneOf.1.rateDetails.gridApiMultiplier","typeLabel":"number\u003cdouble>"},"gridApiFixedFee":{"type":"integer","format":"int64","description":"The fixed fee charged by the Grid product to execute the quote in the smallest unit of the sending currency (eg. cents).","minimum":0,"example":10,"isRequired":true,"uniqueKey":"transaction.oneOf.1.rateDetails.gridApiFixedFee","typeLabel":"integer\u003cint64>"},"gridApiVariableFeeRate":{"type":"number","format":"double","description":"The variable fee rate charged by the Grid product to execute the quote as a percentage of the sending currency amount.","minimum":0,"example":0.003,"isRequired":true,"uniqueKey":"transaction.oneOf.1.rateDetails.gridApiVariableFeeRate","typeLabel":"number\u003cdouble>"},"gridApiVariableFeeAmount":{"type":"number","format":"int64","description":"The variable fee amount charged by the Grid product to execute the quote in the smallest unit of the sending currency (eg. cents). This is the sending amount times gridApiVariableFeeRate.","minimum":0,"example":30,"isRequired":true,"uniqueKey":"transaction.oneOf.1.rateDetails.gridApiVariableFeeAmount","typeLabel":"number\u003cint64>"}},"uniqueKey":"transaction.oneOf.1.rateDetails","typeLabel":"object"},"failureReason":{"type":"string","enum":["QUOTE_EXPIRED","QUOTE_RATE_UNAVAILABLE","QUOTE_EXECUTION_FAILED","FUNDING_AMOUNT_MISMATCH","SCA_NOT_COMPLETED","PAYOUT_RETURNED","LIMIT_EXCEEDED","ACCOUNT_CANNOT_RECEIVE","ACCOUNT_INVALID","COMPLIANCE_REJECTED","LIGHTNING_PAYMENT_FAILED","COUNTERPARTY_POST_TX_FAILED","SWEEP_AMOUNT_OUT_OF_RANGE","SWEEP_QUOTE_FAILED"],"description":"If the transaction failed, this field provides the reason for failure.","uniqueKey":"transaction.oneOf.1.failureReason","typeLabel":"enum\u003cstring>"},"paymentRail":{"oneOf":[{"type":"string","description":"The payment rail used to settle this transaction (e.g. ACH, WIRE, NEFT, FASTER_PAYMENTS). Uses the same values as the PaymentRail sent on quote requests. Null when no external rail is used (e.g. instant or intra-network transfers, or non-direct-destination transactions) or before a rail is resolved.","enum":["ACH","ACH_COLOMBIA","ACH_SAME_DAY","BANK_TRANSFER","BRE_B","CIPS","FAST","FASTER_PAYMENTS","FEDNOW","INSTAPAY","MOBILE_MONEY","NEFT","PAYNOW","PESONET","PIX","RTGS","RTP","SEPA","SEPA_INSTANT","SPEI","SWIFT","UNIONPAY","UPI","WIRE"],"example":"ACH","uniqueKey":"transaction.oneOf.1.paymentRail.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The payment rail used to settle this transaction (e.g. ACH, WIRE, NEFT, FASTER_PAYMENTS). Uses the same values as the PaymentRail sent on quote requests. Null when no external rail is used (e.g. instant or intra-network transfers, or non-direct-destination transactions) or before a rail is resolved.","uniqueKey":"transaction.oneOf.1.paymentRail.oneOf.1","typeLabel":"null"}],"uniqueKey":"transaction.oneOf.1.paymentRail","typeLabel":"enum\u003cstring> | null"},"railSelectionMode":{"type":"string","enum":["AUTO","MANUAL"],"description":"How the rail was chosen — MANUAL when the platform specified a paymentRail on the destination, AUTO when Lightspark selects it.","example":"AUTO","uniqueKey":"transaction.oneOf.1.railSelectionMode","typeLabel":"enum\u003cstring>"},"expectedSettlementAt":{"oneOf":[{"type":"string","format":"date-time","description":"Expected settlement time at the beneficiary. Null for instant rails (settlement is immediate) and before a rail with deferred settlement is resolved.","uniqueKey":"transaction.oneOf.1.expectedSettlementAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Expected settlement time at the beneficiary. Null for instant rails (settlement is immediate) and before a rail with deferred settlement is resolved.","uniqueKey":"transaction.oneOf.1.expectedSettlementAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"transaction.oneOf.1.expectedSettlementAt","typeLabel":"string\u003cdate-time> | null"},"settlementTimelineSeconds":{"oneOf":[{"type":"integer","description":"Expected number of seconds from quote creation to settlement. Null when not yet known.","uniqueKey":"transaction.oneOf.1.settlementTimelineSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Expected number of seconds from quote creation to settlement. Null when not yet known.","uniqueKey":"transaction.oneOf.1.settlementTimelineSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"transaction.oneOf.1.settlementTimelineSeconds","typeLabel":"integer | null"}},"uniqueKey":"transaction.oneOf.1","typeLabel":"Outgoing Transaction · object"},{"type":"object","title":"Card Transaction","description":"The resulting transaction, populated once the action has been approved and execution has begun. Absent while the action is `PENDING_APPROVAL` or `REJECTED`.","required":["type","id","status","direction","merchant","authorizedAmount","accountId","customerId","platformCustomerId","authorizedAt","createdAt","updatedAt"],"properties":{"type":{"type":"string","enum":["CARD"],"description":"Discriminator identifying this transaction as a card transaction in the `Transaction` list.","isRequired":true,"uniqueKey":"transaction.oneOf.2.type","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"System-generated unique card transaction identifier","example":"Transaction:019542f5-b3e7-1d02-0000-000000000100","isRequired":true,"uniqueKey":"transaction.oneOf.2.id","typeLabel":"string"},"customerId":{"type":"string","description":"System ID of the customer (cardholder) this transaction belongs to.","example":"Customer:019542f5-b3e7-1d02-0000-000000000001","isRequired":true,"uniqueKey":"transaction.oneOf.2.customerId","typeLabel":"string"},"platformCustomerId":{"type":"string","description":"Platform-specific ID of the customer (cardholder) this transaction belongs to.","example":"18d3e5f7b4a9c2","isRequired":true,"uniqueKey":"transaction.oneOf.2.platformCustomerId","typeLabel":"string"},"status":{"type":"string","enum":["AUTHORIZED","PARTIALLY_SETTLED","SETTLED","DECLINED","VOIDED","EXCEPTION"],"description":"Lifecycle status of a card transaction. The status tracks the authorization\noutcome and settlement — a return against a purchase is its own dated\n`CREDIT` row linked to the purchase via `originalTransactionId`, not a\nstatus of its own.\n\n| Status | Description |\n|--------|-------------|\n| `AUTHORIZED` | The auth has been approved and a hold placed on the funding source; no clearing has arrived yet. |\n| `PARTIALLY_SETTLED` | At least one clearing has arrived and posted, but more clearings are still expected (split shipments, tips, multi-leg trips). |\n| `SETTLED` | All clearings for the auth have posted and the transaction is closed against the funding source. A `RETURN` received afterwards keeps the purchase `SETTLED`; the return appears as its own `CREDIT` transaction. |\n| `DECLINED` | The authorization was declined before any money moved. Declines carry no settlement and must be excluded from cardholder statements. |\n| `VOIDED` | The authorization was fully reversed or expired before any clearing posted, so the hold closed without moving money. `authorizedAmount` reports what is still held, normally 0, and `settledAmount` is absent. |\n| `EXCEPTION` | The transaction settled to the card network but the corresponding pull from the funding source failed (e.g. balance no longer covers the post-hoc clearing). Surfaces high-urgency alerts and is the dashboard query for stuck reconciliations. |\n","isRequired":true,"uniqueKey":"transaction.oneOf.2.status","typeLabel":"enum\u003cstring>"},"direction":{"type":"string","enum":["CREDIT","DEBIT"],"description":"A purchase is a `DEBIT`. A merchant refund is a `CREDIT` with the credited value in `settledAmount`; when the refund returns against a known purchase, `originalTransactionId` identifies it.","example":"DEBIT","isRequired":true,"uniqueKey":"transaction.oneOf.2.direction","typeLabel":"enum\u003cstring>"},"merchant":{"type":"object","required":["descriptor"],"properties":{"descriptor":{"type":"string","description":"Merchant descriptor string captured from the card network at authorization time. On the sandbox simulate endpoints, where this is supplied rather than reported, it must be 1–25 characters — the width of the card network's acceptor-name field.","example":"BLUE BOTTLE COFFEE SF","isRequired":true,"uniqueKey":"transaction.oneOf.2.merchant.descriptor","typeLabel":"string"},"mcc":{"type":"string","description":"Merchant Category Code (ISO 18245) — four-digit numeric string.","example":"5814","uniqueKey":"transaction.oneOf.2.merchant.mcc","typeLabel":"string"},"city":{"type":"string","description":"Merchant city as reported by the card network, when present.","example":"San Francisco","uniqueKey":"transaction.oneOf.2.merchant.city","typeLabel":"string"},"state":{"type":"string","description":"Merchant state or region as reported by the card network, when present.","example":"CA","uniqueKey":"transaction.oneOf.2.merchant.state","typeLabel":"string"},"country":{"type":"string","description":"Two-letter ISO 3166-1 alpha-2 country code of the merchant.","example":"US","uniqueKey":"transaction.oneOf.2.merchant.country","typeLabel":"string"}},"isRequired":true,"uniqueKey":"transaction.oneOf.2.merchant","typeLabel":"object"},"authorizedAmount":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","example":12550,"isRequired":true,"uniqueKey":"transaction.oneOf.2.authorizedAmount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"transaction.oneOf.2.authorizedAmount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"transaction.oneOf.2.authorizedAmount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"transaction.oneOf.2.authorizedAmount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"transaction.oneOf.2.authorizedAmount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"transaction.oneOf.2.authorizedAmount.currency","typeLabel":"object"}},"isRequired":true,"uniqueKey":"transaction.oneOf.2.authorizedAmount","typeLabel":"object"},"accountId":{"type":"string","description":"Internal account id that funded this transaction (the funding source selected by Authorization Decisioning at auth time).","example":"InternalAccount:019542f5-b3e7-1d02-0000-000000000002","isRequired":true,"uniqueKey":"transaction.oneOf.2.accountId","typeLabel":"string"},"authorizedAt":{"type":"string","format":"date-time","description":"When the authorization was approved or declined.","example":"2026-05-08T14:30:00Z","isRequired":true,"uniqueKey":"transaction.oneOf.2.authorizedAt","typeLabel":"string\u003cdate-time>"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp (same as `authorizedAt` for card transactions).","example":"2026-05-08T14:30:00Z","isRequired":true,"uniqueKey":"transaction.oneOf.2.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"Last update timestamp.","example":"2026-05-08T15:42:11Z","isRequired":true,"uniqueKey":"transaction.oneOf.2.updatedAt","typeLabel":"string\u003cdate-time>"},"cardId":{"type":"string","description":"The id of the `Card` this transaction was made on.","example":"Card:019542f5-b3e7-1d02-0000-000000000010","uniqueKey":"transaction.oneOf.2.cardId","typeLabel":"string"},"issuerTransactionToken":{"type":"string","description":"Opaque identifier for the transaction on the underlying issuer. Used to cross-reference Grid records against issuer dashboards and webhooks.","example":"lithic_txn_b81c2a4f","uniqueKey":"transaction.oneOf.2.issuerTransactionToken","typeLabel":"string"},"cardDeclinedReason":{"type":"string","enum":["CARD_NOT_ACTIVE","SPEND_LIMIT_EXCEEDED","INSUFFICIENT_FUNDS","NO_ELIGIBLE_FUNDING_SOURCE","BLOCKED","UNSUPPORTED_NETWORK","INCORRECT_CARD_DETAILS","TEMPORARILY_UNAVAILABLE","PLATFORM_DECLINED","PLATFORM_UNAVAILABLE","OTHER"],"description":"Present only when `status` is `DECLINED`.","example":"INSUFFICIENT_FUNDS","uniqueKey":"transaction.oneOf.2.cardDeclinedReason","typeLabel":"enum\u003cstring>"},"platformDeclineReason":{"type":"string","enum":["SUSPECTED_FRAUD","UNAUTHORIZED_MERCHANT","VELOCITY_EXCEEDED","INSUFFICIENT_FUNDS","CARD_PAUSED"],"description":"The `declineReason` your platform returned for a `CARD_AUTHORIZATION.REQUEST`. Present only when `cardDeclinedReason` is `PLATFORM_DECLINED` and your endpoint supplied a reason.","example":"UNAUTHORIZED_MERCHANT","uniqueKey":"transaction.oneOf.2.platformDeclineReason","typeLabel":"enum\u003cstring>"},"originalTransactionId":{"type":"string","description":"On a refund row (`direction: CREDIT`), the id of the purchase this return credits back against. Absent on purchases and on standalone credits with no matching purchase.","example":"Transaction:019542f5-b3e7-1d02-0000-000000000099","uniqueKey":"transaction.oneOf.2.originalTransactionId","typeLabel":"string"},"description":{"type":"string","description":"The merchant descriptor, repeated from `merchant.descriptor` so a transaction list reads without expanding each card row. Unlike `description` on other transaction types, this is set by Grid from the card network's descriptor, not supplied by the platform.","example":"BLUE BOTTLE COFFEE SF","uniqueKey":"transaction.oneOf.2.description","typeLabel":"string"},"settledAmount":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","example":12550,"isRequired":true,"uniqueKey":"transaction.oneOf.2.settledAmount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"transaction.oneOf.2.settledAmount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"transaction.oneOf.2.settledAmount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"transaction.oneOf.2.settledAmount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"transaction.oneOf.2.settledAmount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"transaction.oneOf.2.settledAmount.currency","typeLabel":"object"}},"uniqueKey":"transaction.oneOf.2.settledAmount","typeLabel":"object"},"refundedAmount":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)","example":12550,"isRequired":true,"uniqueKey":"transaction.oneOf.2.refundedAmount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"object","properties":{"code":{"type":"string","description":"Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. \"BTC\" for Bitcoin, \"USDC\" for USDC, etc.)","example":"USD","uniqueKey":"transaction.oneOf.2.refundedAmount.currency.code","typeLabel":"string"},"name":{"type":"string","description":"Full name of the currency","example":"United States Dollar","uniqueKey":"transaction.oneOf.2.refundedAmount.currency.name","typeLabel":"string"},"symbol":{"type":"string","description":"Symbol of the currency","example":"$","uniqueKey":"transaction.oneOf.2.refundedAmount.currency.symbol","typeLabel":"string"},"decimals":{"type":"integer","description":"Number of decimal places for the currency","minimum":0,"example":2,"uniqueKey":"transaction.oneOf.2.refundedAmount.currency.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"transaction.oneOf.2.refundedAmount.currency","typeLabel":"object"}},"uniqueKey":"transaction.oneOf.2.refundedAmount","typeLabel":"object"}},"uniqueKey":"transaction.oneOf.2","typeLabel":"Card Transaction · object"}],"uniqueKey":"transaction","typeLabel":"Incoming Transaction · object | Outgoing Transaction · object | Card Transaction · object"},"rejectionReason":{"type":"string","description":"Human-readable reason provided by the platform when rejecting the action. Only present when status is `REJECTED`.","example":"Transaction amount exceeds customer's current risk limit.","uniqueKey":"rejectionReason","typeLabel":"string"},"failureReason":{"type":"string","enum":["QUOTE_EXPIRED","POLICY_DENIED","AGENT_INACTIVE","EXECUTION_FAILED","PRICE_MOVED","ADDRESS_REFUSED","APPROVAL_EXPIRED"],"description":"Machine-readable reason the action failed. Only present when status is `FAILED`; `rejectionReason` is used only for `REJECTED` actions.","uniqueKey":"failureReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","agentId":"Agent:019542f5-b3e7-1d02-0000-000000000042","customerId":"Customer:019542f5-b3e7-1d02-0000-000000000010","platformCustomerId":"user-a1b2c3","status":"PENDING_APPROVAL","type":"EXECUTE_QUOTE","expiresAt":"2025-10-03T15:05:00Z","createdAt":"2025-10-03T15:00:00Z","updatedAt":"2025-10-03T15:02:00Z","quote":{"id":"Quote:019542f5-b3e7-1d02-0000-000000000006","status":"PENDING","createdAt":"2025-10-03T12:00:00Z","expiresAt":"2025-10-03T12:05:00Z","source":{"sourceType":"ACCOUNT","accountId":"InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","customerId":"Customer:019542f5-b3e7-1d02-0000-000000000001"},"destination":{"destinationType":"ACCOUNT","accountId":"ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","paymentRail":"ACH"},"sendingCurrency":{"code":"USD","name":"United States Dollar","symbol":"$","decimals":2},"receivingCurrency":{"code":"USD","name":"United States Dollar","symbol":"$","decimals":2},"totalSendingAmount":123010,"totalReceivingAmount":1000,"exchangeRate":123,"feesIncluded":10,"transactionId":"Transaction:019542f5-b3e7-1d02-0000-000000000005","platformFeesIncluded":5,"paymentInstructions":[{"accountOrWalletInfo":{"accountType":"USD_ACCOUNT","paymentRails":["ACH","WIRE"],"accountNumber":"1234567890","routingNumber":"021000021","bankName":"Chase Bank","reference":"UMA-Q12345-REF"},"instructionsNotes":"Include reference UMA-Q12345-REF in memo"},{"accountOrWalletInfo":{"accountType":"SPARK_WALLET","assetType":"BTC","address":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","invoice":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs"}}],"counterpartyInformation":{"FULL_NAME":"John Sender","BIRTH_DATE":"1985-06-15","NATIONALITY":"DE"},"rateDetails":{"counterpartyMultiplier":1.08,"counterpartyFixedFee":10,"gridApiMultiplier":0.925,"gridApiFixedFee":10,"gridApiVariableFeeRate":0.003,"gridApiVariableFeeAmount":30},"purposeOfPayment":"GIFT","documentIds":["PaymentDocument:019542f5-b3e7-1d02-0000-000000000001","PaymentDocument:019542f5-b3e7-1d02-0000-000000000002","PaymentDocument:019542f5-b3e7-1d02-0000-000000000003"],"scaChallenge":{"id":"ScaChallenge:019542f5-b3e7-1d02-0000-000000000007","expiresAt":"2025-10-03T12:05:00Z","factor":"SMS_OTP","availableFactors":["SMS_OTP"],"purpose":"PAYOUT","passkeyAssertionOptions":{},"passkeyAllowedOrigins":["https://app.example.com"]},"minimumReceivingAmount":1000,"destinationSparkAddress":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","destinationChainAddress":{"destinationType":"CHAIN_ADDRESS","network":"BASE","currency":"USDC","address":"0x1234567890abcdef1234567890abcdef12345678"},"destinationLightningInvoice":{"destinationType":"LIGHTNING_INVOICE","invoice":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs"}},"previousQuote":{"id":"Quote:019542f5-b3e7-1d02-0000-000000000006","status":"PENDING","createdAt":"2025-10-03T12:00:00Z","expiresAt":"2025-10-03T12:05:00Z","source":{"sourceType":"ACCOUNT","accountId":"InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","customerId":"Customer:019542f5-b3e7-1d02-0000-000000000001"},"destination":{"destinationType":"ACCOUNT","accountId":"ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","paymentRail":"ACH"},"sendingCurrency":{"code":"USD","name":"United States Dollar","symbol":"$","decimals":2},"receivingCurrency":{"code":"USD","name":"United States Dollar","symbol":"$","decimals":2},"totalSendingAmount":123010,"totalReceivingAmount":1000,"exchangeRate":123,"feesIncluded":10,"transactionId":"Transaction:019542f5-b3e7-1d02-0000-000000000005","platformFeesIncluded":5,"paymentInstructions":[{"accountOrWalletInfo":{"accountType":"USD_ACCOUNT","paymentRails":["ACH","WIRE"],"accountNumber":"1234567890","routingNumber":"021000021","bankName":"Chase Bank","reference":"UMA-Q12345-REF"},"instructionsNotes":"Include reference UMA-Q12345-REF in memo"},{"accountOrWalletInfo":{"accountType":"SPARK_WALLET","assetType":"BTC","address":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","invoice":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs"}}],"counterpartyInformation":{"FULL_NAME":"John Sender","BIRTH_DATE":"1985-06-15","NATIONALITY":"DE"},"rateDetails":{"counterpartyMultiplier":1.08,"counterpartyFixedFee":10,"gridApiMultiplier":0.925,"gridApiFixedFee":10,"gridApiVariableFeeRate":0.003,"gridApiVariableFeeAmount":30},"purposeOfPayment":"GIFT","documentIds":["PaymentDocument:019542f5-b3e7-1d02-0000-000000000001","PaymentDocument:019542f5-b3e7-1d02-0000-000000000002","PaymentDocument:019542f5-b3e7-1d02-0000-000000000003"],"scaChallenge":{"id":"ScaChallenge:019542f5-b3e7-1d02-0000-000000000007","expiresAt":"2025-10-03T12:05:00Z","factor":"SMS_OTP","availableFactors":["SMS_OTP"],"purpose":"PAYOUT","passkeyAssertionOptions":{},"passkeyAllowedOrigins":["https://app.example.com"]},"minimumReceivingAmount":1000,"destinationSparkAddress":"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu","destinationChainAddress":{"destinationType":"CHAIN_ADDRESS","network":"BASE","currency":"USDC","address":"0x1234567890abcdef1234567890abcdef12345678"},"destinationLightningInvoice":{"destinationType":"LIGHTNING_INVOICE","invoice":"lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs"}},"priceTolerance":{"basisPoints":100,"minimumAmount":100,"currency":"USD"},"purchaseCard":{"amount":4999,"spendLimit":5749,"currency":"USD","fundingSource":"InternalAccount:019542f5-b3e7-1d02-0000-000000000002","increaseCardId":"Card:019542f5-b3e7-1d02-0000-000000000011","previousAmount":4999,"previousSpendLimit":5749,"description":"Running shoes from example-store.com","recurring":false,"expiresAt":"2026-10-26T15:30:00Z"},"claimablePayout":{"id":"ClaimablePayout:019542f5-b3e7-1d02-0000-000000000077","agentId":"Agent:019542f5-b3e7-1d02-0000-000000000042","customerId":"Customer:019542f5-b3e7-1d02-0000-000000000010","platformCustomerId":"user-a1b2c3","status":"PENDING_APPROVAL","sourceAccountId":"InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","amount":{"amount":12550,"currency":{"code":"USD","name":"United States Dollar","symbol":"$","decimals":2}},"recipient":{"name":"Maria","phoneNumber":"+639171234567","email":"maria@example.com","country":"PH"},"expiresAt":"2025-10-10T15:00:00Z","createdAt":"2025-10-03T15:00:00Z","updatedAt":"2025-10-03T15:02:00Z","note":"Happy birthday, Mom","agentActionId":"AgentAction:019542f5-b3e7-1d02-0000-000000000099","externalAccountId":"ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","transactionId":"Transaction:019542f5-b3e7-1d02-0000-000000000030","receivedAmount":{"amount":12550,"currency":{"code":"USD","name":"United States Dollar","symbol":"$","decimals":2}},"paymentRail":"ACH","failureReason":"INSUFFICIENT_FUNDS"},"storedCardUse":{"storedCardId":"StoredCard:019542f5-b3e7-1d02-0000-000000000077","card":{"lastFour":"0005","brand":"VISA","funding":"CREDIT","expiryMonth":8,"expiryYear":2029,"issuerCountry":"US","nickname":"Personal Visa"},"merchant":"example-store.com","amount":4999,"currency":"USD","purpose":"Running shoes, size 10","needsCvc":false,"autoApproved":false,"linkIssuedAt":"2026-11-06T15:00:30Z","revealedAt":"2026-11-06T15:00:41Z"},"cardId":"Card:019542f5-b3e7-1d02-0000-000000000011","transaction":{"id":"Transaction:019542f5-b3e7-1d02-0000-000000000004","status":"CREATED","type":"INCOMING","direction":"CREDIT","destination":{"destinationType":"ACCOUNT","accountId":"ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123","currency":"EUR","railDetails":{"paymentRail":"ONCHAIN","transactionHash":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","network":"SOLANA"},"onChainTransaction":{"transactionHash":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","network":"SOLANA"}},"customerId":"Customer:019542f5-b3e7-1d02-0000-000000000001","platformCustomerId":"18d3e5f7b4a9c2","pendingReason":"COUNTERPARTY_DECLARATION_REQUIRED","ruleBasedAccountId":"InternalAccount:019542f5-b3e7-1d02-0000-000000000011","settledAt":"2025-08-15T14:30:00Z","createdAt":"2025-08-15T14:25:18Z","updatedAt":"2025-08-15T14:30:00Z","receiptDeliveryConfirmedAt":"2025-08-15T14:31:00Z","agentId":"Agent:019542f5-b3e7-1d02-0000-000000000042","description":"Payment for invoice #1234","sentAmount":{"amount":12550,"currency":{"code":"USD","name":"United States Dollar","symbol":"$","decimals":2}},"exchangeRate":1.08,"quoteId":"Quote:019542f5-b3e7-1d02-0000-000000000006","refund":{"reference":"UMA-Q12345-REFUND","initiatedAt":"2025-08-15T14:30:00Z","status":"COMPLETED","settledAt":"2025-08-15T14:35:00Z","reason":"TRANSACTION_FAILED"},"counterpartyInformation":{"FULL_NAME":"John Sender","BIRTH_DATE":"1985-06-15","NATIONALITY":"DE"},"source":{"sourceType":"ACCOUNT","accountId":"InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965","currency":"USD","railDetails":{"paymentRail":"ONCHAIN","transactionHash":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","network":"SOLANA"},"onChainTransaction":{"transactionHash":"h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx","network":"SOLANA"}},"receivedAmount":{"amount":12550,"currency":{"code":"USD","name":"United States Dollar","symbol":"$","decimals":2}},"fees":10,"reconciliationInstructions":{"reference":"UMA-Q12345-REF","transactionHash":"0x9f2c6b6f4b6c8f2a8d9e0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566"},"failureReason":"LNURLP_FAILED"},"rejectionReason":"Transaction amount exceeds customer's current risk limit.","failureReason":"QUOTE_EXPIRED"}}},"exampleType":"generated"}},"exampleType":"generated"},"cccac967-7331-4f20-b8f5-0b47ff468469":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","required":["reason","code"],"properties":{"code":{"type":"string","description":"| Error Code | Description |\n|------------|-------------|\n| INVALID_INPUT | Invalid input provided. When Grid knows the cause, `details.refusalReason` names it. When a card cannot be issued because the customer record lacks fields, it is `CARDHOLDER_INFO_MISSING` and `details.missingFields` lists them |\n| END_USER_TERMS_VERSION_NOT_FOUND | The submitted version is not supported for the agreement it was sent for |\n| MISSING_MANDATORY_USER_INFO | Required customer information is missing |\n| INVITATION_ALREADY_CLAIMED | Invitation has already been claimed |\n| INVITATIONS_NOT_CONFIGURED | Invitations are not configured |\n| INVALID_UMA_ADDRESS | UMA address format is invalid |\n| INVITATION_CANCELLED | Invitation has been cancelled |\n| INVALID_RECEIVER | Receiver is invalid |\n| PARSE_PAYREQ_RESPONSE_ERROR | Error parsing receiver PayReq response |\n| CERT_CHAIN_INVALID | Counterparty certificate chain is invalid |\n| CERT_CHAIN_EXPIRED | Counterparty certificate chain has expired |\n| INVALID_PUBKEY_FORMAT | Counterparty Public key format is invalid |\n| MISSING_REQUIRED_UMA_PARAMETERS | Counterparty required UMA parameters are missing |\n| SENDER_NOT_ACCEPTED | The receiving institution declined this sender. Final; a retry returns the same answer |\n| AMOUNT_OUT_OF_RANGE | Amount is out of range |\n| INVALID_CURRENCY | Currency is invalid |\n| INVALID_TIMESTAMP | Timestamp is invalid |\n| INVALID_NONCE | Nonce is invalid |\n| INVALID_REQUEST_FORMAT | Request format is invalid |\n| INVALID_BANK_ACCOUNT | Bank account is invalid |\n| SELF_PAYMENT | Self payment not allowed |\n| PARSE_LNURLP_RESPONSE_ERROR | Error parsing LNURLP response |\n| INVALID_AMOUNT | Amount is invalid |\n| WEBHOOK_ENDPOINT_NOT_SET | Webhook endpoint is not set |\n| WEBHOOK_DELIVERY_ERROR | Webhook delivery error |\n| LOW_QUALITY | Document quality too low to process |\n| DATA_MISMATCH | Document details don't match provided information |\n| EXPIRED | Document has expired |\n| SUSPECTED_FRAUD | Document suspected of being forged or edited |\n| UNSUITABLE_DOCUMENT | Document type is not accepted or not supported |\n| INCOMPLETE | Document is missing pages or sides |\n| EMAIL_OTP_CREDENTIAL_ALREADY_EXISTS | The account holder already has an EMAIL_OTP credential on the target internal account; the holder may have one. Administrators' credentials, added with `POST /auth/admin-credentials`, are not counted |\n| SMS_OTP_CREDENTIAL_ALREADY_EXISTS | An SMS_OTP credential is already registered on the target internal account; only one SMS OTP credential is supported per internal account at this time |\n| PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the same WebAuthn credentialId is already registered on the target internal account |\n| AUTH_CREDENTIAL_VERIFICATION_REQUIRED | The new email or phone number has no verified replacement credential |\n| AUTH_CREDENTIAL_VERIFICATION_EXPIRED | The replacement credential's verification has expired |\n| STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider account link is not usable |\n| STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider account link has been revoked |\n| STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one |\n| STORED_CARD_VERIFICATION_FAILED | The card's issuer did not confirm the card: its security code, billing address or name did not match. Nothing was stored |\n| CARDHOLDER_KYC_NOT_APPROVED | The cardholder's KYC status is not `APPROVED`, so a card cannot be issued |\n| ACCOUNTHOLDER_AGREEMENT_NOT_ACCEPTED | The customer create request omits an accountholder agreement its accounts require |\n| CARDHOLDER_AGREEMENT_NOT_ACCEPTED | The customer has not accepted the cardholder agreement the platform requires before a card is issued |\n| TRANSACTION_SIZE_LIMIT_EXCEEDED | The requested amount exceeds the configured maximum single-transaction amount for this trade corridor or withdrawal currency |\n| EXTERNAL_ACCOUNT_VERIFICATION_REQUIRED | The destination account's ownership must be verified before this transfer can proceed |\n| INSUFFICIENT_FUNDS | Insufficient funds for this operation |\n| QUOTE_EXPIRED | The quote has expired; request a new quote |\n| QUOTE_RATE_UNAVAILABLE | No exchange rate is available for this corridor right now |\n| STABLECOIN_AMOUNT_NOT_REPRESENTABLE | The amount cannot be represented at the token's precision |\n| STABLECOIN_BURN_SOURCE_NOT_SUPPORTED | The burn source account cannot be used for this operation |\n| STABLECOIN_EXTERNAL_ACCOUNT_LINK_FAILED | Linking the external account for stablecoin operations failed |\n| STABLECOIN_EXTERNAL_ACCOUNT_LINK_METHOD_REQUIRED | The external account needs a link method before it can be used |\n| STABLECOIN_EXTERNAL_ACCOUNT_NOT_LINKED | The external account is not linked for stablecoin operations |\n| STABLECOIN_EXTERNAL_ACCOUNT_NOT_SUPPORTED | This external account type is not supported for stablecoin operations |\n| STABLECOIN_EXTERNAL_ACCOUNT_PROVIDER_LINK_FAILED | The provider could not link the external account |\n| STABLECOIN_EXTERNAL_ACCOUNT_PROVIDER_LINK_REQUIRED | The external account must be linked with the provider first |\n| STABLECOIN_GRID_OPERATIONS_NOT_ENABLED | The stablecoin is not enabled for Grid operations |\n| STABLECOIN_NOT_PROVISIONED | The stablecoin is not provisioned for issuer operations |\n| STABLECOIN_OPERATION_NOT_SUPPORTED | The stablecoin does not support this operation |\n| STABLECOIN_PROVIDER_ERROR | The stablecoin provider rejected the operation |\n| STABLECOIN_PROVIDER_SOURCE_NOT_LINKED | The provider source account is not linked |\n| STABLECOIN_VERIFICATION_FAILED | The stablecoin could not be verified with the provider |\n| DOCUMENTS_REQUIRED | The destination requires supporting documents for the quote's `purposeOfPayment` that the request did not supply. `details.missingRequirements` lists the requirement ID of each one |\n| EXACT_AMOUNT_UNAVAILABLE | The quote cannot deliver exactly the requested receiving amount at the current rate; quote again shortly or lock the sending amount |\n","enum":["INVALID_INPUT","END_USER_TERMS_VERSION_NOT_FOUND","MISSING_MANDATORY_USER_INFO","INVITATION_ALREADY_CLAIMED","INVITATIONS_NOT_CONFIGURED","INVALID_UMA_ADDRESS","INVITATION_CANCELLED","INVALID_RECEIVER","PARSE_PAYREQ_RESPONSE_ERROR","CERT_CHAIN_INVALID","CERT_CHAIN_EXPIRED","INVALID_PUBKEY_FORMAT","MISSING_REQUIRED_UMA_PARAMETERS","SENDER_NOT_ACCEPTED","AMOUNT_OUT_OF_RANGE","INVALID_CURRENCY","INVALID_TIMESTAMP","INVALID_NONCE","INVALID_REQUEST_FORMAT","INVALID_BANK_ACCOUNT","SELF_PAYMENT","PARSE_LNURLP_RESPONSE_ERROR","INVALID_AMOUNT","WEBHOOK_ENDPOINT_NOT_SET","WEBHOOK_DELIVERY_ERROR","LOW_QUALITY","DATA_MISMATCH","EXPIRED","SUSPECTED_FRAUD","UNSUITABLE_DOCUMENT","INCOMPLETE","EMAIL_OTP_CREDENTIAL_ALREADY_EXISTS","SMS_OTP_CREDENTIAL_ALREADY_EXISTS","PASSKEY_CREDENTIAL_ALREADY_EXISTS","AUTH_CREDENTIAL_VERIFICATION_REQUIRED","AUTH_CREDENTIAL_VERIFICATION_EXPIRED","STABLECOIN_PROVIDER_ACCOUNT_INVALID","STABLECOIN_PROVIDER_ACCOUNT_REVOKED","STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED","STORED_CARD_VERIFICATION_FAILED","CARDHOLDER_KYC_NOT_APPROVED","ACCOUNTHOLDER_AGREEMENT_NOT_ACCEPTED","CARDHOLDER_AGREEMENT_NOT_ACCEPTED","TRANSACTION_SIZE_LIMIT_EXCEEDED","EXTERNAL_ACCOUNT_VERIFICATION_REQUIRED","INSUFFICIENT_FUNDS","QUOTE_EXPIRED","QUOTE_RATE_UNAVAILABLE","STABLECOIN_AMOUNT_NOT_REPRESENTABLE","STABLECOIN_BURN_SOURCE_NOT_SUPPORTED","STABLECOIN_EXTERNAL_ACCOUNT_LINK_FAILED","STABLECOIN_EXTERNAL_ACCOUNT_LINK_METHOD_REQUIRED","STABLECOIN_EXTERNAL_ACCOUNT_NOT_LINKED","STABLECOIN_EXTERNAL_ACCOUNT_NOT_SUPPORTED","STABLECOIN_EXTERNAL_ACCOUNT_PROVIDER_LINK_FAILED","STABLECOIN_EXTERNAL_ACCOUNT_PROVIDER_LINK_REQUIRED","STABLECOIN_GRID_OPERATIONS_NOT_ENABLED","STABLECOIN_NOT_PROVISIONED","STABLECOIN_OPERATION_NOT_SUPPORTED","STABLECOIN_PROVIDER_ERROR","STABLECOIN_PROVIDER_SOURCE_NOT_LINKED","STABLECOIN_VERIFICATION_FAILED","DOCUMENTS_REQUIRED","EXACT_AMOUNT_UNAVAILABLE"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","description":"Additional error details. Shape varies by `code`. For field-validation errors on submit endpoints (e.g. `POST /customers`, `PATCH /customers/{id}`), `details.errors[]` enumerates every invalid field so platforms can render form-field-level UX for the entire request in a single round-trip.","properties":{"errors":{"type":"array","description":"One entry per invalid field. Present on field-validation errors from submit endpoints.","items":{"type":"object","required":["field"],"description":"One field-level validation failure. Field-validation errors on submit endpoints (e.g. `POST /customers`, `PATCH /customers/{id}`) emit an array of these under `details.errors` so platforms can render form-field-level UX for every failure in a single round-trip.","properties":{"field":{"type":"string","description":"Dot-notation path to the offending field.","example":"identifier","isRequired":true,"uniqueKey":"details.errors.items.[INDEX].field","typeLabel":"string"},"constraint":{"type":"object","description":"Machine-readable validator hint accompanying a 400 `INVALID_INPUT` error. Consumers use it to drive form UI (input types, dropdowns, masking, length limits) and to pre-validate the field client-side before re-submitting. Fields are additive.","properties":{"format":{"type":"string","description":"Named format the value must satisfy — HTML5 input type names (`email`, `tel`, `url`, `date`, ...) or semantic slugs (`iso3166-1-alpha-2`, `bcp47-language-tag`, `us-ssn`, `e.164`).","example":"email","uniqueKey":"details.errors.items.[INDEX].constraint.format","typeLabel":"string"},"pattern":{"type":"string","description":"Regular expression the value must match (JavaScript-flavor).","example":"^\\d{5}(-\\d{4})?$","uniqueKey":"details.errors.items.[INDEX].constraint.pattern","typeLabel":"string"},"enum":{"type":"array","items":{"type":"string","uniqueKey":"details.errors.items.[INDEX].constraint.enum.items.[INDEX]","typeLabel":"string"},"description":"Allowed values when the field is drawn from a fixed set.","example":["SSN","ITIN","NON_US_TAX_ID"],"uniqueKey":"details.errors.items.[INDEX].constraint.enum","typeLabel":"string[]"},"minLength":{"type":"integer","description":"Minimum length in characters.","example":1,"uniqueKey":"details.errors.items.[INDEX].constraint.minLength","typeLabel":"integer"},"maxLength":{"type":"integer","description":"Maximum length in characters.","example":500,"uniqueKey":"details.errors.items.[INDEX].constraint.maxLength","typeLabel":"integer"}},"uniqueKey":"details.errors.items.[INDEX].constraint","typeLabel":"object"},"message":{"type":"string","description":"Human-readable explanation of what's wrong with this field.","example":"Value is not one of the allowed enum members.","uniqueKey":"details.errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"details.errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"details.errors","typeLabel":"object[]"},"missingRequirements":{"type":"array","description":"The requirement ID of each required document that the quote request did not supply. Present on `DOCUMENTS_REQUIRED`.","items":{"type":"string","description":"A stable identifier for one required document within a purpose's requirements. The same ID means the same requirement across quotes. It is separate from `PaymentDocumentType`. The requirement ID names the document to supply, and the document type names what a file is. The two differ where a requirement accepts alternatives. For example, a file declared as either `PURCHASE_ORDER` or `DELIVERY_SLIP` fills the `SUPPORTING_PROOF` requirement.\n\n[Supporting Documents](https://docs.lightspark.com/payouts-and-b2b/payment-flow/send-payment#supporting-documents) lists the IDs each purpose requires.\n\nTreat the ID as an opaque value, not a member of a fixed list. Grid may add new IDs as requirements change.","example":"SUPPORTING_PROOF","uniqueKey":"details.missingRequirements.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.missingRequirements","typeLabel":"string[]"},"refusalReason":{"type":"string","description":"Why Grid refused the request, as `details.refusalReason`. Several refusals\nshare one `code`, and `reason` is a message that may be reworded, so branch\non this value rather than on `reason`. Treat it as an open set, not a fixed\nlist: Grid may add values, and an unknown one is a refusal without a known\ncause.\n\n| Refusal reason | Status | Description |\n|----------------|--------|-------------|\n| `AGENT_API_DISABLED` | 403 | The agent API is not enabled for the platform |\n| `AGENT_CUSTOMER_INACTIVE` | 403 | The agent's customer is not active |\n| `AGENT_INACTIVE` | 403 | The agent is paused or deleted |\n| `AGENT_NO_DELEGATED_KEY` | 403 | The agent holds no active delegated key for the source wallet |\n| `AGENT_PERMISSION_REQUIRED` | 403 | The agent's policy lacks a permission this call needs. `details.permission` names it |\n| `AGENT_ACCOUNT_NOT_ALLOWED` | 403 | The agent's policy does not allow the source account or funding source |\n| `AGENT_DEPOSIT_ACCOUNT_NOT_ALLOWED` | 403 | The agent's policy does not allow deposits to this account |\n| `AGENT_POLICY_DENIED` | 403 | The agent's policy denied executing the quote. `details.policyDenialReason` says which rule |\n| `AGENT_QUOTE_HELD` | 403 | The quote cannot be sent and is held for manual follow-up |\n| `AGENT_CARDS_DISABLED` | 403 | Agent cards are not enabled for the platform |\n| `AGENT_CARDS_CUSTOMER_NOT_VERIFIED` | 403 | Agent cards need a verified individual customer |\n| `AGENT_CARD_HANDOVER_DISABLED` | 403 | Handing an agent's card over to its customer is not enabled for the platform |\n| `AGENT_PURCHASE_CARDS_DISABLED` | 403 | Agent purchase cards are not enabled for the platform |\n| `AGENT_RECURRING_PURCHASE_CARDS_DISABLED` | 403 | Agent recurring purchase cards are not enabled for the platform |\n| `AGENT_PURCHASE_CARD_POLICY_DENIED` | 403 | The agent's policy denied the purchase card. `details.policyDenialReason` says which rule |\n| `STORED_CARDS_DISABLED` | 403 | Stored cards are not enabled for the platform |\n| `CARDS_DISABLED` | 403 | Cards are not enabled for the platform |\n| `CARDHOLDER_INFO_MISSING` | 400 | The cardholder record lacks fields a card needs. `details.missingFields` lists them; supply them through the customers API |\n| `CARDHOLDER_BANK_ACCOUNT_NOT_OPEN` | 400 | The cardholder's USD bank account is not open yet, so no card can be issued until it is |\n| `CARDHOLDER_COUNTRY_NOT_SUPPORTED` | 400 | The cardholder's address is outside the United States, where agent cards are not offered yet |\n| `CARDHOLDER_HOLDS_CARD` | 409 | The cardholder already holds a card and the platform allows one per cardholder. Close it before issuing another |\n| `INVOICE_SUB_SAT_AMOUNT` | 400 | The Lightning invoice's amount is not a whole number of satoshis |\n| `INVOICE_FUNDS_DEPOSIT` | 400 | The Lightning invoice was issued by Lightspark to fund a deposit and cannot be paid with a send |\n| `INVOICE_FUNDS_OWN_DEPOSIT` | 400 | The Lightning invoice funds a deposit of the sender's own. Quote a transfer between the customer's accounts instead |\n","example":"AGENT_POLICY_DENIED","uniqueKey":"details.refusalReason","typeLabel":"string"},"missingFields":{"type":"array","description":"Each customer field the request needs but the customer record lacks, named as in `CustomerInfoFieldName` (for example `PHONE_NUMBER`). Present with refusal reason `CARDHOLDER_INFO_MISSING`. Grid may name fields not yet listed there.","items":{"type":"string","example":"PHONE_NUMBER","uniqueKey":"details.missingFields.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.missingFields","typeLabel":"string[]"}},"additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"INVALID_INPUT","reason":"\u003cstring>","details":{"errors":[{"field":"identifier","constraint":{"format":"email","pattern":"^\\d{5}(-\\d{4})?$","enum":["SSN","ITIN","NON_US_TAX_ID"],"minLength":1,"maxLength":500},"message":"Value is not one of the allowed enum members."}],"missingRequirements":["SUPPORTING_PROOF"],"refusalReason":"AGENT_POLICY_DENIED","missingFields":["PHONE_NUMBER"]}}}},"exampleType":"generated"}},"exampleType":"generated"},"2f53ff55-7816-4d47-b49a-3e0c45db38cc":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["reason","code"],"properties":{"code":{"type":"string","description":"| Error Code | Description |\n|------------|-------------|\n| UNAUTHORIZED | Issue with API credentials |\n| INVALID_SIGNATURE | Signature header is invalid |\n| WALLET_SIGNATURE_MISSING | The `Grid-Wallet-Signature` header is required for this Embedded Wallet action but was not supplied |\n| WALLET_SIGNATURE_MALFORMED | The `Grid-Wallet-Signature` header could not be parsed (bad encoding, structure, or fields) |\n| WALLET_SIGNATURE_BODY_MISMATCH | The `Grid-Wallet-Signature` was computed over a different request body than the one received |\n| WALLET_SIGNATURE_INVALID | The `Grid-Wallet-Signature` failed cryptographic verification against the registered credential |\n| REQUEST_ID_MISSING | The `Request-Id` header is required on the signed retry but was not supplied (paired with `Grid-Wallet-Signature`) |\n","enum":["UNAUTHORIZED","INVALID_SIGNATURE","WALLET_SIGNATURE_MISSING","WALLET_SIGNATURE_MALFORMED","WALLET_SIGNATURE_BODY_MISMATCH","WALLET_SIGNATURE_INVALID","REQUEST_ID_MISSING"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","description":"Additional error details","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"UNAUTHORIZED","reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"326f2610-1dcf-4a28-a81d-c6ed08a8159f":{"description":"Forbidden - Agents API or stored cards are not enabled for the platform, the agent is paused, or the agent does not have the USE_STORED_CARDS permission","content":{"application/json":{"schema":{"type":"object","required":["reason","code"],"properties":{"code":{"type":"string","description":"| Error Code | Description |\n|------------|-------------|\n| FORBIDDEN | Insufficient permissions. `details.refusalReason` names the cause when Grid knows it |\n| USER_NOT_READY | Customer exists but is not ready for operation |\n| COUNTERPARTY_NOT_ALLOWED | Counterparty has not been enabled for your account |\n| VELOCITY_LIMIT_EXCEEDED | Counterparty has exceeded velocity limits |\n| END_USER_TERMS_NOT_ACCEPTED | Customer has not accepted the End User Terms |\n| CUSTOMER_NOT_VERIFIED | The customer is not verified and cannot perform this action |\n| SANCTION_BLOCKED | Blocked by sanction screening |\n| DESTINATION_NOT_ALLOWED | The agent may not pay this destination |\n| CORRIDOR_UNDER_MAINTENANCE | Payments to this corridor are paused for maintenance. |\n","enum":["FORBIDDEN","USER_NOT_READY","COUNTERPARTY_NOT_ALLOWED","VELOCITY_LIMIT_EXCEEDED","END_USER_TERMS_NOT_ACCEPTED","CUSTOMER_NOT_VERIFIED","SANCTION_BLOCKED","DESTINATION_NOT_ALLOWED","CORRIDOR_UNDER_MAINTENANCE"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","description":"Additional error details. Shape varies by `code`. A `FORBIDDEN` refusal with a known cause carries `refusalReason`, plus the fields that reason names.","properties":{"refusalReason":{"type":"string","description":"Why Grid refused the request, as `details.refusalReason`. Several refusals\nshare one `code`, and `reason` is a message that may be reworded, so branch\non this value rather than on `reason`. Treat it as an open set, not a fixed\nlist: Grid may add values, and an unknown one is a refusal without a known\ncause.\n\n| Refusal reason | Status | Description |\n|----------------|--------|-------------|\n| `AGENT_API_DISABLED` | 403 | The agent API is not enabled for the platform |\n| `AGENT_CUSTOMER_INACTIVE` | 403 | The agent's customer is not active |\n| `AGENT_INACTIVE` | 403 | The agent is paused or deleted |\n| `AGENT_NO_DELEGATED_KEY` | 403 | The agent holds no active delegated key for the source wallet |\n| `AGENT_PERMISSION_REQUIRED` | 403 | The agent's policy lacks a permission this call needs. `details.permission` names it |\n| `AGENT_ACCOUNT_NOT_ALLOWED` | 403 | The agent's policy does not allow the source account or funding source |\n| `AGENT_DEPOSIT_ACCOUNT_NOT_ALLOWED` | 403 | The agent's policy does not allow deposits to this account |\n| `AGENT_POLICY_DENIED` | 403 | The agent's policy denied executing the quote. `details.policyDenialReason` says which rule |\n| `AGENT_QUOTE_HELD` | 403 | The quote cannot be sent and is held for manual follow-up |\n| `AGENT_CARDS_DISABLED` | 403 | Agent cards are not enabled for the platform |\n| `AGENT_CARDS_CUSTOMER_NOT_VERIFIED` | 403 | Agent cards need a verified individual customer |\n| `AGENT_CARD_HANDOVER_DISABLED` | 403 | Handing an agent's card over to its customer is not enabled for the platform |\n| `AGENT_PURCHASE_CARDS_DISABLED` | 403 | Agent purchase cards are not enabled for the platform |\n| `AGENT_RECURRING_PURCHASE_CARDS_DISABLED` | 403 | Agent recurring purchase cards are not enabled for the platform |\n| `AGENT_PURCHASE_CARD_POLICY_DENIED` | 403 | The agent's policy denied the purchase card. `details.policyDenialReason` says which rule |\n| `STORED_CARDS_DISABLED` | 403 | Stored cards are not enabled for the platform |\n| `CARDS_DISABLED` | 403 | Cards are not enabled for the platform |\n| `CARDHOLDER_INFO_MISSING` | 400 | The cardholder record lacks fields a card needs. `details.missingFields` lists them; supply them through the customers API |\n| `CARDHOLDER_BANK_ACCOUNT_NOT_OPEN` | 400 | The cardholder's USD bank account is not open yet, so no card can be issued until it is |\n| `CARDHOLDER_COUNTRY_NOT_SUPPORTED` | 400 | The cardholder's address is outside the United States, where agent cards are not offered yet |\n| `CARDHOLDER_HOLDS_CARD` | 409 | The cardholder already holds a card and the platform allows one per cardholder. Close it before issuing another |\n| `INVOICE_SUB_SAT_AMOUNT` | 400 | The Lightning invoice's amount is not a whole number of satoshis |\n| `INVOICE_FUNDS_DEPOSIT` | 400 | The Lightning invoice was issued by Lightspark to fund a deposit and cannot be paid with a send |\n| `INVOICE_FUNDS_OWN_DEPOSIT` | 400 | The Lightning invoice funds a deposit of the sender's own. Quote a transfer between the customer's accounts instead |\n","example":"AGENT_POLICY_DENIED","uniqueKey":"details.refusalReason","typeLabel":"string"},"permission":{"type":"string","description":"The `AgentPermission` the agent's policy lacks. Present with refusal reason `AGENT_PERMISSION_REQUIRED`. Grid may add permissions, so accept a value not yet listed there.","example":"ISSUE_CARDS","uniqueKey":"details.permission","typeLabel":"string"},"policyDenialReason":{"type":"string","description":"The policy rule that denied the quote or purchase card. Present with refusal reason `AGENT_POLICY_DENIED` or `AGENT_PURCHASE_CARD_POLICY_DENIED`.","example":"DAILY_LIMIT_EXCEEDED","uniqueKey":"details.policyDenialReason","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"FORBIDDEN","reason":"\u003cstring>","details":{"refusalReason":"AGENT_POLICY_DENIED","permission":"ISSUE_CARDS","policyDenialReason":"DAILY_LIMIT_EXCEEDED"}}}},"exampleType":"generated"}},"exampleType":"generated"},"2b5ac965-9995-4363-9b65-238b5f6dd972":{"description":"Stored card not found, or not one this agent may use","content":{"application/json":{"schema":{"type":"object","required":["reason","code"],"properties":{"code":{"type":"string","description":"| Error Code | Description |\n|------------|-------------|\n| TRANSACTION_NOT_FOUND | Transaction not found |\n| INVITATION_NOT_FOUND | Invitation not found |\n| USER_NOT_FOUND | Customer not found |\n| QUOTE_NOT_FOUND | Quote not found |\n| LOOKUP_REQUEST_NOT_FOUND | Lookup request not found |\n| TOKEN_NOT_FOUND | Token not found |\n| BULK_UPLOAD_JOB_NOT_FOUND | Bulk upload job not found |\n| REFERENCE_NOT_FOUND | Reference not found |\n| UMA_NOT_FOUND | The UMA address is well-formed but no receiver exists at the counterparty VASP |\n| STABLECOIN_PROVIDER_ACCOUNT_NOT_FOUND | Stablecoin provider account link not found |\n| ACCOUNT_NOT_FOUND | Account not found |\n| AUTH_METHOD_NOT_FOUND | Authentication credential not found |\n| CUSTOMER_NOT_FOUND | Customer not found |\n| DOCUMENT_HOLDER_NOT_FOUND | Document holder not found |\n| NOT_FOUND | The requested resource was not found |\n| PAYMENT_URL_NOT_FOUND | Payment URL not found |\n| PLATFORM_NOT_FOUND | Platform not found |\n| REQUEST_NOT_FOUND | Pending request not found |\n| SESSION_NOT_FOUND | Session not found |\n| STABLECOIN_EXTERNAL_ACCOUNT_NOT_FOUND | Stablecoin external account not found |\n| STABLECOIN_NOT_FOUND | Stablecoin not found |\n| STABLECOIN_OPERATION_NOT_FOUND | Stablecoin operation not found |\n| VERIFICATION_NOT_FOUND | Verification not found |\n| PAYMENT_DOCUMENT_NOT_FOUND | Payment document not found |\n","enum":["TRANSACTION_NOT_FOUND","INVITATION_NOT_FOUND","USER_NOT_FOUND","QUOTE_NOT_FOUND","LOOKUP_REQUEST_NOT_FOUND","TOKEN_NOT_FOUND","BULK_UPLOAD_JOB_NOT_FOUND","REFERENCE_NOT_FOUND","UMA_NOT_FOUND","STABLECOIN_PROVIDER_ACCOUNT_NOT_FOUND","ACCOUNT_NOT_FOUND","AUTH_METHOD_NOT_FOUND","CUSTOMER_NOT_FOUND","DOCUMENT_HOLDER_NOT_FOUND","NOT_FOUND","PAYMENT_URL_NOT_FOUND","PLATFORM_NOT_FOUND","REQUEST_NOT_FOUND","SESSION_NOT_FOUND","STABLECOIN_EXTERNAL_ACCOUNT_NOT_FOUND","STABLECOIN_NOT_FOUND","STABLECOIN_OPERATION_NOT_FOUND","VERIFICATION_NOT_FOUND","PAYMENT_DOCUMENT_NOT_FOUND"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","description":"Additional error details","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"TRANSACTION_NOT_FOUND","reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"8c7c3f7c-e1be-446e-9611-6ace2d598c05":{"description":"The `actionId` is not an approved use of this card by this agent, or its link was already issued","content":{"application/json":{"schema":{"type":"object","required":["reason","code"],"properties":{"code":{"type":"string","description":"| Error Code | Description |\n|------------|-------------|\n| TRANSACTION_NOT_PENDING_PLATFORM_APPROVAL | Transaction is not pending platform approval |\n| TRANSACTION_NOT_CANCELLABLE | Transaction has already settled or is otherwise past the point where it can be cancelled |\n| UMA_ADDRESS_EXISTS | UMA address already exists |\n| EMAIL_OTP_EMAIL_ALREADY_EXISTS | Email address is already associated with an EMAIL_OTP credential |\n| EMAIL_OTP_CREDENTIAL_SET_CHANGED | Tied EMAIL_OTP credential set changed after the signed-retry challenge was issued |\n| PASSKEY_ALREADY_ENROLLED | The customer already has the most passkeys allowed (two). Delete one before enrolling another |\n| SCA_SESSION_REQUIRED | The customer's Strong Customer Authentication login session is missing or expired. Re-authenticate the customer, then retry the request. Distinct from a `401`, which means the platform's own API credentials were rejected |\n| BENEFICIARY_NOT_TRUSTED | The external account must be a trusted beneficiary before it can be used here. Trust it first via `POST /customers/external-accounts/{externalAccountId}/trust` (and its `/confirm`), then retry |\n| BENEFICIARY_TRUSTED | The external account is currently a trusted beneficiary, so it cannot be deleted. Untrust it first via `POST /customers/external-accounts/{externalAccountId}/untrust` (and its `/confirm`), then delete |\n| BANK_ACCOUNT_VALIDATION_PENDING | The US bank account on this request is still being validated. Grid verifies a newly added ACH account by sending a micro-entry and waiting out the return window, which takes a few banking days. The account is not rejected; retry once validation completes. A permanently failed account returns `400 INVALID_BANK_ACCOUNT` instead |\n| INVALID_STATE_TRANSITION | The requested card `status` transition is not one of `ACTIVE ⇄ FROZEN` or `ACTIVE \\| FROZEN → CLOSED`, or the card cannot be unfrozen by the platform because Grid froze it for review, it was frozen as `COMPROMISED`, or its customer is not `ACTIVE` |\n| CARD_ALREADY_CLOSED | `status: CLOSED` was requested for a card that is already `CLOSED` |\n| CARD_NOT_MUTABLE | The card is `CLOSED`, so it can no longer be mutated |\n| PIN_CHANGE_REQUIRED | The card's PIN unblock allowance is consumed for seven days. Change the PIN to recover sooner. `details.pinUnblockAvailableAt` gives the next allowed unblock time |\n| AGENT_CARD_EXISTS | The agent already holds a card that is not `CLOSED`, so it cannot issue another. Close that card first |\n| PURCHASE_CARD_LIMIT_REACHED | The agent already holds the most open purchase cards allowed, counting purchase cards awaiting approval. Use or close one first |\n| CARD_LIMIT_REACHED | The platform has reached the maximum number of live cards it may hold, or the cardholder already holds a card and the platform is limited to one per cardholder. Closing a card frees its slot; contact Lightspark to raise the limit |\n| STABLECOIN_GRID_ENABLEMENT_NOT_REQUESTABLE | Grid enablement can only be requested while the stablecoin is `NOT_ENABLED` (a repeat request while already `PENDING_APPROVAL` succeeds). `ENABLING`, `ENABLED` and `DISABLED` are driven by Lightspark and cannot be requested |\n| NOT_YET_AVAILABLE | The request is valid, but its result is not available yet because the data it depends on could still change. Retry later. `reason` says what is outstanding. For balance changes, card settlement for a window boundary has not closed |\n| CONFLICT | Generic resource-state conflict. Returned, for example, when `platformCustomerId` on a customer create call collides with an existing active customer on the same platform. When the cardholder already holds the one card the platform allows, `details.refusalReason` is `CARDHOLDER_HOLDS_CARD` |\n| DOCUMENT_ALREADY_EXISTS | A document of this type already exists for the holder; replace it with PUT |\n| DUPLICATE_EXTERNAL_ACCOUNT | The `platformAccountId` is already used, or, without one, the wallet is already registered. When the conflicting account belongs to your platform, `details.externalAccountId` and `details.platformAccountId` identify it; otherwise `details` is omitted |\n| DUPLICATE_PAY_REQUEST | A pay request with this idempotency key already exists |\n| OPERATION_IN_PROGRESS | A conflicting Embedded Wallet operation is still in progress |\n| SMS_OTP_CREDENTIAL_SET_CHANGED | The SMS_OTP credential set changed while the request was in flight |\n| SMS_OTP_PHONE_NUMBER_ALREADY_EXISTS | The phone number is already associated with an SMS_OTP credential |\n| STABLECOIN_SYMBOL_ALREADY_EXISTS | A stablecoin with this symbol is already registered |\n| STABLECOIN_TOKEN_IDENTIFIER_ALREADY_EXISTS | A stablecoin with this token identifier is already registered |\n| WALLET_NOT_PROVISIONED | The embedded wallet has not been provisioned |\n| PAYMENT_DOCUMENT_ALREADY_USED | The payment document is already attached to a quote. A document can be used on one quote only, so upload the file again to use it on another quote |\n| INVOICE_ALREADY_USED | Another quote for the Lightning invoice can still be executed or funded, or was executed. An invoice has one live quote at a time; ask the recipient for a new one, or retry once Grid has closed the earlier quote as expired |\n","enum":["TRANSACTION_NOT_PENDING_PLATFORM_APPROVAL","TRANSACTION_NOT_CANCELLABLE","UMA_ADDRESS_EXISTS","EMAIL_OTP_EMAIL_ALREADY_EXISTS","EMAIL_OTP_CREDENTIAL_SET_CHANGED","PASSKEY_ALREADY_ENROLLED","SCA_SESSION_REQUIRED","BENEFICIARY_NOT_TRUSTED","BENEFICIARY_TRUSTED","BANK_ACCOUNT_VALIDATION_PENDING","INVALID_STATE_TRANSITION","CARD_ALREADY_CLOSED","CARD_NOT_MUTABLE","PIN_CHANGE_REQUIRED","AGENT_CARD_EXISTS","PURCHASE_CARD_LIMIT_REACHED","CARD_LIMIT_REACHED","STABLECOIN_GRID_ENABLEMENT_NOT_REQUESTABLE","NOT_YET_AVAILABLE","CONFLICT","DOCUMENT_ALREADY_EXISTS","DUPLICATE_EXTERNAL_ACCOUNT","DUPLICATE_PAY_REQUEST","OPERATION_IN_PROGRESS","SMS_OTP_CREDENTIAL_SET_CHANGED","SMS_OTP_PHONE_NUMBER_ALREADY_EXISTS","STABLECOIN_SYMBOL_ALREADY_EXISTS","STABLECOIN_TOKEN_IDENTIFIER_ALREADY_EXISTS","WALLET_NOT_PROVISIONED","PAYMENT_DOCUMENT_ALREADY_USED","INVOICE_ALREADY_USED"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","description":"Additional error details","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"TRANSACTION_NOT_PENDING_PLATFORM_APPROVAL","reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"bd999a0f-76c7-498b-ad9d-a2acce651c89":{"description":"Too many uses for this card, agent or customer; retry later","content":{"application/json":{"schema":{"type":"object","required":["reason","code"],"properties":{"code":{"type":"string","description":"| Error Code | Description |\n|------------|-------------|\n| RATE_LIMITED | Too many requests in a short window; retry after the interval indicated by the `Retry-After` response header |\n| DAILY_VOLUME_LIMIT_EXCEEDED | The requested amount would exceed the configured daily volume limit for this trade corridor or withdrawal currency |\n","enum":["RATE_LIMITED","DAILY_VOLUME_LIMIT_EXCEEDED"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","description":"Additional error details","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"RATE_LIMITED","reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"4608b76c-e2e8-46f5-bb18-8c4657cab0cd":{"description":"Internal service error","content":{"application/json":{"schema":{"type":"object","required":["reason","code"],"properties":{"code":{"type":"string","description":"| Error Code | Description |\n|------------|-------------|\n| GRID_SWITCH_ERROR | Grid switch error |\n| INTERNAL_ERROR | Internal server or UMA error |\n","enum":["GRID_SWITCH_ERROR","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"reason","typeLabel":"string"},"details":{"type":"object","description":"Additional error details","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"GRID_SWITCH_ERROR","reason":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"bc114bec-1883-4e5b-8c8f-d2a491e0a501":{"AgentAuth":{"type":"http","scheme":"bearer","description":"Bearer token authentication for agent-scoped endpoints. The token is the `accessToken` returned when redeeming a device code via `POST /agents/device-codes/redeem`. Agent credentials are user-scoped: all requests are automatically bound to the agent's associated customer and subject to the agent's policy.","scopes":[],"schemeName":"AgentAuth"}}},"servers":{"b65ea8aa-b4dc-4313-b492-d17545120bef":{"url":"https://api.lightspark.com/grid/2025-10-13","description":"Production server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Bearer token authentication for agent-scoped endpoints. The token is the `accessToken` returned when redeeming a device code via `POST /agents/device-codes/redeem`. Agent credentials are user-scoped: all requests are automatically bound to the agent's associated customer and subject to the agent's policy.","scopes":[],"schemeName":"AgentAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer token authentication for agent-scoped endpoints. The token is the `accessToken` returned when redeeming a device code via `POST /agents/device-codes/redeem`. Agent credentials are user-scoped: all requests are automatically bound to the agent's associated customer and subject to the agent's policy.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"AgentAuth","name":"Authorization"}],"title":"AgentAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"ramps","siteName":"Lightspark Docs","title":"Ask for a stored card's details - Lightspark Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-07T02:10:56.206Z","originalFileLocation":"api-reference/agent-operations/ask-for-a-stored-cards-details.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer\u0026#x27;s own card. The customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers 202 with a USE_STORED_CARD action in PENDING_APPROVAL; once it is APPROVED, call again with only its actionId to collect the link. A use with needsCvc always waits, since the customer enters the security code when approving. An approved use answers 200 with a single-use detailsUrl, valid for five minutes. The number reaches the agent through Evervault\u0026#x27;s Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same actionId is refused with 409. Every use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with 429 RATE_LIMITED. Requires the USE_STORED_CARDS permission and the customer\u0026#x27;s permission for this agent to use the card.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Lightspark Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Ask for a stored card\u0026#x27;s details - Lightspark Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer\u0026#x27;s own card. The customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers 202 with a USE_STORED_CARD action in PENDING_APPROVAL; once it is APPROVED, call again with only its actionId to collect the link. A use with needsCvc always waits, since the customer enters the security code when approving. An approved use answers 200 with a single-use detailsUrl, valid for five minutes. The number reaches the agent through Evervault\u0026#x27;s Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same actionId is refused with 409. Every use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with 429 RATE_LIMITED. Requires the USE_STORED_CARDS permission and the customer\u0026#x27;s permission for this agent to use the card.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Lightspark Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ramps.mintlify.site/_mintlify/api/og/v2?division=Agent+Operations\u0026amp;title=Ask+for+a+stored+card%27s+details\u0026amp;description=Ask+to+use+a+stored+card+for+one+purchase.+The+agent+names+the+merchant%2C+the+amount+it+expects+to+be+charged+and+what+the+purchase+is%3B+Grid+cannot+enforce+the+a\u0026amp;theme=f4bf042f1e7b03b892236067\u0026amp;signature=500c54b2dd3e8f37e45f1e9160c66c70333b592ebbf53b95a19f720617b7b7b8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Ask for a stored card\u0026#x27;s details - Lightspark Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer\u0026#x27;s own card. The customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers 202 with a USE_STORED_CARD action in PENDING_APPROVAL; once it is APPROVED, call again with only its actionId to collect the link. A use with needsCvc always waits, since the customer enters the security code when approving. An approved use answers 200 with a single-use detailsUrl, valid for five minutes. The number reaches the agent through Evervault\u0026#x27;s Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same actionId is refused with 409. Every use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with 429 RATE_LIMITED. Requires the USE_STORED_CARDS permission and the customer\u0026#x27;s permission for this agent to use the card.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ramps.mintlify.site/_mintlify/api/og/v2?division=Agent+Operations\u0026amp;title=Ask+for+a+stored+card%27s+details\u0026amp;description=Ask+to+use+a+stored+card+for+one+purchase.+The+agent+names+the+merchant%2C+the+amount+it+expects+to+be+charged+and+what+the+purchase+is%3B+Grid+cannot+enforce+the+a\u0026amp;theme=f4bf042f1e7b03b892236067\u0026amp;signature=500c54b2dd3e8f37e45f1e9160c66c70333b592ebbf53b95a19f720617b7b7b8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/ramps/80l56YngtJL1HIsK/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Lightspark Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1A1A1A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/agent-operations/ask-for-a-stored-cards-details.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.lightspark.com/#organization\",\"name\":\"Lightspark Docs\",\"url\":\"https://docs.lightspark.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ramps/ujGiXSzMzyTCK9Q8/logo/light.svg?fit=max\u0026auto=format\u0026n=ujGiXSzMzyTCK9Q8\u0026q=85\u0026s=ecb69e0221bbec6bea0813e362b34d22\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.lightspark.com#website\",\"name\":\"Lightspark Docs\",\"url\":\"https://docs.lightspark.com\",\"publisher\":{\"@id\":\"https://docs.lightspark.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details#webpage\",\"url\":\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details\",\"name\":\"Ask for a stored card's details\",\"description\":\"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer's own card. The customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers 202 with a USE_STORED_CARD action in PENDING_APPROVAL; once it is APPROVED, call again with only its actionId to collect the link. A use with needsCvc always waits, since the customer enters the security code when approving. An approved use answers 200 with a single-use detailsUrl, valid for five minutes. The number reaches the agent through Evervault's Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same actionId is refused with 409. Every use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with 429 RATE_LIMITED. Requires the USE_STORED_CARDS permission and the customer's permission for this agent to use the card.\",\"dateModified\":\"2026-11-07T02:10:56.206Z\",\"isPartOf\":{\"@id\":\"https://docs.lightspark.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API documentation\",\"item\":\"https://docs.lightspark.com/api-reference/platform-configuration/get-platform-configuration\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Agent Operations\",\"item\":\"https://docs.lightspark.com/api-reference/agent-operations/get-current-agent\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ask for a stored card's details\",\"item\":\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details#apireference\",\"headline\":\"Ask for a stored card's details\",\"name\":\"Ask for a stored card's details\",\"description\":\"Ask to use a stored card for one purchase. The agent names the merchant, the amount it expects to be charged and what the purchase is; Grid cannot enforce the amount, since the merchant charges the customer's own card. The customer approves every use unless they chose to auto-approve this agent at this merchant up to the amount. A use that waits answers 202 with a USE_STORED_CARD action in PENDING_APPROVAL; once it is APPROVED, call again with only its actionId to collect the link. A use with needsCvc always waits, since the customer enters the security code when approving. An approved use answers 200 with a single-use detailsUrl, valid for five minutes. The number reaches the agent through Evervault's Relay, which decrypts it on the way; Grid never sends it. Open the URL once, right away, where the purchase is being made, and never store or log it. Each approved use issues one link: asking again with the same actionId is refused with 409. Every use is audit-logged with the agent as the actor. Uses are rate limited per card, per agent and per customer; beyond the limit the request is rejected with 429 RATE_LIMITED. Requires the USE_STORED_CARDS permission and the customer's permission for this agent to use the card.\",\"url\":\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details\",\"mainEntityOfPage\":{\"@id\":\"https://docs.lightspark.com/api-reference/agent-operations/ask-for-a-stored-cards-details#webpage\"},\"dateModified\":\"2026-11-07T02:10:56.206Z\",\"publisher\":{\"@id\":\"https://docs.lightspark.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.lightspark.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Lightspark Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Lightspark Docs","nav":{"global":null,"tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":""}]},{"tab":"Build your flow","pages":[{"title":"Build your flow","href":"/flow-builder"}]},{"tab":"Global Accounts","pages":[{"title":"Global Accounts","href":"/global-accounts/demo"}]},{"tab":"Payouts \u0026 B2B","pages":[{"title":"Payouts \u0026 B2B","href":"/payouts-and-b2b"}]},{"tab":"Ramps","pages":[{"title":"Ramps","href":"/ramps"}]},{"tab":"Global P2P","pages":[{"title":"Global P2P","href":"/global-p2p"}]},{"tab":"Cards","pages":[{"title":"Cards","href":"/cards/demo"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"API reference","groups":[{"group":"Using the API","pages":[{"title":"Environments","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ramps/images/icons/globe.svg","href":"/api-reference/environments"},{"title":"Core Concepts","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ramps/images/icons/file-text.svg","href":"/api-reference/terminology"},{"title":"Authentication","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ramps/images/icons/key2.svg","href":"/api-reference/authentication"},{"title":"Webhooks","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ramps/images/icons/bell.svg","href":"/api-reference/webhooks"},{"title":"Sandbox Testing","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ramps/images/icons/hammer.svg","href":"/api-reference/sandbox-testing"},{"title":"SDKs \u0026 CLI","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ramps/images/icons/code.svg","href":"/api-reference/sdks"}]},{"group":"API documentation","pages":[{"group":"Platform Configuration","pages":[{"title":"Get platform configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml get /config","href":"/api-reference/platform-configuration/get-platform-configuration"},{"title":"Update platform configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /config","href":"/api-reference/platform-configuration/update-platform-configuration"}]},{"group":"Exchange Rates","pages":[{"title":"Get exchange rates","deprecated":null,"version":null,"openapi":"/openapi.yaml get /exchange-rates","href":"/api-reference/exchange-rates/get-exchange-rates"}]},{"group":"Discoveries","pages":[{"title":"List available receiving institution names","deprecated":null,"version":null,"openapi":"/openapi.yaml get /discoveries","href":"/api-reference/discoveries/list-available-receiving-institution-names"}]},{"group":"Customers","pages":[{"title":"List customers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers","href":"/api-reference/customers/list-customers"},{"title":"Add a new customer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers","href":"/api-reference/customers/add-a-new-customer"},{"title":"Get customer by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers/{customerId}","href":"/api-reference/customers/get-customer-by-id"},{"title":"Delete customer by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /customers/{customerId}","href":"/api-reference/customers/delete-customer-by-id"},{"title":"Update customer by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /customers/{customerId}","href":"/api-reference/customers/update-customer-by-id"},{"title":"Add an individual customer from a reusable KYC share token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/share","href":"/api-reference/customers/add-an-individual-customer-from-a-reusable-kyc-share-token"},{"title":"List the current Grid agreement documents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers/agreements","href":"/api-reference/customers/list-the-current-grid-agreement-documents"},{"title":"Get the current Grid End User Terms","deprecated":true,"version":null,"openapi":"/openapi.yaml get /customers/end-user-terms","href":"/api-reference/customers/get-the-current-grid-end-user-terms"},{"title":"Upload customers via CSV file","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/bulk/csv","href":"/api-reference/customers/upload-customers-via-csv-file"},{"title":"Get bulk import job status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers/bulk/jobs/{jobId}","href":"/api-reference/customers/get-bulk-import-job-status"}]},{"group":"KYC/KYB Verifications","pages":[{"title":"Generate a hosted KYC/KYB link for an existing customer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/{customerId}/kyc-link","href":"/api-reference/kyckyb-verifications/generate-a-hosted-kyckyb-link-for-an-existing-customer"},{"title":"List beneficial owners","deprecated":null,"version":null,"openapi":"/openapi.yaml get /beneficial-owners","href":"/api-reference/kyckyb-verifications/list-beneficial-owners"},{"title":"Create a beneficial owner","deprecated":null,"version":null,"openapi":"/openapi.yaml post /beneficial-owners","href":"/api-reference/kyckyb-verifications/create-a-beneficial-owner"},{"title":"Get a beneficial owner","deprecated":null,"version":null,"openapi":"/openapi.yaml get /beneficial-owners/{beneficialOwnerId}","href":"/api-reference/kyckyb-verifications/get-a-beneficial-owner"},{"title":"Delete a beneficial owner","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /beneficial-owners/{beneficialOwnerId}","href":"/api-reference/kyckyb-verifications/delete-a-beneficial-owner"},{"title":"Update a beneficial owner","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /beneficial-owners/{beneficialOwnerId}","href":"/api-reference/kyckyb-verifications/update-a-beneficial-owner"},{"title":"List verifications","deprecated":null,"version":null,"openapi":"/openapi.yaml get /verifications","href":"/api-reference/kyckyb-verifications/list-verifications"},{"title":"Submit customer for verification","deprecated":null,"version":null,"openapi":"/openapi.yaml post /verifications","href":"/api-reference/kyckyb-verifications/submit-customer-for-verification"},{"title":"Get a verification","deprecated":null,"version":null,"openapi":"/openapi.yaml get /verifications/{verificationId}","href":"/api-reference/kyckyb-verifications/get-a-verification"}]},{"group":"Agent Management","pages":[{"title":"List stored cards","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers/{customerId}/stored-cards","href":"/api-reference/agent-management/list-stored-cards"},{"title":"Store a card","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/{customerId}/stored-cards","href":"/api-reference/agent-management/store-a-card"},{"title":"Get a stored card","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers/{customerId}/stored-cards/{storedCardId}","href":"/api-reference/agent-management/get-a-stored-card"},{"title":"Remove a stored card","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /customers/{customerId}/stored-cards/{storedCardId}","href":"/api-reference/agent-management/remove-a-stored-card"},{"title":"Let an agent use a stored card","deprecated":null,"version":null,"openapi":"/openapi.yaml put /customers/{customerId}/stored-cards/{storedCardId}/agents/{agentId}","href":"/api-reference/agent-management/let-an-agent-use-a-stored-card"},{"title":"Stop an agent using a stored card","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /customers/{customerId}/stored-cards/{storedCardId}/agents/{agentId}","href":"/api-reference/agent-management/stop-an-agent-using-a-stored-card"},{"title":"List agents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents","href":"/api-reference/agent-management/list-agents"},{"title":"Create an agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents","href":"/api-reference/agent-management/create-an-agent"},{"title":"List agent transaction approval requests","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/approvals","href":"/api-reference/agent-management/list-agent-transaction-approval-requests"},{"title":"List spending pools","deprecated":null,"version":null,"openapi":"/openapi.yaml get /spending-pools","href":"/api-reference/agent-management/list-spending-pools"},{"title":"Create a spending pool","deprecated":null,"version":null,"openapi":"/openapi.yaml post /spending-pools","href":"/api-reference/agent-management/create-a-spending-pool"},{"title":"Get a spending pool","deprecated":null,"version":null,"openapi":"/openapi.yaml get /spending-pools/{spendingPoolId}","href":"/api-reference/agent-management/get-a-spending-pool"},{"title":"Archive a spending pool","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /spending-pools/{spendingPoolId}","href":"/api-reference/agent-management/archive-a-spending-pool"},{"title":"Update a spending pool","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /spending-pools/{spendingPoolId}","href":"/api-reference/agent-management/update-a-spending-pool"},{"title":"Get agent by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/{agentId}","href":"/api-reference/agent-management/get-agent-by-id"},{"title":"Delete agent","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /agents/{agentId}","href":"/api-reference/agent-management/delete-agent"},{"title":"Update agent","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /agents/{agentId}","href":"/api-reference/agent-management/update-agent"},{"title":"Update agent policy","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /agents/{agentId}/policy","href":"/api-reference/agent-management/update-agent-policy"},{"title":"Regenerate a device code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/{agentId}/device-codes","href":"/api-reference/agent-management/regenerate-a-device-code"},{"title":"Hand a deleted agent's card to an agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/{agentId}/card-handover","href":"/api-reference/agent-management/hand-a-deleted-agents-card-to-an-agent"},{"title":"Approve an agent action","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/{agentId}/actions/{actionId}/approve","href":"/api-reference/agent-management/approve-an-agent-action"},{"title":"Reject an agent action","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/{agentId}/actions/{actionId}/reject","href":"/api-reference/agent-management/reject-an-agent-action"},{"title":"Get device code status","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/device-codes/status","href":"/api-reference/agent-management/get-device-code-status"},{"title":"Redeem device code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/device-codes/redeem","href":"/api-reference/agent-management/redeem-device-code"}]},{"group":"Contact Verification","pages":[{"title":"Send an email verification code to a customer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/{customerId}/verify-email","href":"/api-reference/contact-verification/send-an-email-verification-code-to-a-customer"},{"title":"Confirm a customer's email verification code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/{customerId}/verify-email/confirm","href":"/api-reference/contact-verification/confirm-a-customers-email-verification-code"},{"title":"Send a phone verification code to a customer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/{customerId}/verify-phone","href":"/api-reference/contact-verification/send-a-phone-verification-code-to-a-customer"},{"title":"Confirm a customer's phone verification code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/{customerId}/verify-phone/confirm","href":"/api-reference/contact-verification/confirm-a-customers-phone-verification-code"}]},{"group":"Strong Customer Authentication","pages":[{"title":"List enrolled SCA factors","deprecated":null,"version":null,"openapi":"/openapi.yaml get /sca/factors","href":"/api-reference/strong-customer-authentication/list-enrolled-sca-factors"},{"title":"Start SCA factor enrollment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sca/factors","href":"/api-reference/strong-customer-authentication/start-sca-factor-enrollment"},{"title":"Confirm SCA factor enrollment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sca/factors/confirm","href":"/api-reference/strong-customer-authentication/confirm-sca-factor-enrollment"},{"title":"Delete an enrolled SCA factor","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /sca/factors/{credentialId}","href":"/api-reference/strong-customer-authentication/delete-an-enrolled-sca-factor"},{"title":"Start an SCA login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sca/login/start","href":"/api-reference/strong-customer-authentication/start-an-sca-login"},{"title":"Complete an SCA login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sca/login/complete","href":"/api-reference/strong-customer-authentication/complete-an-sca-login"},{"title":"Record a security event","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sca/record-event","href":"/api-reference/strong-customer-authentication/record-a-security-event"},{"title":"Start a 2FA reset","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sca/factors/reset","href":"/api-reference/strong-customer-authentication/start-a-2fa-reset"},{"title":"Get 2FA reset status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /sca/factors/reset/{resetId}","href":"/api-reference/strong-customer-authentication/get-2fa-reset-status"},{"title":"Complete a 2FA reset","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sca/factors/reset/{resetId}/complete","href":"/api-reference/strong-customer-authentication/complete-a-2fa-reset"},{"title":"Start trusting a beneficiary","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/external-accounts/{externalAccountId}/trust","href":"/api-reference/strong-customer-authentication/start-trusting-a-beneficiary"},{"title":"Confirm trusting a beneficiary","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/external-accounts/{externalAccountId}/trust/confirm","href":"/api-reference/strong-customer-authentication/confirm-trusting-a-beneficiary"},{"title":"Start untrusting a beneficiary","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/external-accounts/{externalAccountId}/untrust","href":"/api-reference/strong-customer-authentication/start-untrusting-a-beneficiary"},{"title":"Confirm untrusting a beneficiary","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/external-accounts/{externalAccountId}/untrust/confirm","href":"/api-reference/strong-customer-authentication/confirm-untrusting-a-beneficiary"},{"title":"Authorize a quote's SCA challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /quotes/{quoteId}/authorize","href":"/api-reference/strong-customer-authentication/authorize-a-quotes-sca-challenge"},{"title":"Resend a quote's SCA challenge code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /quotes/{quoteId}/authorize/resend","href":"/api-reference/strong-customer-authentication/resend-a-quotes-sca-challenge-code"}]},{"group":"Internal Accounts","pages":[{"title":"Create an internal account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /internal-accounts","href":"/api-reference/internal-accounts/create-an-internal-account"},{"title":"List Customer internal accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers/internal-accounts","href":"/api-reference/internal-accounts/list-customer-internal-accounts"},{"title":"List platform internal accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /platform/internal-accounts","href":"/api-reference/internal-accounts/list-platform-internal-accounts"},{"title":"Update internal account","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /internal-accounts/{id}","href":"/api-reference/internal-accounts/update-internal-account"},{"title":"Authorize a rule-based account's SCA challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /internal-accounts/{id}/authorize","href":"/api-reference/internal-accounts/authorize-a-rule-based-accounts-sca-challenge"},{"title":"Resend a rule-based account's SCA challenge code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /internal-accounts/{id}/authorize/resend","href":"/api-reference/internal-accounts/resend-a-rule-based-accounts-sca-challenge-code"},{"title":"Move a rule-based account's stranded funds","deprecated":null,"version":null,"openapi":"/openapi.yaml post /internal-accounts/{id}/stranded-funds/transfer","href":"/api-reference/internal-accounts/move-a-rule-based-accounts-stranded-funds"},{"title":"Export internal account wallet credentials","deprecated":null,"version":null,"openapi":"/openapi.yaml post /internal-accounts/{id}/export","href":"/api-reference/internal-accounts/export-internal-account-wallet-credentials"}]},{"group":"External Accounts","pages":[{"title":"List Customer external accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers/external-accounts","href":"/api-reference/external-accounts/list-customer-external-accounts"},{"title":"Add a new external account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/external-accounts","href":"/api-reference/external-accounts/add-a-new-external-account"},{"title":"Get customer external account by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /customers/external-accounts/{externalAccountId}","href":"/api-reference/external-accounts/get-customer-external-account-by-id"},{"title":"Delete customer external account by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /customers/external-accounts/{externalAccountId}","href":"/api-reference/external-accounts/delete-customer-external-account-by-id"},{"title":"Start an ownership verification challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/external-accounts/{externalAccountId}/challenge","href":"/api-reference/external-accounts/start-an-ownership-verification-challenge"},{"title":"Verify ownership with a wallet signature","deprecated":null,"version":null,"openapi":"/openapi.yaml post /customers/external-accounts/{externalAccountId}/verify","href":"/api-reference/external-accounts/verify-ownership-with-a-wallet-signature"},{"title":"List platform external accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /platform/external-accounts","href":"/api-reference/external-accounts/list-platform-external-accounts"},{"title":"Add a new platform external account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /platform/external-accounts","href":"/api-reference/external-accounts/add-a-new-platform-external-account"},{"title":"Get platform external account by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /platform/external-accounts/{externalAccountId}","href":"/api-reference/external-accounts/get-platform-external-account-by-id"},{"title":"Delete platform external account by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /platform/external-accounts/{externalAccountId}","href":"/api-reference/external-accounts/delete-platform-external-account-by-id"},{"title":"Start an ownership verification challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /platform/external-accounts/{externalAccountId}/challenge","href":"/api-reference/external-accounts/start-an-ownership-verification-challenge-1"},{"title":"Verify ownership with a wallet signature","deprecated":null,"version":null,"openapi":"/openapi.yaml post /platform/external-accounts/{externalAccountId}/verify","href":"/api-reference/external-accounts/verify-ownership-with-a-wallet-signature-1"}]},{"group":"Documents","pages":[{"title":"List documents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /documents","href":"/api-reference/documents/list-documents"},{"title":"Upload a document","deprecated":null,"version":null,"openapi":"/openapi.yaml post /documents","href":"/api-reference/documents/upload-a-document"},{"title":"Get a document by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /documents/{documentId}","href":"/api-reference/documents/get-a-document-by-id"},{"title":"Replace a document","deprecated":null,"version":null,"openapi":"/openapi.yaml put /documents/{documentId}","href":"/api-reference/documents/replace-a-document"},{"title":"Delete a document","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /documents/{documentId}","href":"/api-reference/documents/delete-a-document"}]},{"group":"Same-Currency Transfers","pages":[{"title":"Create a transfer-in request","deprecated":true,"version":null,"openapi":"/openapi.yaml post /transfer-in","href":"/api-reference/same-currency-transfers/create-a-transfer-in-request"},{"title":"Create a transfer-out request","deprecated":true,"version":null,"openapi":"/openapi.yaml post /transfer-out","href":"/api-reference/same-currency-transfers/create-a-transfer-out-request"}]},{"group":"Cross-Currency Transfers","pages":[{"title":"Look up an UMA address for payment","deprecated":null,"version":null,"openapi":"/openapi.yaml get /receiver/uma/{receiverUmaAddress}","href":"/api-reference/cross-currency-transfers/look-up-an-uma-address-for-payment"},{"title":"Look up an external account for payment","deprecated":null,"version":null,"openapi":"/openapi.yaml get /receiver/external-account/{accountId}","href":"/api-reference/cross-currency-transfers/look-up-an-external-account-for-payment"},{"title":"Upload a payment document","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payment-documents","href":"/api-reference/cross-currency-transfers/upload-a-payment-document"},{"title":"Get a payment document","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payment-documents/{paymentDocumentId}","href":"/api-reference/cross-currency-transfers/get-a-payment-document"},{"title":"Get quote by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /quotes/{quoteId}","href":"/api-reference/cross-currency-transfers/get-quote-by-id"},{"title":"Create a transfer quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /quotes","href":"/api-reference/cross-currency-transfers/create-a-transfer-quote"},{"title":"Execute a quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /quotes/{quoteId}/execute","href":"/api-reference/cross-currency-transfers/execute-a-quote"}]},{"group":"Transactions","pages":[{"title":"List transactions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /transactions","href":"/api-reference/transactions/list-transactions"},{"title":"Get transaction by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /transactions/{transactionId}","href":"/api-reference/transactions/get-transaction-by-id"},{"title":"Confirm receipt delivery","deprecated":null,"version":null,"openapi":"/openapi.yaml post /transactions/{transactionId}/confirm","href":"/api-reference/transactions/confirm-receipt-delivery"},{"title":"Approve a pending incoming payment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /transactions/{transactionId}/approve","href":"/api-reference/transactions/approve-a-pending-incoming-payment"},{"title":"Reject a pending incoming payment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /transactions/{transactionId}/reject","href":"/api-reference/transactions/reject-a-pending-incoming-payment"},{"title":"Cancel a bank transfer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /transactions/{transactionId}/cancel","href":"/api-reference/transactions/cancel-a-bank-transfer"}]},{"group":"Cards","pages":[{"title":"List the disputes on a card transaction","deprecated":null,"version":null,"openapi":"/openapi.yaml get /transactions/{transactionId}/disputes","href":"/api-reference/cards/list-the-disputes-on-a-card-transaction"},{"title":"List card velocity limits","deprecated":null,"version":null,"openapi":"/openapi.yaml get /card-velocity-limits","href":"/api-reference/cards/list-card-velocity-limits"},{"title":"Create a card velocity limit","deprecated":null,"version":null,"openapi":"/openapi.yaml post /card-velocity-limits","href":"/api-reference/cards/create-a-card-velocity-limit"},{"title":"Get a card velocity limit","deprecated":null,"version":null,"openapi":"/openapi.yaml get /card-velocity-limits/{id}","href":"/api-reference/cards/get-a-card-velocity-limit"},{"title":"Delete a card velocity limit","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /card-velocity-limits/{id}","href":"/api-reference/cards/delete-a-card-velocity-limit"},{"title":"List cards","deprecated":null,"version":null,"openapi":"/openapi.yaml get /cards","href":"/api-reference/cards/list-cards"},{"title":"Issue a card","deprecated":null,"version":null,"openapi":"/openapi.yaml post /cards","href":"/api-reference/cards/issue-a-card"},{"title":"Get a card","deprecated":null,"version":null,"openapi":"/openapi.yaml get /cards/{id}","href":"/api-reference/cards/get-a-card"},{"title":"Update a card","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /cards/{id}","href":"/api-reference/cards/update-a-card"},{"title":"Reveal card details","deprecated":null,"version":null,"openapi":"/openapi.yaml post /cards/{id}/reveal","href":"/api-reference/cards/reveal-card-details"},{"title":"Add a card to a digital wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml post /cards/{id}/tokenize","href":"/api-reference/cards/add-a-card-to-a-digital-wallet"},{"title":"Add a card to a digital wallet from a website","deprecated":null,"version":null,"openapi":"/openapi.yaml post /cards/{id}/web-tokenize","href":"/api-reference/cards/add-a-card-to-a-digital-wallet-from-a-website"},{"title":"Get a card dispute","deprecated":null,"version":null,"openapi":"/openapi.yaml get /card-disputes/{disputeId}","href":"/api-reference/cards/get-a-card-dispute"},{"title":"Set a card PIN","deprecated":null,"version":null,"openapi":"/openapi.yaml post /cards/{id}/set-pin","href":"/api-reference/cards/set-a-card-pin"},{"title":"Get a PIN-entry URL","deprecated":null,"version":null,"openapi":"/openapi.yaml get /cards/{id}/pin-entry-url","href":"/api-reference/cards/get-a-pin-entry-url"},{"title":"Unblock a card PIN","deprecated":null,"version":null,"openapi":"/openapi.yaml post /cards/{id}/pin/unblock","href":"/api-reference/cards/unblock-a-card-pin"}]},{"group":"Sandbox","pages":[{"title":"Send a test webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhooks/test","href":"/api-reference/sandbox/send-a-test-webhook"},{"title":"Simulate sending funds","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/send","href":"/api-reference/sandbox/simulate-sending-funds"},{"title":"Simulate payment send to test receiving an UMA payment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/uma/receive","href":"/api-reference/sandbox/simulate-payment-send-to-test-receiving-an-uma-payment"},{"title":"Simulate funding an internal account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/internal-accounts/{accountId}/fund","href":"/api-reference/sandbox/simulate-funding-an-internal-account"},{"title":"Simulate a card authorization","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/authorization","href":"/api-reference/sandbox/simulate-a-card-authorization"},{"title":"Simulate a card clearing","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/clearing","href":"/api-reference/sandbox/simulate-a-card-clearing"},{"title":"Simulate a card return","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/return","href":"/api-reference/sandbox/simulate-a-card-return"},{"title":"Simulate a card balance inquiry","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/balance_inquiry","href":"/api-reference/sandbox/simulate-a-card-balance-inquiry"},{"title":"Simulate a card credit authorization","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/credit_authorization","href":"/api-reference/sandbox/simulate-a-card-credit-authorization"},{"title":"Simulate a card financial authorization","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/financial_authorization","href":"/api-reference/sandbox/simulate-a-card-financial-authorization"},{"title":"Simulate a card financial credit authorization","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/financial_credit_authorization","href":"/api-reference/sandbox/simulate-a-card-financial-credit-authorization"},{"title":"Simulate a card authorization advice","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/authorization_advice","href":"/api-reference/sandbox/simulate-a-card-authorization-advice"},{"title":"Simulate a card credit authorization advice","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/credit_authorization_advice","href":"/api-reference/sandbox/simulate-a-card-credit-authorization-advice"},{"title":"Simulate a card return reversal","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/return_reversal","href":"/api-reference/sandbox/simulate-a-card-return-reversal"},{"title":"Simulate a card authorization reversal","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/authorization_reversal","href":"/api-reference/sandbox/simulate-a-card-authorization-reversal"},{"title":"Simulate a card authorization expiry","deprecated":null,"version":null,"openapi":"/openapi.yaml post /sandbox/cards/{id}/simulate/authorization_expiry","href":"/api-reference/sandbox/simulate-a-card-authorization-expiry"}]},{"group":"Invitations","pages":[{"title":"Create an UMA invitation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /invitations","href":"/api-reference/invitations/create-an-uma-invitation"},{"title":"Get an UMA invitation by code","deprecated":null,"version":null,"openapi":"/openapi.yaml get /invitations/{invitationCode}","href":"/api-reference/invitations/get-an-uma-invitation-by-code"},{"title":"Claim an UMA invitation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /invitations/{invitationCode}/claim","href":"/api-reference/invitations/claim-an-uma-invitation"},{"title":"Cancel an UMA invitation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /invitations/{invitationCode}/cancel","href":"/api-reference/invitations/cancel-an-uma-invitation"}]},{"group":"API Tokens","pages":[{"title":"List tokens","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tokens","href":"/api-reference/api-tokens/list-tokens"},{"title":"Create a new API token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tokens","href":"/api-reference/api-tokens/create-a-new-api-token"},{"title":"Get API token by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tokens/{tokenId}","href":"/api-reference/api-tokens/get-api-token-by-id"},{"title":"Delete API token by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /tokens/{tokenId}","href":"/api-reference/api-tokens/delete-api-token-by-id"}]},{"group":"Periodic Statements","pages":[{"title":"List balance changes for a period","deprecated":null,"version":null,"openapi":"/openapi.yaml get /internal-accounts/{id}/balance-changes","href":"/api-reference/periodic-statements/list-balance-changes-for-a-period"},{"title":"Send a receipt for a periodic statement","deprecated":null,"version":null,"openapi":"/openapi.yaml post /internal-accounts/{id}/confirm-statement","href":"/api-reference/periodic-statements/send-a-receipt-for-a-periodic-statement"}]},{"group":"Embedded Wallet Auth","pages":[{"title":"Add an administrator credential","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/admin-credentials","href":"/api-reference/embedded-wallet-auth/add-an-administrator-credential"},{"title":"Revoke an administrator's credentials","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/admin-credentials/{adminReference}","href":"/api-reference/embedded-wallet-auth/revoke-an-administrators-credentials"},{"title":"List authentication credentials","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/credentials","href":"/api-reference/embedded-wallet-auth/list-authentication-credentials"},{"title":"Create an authentication credential","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/credentials","href":"/api-reference/embedded-wallet-auth/create-an-authentication-credential"},{"title":"Revoke an authentication credential","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/credentials/{id}","href":"/api-reference/embedded-wallet-auth/revoke-an-authentication-credential"},{"title":"Verify an authentication credential","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/credentials/{id}/verify","href":"/api-reference/embedded-wallet-auth/verify-an-authentication-credential"},{"title":"Re-issue an authentication credential challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/credentials/{id}/challenge","href":"/api-reference/embedded-wallet-auth/re-issue-an-authentication-credential-challenge"},{"title":"List active sessions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/sessions","href":"/api-reference/embedded-wallet-auth/list-active-sessions"},{"title":"Revoke an authentication session","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/sessions/{id}","href":"/api-reference/embedded-wallet-auth/revoke-an-authentication-session"},{"title":"Refresh an authentication session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/sessions/{id}/refresh","href":"/api-reference/embedded-wallet-auth/refresh-an-authentication-session"},{"title":"List delegated signing keys","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/delegated-keys","href":"/api-reference/embedded-wallet-auth/list-delegated-signing-keys"},{"title":"Create a delegated signing key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/delegated-keys","href":"/api-reference/embedded-wallet-auth/create-a-delegated-signing-key"},{"title":"Get a delegated signing key","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/delegated-keys/{id}","href":"/api-reference/embedded-wallet-auth/get-a-delegated-signing-key"},{"title":"Revoke a delegated signing key","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/delegated-keys/{id}","href":"/api-reference/embedded-wallet-auth/revoke-a-delegated-signing-key"}]},{"group":"Agent Operations","pages":[{"title":"Get current agent","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me","href":"/api-reference/agent-operations/get-current-agent"},{"title":"Get agent customer","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/customer","href":"/api-reference/agent-operations/get-agent-customer"},{"title":"Update agent customer","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /agents/me/customer","href":"/api-reference/agent-operations/update-agent-customer"},{"title":"Submit agent customer for verification","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/verifications","href":"/api-reference/agent-operations/submit-agent-customer-for-verification"},{"title":"Generate an agent customer KYC link","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/kyc-link","href":"/api-reference/agent-operations/generate-an-agent-customer-kyc-link"},{"title":"Create an agent deposit","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/deposits","href":"/api-reference/agent-operations/create-an-agent-deposit"},{"title":"Get an agent deposit","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/deposits/{depositId}","href":"/api-reference/agent-operations/get-an-agent-deposit"},{"title":"List agent transactions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/transactions","href":"/api-reference/agent-operations/list-agent-transactions"},{"title":"Get agent transaction by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/transactions/{transactionId}","href":"/api-reference/agent-operations/get-agent-transaction-by-id"},{"title":"Create a transfer quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/quotes","href":"/api-reference/agent-operations/create-a-transfer-quote"},{"title":"Get agent quote by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/quotes/{quoteId}","href":"/api-reference/agent-operations/get-agent-quote-by-id"},{"title":"Execute a quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/quotes/{quoteId}/execute","href":"/api-reference/agent-operations/execute-a-quote"},{"title":"List agent's own actions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/actions","href":"/api-reference/agent-operations/list-agents-own-actions"},{"title":"Get an agent action","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/actions/{actionId}","href":"/api-reference/agent-operations/get-an-agent-action"},{"title":"List agent's internal accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/internal-accounts","href":"/api-reference/agent-operations/list-agents-internal-accounts"},{"title":"List agent external accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/external-accounts","href":"/api-reference/agent-operations/list-agent-external-accounts"},{"title":"Add an external account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/external-accounts","href":"/api-reference/agent-operations/add-an-external-account"},{"title":"Get agent external account by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/external-accounts/{externalAccountId}","href":"/api-reference/agent-operations/get-agent-external-account-by-id"},{"title":"Delete agent external account","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /agents/me/external-accounts/{externalAccountId}","href":"/api-reference/agent-operations/delete-agent-external-account"},{"title":"List claimable payouts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/claimable-payouts","href":"/api-reference/agent-operations/list-claimable-payouts"},{"title":"Send a claimable payout","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/claimable-payouts","href":"/api-reference/agent-operations/send-a-claimable-payout"},{"title":"Get a claimable payout","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/claimable-payouts/{claimablePayoutId}","href":"/api-reference/agent-operations/get-a-claimable-payout"},{"title":"Cancel a claimable payout","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/claimable-payouts/{claimablePayoutId}/cancel","href":"/api-reference/agent-operations/cancel-a-claimable-payout"},{"title":"List agent cards","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/cards","href":"/api-reference/agent-operations/list-agent-cards"},{"title":"Issue an agent card","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/cards","href":"/api-reference/agent-operations/issue-an-agent-card"},{"title":"Get agent card","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/cards/{cardId}","href":"/api-reference/agent-operations/get-agent-card"},{"title":"Tighten or freeze an agent card","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /agents/me/cards/{cardId}","href":"/api-reference/agent-operations/tighten-or-freeze-an-agent-card"},{"title":"Reveal a purchase card","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/cards/{cardId}/reveal","href":"/api-reference/agent-operations/reveal-a-purchase-card"},{"title":"Add the agent's card to a digital wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/cards/{cardId}/tokenize","href":"/api-reference/agent-operations/add-the-agents-card-to-a-digital-wallet"},{"title":"Increase a purchase card amount","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/cards/{cardId}/increase","href":"/api-reference/agent-operations/increase-a-purchase-card-amount"},{"title":"List the stored cards the agent may use","description":"The customer's `ACTIVE` stored cards the customer allowed this agent to use, with display fields only. Requires the USE_STORED_CARDS permission.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agents/me/stored-cards","href":"/api-reference/agent-operations/list-the-stored-cards-the-agent-may-use"},{"title":"Ask for a stored card's details","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agents/me/stored-cards/{storedCardId}/reveal","href":"/api-reference/agent-operations/ask-for-a-stored-cards-details"},{"title":"Open a stored card link","description":"What a stored card's `detailsUrl` answers, once. Open the `detailsUrl` itself, never this path on Grid's host: `detailsUrl` goes through Evervault's Relay, which decrypts `number` and `cvc` on the way, and Grid answers them only as Evervault ciphertext. The token is the only credential. A link that was already opened, has expired, or whose card or agent lost access answers `404`.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /stored-card-reveals/{token}","href":"/api-reference/agent-operations/open-a-stored-card-link"}]},{"group":"Claimable Payouts","pages":[{"title":"Issue a claim token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /claimable-payouts/{claimablePayoutId}/claim-token","href":"/api-reference/claimable-payouts/issue-a-claim-token"},{"title":"Look up a claim","deprecated":null,"version":null,"openapi":"/openapi.yaml post /claimable-payouts/claim/lookup","href":"/api-reference/claimable-payouts/look-up-a-claim"},{"title":"List payout options for a claim","deprecated":null,"version":null,"openapi":"/openapi.yaml post /claimable-payouts/claim/options","href":"/api-reference/claimable-payouts/list-payout-options-for-a-claim"},{"title":"Quote a claim","deprecated":null,"version":null,"openapi":"/openapi.yaml post /claimable-payouts/claim/quote","href":"/api-reference/claimable-payouts/quote-a-claim"},{"title":"Confirm a claim","deprecated":null,"version":null,"openapi":"/openapi.yaml post /claimable-payouts/claim/confirm","href":"/api-reference/claimable-payouts/confirm-a-claim"}]},{"group":"Stablecoins","pages":[{"title":"List stablecoins","deprecated":null,"version":null,"openapi":"/openapi.yaml get /stablecoins","href":"/api-reference/stablecoins/list-stablecoins"},{"title":"Register an existing provider-created stablecoin","deprecated":null,"version":null,"openapi":"/openapi.yaml post /stablecoins","href":"/api-reference/stablecoins/register-an-existing-provider-created-stablecoin"},{"title":"Get a stablecoin","deprecated":null,"version":null,"openapi":"/openapi.yaml get /stablecoins/{stablecoinId}","href":"/api-reference/stablecoins/get-a-stablecoin"},{"title":"Request Grid enablement for a stablecoin","deprecated":null,"version":null,"openapi":"/openapi.yaml post /stablecoins/{stablecoinId}/request-grid-enablement","href":"/api-reference/stablecoins/request-grid-enablement-for-a-stablecoin"},{"title":"Create a stablecoin mint operation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /stablecoins/{stablecoinId}/mints","href":"/api-reference/stablecoins/create-a-stablecoin-mint-operation"},{"title":"Create a stablecoin burn operation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /stablecoins/{stablecoinId}/burns","href":"/api-reference/stablecoins/create-a-stablecoin-burn-operation"},{"title":"List stablecoin issuer operations","deprecated":null,"version":null,"openapi":"/openapi.yaml get /stablecoins/{stablecoinId}/operations","href":"/api-reference/stablecoins/list-stablecoin-issuer-operations"},{"title":"Get a stablecoin issuer operation","deprecated":null,"version":null,"openapi":"/openapi.yaml get /stablecoin-operations/{stablecoinOperationId}","href":"/api-reference/stablecoins/get-a-stablecoin-issuer-operation"},{"title":"List stablecoin provider account links","deprecated":null,"version":null,"openapi":"/openapi.yaml get /stablecoin-provider-accounts","href":"/api-reference/stablecoins/list-stablecoin-provider-account-links"},{"title":"Link a stablecoin provider account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /stablecoin-provider-accounts","href":"/api-reference/stablecoins/link-a-stablecoin-provider-account"},{"title":"Get a stablecoin provider account link","deprecated":null,"version":null,"openapi":"/openapi.yaml get /stablecoin-provider-accounts/{stablecoinProviderAccountId}","href":"/api-reference/stablecoins/get-a-stablecoin-provider-account-link"},{"title":"Revoke a stablecoin provider account link","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /stablecoin-provider-accounts/{stablecoinProviderAccountId}","href":"/api-reference/stablecoins/revoke-a-stablecoin-provider-account-link"}]},{"group":"Embedded Care","pages":[{"title":"Send a care chat message","deprecated":null,"version":null,"openapi":"/openapi.yaml post /care/chats/{chatId}/messages","href":"/api-reference/embedded-care/send-a-care-chat-message"},{"title":"End a care chat","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /care/chats/{chatId}","href":"/api-reference/embedded-care/end-a-care-chat"}]},{"group":"Payout Runs","pages":[{"title":"Create a payout run","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payout-runs","href":"/api-reference/payout-runs/create-a-payout-run"},{"title":"Get a payout run","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payout-runs/{payoutRunId}","href":"/api-reference/payout-runs/get-a-payout-run"},{"title":"List the rows of a payout run","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payout-runs/{payoutRunId}/rows","href":"/api-reference/payout-runs/list-the-rows-of-a-payout-run"},{"title":"Cancel a payout run","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payout-runs/{payoutRunId}/cancel","href":"/api-reference/payout-runs/cancel-a-payout-run"},{"title":"Export a payout run for reconciliation","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payout-runs/{payoutRunId}/export","href":"/api-reference/payout-runs/export-a-payout-run-for-reconciliation"}]},{"group":"Settlement Rules","pages":[{"title":"List settlement rules","deprecated":null,"version":null,"openapi":"/openapi.yaml get /settlement-rules","href":"/api-reference/settlement-rules/list-settlement-rules"},{"title":"Create a settlement rule","deprecated":null,"version":null,"openapi":"/openapi.yaml post /settlement-rules","href":"/api-reference/settlement-rules/create-a-settlement-rule"},{"title":"Preview a settlement rule","deprecated":null,"version":null,"openapi":"/openapi.yaml post /settlement-rules/preview","href":"/api-reference/settlement-rules/preview-a-settlement-rule"},{"title":"Get a settlement rule","deprecated":null,"version":null,"openapi":"/openapi.yaml get /settlement-rules/{settlementRuleId}","href":"/api-reference/settlement-rules/get-a-settlement-rule"},{"title":"Delete a settlement rule","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /settlement-rules/{settlementRuleId}","href":"/api-reference/settlement-rules/delete-a-settlement-rule"},{"title":"Update a settlement rule","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /settlement-rules/{settlementRuleId}","href":"/api-reference/settlement-rules/update-a-settlement-rule"},{"title":"List the executions of a settlement rule","deprecated":null,"version":null,"openapi":"/openapi.yaml get /settlement-rules/{settlementRuleId}/executions","href":"/api-reference/settlement-rules/list-the-executions-of-a-settlement-rule"},{"title":"Cancel a held execution","deprecated":null,"version":null,"openapi":"/openapi.yaml post /settlement-rules/{settlementRuleId}/executions/{executionId}/cancel","href":"/api-reference/settlement-rules/cancel-a-held-execution"}]},{"group":"Webhooks","pages":[{"title":"Agent action pending approval webhook","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook agent-action","href":"/api-reference/webhooks/agent-action-pending-approval-webhook"},{"title":"Claimable payout webhook","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook claimable-payout","href":"/api-reference/webhooks/claimable-payout-webhook"},{"title":"Incoming payment webhook and approval mechanism","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook incoming-payment","href":"/api-reference/webhooks/incoming-payment-webhook-and-approval-mechanism"},{"title":"Outgoing payment status webhook","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook outgoing-payment","href":"/api-reference/webhooks/outgoing-payment-status-webhook"},{"title":"Test webhook for integration verification","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook test-webhook","href":"/api-reference/webhooks/test-webhook-for-integration-verification"},{"title":"Bulk upload status webhook","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook bulk-upload","href":"/api-reference/webhooks/bulk-upload-status-webhook"},{"title":"Invitation claimed webhook","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook invitation-claimed","href":"/api-reference/webhooks/invitation-claimed-webhook"},{"title":"Customer status change","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook customer-update","href":"/api-reference/webhooks/customer-status-change"},{"title":"Internal account status webhook","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook internal-account-status","href":"/api-reference/webhooks/internal-account-status-webhook"},{"title":"External account webhook","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook external-account-status","href":"/api-reference/webhooks/external-account-webhook"},{"title":"Verification status change","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook verification-update","href":"/api-reference/webhooks/verification-status-change"},{"title":"Card status change","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook card-status-change","href":"/api-reference/webhooks/card-status-change"},{"title":"Card pin status change","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook card-pin-status-change","href":"/api-reference/webhooks/card-pin-status-change"},{"title":"Card transaction","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook card-transaction","href":"/api-reference/webhooks/card-transaction"},{"title":"Card authorization request","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook card-authorization-request","href":"/api-reference/webhooks/card-authorization-request"},{"title":"Wallet operation completed or failed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet-operation","href":"/api-reference/webhooks/wallet-operation-completed-or-failed"},{"title":"Payout run finished webhook","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook payout-run","href":"/api-reference/webhooks/payout-run-finished-webhook"}]}]}]}]},"basePath":"","title":"Ask for a stored card's details - Lightspark Docs","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}