Skip to main content
POST
Create partner sub-account
Requires HMAC authentication with the account_creation scope. API key auth and Privy auth are not accepted.
Creates a new sub-account profile linked to the authenticated partner. If account creation succeeds but your app fails to persist the returned profileId, use List Partner Sub-Accounts with the account filter to recover it.

Server wallet mode

Set createServerWallet: true to create a Privy server wallet for the sub-account. This enables delegated signing — the partner can submit unsigned orders and the server signs them using the managed wallet. Before the first delegated trade, call Check Partner Account Allowances. If any target is missing or failed with retryable=true, call Retry Partner Account Allowances, then poll the check endpoint again.
Server wallet creation requires the delegated_signing scope on your API token (in addition to account_creation). Without it, the request returns "Server wallet creation requires delegated_signing scope".

EOA mode

Omit createServerWallet (or set it to false) to create an account for an externally-owned address. The end user manages their own keys and signs their own orders. EOA mode requires three additional headers for wallet ownership verification:

Signing message format

The x-signing-message value is not the raw text — it is the hex-encoded UTF-8 representation of the message returned by GET /auth/signing-message. The raw text (which you sign) looks like:
The full flow:
  1. Fetch the signing message: GET /auth/signing-message → returns the plain-text message with a unique nonce.
  2. Sign the plain-text message with the wallet (e.g. personal_sign / eth_sign).
  3. Hex-encode the plain-text message: prepend 0x to the UTF-8 hex representation.
  4. Send all three headers on the request.

Constraints

  • displayName is optional (max 44 characters). Defaults to the wallet address if omitted.
  • Returns 409 Conflict if a profile already exists for the target address.
  • Cannot create a sub-account for the partner’s own address.

Authorizations

lmts-api-key
string
header
required

Scoped API token with HMAC-SHA256 signing. Requires three headers: lmts-api-key (token ID), lmts-timestamp (ISO-8601), lmts-signature (Base64-encoded HMAC). See Authentication docs for details.

Headers

x-account
string

EOA mode only. Checksummed Ethereum address of the sub-account wallet.

x-signing-message
string

EOA mode only. Hex-encoded signing message.

x-signature
string

EOA mode only. Hex-encoded signature from the sub-account wallet.

Body

application/json
displayName
string

Public display name for the sub-account. Defaults to the wallet address if omitted.

Maximum string length: 44
Example:

"user-alice"

createServerWallet
boolean
default:false

If true, creates a Privy server wallet for the sub-account (enables delegated signing). If false or omitted, requires EOA wallet ownership headers.

Response

Sub-account created

profileId
integer
required

Profile ID of the created sub-account

Example:

789

account
string
required

Wallet address of the created sub-account

Example:

"0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed"