Send the client's assets
Sends a token the client holds to another address. This endpoint builds, signs, and submits a transaction to an RPC gateway.
Important: A 200 response only confirms that the transaction was received by the RPC gateway — it does not mean the transaction is confirmed on-chain.
Authorizations
Client API Key or Client Session Token
Headers
A caller-provided key used for safe retries. Behavior depends on the endpoint:
POST /v1/presign/{curve}withmanaged: true— retrying a completed request with the same key returns the same{id, expiresAt}(200). If the original attempt is still in progress, the retry returns 409 with aRetry-Afterheader; if the original attempt failed before completing, it returns 409 withoutRetry-After(caller should retry with a new key). Reusing a key after the wallet's signing share has changed (for example, after a reshare or recovery) returns 422.POST /v1/sign— only honored for broadcast methods (for exampleeth_sendTransaction,sol_signAndSendTransaction). Supplying the header with a non-broadcast method returns 400. For broadcast methods, retrying a completed request returns 409 (IDEMPOTENT_REQUEST_ALREADY_COMPLETED), and reuse with a different payload returns 422. On 409, the response body does not include the original signing result — the header prevents double-execution, it does not replay the prior response.POST /v1/assets/send— retrying a completed request returns 409 (IDEMPOTENT_REQUEST_ALREADY_COMPLETED), and reuse with a different payload returns 422. On 409, the response body does not include the originaltransactionHash— the header prevents double-submission, it does not replay the prior response.
Client-stored presignature creation does not currently honor this header.
Body
- Option 1
- Option 2
Request body for sending assets. Exactly one of amount or rawAmount
must be provided; passing both (or neither) returns 400.
The MPC share for the relevant curve.
The blockchain network. Accepts a CAIP-2 chain ID or a friendly name
such as ethereum, solana, polygon, base, sepolia, etc.
The recipient's address.
Token contract address (ERC-20), mint address (SPL), or a shorthand
like NATIVE, USDC, or USDT.
The amount of tokens to send (e.g. "0.1" is 0.1 of the token).
For Token-2022 mints that display scaled balances (ScaledUiAmount,
InterestBearing), pass the displayed figure; Portal converts it to
base units with the mint's decimals and then divides by the mint's
current multiplier. metadata.rawAmount in the response is the
resulting raw amount. Exactly one of amount or rawAmount is
required.
The amount to send as a positive integer string in the token's
base units (wei, lamports, satoshis, sun, stroops). Use instead of
amount when your ledger is kept in base units: no decimals or
multiplier conversion is applied, so the figure moves on chain as
given. Cannot be combined with amount.
The RPC node provider URL that the transaction will be submitted through. Required for EVM chains. Solana and Solana Devnet fall back to Portal's default RPC when it is omitted.
Hex string of the nonce to set on the transaction (e.g. "0x01").
Must include the 0x prefix and a leading zero for single digits.
Optional metadata string for the transaction.
Set to false to opt out of gas sponsorship for Account Abstraction
clients. Defaults to true when omitted.
The data value from a client-stored presign response. Omit for standard
(non-presigned) signing. Mutually exclusive with presignatureId.
The id value from a Portal-managed presign response. Omit for standard
(non-presigned) signing. Mutually exclusive with presignature.
Was this page helpful?