V1 endpoints

These endpoints require a Client API Key or Client Session Token (CST) as a bearer token.

Create Wallets

POST https://mpc-client.portalhq.io/v1/generate

This endpoint generates MPC shares for both SECP256K1 (EVM, etc) and ED25519 (Solana, XRP, etc) curves.

Headers

NameTypeDescription

Authorization*

String

Bearer <Client API Key>

Content-Type*

String

application/json

Request Body

You can leave this empty.

Response Body

{
  "SECP256K1": {
    "share": "eyJjbG...",
    "id": "cm0r6nkek00ej10dwwx8wdjmf"
  },
  "ED25519": {
    "share": "eyJjbG...",
    "id": "cm0r6nk7c00hbzefaq9s93s0x"
  }
}

Send Assets

POST https://mpc-client.portalhq.io/v1/assets/send

This endpoint allows you to easily send a token to another address.

Headers

NameTypeDescription

Authorization*

String

Bearer <Client API Key>

Content-Type*

String

application/json

Request Body

NameTypeDescription

share*

String

The MPC share generated from "Create Wallets" for a specific curve.

chain*

String

The blockchain network (e.g. "ethereum", "sepolia", "solana", "solana-devnet", or a CAIP-2 chain ID like "eip155:11155111")

to*

String

The recipient's address.

token*

String

The token contract address (for ERC20 tokens on EVM chains) or the mint address (for Solana SPL tokens). You can also use "USDC" or "USDT" for the respective tokens. For native token transfers, use "ETH" or "SOL".

amount*

String

The amount of tokens to send ("0.1" is 0.1 USDC)

rpcUrl

String

The node provider RPC URL. Not required for Solana or Solana Devnet.

metadataStr

String

Optional metadata string for the transaction.

Response Body

{
  "transactionHash": "0x02073df9ba08895d681f80ae45440ba57e766602c97ee6321df5ac81bca900cc",
  "metadata": {
    "amount": "0.01",
    "rawAmount": "10000000000000000",
    "tokenAddress": "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",
    "tokenDecimals": 18
  }
}

If your client is using Account Abstraction, then transactionHash is actually a User Operation hash. You can manually look up the user operation hash here.

Submit Transaction

POST https://mpc-client.portalhq.io/v1/sign

This endpoint allows you to sign a transaction or message.

Headers

NameTypeDescription

Authorization*

String

Bearer <Client API Key>

Content-Type*

String

application/json

Request Body

NameTypeDescription

method*

String

The signer RPC method (e.g. "personal_sign", "eth_sendTransaction", "sol_signAndSendTransaction", etc).

params*

String

A JSON stringified array of the parameters for the RPC method (e.g. "[\"test\"]").

share*

String

The MPC share generated from "Create Wallets" for a specific curve.

chainId*

String

The blockchain network (a CAIP-2 chain ID like "eip155:11155111" for Sepolia).

to*

String

The recipient's address.

rpcUrl*

String

The node provider RPC URL.

metadataStr

String

Optional metadata string for the transaction.

Response Body

{
  "data": "0xf7a6a07fa599db56fca50fa1202670b59054e7ed452ea57b3f5b43148b8bdb165beb3a4b0fd532162a1f0fd475de1a9ecd07c95186f7a0856ce1bffa45e3acc91b"
}

Sign Raw Message

POST https://mpc-client.portalhq.io/v1/raw/sign/:curve

This endpoint allows you to sign a raw message.

Headers

NameTypeDescription

Authorization*

String

Bearer <Client API Key>

Content-Type*

String

application/json

Request Path Params

NameTypeDescription

curve*

String

The curve you want to use (e.g. SECP256K1 for EVM chains and ED25519 for Solana).

Request Body

NameTypeDescription

param*

String

A hex string of the digest to sign without the leading 0x (e.g. "param": "7369676e2074686973").

share*

String

The MPC share generated from "Create Wallets" for a specific curve.

Response Body

{
  "data": "0xf7a6a07fa599db56fca50fa1202670b59054e7ed452ea57b3f5b43148b8bdb165beb3a4b0fd532162a1f0fd475de1a9ecd07c95186f7a0856ce1bffa45e3acc91b"
}

Back Up Wallets

POST https://mpc-client.portalhq.io/v1/backup

This endpoint allows you to create backup shares for your wallets.

Headers

NameTypeDescription

Authorization*

String

Bearer <Client API Key>

Content-Type*

String

application/json

Request Body

NameTypeDescription

generateResponse*

JSON

The response body from "Create Wallets".

Response Body

{
  "secp256k1": {
    "share": "eyJjbGl...",
    "id": "clu32l6c8008wuvz52jokyo3r"
  },
  "ed25519": {
    "share": "eyJjbGl...",
    "id": "clu32l9310087evz5u5v9k1ao"
  }
}

Recover Wallets

POST https://mpc-client.portalhq.io/v1/recover

This endpoint allows you to recover shares for your wallets using your backup shares.

Headers

NameTypeDescription

Authorization*

String

Bearer <Client API Key>

Content-Type*

String

application/json

Request Body

NameTypeDescription

backupResponse*

JSON

The response body from "Back Up Wallets".

Response Body

{
  "secp256k1": {
    "share": "eyJjbGl...",
    "id": "clu32l6c8008wuvz52jokyo3r"
  },
  "ed25519": {
    "share": "eyJjbGl...",
    "id": "clu32l9310087evz5u5v9k1ao"
  }
}

Last updated