Skip to main content
POST
Stage 2 of the two-stage chain-activation flow. Verifies the portfolio owner’s signature over the message returned by POST /v2/portfolios/{portfolioId}/chains/signature, then creates one smart account per requested chain inside a single transaction. On success the portfolio can receive deposits and operate on the new chains immediately. The signature is verified according to the portfolio’s account type: ECDSA portfolios submit an EIP-191 personal_sign signature that may cover several chains at once; ERC-1271 portfolios submit their smart-contract wallet’s signature over the stage-1 EIP-712 typed data, verified against the owner contract on the requested chain — exactly one chain per request. Smart accounts use deterministic CREATE2 addresses — the same address as the portfolio’s existing smart accounts, now live on the new chains. The response mirrors the smartAccounts shape returned by POST /v2/enroll and GET /v2/portfolios/{portfolioId}.
  • Auth: x-api-key header (required)
  • Scope: portfolios:write
chainIds must exactly match the set passed to the signature stage — the owner’s signature covers that specific chain set, and any drift fails verification with 400. The operation is idempotent on the signed payload: retrying with the same chainIds + signature replays the original response instead of failing on the already-active chains. A concurrent identical request returns 409 while the first is still in flight. Common error responses:
  • 400 when the body is invalid, the signature does not verify, a chain is already active, the portfolio is Solana, or more than one chain is requested on an ERC-1271 portfolio
  • 401 when x-api-key is missing or invalid
  • 403 when the API key lacks the portfolios:write scope
  • 404 when the portfolio does not exist or belongs to another tenant
  • 409 when an identical activation request is still in flight