Rotate an API key secret
Rotate the secret of an API key: a fresh prefix + secret is returned in plaintext exactly once. Irreversible.
- The previous secret keeps working for a 24-hour grace window; rotating again in that window replaces it at once.
- A key with scopes the calling key does not cover returns 403 insufficient_scope and nothing is rotated.
Request
- Base URL: https://api.factuarea.com/v1
- URL: https://api.factuarea.com/v1/accounts/{account}/api-keys/{api_key}/rotate-secret
- Auth: one of:
- HTTP bearer
- API key in header X-API-Key
Path parameters
Public identifier (UUID v7) of your account. Get it from GET /v1/me (data.account.id).
Public identifier (UUID v7) of the API key.
Headers
Client-generated opaque key (up to 255 characters; UUID v7 recommended) that makes retries safe: the first response is cached and replayed for repeats without re-executing the mutation. Reusing a key with a different body returns 422 idempotency_key_reused; the values of secret fields (password, secret…) count as part of the body, so retrying with a corrected secret under the same key is a different request, never the replay of the earlier answer. See the Idempotency guide. Required on this operation: repeating it delivers an effect that cannot be taken back (an email sent, a file generated, a third-party call, a charge), so a request without this header is rejected with 422 idempotency_key_required before any business logic runs.
Pin the API version (YYYY-MM-DD, Stripe-style date versioning) for this request; omit to use the key's pinned version, or the latest if none. Unsupported version → 400 unsupported_api_version; malformed → 400 parameter_invalid_format. The effective version is echoed in the Factuarea-Version response header. See the Versioning guide.
Response
Example response
{
"data": {
"id": "01931b3e-7c4a-7f2e-9a8b-4d6e7f8a9b0c",
"object": "api_key",
"name": "Producción",
"prefix": "fact_live_1OSf9KdP",
"scopes": [
"account:read",
"invoices:read",
"invoices:write"
],
"tier": "scale",
"environment": "live",
"created_at": "2026-01-15T09:30:00Z",
"last_used_at": "2026-05-25T18:00:00Z",
"is_active": true,
"ip_allowlist": [
"203.0.113.10",
"198.51.100.0/24"
],
"last_used_ip": "203.0.113.10",
"nif_scope": [
{
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a01",
"tax_id": "B12345674",
"name": "Acme Soluciones SL",
"access_level": "operate"
}
],
"created_by": {
"id": "01931b3e-7c4a-7f2e-9a8b-4d6e7f8a9b11",
"name": "Marta Ibáñez"
},
"revoked_by": {
"id": "01931b3e-7c4a-7f2e-9a8b-4d6e7f8a9b11",
"name": "Marta Ibáñez"
},
"secret_rotated_by": {
"id": "01931b3e-7c4a-7f2e-9a8b-4d6e7f8a9b11",
"name": "Marta Ibáñez"
},
"secret": "fact_live_1OSf9KdPq8r2s4t6u8w0y2A4c6E8g0I2"
}
}Changes
No recorded changes to this operation across all 1 revision of this API.