Create API key scoped to a company
Creates an API key that authenticates directly as this company. The created key cannot have more scopes than the parent key.
The optional environment field selects the new key's environment.
When omitted the key inherits the parent key's environment. A live
(PRODUCTION) parent may issue test (SANDBOX) keys, but a test parent
cannot issue live keys — that request is rejected with 400
error.code=ENVIRONMENT_ESCALATION.
API Key authentication.
Format: Authorization: Bearer beel_sk_<key>
Scopes: API Keys use the same scopes as OAuth2 tokens. Each key is created with
specific scopes that limit which endpoints it can access. The required scope for each
endpoint is documented in the operation's security section under OAuth2.
Obtaining Keys: API Keys are managed from the BeeL dashboard
Security: API Keys are secret credentials. Do not share them or store them in source code
In: header
Path Parameters
uuidDescriptive name for the API key
Target environment for the key (PRODUCTION = beel_sk_live_*,
SANDBOX = beel_sk_test_*). Optional; when omitted the key inherits
the parent key's environment.
A live (PRODUCTION) parent key may issue test (SANDBOX) keys, but a test parent key cannot issue live keys (rejected, no privilege escalation).
"PRODUCTION" | "SANDBOX"Scopes for the key (cannot exceed parent key scopes)
Expiration in days (optional)
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://app.beel.es/api/v1/companies/497f6eca-6276-4993-bfeb-53cbbbba6f08/api-keys" \ -H "Content-Type: application/json" \ -d '{ "name": "string" }'{
"success": true,
"data": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"key": "string",
"prefix": "string",
"environment": "string",
"permissions": [
"string"
],
"expires_at": "2019-08-24T14:15:22Z"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}Create a company (sub-account) POST
Creates a new NIF/company under the authenticated account. Invoice series are created automatically with default values. The `environment` field decides the creation flow: * **`TEST`** — created immediately, free. `201` + `CompanyData`. * **`PROD` + owner already `PRODUCTION_ACTIVE`** (production activated, card on file) — created immediately as a production NIF (`environment=PROD`). Real emission stays blocked by `NIF_REPRESENTATION_REQUIRED` until the AEAT representation is signed for this `(owner, nif)`. The new NIF is added to the subscription (pay-as-you-go). `201` + `CompanyData`. * **`PROD` + owner `SANDBOX_ONLY`** — rejected with `400` `error.code=PRODUCTION_NOT_ACTIVATED`. Production must be activated for the account first — a one-time card capture done from the BeeL dashboard: switching to Live mode or creating the first production company there starts the activation checkout automatically. This activation is not part of the public API. Only once the owner is `PRODUCTION_ACTIVE` can a PROD NIF be created.
Delete a company DELETE
Deletes a company (sub-account). Cannot delete the primary profile.