Skip to main content
POST
/
v1
/
presign
/
{curve}
curl --request POST \
  --url https://mpc-client.portalhq.io/v1/presign/{curve} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "share": "eyJjbG..."
}
'
{
  "id": "<UUID>",
  "expiresAt": "2025-03-18T10:00:00Z",
  "data": "<PRESIGNATURE_DATA>"
}

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.

Path Parameters

curve
enum<string>
required

The elliptic curve to use.

Available options:
SECP256K1,
ED25519

Body

application/json

Request body for creating a presignature.

share
string
required

The JSON-serialized MPC share for the wallet.

expirationTs
number

Unix timestamp for when the presignature expires. Defaults to 7 days from creation. Maximum 365 days.

managed
boolean
default:false

Set to true to create a Portal-managed presignature, where Portal stores the encrypted payload and returns only an id. Defaults to false, which creates a client-stored presignature and returns the opaque payload as data.

Response

Presignature created successfully

Response containing the created presignature.

id
string
required

Unique identifier for the presignature.

expiresAt
string<date-time>
required

RFC 3339 expiration timestamp.

data
string

Base64-encoded opaque presignature payload for client-stored presignatures. Pass this as the presignature field in signing requests. Omitted for Portal-managed presignatures.