NewThree filters returned the wrong rows
BeeL
Get StartedMulti-NIFVeriFactuStripeAPI ReferenceChangelog
Preferences

Get invoice customization options

Scopeconfiguration:read

Deprecated. Use GET /v1/invoice-customization-options, which returns exactly the same body. The catalogue is the same for every credential, so it does not belong under /v1/configuration.

Returns, in template_types, the catalogue of PDF templates a NIF can be rendered with.

  • Fields: each entry carries the code to send as template_type, plus a name and a short description translated into the language of the user the credential belongs to.
  • Removed fields: suggested_colors, features and preview_url are no longer returned; the invoice customization accepts any 6-digit hexadecimal colour, so pick your own.

GET
/v1/configuration/invoice-customization-options
AuthorizationBearer <token>

Keys are prefixed beel_sk_, and each one carries the scopes it was created with: a key short of the scope an operation needs is answered 403. The scope an operation requires is shown next to its title, and the full catalogue lives in the Scopes reference.

Keys are created from the BeeL dashboard. They are secret credentials: do not share them or commit them to source control.

In: header

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://app.beel.es/api/v1/configuration/invoice-customization-options"
{
  "success": true,
  "data": {
    "template_types": [
      {
        "code": "MODERN_TABLE",
        "name": "Modern Table",
        "description": "Structured table design, suited to standard products and services with several lines."
      }
    ]
  },
  "meta": {
    "timestamp": "2025-01-15T10:30:00Z",
    "request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
  }
}
{
  "success": false,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication is required to access this resource"
  },
  "meta": {
    "timestamp": "2025-01-15T10:30:00Z",
    "request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
  }
}
{
  "success": false,
  "error": {
    "code": "FORBIDDEN",
    "message": "You do not have permission to access this resource"
  },
  "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"
  }
}
{
  "success": false,
  "error": {
    "code": "UNSUPPORTED_MEDIA_TYPE",
    "message": "Unsupported media type: text/plain. Supported: application/json"
  },
  "meta": {
    "timestamp": "2025-01-15T10:30:00Z",
    "request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
  }
}

Update user preferred language PUT

**Deprecated — use `PATCH /v1/me` instead.** The preferred language belongs to the person, not to a company's configuration. Updates the authenticated user's preferred language. - **What it affects:** the language of the emails BeeL sends to the user and of the translated labels the API returns, such as the invoice template names in `GET /v1/invoice-customization-options`. - **Supported languages:** `es` (Spanish), `en` (English) and `ca` (Catalan).

Validate a NIF against the AEAT register POST

Checks a NIF or CIF against the AEAT register through VeriFactu and returns what the register says about it. It only reads the register: it creates nothing and stores no customer. - **`status`:** distinguishes a NIF found in the register from one that is syntactically correct but absent, and from a check that could not be completed because VeriFactu was unavailable — in which case the NIF is validated automatically once the service is back. - **`valid: true`:** means different things by holder. For an individual, AEAT matched NIF and name together. For a legal entity the name you sent is **not verified** at all — AEAT identifies a company by its CIF alone — so it says nothing about your name. - **`legal_name_verified`:** tells those two cases apart. - **`census_status`:** says whether an identified NIF is also deregistered or revoked. ## Invalid input - **Bad syntax is an answer, not an error:** it comes back `200` with `status: INVALID`, so a pre-validation flow never has to tell rejections apart by status code. - **A missing NIF is an error:** an absent or empty `nif` answers `422` `FIELD_BLANK`, with `details.field` naming it.