B2B API Reference
Get Chain Activation Signable Message (Stage 1)
Stage 1 of the two-stage chain-activation flow — returns the signable message for adding new chains to an existing portfolio.
POST
Stage 1 of the two-stage chain-activation flow. A portfolio’s chains are
chosen at enrollment (
chainIds on POST /v2/enroll); this flow adds
smart accounts on additional chains to an already-enrolled portfolio.
The endpoint recomputes the session-key message over the requested (new)
chains from the portfolio’s existing owner wallet, operating agent, and
account index, and returns it for the portfolio owner to sign — the
same signature ceremony as enrollment. The message shape follows the
portfolio’s account type (determined server-side from how it was
enrolled):
- ECDSA portfolios get
{ "kind": "ecdsa", "raw": ... }— a 32-byte digest covering all requested chains, signed via EIP-191personal_sign. - ERC-1271 portfolios get
{ "kind": "typed-data", "typedData": ... }— an EIP-712 payload signed with the owner’s smart-contract wallet. One signature covers exactly one chain, sochainIdsmust contain exactly one entry.
POST /v2/portfolios/{portfolioId}/chains to
activate.
- Auth:
x-api-keyheader (required) - Scope:
portfolios:write
chainIds returns the same message. There is
no expiry — the signature stays valid until submitted.
Current constraints:
- EVM portfolios only. Solana portfolios return
400. - ERC-1271 portfolios activate one chain per request; passing more than
one
chainIdsentry returns400. To activate several chains, repeat the two-stage flow once per chain. chainIdsmust not contain duplicates and must not include chains the portfolio already has a smart account on — checksmartAccountsonGET /v2/portfolios/{portfolioId}first.- Unknown/unconfigured chains are rejected with
400; the allowed list is in the errordetails.
400when the body is invalid, a chain is already active, a chain is unsupported, the portfolio is Solana, or more than one chain is requested on an ERC-1271 portfolio401whenx-api-keyis missing or invalid403when the API key lacks theportfolios:writescope404when the portfolio does not exist or belongs to another tenant