curl --request POST \
--url https://carboncopy.news/api/v1/keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Production bot",
"scopes": {
"portfolio": "none",
"traders": "none",
"orders": "none",
"markets": "none",
"account": "none"
},
"expiresAt": 1773043200000
}
'{
"keyId": "key_abc123",
"name": "My trading bot",
"scopes": {
"portfolio": "none",
"traders": "none",
"orders": "none",
"markets": "none",
"account": "none"
},
"createdAt": 1741000000000,
"secret": "cc_a1b2c3d4e5f6...",
"expiresAt": 123,
"lastUsedAt": 123
}Creates a new API key. The secret field in the response is shown exactly once — store it securely immediately. Requires a valid Privy JWT.
Maximum 10 active keys per user. Returns 422 quota_exceeded if you’ve reached the limit.
curl --request POST \
--url https://carboncopy.news/api/v1/keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Production bot",
"scopes": {
"portfolio": "none",
"traders": "none",
"orders": "none",
"markets": "none",
"account": "none"
},
"expiresAt": 1773043200000
}
'{
"keyId": "key_abc123",
"name": "My trading bot",
"scopes": {
"portfolio": "none",
"traders": "none",
"orders": "none",
"markets": "none",
"account": "none"
},
"createdAt": 1741000000000,
"secret": "cc_a1b2c3d4e5f6...",
"expiresAt": 123,
"lastUsedAt": 123
}Privy JWT obtained after authenticating with your Privy account. Required only for key management endpoints.
Key created. Save the secret immediately — it will not be shown again.
Unique ID for this key.
"key_abc123"
Human-readable label.
"My trading bot"
Show child attributes
Unix timestamp (ms) of key creation.
1741000000000
The full API key secret (cc_<64 hex chars>). Shown once — store it securely.
"cc_a1b2c3d4e5f6..."
Unix timestamp (ms) of key expiry. null = never expires.
Unix timestamp (ms) when the key was last used.
Was this page helpful?