Skip to main content
POST
/
accounts:custom
cURL
curl --request POST \
  --url https://grid.squads.xyz/api/grid/v1/accounts:custom \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'x-grid-environment: <x-grid-environment>' \
  --header 'x-idempotency-key: <x-idempotency-key>' \
  --data '
{
  "policies": {
    "signers": [
      {
        "address": "<string>",
        "permissions": [
          "CAN_INITIATE"
        ],
        "role": "primary",
        "provider": "privy"
      }
    ],
    "threshold": 1,
    "admin_address": "<string>",
    "time_lock": 1
  },
  "memo": "<string>"
}
'
{
  "data": {
    "address": "<string>",
    "policies": {
      "signers": [
        {
          "address": "<string>",
          "permissions": [
            "CAN_INITIATE"
          ]
        }
      ],
      "threshold": 1,
      "adminAddress": "<string>",
      "timeLock": 1
    },
    "type": "<string>"
  },
  "metadata": {
    "request_id": "<string>",
    "timestamp": "2023-11-07T05:31:56Z"
  }
}
Creates a smart account with email signers (MPC-managed via Turnkey/Privy) or pubkey signers (external keys you manage).

Signer Types

Email: MPC-managed wallet created for the email address. Pubkey: Existing Solana public key you control.

Permissions

PermissionValueDescription
CAN_INITIATE1Create transaction proposals
CAN_VOTE2Approve or reject proposals
CAN_EXECUTE4Execute approved transactions
Threshold cannot exceed the number of signers with CAN_VOTE.

Example: 2-of-3 Treasury

const response = await grid.createCustomAccount({
  policies: {
    threshold: 2,
    signers: [
      { type: "email", email: "cfo@co.com", provider: "turnkey", permissions: ["CAN_INITIATE", "CAN_VOTE", "CAN_EXECUTE"] },
      { type: "email", email: "ceo@co.com", provider: "turnkey", permissions: ["CAN_VOTE", "CAN_EXECUTE"] },
      { type: "pubkey", address: "7xK...abc", permissions: ["CAN_VOTE"] }
    ]
  }
});

Authorizations

Authorization
string
header
required

Your Grid API key from the Grid Dashboard

Headers

x-grid-environment
string
required

Solana network environment (sandbox, production)

x-idempotency-key
string
required

Optional idempotency key to prevent duplicate account creation

Body

application/json
policies
object
required
memo
string | null

Response

Smart account created successfully

data
object
required
metadata
object
required