Authentication

Authenticate API requests with project-scoped API keys, layered with roles, wallet bindings, and network controls.

SDP layers independent controls onto a single API key — role, per-key permissions, wallet bindings, policy profiles, and IP allowlist — so a key grants exactly the access its integration needs, and no more.

Every API request carries an API key in the Authorization header:

Terminal
curl https://api.solana.com/v1/wallets \
  -H "Authorization: Bearer sk_test_..."

The Bearer prefix is optional — a raw key in the Authorization header is also accepted.

Key scope

Keys are issued per project and inherit that project's environment: sk_test_ keys belong to sandbox projects (devnet), sk_live_ keys to production projects (mainnet-beta). A key can only reach the wallets, tokens, and payments of the project it was issued for; there is no cross-project or organization-wide key.

Authorization layers

A request must clear every layer that is configured on its key:

LayerWhat it controls
RoleBaseline permission set — see the table below
Per-key permissionsOptional fine-grained overrides of the role's defaults. A key can only grant permissions its creator holds
Wallet bindingsRestrict which custody wallets the key can operate, each binding with its own permission list
Policy profilesRule sets (destination controls, amount limits, approval requirements) evaluated before a bound wallet moves funds
IP allowlistOptional IPv4/IPv6/CIDR ranges the key may be used from
RoleDescription
api_adminFull access including custody and platform operations
api_developerRead/write access to tokens, payments, counterparties, wallets, and webhooks; excludes custody administration
api_readonlyRead-only access to all resources, including audit records

Errors

Authentication and authorization failures are always machine-distinguishable:

ConditionStatusCode
No API key on the request401UNAUTHORIZED
Malformed or unknown key401INVALID_API_KEY
Key has been revoked401REVOKED_API_KEY
Key past its expiry or rotation deadline401EXPIRED_API_KEY
Request origin not in the key's IP allowlist403FORBIDDEN
Key lacks a required permission403INSUFFICIENT_PERMISSIONS
Per-key rate limit exceeded429RATE_LIMITED

Requests are rate limited per key; the standard tier allows 100 requests per minute.

See Manage API Keys for creating, rotating, and revoking keys.

Is this page helpful?