Skip to main content
POST
/
v1
/
assets
/
send
Send the client's assets
curl --request POST \
  --url https://mpc-client.portalhq.io/v1/assets/send \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "share": "eyJjbG...",
  "chain": "ethereum",
  "to": "0xdFd8302f44727A6348F702fF7B594f127dE3A902",
  "token": "NATIVE",
  "amount": "0.0001",
  "rpcUrl": "https://mainnet.infura.io/v3/YOUR_KEY"
}
'
{
  "transactionHash": "0x02073df9ba08895d681f80ae45440ba57e766602c97ee6321df5ac81bca900cc",
  "metadata": {
    "amount": "0.01",
    "rawAmount": "10000000000000000",
    "tokenAddress": "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",
    "tokenDecimals": 18
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.portalhq.io/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Client API Key or Client Session Token

Headers

Idempotency-Key
string

A caller-provided key used for safe retries. Behavior depends on the endpoint:

  • POST /v1/presign/{curve} with managed: 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 a Retry-After header; if the original attempt failed before completing, it returns 409 without Retry-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 example eth_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 original transactionHash — the header prevents double-submission, it does not replay the prior response.

Client-stored presignature creation does not currently honor this header.

Body

application/json

Request body for sending assets.

share
string
required

The MPC share for the relevant curve.

chain
string
required

The blockchain network. Accepts a CAIP-2 chain ID or a friendly name such as ethereum, solana, polygon, base, sepolia, etc.

to
string
required

The recipient's address.

token
string
required

Token contract address (ERC-20), mint address (SPL), or a shorthand like NATIVE, USDC, or USDT.

amount
string
required

The amount of tokens to send (e.g. "0.1" is 0.1 of the token).

rpcUrl
string
required

The RPC node provider URL that the transaction will be submitted through. Not required for Solana or Solana Devnet.

nonce
string

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.

metadataStr
string

Optional metadata string for the transaction.

sponsorGas
boolean

Set to false to opt out of gas sponsorship for Account Abstraction clients. Defaults to true when omitted.

presignature
string

The data value from a client-stored presign response. Omit for standard (non-presigned) signing. Mutually exclusive with presignatureId.

presignatureId
string

The id value from a Portal-managed presign response. Omit for standard (non-presigned) signing. Mutually exclusive with presignature.

Response

Transaction submitted successfully

Response after submitting a send-assets transaction.

transactionHash
string
required

The transaction hash (or User Operation hash for Account Abstraction clients).

metadata
object