NewStripe: a buyer with a NIF always gets a standard invoice, and the simplified threshold is deprecated
BeeL
Get startedMulti-NIFVeriFactuRulesStripeAPI referenceChangelog
Invoice Series

Get the default series of a company

Scopeseries:read

Reports, for each DocumentType used by automatic invoicing flows, whether the company (NIF) has a default invoice series and which one: exists, plus the series_id when there is one.

  • No default: that document type cannot be issued without naming a series_id explicitly, and automatic flows skip it with failure.payment.skip.missing_default_series.
  • Environment: resolved from the request context; it takes no input.

Closed catalogue. This collection is fixed and bounded — one entry per DocumentType: it carries no pagination, it takes no page/limit, and every response holds the whole set.


GET
/v1/companies/{company_id}/series/defaults
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

Path Parameters

company_idstring

Unique identifier (UUID) of the company the operation acts on — its identifier, not its NIF. It is the only source of context: the account that owns it is derived from it, and the BeeL-Active-Company header plays no part. A company you do not reach answers 403, and so does a company that does not exist, so the existence of a company in another account is never disclosed.

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://app.beel.es/api/v1/companies/497f6eca-6276-4993-bfeb-53cbbbba6f08/series/defaults"
{
  "success": true,
  "data": {
    "defaults": [
      {
        "document_type": "UNASSIGNED",
        "exists": true,
        "series_id": "0f6582ac-1e7e-41dc-a63a-24fccd074d0c",
        "code": "string",
        "provisional": true
      }
    ]
  },
  "meta": {
    "timestamp": "2025-01-15T10:30:00Z",
    "request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
  }
}
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The parameter 'invoice_id' has an invalid type. Expected: UUID.",
    "details": {
      "field": "invoice_id",
      "invalid_value": "deliveries",
      "expected_format": "UUID"
    }
  },
  "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": "VALIDATION_ERROR",
    "message": "The provided data is not valid",
    "details": {
      "field": "specific error message"
    }
  },
  "meta": {
    "timestamp": "2025-01-15T10:30:00Z",
    "request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
  },
  "type": "https://docs.beel.es/errors/INVOICE_NO_LINES",
  "title": "INVOICE_NO_LINES",
  "detail": "The invoice must have at least one line",
  "instance": "/v1/invoices/abc-123"
}
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Too many requests. Please try again in 60 seconds."
  },
  "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"
  }
}

Ensure a default series per document type PUT

Ensures the company has a default invoice series for `STANDARD`, `SIMPLIFIED` and `CORRECTIVE` in the current environment, and returns the resulting set. The request takes no body: the desired end state is one default per document type, so repeating it changes nothing. - **Already there:** a document type that already has a default keeps it, and it is returned unchanged. - **Missing:** it is created with code `F`, `S` or `R` and format `{CODIGO}-{YYYY}-{NUM:4}`, active and marked as default. - **Code taken:** if that code already belongs to another series, the document type is omitted from the response and is left with no default. **Closed catalogue.** This collection is fixed and bounded — one entry per `DocumentType`: it carries no `pagination`, it takes no `page`/`limit`, and every response holds the whole set.

Create an invoice series for a company POST

Creates an invoice series under a company. - **Document type:** `document_type` is required. `UNASSIGNED` is rejected with `422 SERIES_UNASSIGNED_TYPE_NOT_ALLOWED`: corrective invoices need a series of their own. - **Code:** must be unique within the company; a code already taken answers `409`. - **Unique numbers per issuer:** a series whose `code` and `format` could print a number that another series of the company (in the same environment, active or not) can also print is rejected with `409 SERIES_FORMAT_OVERLAPS`, naming that series. Proforma series are not compared. - **Numbering:** `format` must contain `{NUM}` or `{NUM:X}` and only accepts uppercase tokens. `counter_reset` defaults to `ANNUAL`, so a format with no year token has to be sent with `counter_reset: NEVER`. - **Default series:** the first series created for a document type is marked as default even if you send `default_series: false`.