Skip to main content
POST
Ask the user to approve a transfer, without spending funds.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Idempotency-Key
string | null
x-api-key
string
required

Body

application/json

What is being sent, and to whom.

Exactly one of contactId / quoteId / invoiceId must be set (mirrors the /mcp/transfer body). amount is required when contactId is the dispatch path; otherwise it is derived from the referenced invoice or quote.

contactId
string<uuid> | null
quoteId
string | null
invoiceId
string<uuid> | null
amount
number | null
memo
string | null

Response

Successful Response

One outcome shape for both ways a transfer attempt can end.

Spent straight away: txHash only. Needs approval: the request that was filed, with the deep link to approve it. transactionId appears once an approved transfer has been reported back. A decline reason is not a field — it is a message in chatId, the request's thread.

id
string<uuid> | null
status
enum<string> | null

Client-facing status of a transfer_request proposal.

The record is a proposal (seven statuses); this is the short vocabulary the API keeps for the agent and the web app, mapped from ProposalStatus by :meth:from_proposal.

Available options:
requested,
approved,
declined,
failed
txHash
string | null
transactionId
string | null
accountId
string<uuid> | null
appId
string<uuid> | null
requestedByUserId
string<uuid> | null
contactId
string<uuid> | null
quoteId
string | null
invoiceId
string<uuid> | null
amount
number | null
memo
string | null
requestedTime
string<date-time> | null
chatId
string<uuid> | null
approvalUrl
string | null