Skip to content

Create a secret key for a project of the account

POST
/v1/dashboard/projects/{id}/keys

A secret key of the environment asked for, with no scopes and no tenant. The key is in this answer once and cannot be shown again. At most five active secret keys per project and environment.

id
required

Identifier of the project.

string
object
environment
required
string
Allowed values: test live
name

A label for people. Defaults to test secret key or live secret key.

string
>= 1 characters <= 200 characters

Created.

object
id
required

Identifier of a api_key, prefixed with key_.

string
/^key_[0-9a-f]{32}$/
Example
key_0198f0c2a1b47e2e9a1c0f4d5e6a7b8c
object
required
string
Allowed values: api_key
environment
required

The environment of the API key that created the object.

string
Allowed values: test live
kind
required
string
Allowed values: secret publishable
name
required
string | null
prefix
required

The first eight characters after sk_test_ or sk_live_: enough to recognise a key, never enough to use it.

string
tenant_id
required

Optional tenant this object belongs to, for multi-tenant customers.

string | null
status
required
string
Allowed values: active revoked
created_at
required

ISO 8601 instant in UTC.

string format: date-time
Example
2026-09-08T07:00:00Z
last_used_at
required

The last request made with the key, to the minute. null: never used.

string | null format: date-time
Example
2026-09-08T07:00:00Z
revoked_at
required

ISO 8601 instant in UTC.

string | null format: date-time
Example
2026-09-08T07:00:00Z
secret_key
required

The key, in clear text. Shown once, in this response: it is stored as a SHA-256 hash and cannot be shown again.

string
Example
sk_live_...
Bookrail-Request-Id
required
string

Identifier of this request. Quote it to support.

Bookrail-Version
required
string

The API version this response was produced with.

RateLimit-Limit
string

Requests this key may have in flight at one instant: the burst of its policy.

RateLimit-Remaining
string

Requests this key may still make right now, as a whole number.

RateLimit-Reset
string

Whole seconds until RateLimit-Remaining is back at RateLimit-Limit.

RateLimit-Policy
string

unavailable when no limit could be applied to this request, because the store that holds the counters did not answer. The three counters are then absent and the request was served.

Error codes: invalid_body, parameter_invalid, parameter_missing, unsupported_api_version.

object
error
required
object
type
required
string
Allowed values: invalid_request authentication permission not_found conflict rate_limit policy_violation payment_required internal
code
required

Machine readable code. The set is per operation; each response below lists the ones it can produce.

string
message
required
string
param

The field or header the error is about, when there is one.

string
fix

What to do next, when there is one thing to do. Present on the errors that are about the state of the deployment rather than about the request.

string
doc_url
required
string
request_id
required
string
Bookrail-Request-Id
required
string

Identifier of this request. Quote it to support.

Bookrail-Version
required
string

The API version this response was produced with.

RateLimit-Limit
string

Requests this key may have in flight at one instant: the burst of its policy.

RateLimit-Remaining
string

Requests this key may still make right now, as a whole number.

RateLimit-Reset
string

Whole seconds until RateLimit-Remaining is back at RateLimit-Limit.

RateLimit-Policy
string

unavailable when no limit could be applied to this request, because the store that holds the counters did not answer. The three counters are then absent and the request was served.

Error codes: dashboard_session_invalid.

object
error
required
object
type
required
string
Allowed values: invalid_request authentication permission not_found conflict rate_limit policy_violation payment_required internal
code
required

Machine readable code. The set is per operation; each response below lists the ones it can produce.

string
message
required
string
param

The field or header the error is about, when there is one.

string
fix

What to do next, when there is one thing to do. Present on the errors that are about the state of the deployment rather than about the request.

string
doc_url
required
string
request_id
required
string
Bookrail-Request-Id
required
string

Identifier of this request. Quote it to support.

Bookrail-Version
required
string

The API version this response was produced with.

RateLimit-Limit
string

Requests this key may have in flight at one instant: the burst of its policy.

RateLimit-Remaining
string

Requests this key may still make right now, as a whole number.

RateLimit-Reset
string

Whole seconds until RateLimit-Remaining is back at RateLimit-Limit.

RateLimit-Policy
string

unavailable when no limit could be applied to this request, because the store that holds the counters did not answer. The three counters are then absent and the request was served.

