---
title: "Register Subkey"
method: POST
path: "/account/keys/subkeys"
tags: ["Subkey"]
---

# Register Subkey

`POST /account/keys/subkeys`

## Request

- Base URL: `https://api.prod.paradex.trade/v1`
- URL: `https://api.prod.paradex.trade/v1/account/keys/subkeys`
- Auth: API key in header `Authorization`

Register a new subkey for the authenticated account.

## Request body

- RequestsCreateSubkey
  - `allowed_cidrs` string[]: Optional IP CIDR allowlist applied atomically at creation, so the subkey is never live unrestricted. Empty/omitted = unrestricted. Max 50 entries; same format as PUT .../allowed-cidrs (e.g. "203.0.113.0/24"). Not covered by the registration signature: the list is mutable post-creation via the JWT-only allowed-cidrs endpoint, so signing it would add no protection.
  - `encrypted_key` string: Encrypted private key (required if state=pending).
  - `eph_public_key` string: Ephemeral public key for signature verification (required if state=pending).
  - `evm_signature` string: EVM (EIP-191) registration signature, used in place of `signature` / `signature_timestamp` / `signature_expiry` when the account's main key is a secp256k1 key (AccountSignerType == EIP191). The server reconstructs nothing — the raw SIWE message presented to the user is supplied verbatim in `siwe_message` and the personal_sign signature in `evm_signature`. The SIWE message's Statement must equal "Paradex Subkey Registration: 0x<new_subkey_pubkey>" (lowercased pubkey); that line is what binds the authorisation to the specific subkey being registered.
  - `name` string, required: User-friendly name for the subkey.
  - `public_key` string, required: Public key to be registered as a subkey.
  - `signature` string[]: Signature from the account's main StarkNet private key over pedersen_array(account, public_key, signature_timestamp, signature_expiry). Required when the server enforces main-key authorization on subkey registration (feature flag EnableSubkeyRegistrationSignature). Format: [r, s].
  - `signature_expiry` integer: Unix seconds; included in signed message and bounds replay window.
  - `signature_timestamp` integer: Unix seconds; included in signed message.
  - `siwe_message` string
  - `state` string: State of the subkey: 'active' or 'pending'. Defaults to 'active'.

## Response `201`

An empty response

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: IP restrictions not enabled for this account

## Changes

- **2026-10-22** `f33feb7333ea`: 9 warning
  - added the new `ADDRESS_BOOK_NOT_PARADEX_ACCOUNT` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new `ADDRESS_BOOK_NOT_PARADEX_ACCOUNT` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `401`
  - added the new `ADDRESS_BOOK_NOT_PARADEX_ACCOUNT` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `403`
  - added the new `ADDRESS_BOOK_REPEATED_IN_IMPORT` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - …5 more
- **2026-10-20** `72c125c93c2b`: 6 warning
  - added the new `SESSION_EXPIRED` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new `SESSION_EXPIRED` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `401`
  - added the new `SESSION_EXPIRED` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `403`
  - added the new `SESSION_REVOKED` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - …2 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/changes/account/keys/subkeys/post.md)

---

[API](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2.md) - [All operations](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/llms.txt) - [OpenAPI document](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/revisions/f33feb7333ea?raw)