Error codes: resource_missing.

object
error
required
object
type
required
string
Allowed values: invalid_request authentication permission not_found conflict rate_limit policy_violation payment_required internal
code
required

Machine readable code. The set is per operation; each response below lists the ones it can produce.

string
message
required
string
param

The field or header the error is about, when there is one.

string
fix

What to do next, when there is one thing to do. Present on the errors that are about the state of the deployment rather than about the request.

string
doc_url
required
string
request_id
required
string
Bookrail-Request-Id
required
string

Identifier of this request. Quote it to support.

Bookrail-Version
required
string

The API version this response was produced with.

RateLimit-Limit
string

Requests this key may have in flight at one instant: the burst of its policy.

RateLimit-Remaining
string

Requests this key may still make right now, as a whole number.

RateLimit-Reset
string

Whole seconds until RateLimit-Remaining is back at RateLimit-Limit.

RateLimit-Policy
string

unavailable when no limit could be applied to this request, because the store that holds the counters did not answer. The three counters are then absent and the request was served.

Error codes: key_limit_reached.

object
error
required
object
type
required
string
Allowed values: invalid_request authentication permission not_found conflict rate_limit policy_violation payment_required internal
code
required

Machine readable code. The set is per operation; each response below lists the ones it can produce.

string
message
required
string
param

The field or header the error is about, when there is one.

string
fix

What to do next, when there is one thing to do. Present on the errors that are about the state of the deployment rather than about the request.

string
doc_url
required
string
request_id
required
string
Bookrail-Request-Id
required
string

Identifier of this request. Quote it to support.

Bookrail-Version
required
string

The API version this response was produced with.

RateLimit-Limit
string

Requests this key may have in flight at one instant: the burst of its policy.

RateLimit-Remaining
string

Requests this key may still make right now, as a whole number.

RateLimit-Reset
string

Whole seconds until RateLimit-Remaining is back at RateLimit-Limit.

RateLimit-Policy
string

unavailable when no limit could be applied to this request, because the store that holds the counters did not answer. The three counters are then absent and the request was served.

Error codes: key_creation_rate_limited, rate_limited.

object
error
required
object
type
required
string
Allowed values: invalid_request authentication permission not_found conflict rate_limit policy_violation payment_required internal
code
required

Machine readable code. The set is per operation; each response below lists the ones it can produce.

string
message
required
string
param

The field or header the error is about, when there is one.

string
fix

What to do next, when there is one thing to do. Present on the errors that are about the state of the deployment rather than about the request.

string
doc_url
required
string
request_id
required
string
Bookrail-Request-Id
required
string

Identifier of this request. Quote it to support.

Bookrail-Version
required
string

The API version this response was produced with.

RateLimit-Limit
string

Requests this key may have in flight at one instant: the burst of its policy.

RateLimit-Remaining
string

Requests this key may still make right now, as a whole number.

RateLimit-Reset
string

Whole seconds until RateLimit-Remaining is back at RateLimit-Limit.

RateLimit-Policy
string

unavailable when no limit could be applied to this request, because the store that holds the counters did not answer. The three counters are then absent and the request was served.

Retry-After
string

Whole seconds to wait before sending this request again. At least 1.

Error codes: internal_error.

object
error
required
object
type
required
string
Allowed values: invalid_request authentication permission not_found conflict rate_limit policy_violation payment_required internal
code
required

Machine readable code. The set is per operation; each response below lists the ones it can produce.

string
message
required
string
param

The field or header the error is about, when there is one.

string
fix

What to do next, when there is one thing to do. Present on the errors that are about the state of the deployment rather than about the request.

string
doc_url
required
string
request_id
required
string
Bookrail-Request-Id
required
string

Identifier of this request. Quote it to support.

Bookrail-Version
required
string

The API version this response was produced with.

RateLimit-Limit
string

Requests this key may have in flight at one instant: the burst of its policy.

RateLimit-Remaining
string

Requests this key may still make right now, as a whole number.

RateLimit-Reset
string

Whole seconds until RateLimit-Remaining is back at RateLimit-Limit.

RateLimit-Policy
string

unavailable when no limit could be applied to this request, because the store that holds the counters did not answer. The three counters are then absent and the request was served.