# BeeL API Documentation > Public invoicing API for self-employed professionals in Spain with full VeriFactu support. ## Documentation Pages - [Authentication](https://docs.beel.es/llms.mdx/auth) - How to authenticate your requests to the BeeL. API - [Changelog](https://docs.beel.es/llms.mdx/changelog) - Track all updates to the BeeL. API. - [Claude Code](https://docs.beel.es/llms.mdx/claude-code) - Use the BeeL. plugin for Claude Code to implement, audit, and maintain BeeL. API integrations with AI assistance. - [CLI](https://docs.beel.es/llms.mdx/cli) - Agent-first command-line interface for the BeeL API — run any endpoint from the terminal, sandbox by default. - [BeeL. API](https://docs.beel.es/llms.mdx) - Invoicing API for freelancers and small businesses in Spain with VeriFactu compliance. - [API Pricing](https://docs.beel.es/llms.mdx/pricing) - Developer plan pricing, volume tiers, and how billing works for the BeeL. API. - [API Keys](https://docs.beel.es/llms.mdx/auth/api-keys) - Authenticate with API Keys for server-to-server integrations - [Authentication](https://docs.beel.es/llms.mdx/auth/index) - How to authenticate your requests to the BeeL. API - [Multi-NIF Accounts](https://docs.beel.es/llms.mdx/auth/multi-nif) - How to select which fiscal identity (NIF) to use when making API requests - [OAuth2](https://docs.beel.es/llms.mdx/auth/oauth2) - Authenticate via OAuth2 for MCP clients and third-party applications - [Scopes](https://docs.beel.es/llms.mdx/auth/scopes) - Available permission scopes for API Keys and OAuth2 tokens - [How taxes are applied](https://docs.beel.es/llms.mdx/stripe/configuracion-impuestos) - The Fiscal Mirror rule — BeeL reflects the Stripe charge exactly, with a clean fallback when Stripe Tax isn't enabled. - [Configure Proforma Invoices in Stripe](https://docs.beel.es/llms.mdx/stripe/configuracion-proforma) - Set up Stripe invoices as proforma so the official ones are generated by BeeL. - [Connection settings](https://docs.beel.es/llms.mdx/stripe/connection-settings) - Per-connection settings that affect how BeeL processes Stripe payments — fiscal limits, auto-submit, customer creation, email delivery. - [Customer mappings](https://docs.beel.es/llms.mdx/stripe/customer-mappings) - How BeeL matches Stripe customers to BeeL customers, auto-creates ad-hoc records, and handles missing fiscal data. - [Data conversion — Stripe → BeeL](https://docs.beel.es/llms.mdx/stripe/data-conversion) - The Fiscal Mirror rule, how amounts and taxes are mapped, why IRPF is always 0, the silent sanitization BeeL applies to inbound payloads, and how the forward and rectificativa emitters split responsibilities. - [Edge cases and limits](https://docs.beel.es/llms.mdx/stripe/edge-cases-and-limits) - Every reason BeeL can drop a Stripe event, how to replay one, and the known limits of the integration. - [What invoice gets generated](https://docs.beel.es/llms.mdx/stripe/generated-invoices) - How BeeL decides between standard and simplified, how it picks a rectification code (R1–R5), and which series is used. - [Overview](https://docs.beel.es/llms.mdx/stripe) - Connect your Stripe account with BeeL to automatically generate official invoices with every payment. - [Supported Stripe events](https://docs.beel.es/llms.mdx/stripe/supported-events) - Every Stripe event BeeL listens to, what BeeL does with each, and which ones are explicitly ignored. - [VeriFactu submission for Stripe invoices](https://docs.beel.es/llms.mdx/stripe/verifactu-submission) - When invoices generated by the Stripe integration are auto-submitted to AEAT — and how to control the toggle per connection. - [Auto-submit policy](https://docs.beel.es/llms.mdx/verifactu/auto-submit) - The exact conditions under which BeeL sends an issued invoice to AEAT for you — and what happens when one of them isn't met. - [Cancel vs amend](https://docs.beel.es/llms.mdx/verifactu/cancel-and-fix) - Decide between cancelling an invoice (void) and issuing a corrective (rectificativa). Each operation has different fiscal weight. - [Corrective invoices (R1–R5)](https://docs.beel.es/llms.mdx/verifactu/corrective-invoices) - Pick the right rectification type and code, and see the canonical request shapes BeeL accepts for each scenario. - [Equivalence surcharge (recargo de equivalencia)](https://docs.beel.es/llms.mdx/verifactu/equivalence-surcharge) - When to add `equivalence_surcharge_rate` on B2B lines, the surcharge values BeeL accepts, and how the line is sent to AEAT. - [Examples cookbook](https://docs.beel.es/llms.mdx/verifactu/examples-cookbook) - Runnable curl + JSON for every common VeriFactu scenario, mapped to BeeL's public API. - [Overview](https://docs.beel.es/llms.mdx/verifactu) - How BeeL handles VeriFactu compliance — what BeeL does for you, what you control, and where to learn each scenario. - [International customers](https://docs.beel.es/llms.mdx/verifactu/international-customers) - Every cross-border scenario — intra-EU B2B, B2C with OSS, exports, services to non-EU — with the exact request shape BeeL accepts. - [Invoice types](https://docs.beel.es/llms.mdx/verifactu/invoice-types) - F1, F2, R1–R5 — what each VeriFactu invoice type means, when BeeL emits each one, and which API fields map to which AEAT code. - [Regime keys (`main_tax.regime_key`)](https://docs.beel.es/llms.mdx/verifactu/regime-keys) - The catalogue of VeriFactu regime codes BeeL supports, when each one is required, and how it pairs with `exemption_reason`. - [Scope and limitations](https://docs.beel.es/llms.mdx/verifactu/scope-and-limitations) - What BeeL's VeriFactu integration does NOT do today, why, and the supported workaround for each gap. - [Simplified vs standard (F1 vs F2)](https://docs.beel.es/llms.mdx/verifactu/simplified-vs-standard) - When to issue a factura simplificada (F2), when you must use a factura ordinaria (F1), and what BeeL enforces at the API boundary. - [Submission states](https://docs.beel.es/llms.mdx/verifactu/submission-states) - Every state a VeriFactu submission can be in, what triggers transitions, and when you need to act. - [Tax classification per line](https://docs.beel.es/llms.mdx/verifactu/tax-classification) - Set `exemption_reason` on each line correctly. Includes the full mapping from BeeL API values to AEAT codes (S1/S2/N1/N2/E1–E6). - [Territorial taxes (IVA, IGIC, IPSI)](https://docs.beel.es/llms.mdx/verifactu/territorial-taxes) - When to use IVA, IGIC (Canary Islands), or IPSI (Ceuta & Melilla) — and which `main_tax.type` value to send. - [Create customer](https://docs.beel.es/llms.mdx/customers/createCustomer) - Creates a new customer. **Idempotency:** Supports `Idempotency-Key` header to prevent duplicates when a request is retried (network timeout, double-click, etc.). - [Create or validate multiple customers](https://docs.beel.es/llms.mdx/customers/createCustomersBulk) - Creates multiple customers in a single operation or validates data without persisting. **Validation flow:** 1. `dry_run=true`: Full validation only (NIFs, duplicates, format) without persistence 2. `dry_run=false`: Validation + actual creation **Validations performed:** - Individual validation of each customer (same rules as single customer creation) - Detection of duplicate NIFs within the batch - Detection of duplicate NIFs against existing database - Parallel NIF validation against AEAT registry (VeriFactu) - Field format verification (email, phone, etc.) **Result statuses:** - `VALID`: Customer valid, ready to create - `WARNING`: Customer valid but with warnings (e.g., missing email) - `ERROR`: Customer invalid, cannot process - `DUPLICATE`: Duplicate NIF (in batch or existing DB) - `NIF_INVALID`: NIF not valid in AEAT registry **Atomicity:** - `dry_run=true`: Validation only, no persistence - `dry_run=false`: If any customer fails, ALL customers are rejected (full atomicity) - [Deactivate customer](https://docs.beel.es/llms.mdx/customers/deactivateCustomer) - Deactivates (marks as deleted) a customer. **Soft delete:** The customer is not physically deleted, only marked as inactive. **Restriction:** Cannot deactivate a customer with associated invoices. - [Delete multiple customers](https://docs.beel.es/llms.mdx/customers/deactivateCustomersBulk) - Deactivates (marks as deleted) multiple customers in a single operation. **Soft delete:** Customers are not physically deleted, only marked as inactive. **Partial behavior:** Valid customers will be deactivated, failures are reported in the errors array. - [Download CSV template for customers](https://docs.beel.es/llms.mdx/customers/downloadCustomerTemplateCsv) - Downloads a sample CSV file for customer import. **Format**: The file includes the required headers and example rows with UTF-8 BOM for Excel compatibility. - [Get customer by ID](https://docs.beel.es/llms.mdx/customers/getCustomer) - Retrieves complete details of a specific customer - [Import customers from CSV with structured preview](https://docs.beel.es/llms.mdx/customers/importCustomersCsvPreview) - Imports multiple customers from a CSV file with full preview of all records. **Key features**: - **Structured preview**: Returns all parsed records (valid and with errors) - **Parallel validation**: NIFs validated concurrently against VeriFactu - **Granular feedback**: Customer-specific errors and warnings - **Editable data**: Structured JSON for editable table in frontend **Recommended flow**: 1. **Initial upload**: Call with `dry_run=true` to get preview 2. **Display table**: Frontend shows parsed data with errors/warnings 3. **Inline editing**: User corrects data directly in the table 4. **Final import**: Send corrected data with `dry_run=false` **Format**: Must follow CSV template format (downloadable from `/customers/template-csv`). **Security limits**: - Max size: 5MB - Max 1,000 records per file - Rate limiting: 3 imports per hour **Validation**: - Required headers per template - Full validation of each row with business rules - Parallel NIF validation against AEAT registry (VeriFactu) - Duplicate detection in CSV and database **Validation statuses**: - `VALID`: Customer valid, ready to import - `WARNING`: Customer valid but with warnings (eg: missing email) - `ERROR`: Customer invalid, cannot process - `DUPLICATE`: Duplicate customer (in CSV or DB) - `NIF_INVALID`: NIF invalid in AEAT registry - [Import contacts from Holded Excel](https://docs.beel.es/llms.mdx/customers/importHoldedContacts) - Imports multiple customers from an Excel file exported from Holded. **Key features**: - **Specific parsing**: Reads exact structure of Holded contacts Excel (29 columns) - **Automatic mapping**: Converts Holded contacts to Customer entities automatically - **Full validation**: Validates NIFs, addresses and required data - **Preview mode**: Allows viewing parsed data before importing **Recommended flow**: 1. **Initial upload**: Call with `preview=true` to get preview 2. **Display data**: Frontend shows parsed Holded contacts 3. **Final import**: Call with `preview=false` to import definitively **Expected Excel structure** (contacts exported from Holded): - Sheet: "Holded" - Rows to skip: 2 (header + empty) - Headers in row 2: Created, Name, ID, Email, Phone, Mobile, etc. (29 columns) - Footer: "Report created automatically with Holded..." **Security limits**: - Max size: 10MB - Max 5,000 records per file - Rate limiting: 5 imports per hour **Automatic Holded → Customer mapping**: - Name → legal_name - ID → identifier (NIF/CIF) - Email → email - Phone/Mobile → phone (prioritizes mobile) - Full address → address - Tags → notes - [List customers](https://docs.beel.es/llms.mdx/customers/listCustomers) - Returns a paginated list of customers with optional filters - [Update customer](https://docs.beel.es/llms.mdx/customers/updateCustomer) - Updates an existing customer - [Cancel representation](https://docs.beel.es/llms.mdx/companies/cancelRepresentation) - Cancels the current representation process. - [Create a company (sub-account)](https://docs.beel.es/llms.mdx/companies/createCompany) - 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`** (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`** (no card) — no company is created yet. Returns `402` with `error.code=CHECKOUT_REQUIRED` and `error.details.checkout_url` (Stripe Checkout setup session). The company is materialized once the card is captured, confirmed via `POST /v1/companies/verify-creation` (or the `checkout.session.completed` webhook). `success_url`/`cancel_url` are required in this case. - [Create API key scoped to a company](https://docs.beel.es/llms.mdx/companies/createCompanyApiKey) - Creates an API key that authenticates directly as this company. The created key cannot have more scopes than the parent key. - [Delete a company](https://docs.beel.es/llms.mdx/companies/deleteCompany) - Deletes a company (sub-account). Cannot delete the primary profile. - [Download representation PDF](https://docs.beel.es/llms.mdx/companies/downloadRepresentation) - Returns a presigned URL (5min) to download the representation PDF. - [Generate unsigned representation PDF](https://docs.beel.es/llms.mdx/companies/generateRepresentation) - Generates the VeriFactu representation PDF for digital signature. - [Get company details](https://docs.beel.es/llms.mdx/companies/getCompany) - Returns details of a specific company including VeriFactu status. - [Poll whether a pending PROD company creation was materialized](https://docs.beel.es/llms.mdx/companies/getCompanyCreationStatus) - Lightweight, read-only status check for a pending PROD company creation. The frontend polls this after landing on the `success_url` while the `checkout.session.completed` webhook (the durable source of truth) materializes the company asynchronously. Unlike `POST /v1/companies/verify-creation`, this endpoint does **not** call Stripe and does **not** run the activation pipeline. It only reads the pending-creation buzón keyed by `session_id`: * buzón consumed → `status=CREATED` + the materialized `company`. * buzón exists, not yet consumed → `status=PENDING`, `company=null`. * no buzón for that `(session, owner)` → `422` `CHECKOUT_SESSION_MISMATCH`. Shares the `VerifyCreationResponse` shape with `verify-creation` so the frontend can treat both responses uniformly. - [Get representation status](https://docs.beel.es/llms.mdx/companies/getRepresentationStatus) - Returns the current status of the VeriFactu representation process. - [List all companies](https://docs.beel.es/llms.mdx/companies/listCompanies) - Returns all companies (sub-accounts) under the authenticated account. - [List API keys for a company](https://docs.beel.es/llms.mdx/companies/listCompanyApiKeys) - Returns all API keys associated with this company. - [Per-company invoice aggregates](https://docs.beel.es/llms.mdx/companies/listCompanyStats) - Returns invoice aggregates (count + last emission date) per company under the authenticated account. Decoupled from `GET /v1/companies` so the CompanySwitcher stays cheap; only callers that need the densities (e.g. the EmpresasPage table) pay the aggregate cost. - [Revoke an API key](https://docs.beel.es/llms.mdx/companies/revokeCompanyApiKey) - Revokes (deletes) an API key associated with this company. - [Submit signed representation PDF](https://docs.beel.es/llms.mdx/companies/submitRepresentation) - Uploads the digitally signed representation PDF. VeriFactu will validate the signature asynchronously. - [Update company details](https://docs.beel.es/llms.mdx/companies/updateCompany) - Updates editable fields of a company. NIF, legal name, and entity type are immutable after creation. - [Confirm a Stripe Checkout result for a pending PROD company creation](https://docs.beel.es/llms.mdx/companies/verifyCompanyCreation) - Synchronously resolves a Stripe Checkout setup session so the frontend can finish creating a production NIF without depending on webhook delivery. The frontend calls this when Stripe redirects to the `success_url` with `?session_id={CHECKOUT_SESSION_ID}`. The backend retrieves the session from Stripe, validates its metadata (the pending creation intent stashed at `createCompany` time), captures the card on the account, and then materializes the production company from the stored payload. Idempotent — receiving both this call and the `checkout.session.completed` webhook is safe; the company is created once. This endpoint replaces the former `promotion/verify`: there is no `company_id` in the path because the company does not exist until the payment is confirmed. - [All error codes](https://docs.beel.es/llms.mdx/errors/all) - Every error code returned by the BeeL. API in one flat table — useful as a cheat sheet or to import as constants in your codebase. - [Overview](https://docs.beel.es/llms.mdx/errors) - Browse every error code the BeeL. API can return, organised by domain. Every error response includes a stable type URI pointing to its page here. - [Create default invoice series](https://docs.beel.es/llms.mdx/invoice-series/createDefaultSeries) - Idempotently ensures the user has a default invoice series for each relevant `DocumentType` (FACTURA_ORDINARIA, FACTURA_SIMPLIFICADA, FACTURA_RECTIFICATIVA) in the current environment. - If a default already exists for a tipo, it is returned unchanged. - If a default is missing, a new series is created with code F/S/R and format `{CODIGO}-{YYYY}-{NUM:4}`, marked as default and active. - If the code is already in use by a manually-created series, that tipo is skipped (omitted from the response). Used by integration setup screens after connecting Stripe Connect, and as a recovery action for users who connected before automatic creation was wired in. - [Create invoice series](https://docs.beel.es/llms.mdx/invoice-series/createSeries) - Creates a new invoice series. **Note:** The first series created by a user is automatically marked as default. - [Delete series](https://docs.beel.es/llms.mdx/invoice-series/deleteSeries) - Soft-deletes an invoice series. If the series is active, it is automatically deactivated before deletion. The series code becomes available for reuse. **Restriction:** Cannot delete the default series. Assign another series as default first. - [Get default series status per document type](https://docs.beel.es/llms.mdx/invoice-series/getDefaultSeriesStatus) - Reports whether the user has a default invoice series for each `DocumentType` relevant to automatic invoicing flows (Stripe Connect, etc.). Used by integration setup screens to surface missing defaults at config time, preventing webhooks from being skipped at runtime with `failure.payment.skip.missing_default_series`. Environment is resolved via RLS from the request context — no input needed. - [List invoice series](https://docs.beel.es/llms.mdx/invoice-series/listSeries) - Retrieves all invoice series for the user - [Mark series as default](https://docs.beel.es/llms.mdx/invoice-series/setDefaultSeries) - Marks an invoice series as the user's default. **Business rules:** - Only one series can be default per user - The series must be active (cannot mark an inactive series) - The previous default series is automatically unmarked **Note:** This operation is idempotent - calling it multiple times with the same series has no additional effects. - [Update invoice series](https://docs.beel.es/llms.mdx/invoice-series/updateSeries) - Updates an existing invoice series. Can only update: - Description - Active/inactive status - Whether it is default Cannot modify: code, prefix, number_format (to maintain consistency with existing invoices). Business rules: - Cannot deactivate a default series (must set another as default first) - Cannot mark an inactive series as default - [Change status of multiple invoices](https://docs.beel.es/llms.mdx/invoices/changeInvoicesStatusBulk) - Changes the status of multiple invoices in a single operation. **Supported status changes:** - **SENT:** Mark multiple invoices as sent (from ISSUED) - **PAID:** Mark multiple invoices as paid (from ISSUED, SENT, or OVERDUE) **Partial success:** If some invoices cannot be updated, the operation continues with the others. The response includes details of failures. **Limits:** - Maximum 50 invoices per request **Validations:** - All invoices must belong to the authenticated user - Each invoice must be in a valid status for the requested transition - For PAID: payment_date is required - [Create corrective invoice](https://docs.beel.es/llms.mdx/invoices/createCorrectiveInvoice) - Creates a corrective invoice to correct or void an issued invoice. **Rectification types:** - **TOTAL**: Completely voids the original invoice (original status → VOIDED) - **PARTIAL**: Partially corrects the original invoice (original status → RECTIFIED) **VeriFactu codes:** - R1: Legal error and Art. 80 One, Two and Six LIVA - R2: Article 80 Three LIVA (Bankruptcy) - R3: Article 80 Four LIVA (Bad debts) - R4: Other causes - R5: Simplified invoices (only for simplified) **Validations:** - Original invoice must be in status ISSUED, SENT, PAID, OVERDUE or RECTIFIED - Cannot rectify a DRAFT invoice (must be issued first) - Cannot rectify a VOIDED invoice (final status) - For TOTAL rectification: Another total corrective cannot already exist - For PARTIAL rectification: Multiple partial correctives are allowed **Lines:** - TOTAL: Optional (if not provided, original lines are copied with negated amounts) - PARTIAL: REQUIRED (adjustment lines with positive or negative amounts) - [Create invoice](https://docs.beel.es/llms.mdx/invoices/createInvoice) - Creates a new invoice. **Idempotency:** Supports `Idempotency-Key` header to prevent duplicates. - [Delete invoice](https://docs.beel.es/llms.mdx/invoices/deleteInvoice) - Deletes (marks as deleted) an invoice. **Soft delete:** The invoice is not physically deleted, only marked as deleted. **Restriction:** Only invoices in `DRAFT` status can be deleted. - [Download multiple invoice PDFs as ZIP](https://docs.beel.es/llms.mdx/invoices/downloadInvoicesPdfBulk) - Downloads multiple invoice PDFs as a single ZIP file. **Limits:** - Maximum 20 invoices per request - Maximum 50MB total ZIP size **Partial success:** If some PDFs are not available (not generated, not found), the response will include a `failures` array with details. The ZIP will still be generated with the available PDFs. **Error handling:** - If NO PDFs are available, returns 400 Bad Request - If some PDFs are unavailable, returns 200 with partial ZIP + failures list - [Duplicate invoice as draft](https://docs.beel.es/llms.mdx/invoices/duplicateInvoice) - Creates a copy of an existing invoice as a new draft. **Use case:** Quickly create a new invoice based on an existing one, useful for recurring invoices to the same customer. **What is copied:** - Customer data (recipient) - Invoice lines (descriptions, quantities, prices, taxes) - Payment method - Series (if specified, otherwise uses default) - Observations **What is NOT copied (reset to defaults):** - Invoice number (null - assigned when issued) - Status (always DRAFT) - Issue date (always set to today) - Due date (recalculated based on new issue date) - VeriFactu data - PDF - Payment date - Sent date **Result:** A new draft invoice ready for review and emission. **Note:** Send `Content-Type: application/json` even when body is empty. - [Export invoices to Excel](https://docs.beel.es/llms.mdx/invoices/exportInvoicesExcel) - Exports invoices to an Excel file (XLSX format). **Two modes of operation:** - **By IDs:** Export specific invoices by providing `invoice_ids` - **By filters:** Export all invoices matching filter criteria **Two export formats (like Holded):** - **SUMMARY:** One row per invoice with aggregated totals (default) - **ITEMS:** One row per invoice line item, ideal for import compatibility **Columns for SUMMARY format:** - Date, Number, Due Date, Customer, NIF - Description, Subtotal, IVA, Withholding, Equivalence Surcharge - Total, Collected, Pending, Status, Payment Method **Columns for ITEMS format:** - Invoice Number, Date, Due Date, Draft, Contact, Contact NIF - Address, Postal Code, City, Province, Country - SKU, Item, Units, Unit Price, Discount % - Subtotal, Tax Type, Tax %, Tax Amount - Surcharge %, Surcharge Amount, IRPF %, IRPF Amount, Total **Limits:** - Maximum 5000 invoices per export - All invoices must belong to the authenticated user (RLS enforced) **Usage example (Frontend):** ```javascript const response = await fetch('/v1/invoices/export/excel', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ invoice_ids: [...], format: 'ITEMS' }) }); const blob = await response.blob(); // Download the blob as file ``` - [Get invoice PDF download URL](https://docs.beel.es/llms.mdx/invoices/generateInvoicePdf) - Generates a temporary pre-signed URL to download the invoice PDF. **Security:** - URL expires automatically in 5 minutes - HMAC signature prevents tampering - Only allows download (GET), no modification **Benefits:** - Direct download from storage (bypasses backend) - Better performance and lower server load - Compatible with browser cache and CDN - Ideal for large files **Frontend usage:** ```javascript const response = await fetch('/v1/invoices/{id}/pdf'); const { download_url } = await response.json(); window.open(download_url, '_blank'); // Direct download ``` **Format:** PDF is generated according to Spanish tax regulations. - [Get invoice by ID](https://docs.beel.es/llms.mdx/invoices/getInvoice) - Retrieves complete details of a specific invoice - [Issue invoice (DRAFT → ISSUED)](https://docs.beel.es/llms.mdx/invoices/issueInvoice) - Finalizes a draft invoice and marks it as issued. **Status change:** `DRAFT` → `ISSUED` **Actions performed:** - Assigns definitive invoice number according to configured series - Marks invoice as finalized (not modifiable) - Prepares invoice for sending to customer **Validations:** - Invoice must be in DRAFT status - All invoice data must be complete and valid **Note:** After issuing, the invoice can be sent to the customer via the `/invoices/{id}/send` endpoint - [List invoices](https://docs.beel.es/llms.mdx/invoices/listInvoices) - Returns a paginated list of invoices with optional filters - [Mark invoice as paid](https://docs.beel.es/llms.mdx/invoices/markInvoicePaid) - Marks an invoice as paid. **Status change:** `SENT` → `PAID` **Note:** Send `Content-Type: application/json` even when body is empty. - [Mark invoice as sent](https://docs.beel.es/llms.mdx/invoices/markInvoiceSent) - Marks an invoice as sent manually. **Use case:** When the invoice was sent via WhatsApp, paper, or any other channel outside of the email system. **Status change:** `ISSUED` → `SENT` **Records:** Sets `sent_at` timestamp for tracking. **Note:** Send `Content-Type: application/json` even when body is empty. - [Preview draft invoice PDF](https://docs.beel.es/llms.mdx/invoices/previewDraftInvoicePdf) - Generates a PDF preview for a draft invoice and returns the binary content directly. **Requirements:** - Invoice must be in BORRADOR (draft) status - The PDF shows "BORRADOR" as the invoice number - No VeriFactu QR code is included **Behavior:** - PDF is generated on-the-fly (not stored) - Each request regenerates the PDF (reflects latest draft changes) - Response is `application/pdf` for direct browser preview - [Reschedule invoice](https://docs.beel.es/llms.mdx/invoices/rescheduleInvoice) - Changes the scheduled date for a scheduled invoice. **Status:** Remains `SCHEDULED` The new date must be today or in the future. - [Revert invoice to issued status](https://docs.beel.es/llms.mdx/invoices/revertInvoiceToIssued) - Reverts an invoice from SENT to ISSUED status. **Use case:** To correct errors when an invoice was marked as sent by mistake. **Status change:** `SENT` → `ISSUED` **Side effects:** Clears the `sent_at` timestamp. - [Schedule invoice for future processing](https://docs.beel.es/llms.mdx/invoices/scheduleInvoice) - Schedules a draft invoice to be automatically processed on a future date. **Status change:** `DRAFT` → `SCHEDULED` **Actions available:** - `DRAFT`: Convert to draft for manual review on the scheduled date - `ISSUE_AND_SEND`: Issue and send automatically on the scheduled date - [Send invoice by email](https://docs.beel.es/llms.mdx/invoices/sendInvoiceEmail) - Sends the invoice by email to the customer. **Email:** Sent to the billing emails configured for the customer. **Attachments:** Includes the invoice PDF. - [Send multiple invoices by email](https://docs.beel.es/llms.mdx/invoices/sendInvoicesBulkEmail) - Sends multiple invoices by email to the specified recipients. **Limits:** - Maximum 20 invoices per request - Maximum 25MB total attachment size **Email behavior:** - Single email with all PDFs as attachments - Uses BULK_INVOICES template **Validations:** - Invoices must have status ISSUED, PAID, SENT or OVERDUE (not DRAFT or VOIDED) - At least one recipient required (from request or user's accountant email) **Partial success:** If some invoices cannot be attached, the email will still be sent with available PDFs. Response includes `failures` array. - [Cancel scheduled invoice](https://docs.beel.es/llms.mdx/invoices/unscheduleInvoice) - Cancels a scheduled invoice and converts it back to draft. **Status change:** `SCHEDULED` → `DRAFT` The invoice can then be edited or manually issued. - [Update invoice](https://docs.beel.es/llms.mdx/invoices/updateInvoice) - Updates an existing draft invoice. **Restriction:** Only invoices in `DRAFT` status can be modified. - [Void invoice](https://docs.beel.es/llms.mdx/invoices/voidInvoice) - Voids an invoice by changing its status to `VOIDED`. **Status change:** `ISSUED`, `SENT`, `OVERDUE`, `PAID` or `RECTIFIED` → `VOIDED` **Use when:** The operation never took place (invoice issued by mistake, duplicate, etc.) For invoices already submitted to VeriFactu, the cancellation is sent to AEAT automatically. **Note:** If the operation did take place but with errors, use the corrective invoice endpoint instead. - [Validate NIF against AEAT registry](https://docs.beel.es/llms.mdx/nif-validation/validateNif) - **Public endpoint** to validate a NIF/CIF against the AEAT registry using VeriFactu. This endpoint is useful for: - Pre-validation before registration (proactive feedback) - Validating customer NIFs before creating invoices - Verifying that a NIF exists in the registry **Behavior:** - **VALID**: The NIF exists in the AEAT registry. Returns the fiscal name. - **INVALID**: The NIF has correct format but doesn't exist in the registry. - **PENDING**: VeriFactu API is temporarily unavailable. The NIF has valid syntax but couldn't be verified against the registry. - **ERROR**: Technical error during validation (invalid syntax, timeout, etc.) **Note about PENDING:** If you use this endpoint for pre-validation during registration, a PENDING status indicates that the NIF has valid format and the user can continue. The system will validate the NIF automatically when the service becomes available. **Rate limiting:** - With API Key: 100 requests/hour - With Session Cookie: 1000 requests/hour **Authentication:** This endpoint accepts both API Keys and Session Cookies. - [Get invoice customization options](https://docs.beel.es/llms.mdx/preferences/getInvoiceCustomizationOptions) - Retrieves available option catalogs to customize invoices: **Template types:** - MODERN_TABLE: Structured table design, ideal for standard products/services - PROFESSIONAL_SERVICE: Text-based design, ideal for notaries/consultancies **Suggested color palette:** - BeeL default colors (orange, blue) - Professional palette (dark grays) - Creative palette (violet, pink, amber, emerald green) - Classic palette (blue, red, green, purple) **Usage:** User can choose a template and accent color to customize their invoices. These values are saved in their profile and automatically applied when generating new invoice PDFs. Template and color names are returned translated to the user's invoice language preference. - [Update user preferred language](https://docs.beel.es/llms.mdx/preferences/updateLanguage) - Updates the authenticated user's preferred language. This language is used for: - UI translations - Template names and colors in invoice customization - Emails sent to the user **Supported languages:** - `es` - Spanish (default) - `en` - English - `ca` - Catalan - [Create new product/service](https://docs.beel.es/llms.mdx/products/createProduct) - Creates a new product or service in the catalog - [Create multiple products](https://docs.beel.es/llms.mdx/products/createProductsBulk) - Creates multiple products in one operation (max 100) - [Delete product](https://docs.beel.es/llms.mdx/products/deleteProduct) - Deletes a product from catalog - [Delete multiple products](https://docs.beel.es/llms.mdx/products/deleteProductsBulk) - Deletes multiple products from catalog (max 100) - [Get product by ID](https://docs.beel.es/llms.mdx/products/getProduct) - Retrieves details of a specific product - [List products/services from catalog](https://docs.beel.es/llms.mdx/products/listProducts) - Returns a paginated list of products/services with optional filters - [Search and autocomplete](https://docs.beel.es/llms.mdx/products/searchProducts) - Optimized endpoint for active product autocomplete - [Update product](https://docs.beel.es/llms.mdx/products/updateProduct) - Updates an existing product - [Cancel representation for a NIF](https://docs.beel.es/llms.mdx/publicrepresentations/cancelRepresentationByNif) - Cancels the current representation process for the given NIF. Production emission for every sub-account of this NIF is blocked again until a new signed PDF is submitted. - [Download representation PDF for a NIF](https://docs.beel.es/llms.mdx/publicrepresentations/downloadRepresentationByNif) - Returns a presigned URL (5min) to download the representation PDF. - [Generate unsigned representation PDF for a NIF](https://docs.beel.es/llms.mdx/publicrepresentations/generateRepresentationByNif) - Generates the VeriFactu representation PDF for the given NIF using the fiscal profile of the caller's account. The caller must own at least one company with this NIF. - [Get representation status for a NIF](https://docs.beel.es/llms.mdx/publicrepresentations/getRepresentationStatusByNif) - Returns the current status of the VeriFactu representation for the given NIF. `ACTIVE` means the `nif_firmas` row is registered and production emission is unblocked for every sub-account of this NIF. - [Submit a signed representation PDF for a NIF](https://docs.beel.es/llms.mdx/publicrepresentations/signRepresentationByNif) - Uploads the digitally signed representation PDF for the NIF. VeriFactu validates the signature asynchronously; on success the backend registers a `nif_firmas` row for the `(owner, nif)` pair and activates VeriFactu PROD for every sub-account of the owner with that NIF. After validation, all PROD sub-accounts of this NIF can emit real invoices. - [Create a recurring invoice from an existing invoice](https://docs.beel.es/llms.mdx/recurring-invoices/createRecurringFromInvoice) - Creates a new recurring invoice template using the lines, recipient, and configuration from an existing invoice. - [Create a recurring invoice from scratch](https://docs.beel.es/llms.mdx/recurring-invoices/createRecurringInvoice) - Creates a new recurring invoice template with all template data (lines, recipient, series, payment) and recurrence configuration, without needing an existing invoice. - [Delete a recurring invoice](https://docs.beel.es/llms.mdx/recurring-invoices/deleteRecurringInvoice) - Permanently deletes a recurring invoice and cancels any pending scheduled generations. - [Generate an invoice now from a recurring template](https://docs.beel.es/llms.mdx/recurring-invoices/generateInvoiceNow) - Manually triggers invoice generation from a recurring template. - [Get generation history for a recurring invoice](https://docs.beel.es/llms.mdx/recurring-invoices/getRecurringHistory) - Returns the list of invoices previously generated from this recurring template, including their status and generation dates. - [Get a recurring invoice by ID](https://docs.beel.es/llms.mdx/recurring-invoices/getRecurringInvoice) - Retrieves the full details of a recurring invoice including its schedule, template lines, and next generation date. - [List recurring invoices](https://docs.beel.es/llms.mdx/recurring-invoices/listRecurringInvoices) - Lists all recurring invoices for the authenticated user with filters and pagination. - [Pause a recurring invoice](https://docs.beel.es/llms.mdx/recurring-invoices/pauseRecurringInvoice) - Pauses automatic invoice generation. The recurring invoice can be resumed later without losing its schedule configuration. - [Preview next invoice from recurring template](https://docs.beel.es/llms.mdx/recurring-invoices/previewRecurringInvoice) - Returns a computed preview of what the next invoice would look like when generated from this recurring template. Uses current issuer, recipient, and series data. Nothing is persisted. - [Resume a paused recurring invoice](https://docs.beel.es/llms.mdx/recurring-invoices/resumeRecurringInvoice) - Resumes automatic invoice generation for a previously paused recurring invoice. The next generation date is recalculated from the current date. - [Skip the next generation](https://docs.beel.es/llms.mdx/recurring-invoices/skipNextGeneration) - Skips the next scheduled invoice generation and advances the generation date to the following period. - [Update a recurring invoice](https://docs.beel.es/llms.mdx/recurring-invoices/updateRecurringInvoice) - Updates the schedule, template lines, or recipient of a recurring invoice. Only allowed while the invoice is active or paused. - [Get user tax configuration](https://docs.beel.es/llms.mdx/tax-configuration/getTaxConfiguration) - Retrieves the user's tax configuration, including: - Default tax regime (VAT, IGIC, IPSI, OTHERS) - Default main tax percentage - IRPF and equivalence surcharge configuration - [Get complete tax types catalog](https://docs.beel.es/llms.mdx/tax-configuration/getTaxTypes) - Retrieves the complete catalog of available tax types with structured information for tax configuration in Spain: - **Tax regimes**: VAT (Peninsula), IGIC (Canary Islands), IPSI (Ceuta/Melilla), OTHERS - **Percentages per regime**: Valid percentages for each tax type - **Regime codes**: VeriFactu codes for each tax type - **IRPF**: Available withholding percentages - **Equivalence surcharge**: Automatic mappings based on VAT percentage - **Utilities**: Validation functions and geographic auto-detection This endpoint provides all necessary information for the frontend without duplicating tax validation logic. - [Update tax configuration](https://docs.beel.es/llms.mdx/tax-configuration/updateTaxConfiguration) - Updates the user's tax configuration - [Get VeriFactu configuration](https://docs.beel.es/llms.mdx/verifactu/getVeriFactuConfiguration) - Retrieves the current VeriFactu configuration - [Update VeriFactu configuration](https://docs.beel.es/llms.mdx/verifactu/updateVeriFactuConfiguration) - Updates the user's VeriFactu configuration. **Business rules:** - If `enabled` is false, `apply_by_default` must also be false - If `apply_by_default` is true, `enabled` must be true - [Create webhook subscription](https://docs.beel.es/llms.mdx/webhooks/createWebhookSubscription) - Register an HTTPS endpoint to receive real-time event notifications. Every delivery is signed with BeeL-Signature (HMAC-SHA256). The secret is returned once on creation — store it securely. Maximum 10 active webhook subscriptions per account. - [Delete webhook subscription](https://docs.beel.es/llms.mdx/webhooks/deleteWebhookSubscription) - Permanently deletes a webhook subscription. No further events will be delivered. - [List webhook delivery logs](https://docs.beel.es/llms.mdx/webhooks/listWebhookDeliveries) - Returns the last 50 delivery attempts for a webhook subscription. - [List webhook subscriptions](https://docs.beel.es/llms.mdx/webhooks/listWebhookSubscriptions) - Returns all webhook subscriptions for the authenticated account. - [Retry a failed webhook delivery](https://docs.beel.es/llms.mdx/webhooks/retryWebhookDelivery) - Immediately retries a webhook delivery using the original payload. Creates a new delivery log entry with the result. - [Rotate webhook secret](https://docs.beel.es/llms.mdx/webhooks/rotateWebhookSecret) - Generates a new HMAC secret for a webhook subscription. The old secret is **immediately invalidated** — update your signature verification logic before rotating to avoid missing events during the transition. The new secret is only returned **once** in this response. - [Update webhook subscription](https://docs.beel.es/llms.mdx/webhooks/updateWebhookSubscription) - Partially updates a webhook subscription. Only provided fields are updated. Use this endpoint to: - **Change the endpoint URL** (`url`) - **Change subscribed events** (`events`) - **Enable or disable** the subscription (`active`) - [Filtering by metadata](https://docs.beel.es/llms.mdx/guides/filtering-by-metadata) - Attach arbitrary key/value pairs to invoices and query them back with `?metadata[key]=value`. - [Glossary](https://docs.beel.es/llms.mdx/guides/glossary) - Spanish-English glossary of fiscal and business terms used in the BeeL. API. - [Handling errors](https://docs.beel.es/llms.mdx/guides/handling-errors) - Error response shape, status codes, retry rules with idempotency semantics, and how to consume BeeL. errors programmatically. - [Idempotency](https://docs.beel.es/llms.mdx/guides/idempotency) - How to use idempotency keys to prevent duplicate operations in the BeeL. API. - [Guides](https://docs.beel.es/llms.mdx/guides) - Practical guides for working with the BeeL API — idempotency, rate limits, error handling, metadata filtering, and a fiscal glossary. - [Rate Limits](https://docs.beel.es/llms.mdx/guides/rate-limits) - Understand the rate limits applied to the BeeL API and how to handle them. - [Overview](https://docs.beel.es/llms.mdx/sdks) - Official SDKs to integrate BeeL in your application — coming soon. - [Java SDK](https://docs.beel.es/llms.mdx/sdks/java) - Java SDK for the BeeL API — coming soon. - [Node.js / TypeScript SDK](https://docs.beel.es/llms.mdx/sdks/node) - Fully-typed TypeScript SDK for the BeeL API with automatic retries, idempotency and built-in webhook verification. - [Python SDK](https://docs.beel.es/llms.mdx/sdks/python) - Python SDK for the BeeL API — coming soon. - [Deduplication](https://docs.beel.es/llms.mdx/webhooks/deduplication) - Safely handle duplicate webhook deliveries using the BeeL-Event-Id header. - [Events](https://docs.beel.es/llms.mdx/webhooks/events) - All webhook event types and their payload schemas. - [Overview](https://docs.beel.es/llms.mdx/webhooks) - Receive real-time notifications in your application when events happen in BeeL. - [Retries & Delivery Logs](https://docs.beel.es/llms.mdx/webhooks/retries) - How BeeL. retries failed deliveries and how to inspect the delivery history. - [Signature Verification](https://docs.beel.es/llms.mdx/webhooks/signatures) - Verify that webhook requests genuinely come from BeeL. using HMAC-SHA256. - [Authentication errors](https://docs.beel.es/llms.mdx/errors/category/auth) - All error codes returned by the Authentication endpoints (2 total). - [Customers errors](https://docs.beel.es/llms.mdx/errors/category/cliente) - All error codes returned by the Customers endpoints (28 total). - [Account settings errors](https://docs.beel.es/llms.mdx/errors/category/configuracion) - All error codes returned by the Account settings endpoints (13 total). - [Holded import errors](https://docs.beel.es/llms.mdx/errors/category/holded) - All error codes returned by the Holded import endpoints (2 total). - [Invoices errors](https://docs.beel.es/llms.mdx/errors/category/invoicing) - All error codes returned by the Invoices endpoints (86 total). - [Products errors](https://docs.beel.es/llms.mdx/errors/category/producto) - All error codes returned by the Products endpoints (3 total). - [General errors](https://docs.beel.es/llms.mdx/errors/category/shared) - All error codes returned by the General endpoints (23 total). - [Companies errors](https://docs.beel.es/llms.mdx/errors/category/subaccount) - All error codes returned by the Companies endpoints (8 total). - [VeriFactu errors](https://docs.beel.es/llms.mdx/errors/category/verifactu) - All error codes returned by the VeriFactu endpoints (36 total). - [Webhooks errors](https://docs.beel.es/llms.mdx/errors/category/webhook) - All error codes returned by the Webhooks endpoints (2 total). - [ACTIVE_CANNOT_DELETE](https://docs.beel.es/llms.mdx/errors/ACTIVE_CANNOT_DELETE) - Cannot delete an active series. Deactivate it first - [ALREADY_DISABLED](https://docs.beel.es/llms.mdx/errors/ALREADY_DISABLED) - VeriFactu is already disabled for this user - [ALREADY_ENABLED](https://docs.beel.es/llms.mdx/errors/ALREADY_ENABLED) - VeriFactu is already enabled for this user - [ALREADY_REGISTERED](https://docs.beel.es/llms.mdx/errors/ALREADY_REGISTERED) - The NIF is already registered in VeriFactu - [ALTERNATIVE_ID_INVALID](https://docs.beel.es/llms.mdx/errors/ALTERNATIVE_ID_INVALID) - For customers with country ES only types PASSPORT (03) or NOT_REGISTERED (07) are allowed - [API_COMMUNICATION_ERROR](https://docs.beel.es/llms.mdx/errors/API_COMMUNICATION_ERROR) - Error communicating with the VeriFactu API - [API_KEY_INVALID](https://docs.beel.es/llms.mdx/errors/API_KEY_INVALID) - The API key is invalid or has expired - [API_KEY_NOT_CONFIGURED](https://docs.beel.es/llms.mdx/errors/API_KEY_NOT_CONFIGURED) - The VeriFactu API key has not been configured - [AUTOMATIC_EMAIL_CONFIG_INVALID](https://docs.beel.es/llms.mdx/errors/AUTOMATIC_EMAIL_CONFIG_INVALID) - For automatic sending, you must provide an email configuration or a client with email - [BULK_PDF_ERROR](https://docs.beel.es/llms.mdx/errors/BULK_PDF_ERROR) - Error processing bulk PDF download - [CANCELLATION_VIA_SPECIFIC_ENDPOINT](https://docs.beel.es/llms.mdx/errors/CANCELLATION_VIA_SPECIFIC_ENDPOINT) - To cancel an invoice use the specific cancellation endpoint - [CANNOT_DELETE_PRIMARY](https://docs.beel.es/llms.mdx/errors/CANNOT_DELETE_PRIMARY) - Cannot delete the primary account through this endpoint - [CANNOT_DUPLICATE_DELETED_INVOICE](https://docs.beel.es/llms.mdx/errors/CANNOT_DUPLICATE_DELETED_INVOICE) - Cannot duplicate a deleted invoice - [CANNOT_SIGN_CANCELLED](https://docs.beel.es/llms.mdx/errors/CANNOT_SIGN_CANCELLED) - Cannot sign a cancelled document - [CITY_EMPTY](https://docs.beel.es/llms.mdx/errors/CITY_EMPTY) - City cannot be empty - [CITY_MAX_LENGTH](https://docs.beel.es/llms.mdx/errors/CITY_MAX_LENGTH) - City cannot exceed {0} characters - [CLIENT_DUPLICATE](https://docs.beel.es/llms.mdx/errors/CLIENT_DUPLICATE) - A client with this NIF already exists - [CLIENT_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/CLIENT_NOT_FOUND) - Customer not found: {0} - [COMPANY_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/COMPANY_NOT_FOUND) - Company not found - [CONFIGURATION_INVALID](https://docs.beel.es/llms.mdx/errors/CONFIGURATION_INVALID) - The configuration is not valid - [CONFIG_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/CONFIG_NOT_FOUND) - VeriFactu configuration not found - [COUNTRY_EMPTY](https://docs.beel.es/llms.mdx/errors/COUNTRY_EMPTY) - Country cannot be empty - [COUNTRY_MAX_LENGTH](https://docs.beel.es/llms.mdx/errors/COUNTRY_MAX_LENGTH) - Country cannot exceed {0} characters - [DEFAULT_CANNOT_DEACTIVATE](https://docs.beel.es/llms.mdx/errors/DEFAULT_CANNOT_DEACTIVATE) - Cannot deactivate the default series. Set another series as default first - [DEFAULT_CANNOT_DELETE](https://docs.beel.es/llms.mdx/errors/DEFAULT_CANNOT_DELETE) - Cannot delete the default series. Set another series as default first - [DELETION_FAILED](https://docs.beel.es/llms.mdx/errors/DELETION_FAILED) - Error deleting the invoice - [DELIVERY_LOG_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/DELIVERY_LOG_NOT_FOUND) - Webhook delivery log not found - [DIRECCION_FISCAL_REQUIRED](https://docs.beel.es/llms.mdx/errors/DIRECCION_FISCAL_REQUIRED) - Fiscal address is required to register with VeriFactu - [DOCUMENT_ALREADY_CANCELLED](https://docs.beel.es/llms.mdx/errors/DOCUMENT_ALREADY_CANCELLED) - The document is already cancelled - [DUE_DATE_BEFORE_ISSUE_DATE](https://docs.beel.es/llms.mdx/errors/DUE_DATE_BEFORE_ISSUE_DATE) - Due date cannot be before the issue date - [EMPTY_FILE](https://docs.beel.es/llms.mdx/errors/EMPTY_FILE) - The file is empty - [ENCODING_ERROR](https://docs.beel.es/llms.mdx/errors/ENCODING_ERROR) - File encoding error: {0} - [EXEMPTION_REGIME_NOT_SUPPORTED_IN_VERIFACTU](https://docs.beel.es/llms.mdx/errors/EXEMPTION_REGIME_NOT_SUPPORTED_IN_VERIFACTU) - The given exemption reason corresponds to a special regime (REAEA, equivalence surcharge, cash basis, investment gold…), not to an art. 20-26 LIVA exemption. VeriFactu models it with clave_regimen, not operacion_exenta. Switch to the appropriate clave_regimen. - [EXEMPTION_REQUIRES_RECIPIENT_ID_TYPE](https://docs.beel.es/llms.mdx/errors/EXEMPTION_REQUIRES_RECIPIENT_ID_TYPE) - Exemption {0} requires the recipient to carry an alternative identifier of type {1} - [EXEMPT_ZERO_RATE_REQUIRES_REASON](https://docs.beel.es/llms.mdx/errors/EXEMPT_ZERO_RATE_REQUIRES_REASON) - Lines with 0% tax rate must declare an exemption reason. Use one of: EXENTA_ART_20..26, NO_SUJETA_ART_7_9, NO_SUJETA_LOCALIZACION, ISP_ART_84_2_*, OTRO - [FIELD_BLANK](https://docs.beel.es/llms.mdx/errors/FIELD_BLANK) - The field ''{0}'' cannot be empty - [FILE_CORRUPTED](https://docs.beel.es/llms.mdx/errors/FILE_CORRUPTED) - File is damaged or corrupt - [FILE_EMPTY](https://docs.beel.es/llms.mdx/errors/FILE_EMPTY) - The file is empty - [FILE_TOO_LARGE](https://docs.beel.es/llms.mdx/errors/FILE_TOO_LARGE) - File is too large. Maximum allowed size: {0} - [FORBIDDEN](https://docs.beel.es/llms.mdx/errors/FORBIDDEN) - You do not have permission to perform this action - [HAS_INVOICES_CANNOT_DELETE](https://docs.beel.es/llms.mdx/errors/HAS_INVOICES_CANNOT_DELETE) - Cannot delete a series that has associated invoices. Delete the invoices first - [IBAN_INVALID](https://docs.beel.es/llms.mdx/errors/IBAN_INVALID) - Invalid IBAN: ''{0}''. Must match ISO 13616 format (e.g.: ES1234567890123456789012) - [IBAN_REQUIRED](https://docs.beel.es/llms.mdx/errors/IBAN_REQUIRED) - Payment method {0} requires an IBAN - [INACTIVE_CANNOT_BE_DEFAULT](https://docs.beel.es/llms.mdx/errors/INACTIVE_CANNOT_BE_DEFAULT) - Cannot set an inactive series as default - [INVALID_CONTENT](https://docs.beel.es/llms.mdx/errors/INVALID_CONTENT) - File content is not valid - [INVALID_CSV_FORMAT](https://docs.beel.es/llms.mdx/errors/INVALID_CSV_FORMAT) - Invalid CSV file format: {0} - [INVALID_DIMENSIONS](https://docs.beel.es/llms.mdx/errors/INVALID_DIMENSIONS) - Image dimensions are not valid - [INVALID_EMAIL_FORMAT](https://docs.beel.es/llms.mdx/errors/INVALID_EMAIL_FORMAT) - The email ''{0}'' has an invalid format - [INVALID_EXCEL_FORMAT](https://docs.beel.es/llms.mdx/errors/INVALID_EXCEL_FORMAT) - Invalid Holded Excel file format: {0} - [INVALID_EXCEL_STRUCTURE](https://docs.beel.es/llms.mdx/errors/INVALID_EXCEL_STRUCTURE) - The Excel file does not have the expected Holded contacts structure - [INVALID_EXTENSION](https://docs.beel.es/llms.mdx/errors/INVALID_EXTENSION) - File extension not allowed - [INVALID_FILE_TYPE](https://docs.beel.es/llms.mdx/errors/INVALID_FILE_TYPE) - File type not allowed. Accepted types: {0} - [INVALID_FORMAT](https://docs.beel.es/llms.mdx/errors/INVALID_FORMAT) - Invalid file format: {0} - [INVALID_IRPF](https://docs.beel.es/llms.mdx/errors/INVALID_IRPF) - Invalid income tax withholding type: ''{0}''. Allowed values: {1} - [INVALID_IVA_SURCHARGE_PAIR](https://docs.beel.es/llms.mdx/errors/INVALID_IVA_SURCHARGE_PAIR) - Surcharge {0}% is not valid for VAT {1}%. Allowed pairs: 21↔5.2, 10↔1.4, 4↔0.5 - [INVALID_LINE](https://docs.beel.es/llms.mdx/errors/INVALID_LINE) - The invoice line is not valid: {0} - [INVALID_PERCENTAGE](https://docs.beel.es/llms.mdx/errors/INVALID_PERCENTAGE) - The percentage {0} is not valid. It must be between 0 and 100 - [INVALID_SURCHARGE](https://docs.beel.es/llms.mdx/errors/INVALID_SURCHARGE) - Invalid equivalence surcharge type: ''{0}''. Allowed values: {1} - [INVALID_TAX](https://docs.beel.es/llms.mdx/errors/INVALID_TAX) - The tax type ''{0}'' is not valid - [INVALID_TOKEN](https://docs.beel.es/llms.mdx/errors/INVALID_TOKEN) - The token is invalid or has expired - [INVALID_VAT](https://docs.beel.es/llms.mdx/errors/INVALID_VAT) - Invalid VAT type: ''{0}''. Allowed values: {1} - [INVOICE_NOT_EMITIDA](https://docs.beel.es/llms.mdx/errors/INVOICE_NOT_EMITIDA) - The invoice must be issued before submitting to VeriFactu - [INVOICE_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/INVOICE_NOT_FOUND) - Invoice not found - [INVOICE_NO_LINES](https://docs.beel.es/llms.mdx/errors/INVOICE_NO_LINES) - The invoice must have at least one line - [INVOICE_NO_NUMBER](https://docs.beel.es/llms.mdx/errors/INVOICE_NO_NUMBER) - The invoice does not have an assigned number - [INVOICE_VERIFACTU_DISABLED](https://docs.beel.es/llms.mdx/errors/INVOICE_VERIFACTU_DISABLED) - VeriFactu is not enabled for this invoice - [IRPF_REQUIRED_WHEN_NOT_EXEMPT](https://docs.beel.es/llms.mdx/errors/IRPF_REQUIRED_WHEN_NOT_EXEMPT) - The income tax withholding percentage is required when not exempt - [ISP_INCOMPATIBLE_WITH_SURCHARGE](https://docs.beel.es/llms.mdx/errors/ISP_INCOMPATIBLE_WITH_SURCHARGE) - Reverse-charge (ISP) lines cannot carry equivalence surcharge: the buyer auto-liquidates VAT in their country and Spanish retail surcharge does not apply - [ISSUE_DATE_IN_FUTURE](https://docs.beel.es/llms.mdx/errors/ISSUE_DATE_IN_FUTURE) - Issue date cannot be in the future. To issue an invoice on a future date, use POST /v1/invoices/{id}/schedule - [ISSUE_DATE_REQUIRED](https://docs.beel.es/llms.mdx/errors/ISSUE_DATE_REQUIRED) - Issue date is required - [LINE_EXEMPTION_TEXT_REQUIRED](https://docs.beel.es/llms.mdx/errors/LINE_EXEMPTION_TEXT_REQUIRED) - A descriptive text is required when the exemption reason is OTHER - [LINE_EXEMPTION_WITH_TAX](https://docs.beel.es/llms.mdx/errors/LINE_EXEMPTION_WITH_TAX) - Line has an exemption reason but the tax rate is not 0%. Current value: {0}% - [LINE_INVALID_DISCOUNT](https://docs.beel.es/llms.mdx/errors/LINE_INVALID_DISCOUNT) - The discount must be between 0 and 100. Received value: {0} - [LINE_INVALID_QUANTITY](https://docs.beel.es/llms.mdx/errors/LINE_INVALID_QUANTITY) - The quantity cannot be zero or null - [LINE_NEGATIVE_PRICE](https://docs.beel.es/llms.mdx/errors/LINE_NEGATIVE_PRICE) - The unit price cannot be negative - [LINE_TOTAL_INCONSISTENT](https://docs.beel.es/llms.mdx/errors/LINE_TOTAL_INCONSISTENT) - Line totals do not reconcile: expected {0}€ (base + VAT + surcharge - IRPF), declared {1}€. Difference exceeds 0.01€ - [LINE_ZERO_PRICE](https://docs.beel.es/llms.mdx/errors/LINE_ZERO_PRICE) - The unit price cannot be zero - [MAIN_TAX_REQUIRED](https://docs.beel.es/llms.mdx/errors/MAIN_TAX_REQUIRED) - You must configure a main tax (VAT, IGIC or IPSI) - [MARK_SENT_ALREADY_SENT](https://docs.beel.es/llms.mdx/errors/MARK_SENT_ALREADY_SENT) - The invoice is already in SENT status. - [MARK_SENT_FROM_DRAFT_NOT_ALLOWED](https://docs.beel.es/llms.mdx/errors/MARK_SENT_FROM_DRAFT_NOT_ALLOWED) - Cannot mark an invoice in DRAFT status as SENT. Issue it first. - [MARK_SENT_FROM_INVALID_STATE](https://docs.beel.es/llms.mdx/errors/MARK_SENT_FROM_INVALID_STATE) - Cannot mark as SENT from status {0}. - [MARK_SENT_FROM_LATER_STATE](https://docs.beel.es/llms.mdx/errors/MARK_SENT_FROM_LATER_STATE) - Cannot mark an invoice in {0} status as SENT. The invoice is already in a later state. - [MAX_PROFILES_REACHED](https://docs.beel.es/llms.mdx/errors/MAX_PROFILES_REACHED) - You have reached the maximum number of business profiles ({0}). Upgrade your plan for more - [METADATA_FILTER_TOO_MANY_KEYS](https://docs.beel.es/llms.mdx/errors/METADATA_FILTER_TOO_MANY_KEYS) - The metadata filter supports at most {0} key/value pairs per request - [MISSING_HEADERS](https://docs.beel.es/llms.mdx/errors/MISSING_HEADERS) - Required header not found: ''{0}''. Headers found: {1} - [MISSING_REQUIRED_FIELD](https://docs.beel.es/llms.mdx/errors/MISSING_REQUIRED_FIELD) - The field ''{0}'' is required - [NEGATIVE_TOTAL_REQUIRES_RECTIFICATIVE](https://docs.beel.es/llms.mdx/errors/NEGATIVE_TOTAL_REQUIRES_RECTIFICATIVE) - The invoice total cannot be negative. Use corrective invoices (R1-R5) for refunds. - [NIF_ALREADY_REGISTERED](https://docs.beel.es/llms.mdx/errors/NIF_ALREADY_REGISTERED) - The NIF is already registered - [NIF_INVALID_CONTROL_DIGIT](https://docs.beel.es/llms.mdx/errors/NIF_INVALID_CONTROL_DIGIT) - The control digit of NIF ''{0}'' is incorrect - [NIF_INVALID_FORMAT](https://docs.beel.es/llms.mdx/errors/NIF_INVALID_FORMAT) - The NIF ''{0}'' has an invalid format - [NIF_MISMATCH](https://docs.beel.es/llms.mdx/errors/NIF_MISMATCH) - The provided NIF does not match the user's NIF - [NIF_NOT_IN_CENSUS](https://docs.beel.es/llms.mdx/errors/NIF_NOT_IN_CENSUS) - The NIF ''{0}'' does not exist in the AEAT census or the fiscal name does not match - [NIF_NOT_REGISTERED](https://docs.beel.es/llms.mdx/errors/NIF_NOT_REGISTERED) - The NIF is not registered in VeriFactu - [NIF_REACTIVATION_FAILED](https://docs.beel.es/llms.mdx/errors/NIF_REACTIVATION_FAILED) - Error reactivating the NIF in VeriFactu - [NIF_REGISTRATION_FAILED](https://docs.beel.es/llms.mdx/errors/NIF_REGISTRATION_FAILED) - Error registering the NIF in VeriFactu - [NIF_VALIDATION_ERROR](https://docs.beel.es/llms.mdx/errors/NIF_VALIDATION_ERROR) - Technical error validating the NIF against the AEAT census - [NIF_VALIDATION_INVALID](https://docs.beel.es/llms.mdx/errors/NIF_VALIDATION_INVALID) - The NIF does not exist in the AEAT census - [NIF_VALIDATION_PENDING](https://docs.beel.es/llms.mdx/errors/NIF_VALIDATION_PENDING) - The NIF is pending validation against the AEAT census - [NO_INVOICES_PROVIDED](https://docs.beel.es/llms.mdx/errors/NO_INVOICES_PROVIDED) - No invoices provided - [NO_PDFS_AVAILABLE](https://docs.beel.es/llms.mdx/errors/NO_PDFS_AVAILABLE) - No PDFs available for download - [NO_UNSIGNED_DOCUMENT](https://docs.beel.es/llms.mdx/errors/NO_UNSIGNED_DOCUMENT) - No unsigned representation document exists. Generate one before uploading the signed PDF - [NUMBER_EMPTY](https://docs.beel.es/llms.mdx/errors/NUMBER_EMPTY) - Number cannot be empty - [NUMBER_MAX_LENGTH](https://docs.beel.es/llms.mdx/errors/NUMBER_MAX_LENGTH) - Number cannot exceed {0} characters - [ONLY_DRAFT_EMITTABLE](https://docs.beel.es/llms.mdx/errors/ONLY_DRAFT_EMITTABLE) - Only draft invoices can be issued. Current status: {0} - [OPERATION_DATE_AFTER_ISSUE_DATE](https://docs.beel.es/llms.mdx/errors/OPERATION_DATE_AFTER_ISSUE_DATE) - Operation date cannot be after the issue date - [OSS_REGIME_INCOMPATIBLE_WITH_ISP](https://docs.beel.es/llms.mdx/errors/OSS_REGIME_INCOMPATIBLE_WITH_ISP) - OSS/IOSS regime (key 17) is incompatible with reverse charge. The destination-country VAT is declared separately (Modelo 369), not as S2 - [PARSING_ERROR](https://docs.beel.es/llms.mdx/errors/PARSING_ERROR) - Error processing the file: {0} - [PAYMENT_DATE_REQUIRED](https://docs.beel.es/llms.mdx/errors/PAYMENT_DATE_REQUIRED) - Payment date is required to mark the invoice as paid - [PDF_EMPTY](https://docs.beel.es/llms.mdx/errors/PDF_EMPTY) - The PDF file is empty - [PDF_HASH_ERROR](https://docs.beel.es/llms.mdx/errors/PDF_HASH_ERROR) - Error calculating PDF hash - [PDF_INVALID_EXTENSION](https://docs.beel.es/llms.mdx/errors/PDF_INVALID_EXTENSION) - The file must be a PDF (.pdf) - [PDF_INVALID_FORMAT](https://docs.beel.es/llms.mdx/errors/PDF_INVALID_FORMAT) - The file does not have a valid PDF format - [PDF_NOT_GENERATED](https://docs.beel.es/llms.mdx/errors/PDF_NOT_GENERATED) - The invoice PDF has not been generated yet - [PDF_SIGNATURE_INVALID](https://docs.beel.es/llms.mdx/errors/PDF_SIGNATURE_INVALID) - The signed PDF is not valid: {0} - [PDF_STORAGE_FAILED](https://docs.beel.es/llms.mdx/errors/PDF_STORAGE_FAILED) - Error saving the signed PDF. Please try again - [PDF_TOO_LARGE](https://docs.beel.es/llms.mdx/errors/PDF_TOO_LARGE) - The PDF file exceeds the maximum allowed size: {0} (maximum: {1} MB) - [PDF_URL_EMPTY](https://docs.beel.es/llms.mdx/errors/PDF_URL_EMPTY) - The PDF URL is empty - [PDF_VALIDATION_FAILED](https://docs.beel.es/llms.mdx/errors/PDF_VALIDATION_FAILED) - Error validating the signed PDF. Please try again later - [PERFIL_NO_ENCONTRADO](https://docs.beel.es/llms.mdx/errors/PERFIL_NO_ENCONTRADO) - User profile not found - [PLAZO_DIAS_OUT_OF_RANGE](https://docs.beel.es/llms.mdx/errors/PLAZO_DIAS_OUT_OF_RANGE) - Payment term must be between {0} and {1} days - [POSTAL_CODE_EMPTY](https://docs.beel.es/llms.mdx/errors/POSTAL_CODE_EMPTY) - Postal code cannot be empty - [POSTAL_CODE_INVALID_ES](https://docs.beel.es/llms.mdx/errors/POSTAL_CODE_INVALID_ES) - Invalid Spanish postal code: ''{0}''. Must be 5 digits - [PREVIEW_DRAFT_ONLY](https://docs.beel.es/llms.mdx/errors/PREVIEW_DRAFT_ONLY) - PDF preview is only available for draft invoices - [PREVIEW_GENERATION_ERROR](https://docs.beel.es/llms.mdx/errors/PREVIEW_GENERATION_ERROR) - Error generating PDF preview - [PRODUCT_DUPLICATE](https://docs.beel.es/llms.mdx/errors/PRODUCT_DUPLICATE) - A product with code ''{0}'' already exists - [PRODUCT_INACTIVE](https://docs.beel.es/llms.mdx/errors/PRODUCT_INACTIVE) - The product ''{0}'' is inactive and cannot be used - [PRODUCT_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/PRODUCT_NOT_FOUND) - Product not found: {0} - [PROFILE_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/PROFILE_NOT_FOUND) - Business profile not found - [PROFILE_NOT_OWNED](https://docs.beel.es/llms.mdx/errors/PROFILE_NOT_OWNED) - The business profile does not belong to your account - [PROVINCE_EMPTY](https://docs.beel.es/llms.mdx/errors/PROVINCE_EMPTY) - Province cannot be empty - [PROVINCE_MAX_LENGTH](https://docs.beel.es/llms.mdx/errors/PROVINCE_MAX_LENGTH) - Province cannot exceed {0} characters - [RECARGO_EQUIVALENCIA_REQUIRED](https://docs.beel.es/llms.mdx/errors/RECARGO_EQUIVALENCIA_REQUIRED) - The equivalence surcharge is required for this type of operation - [RECIPIENT_ADDRESS_REQUIRED](https://docs.beel.es/llms.mdx/errors/RECIPIENT_ADDRESS_REQUIRED) - Recipient address is required for standard invoices - [RECIPIENT_FISCAL_NAME_REQUIRED](https://docs.beel.es/llms.mdx/errors/RECIPIENT_FISCAL_NAME_REQUIRED) - Recipient legal name is required for standard invoices - [RECIPIENT_ID_REQUIRED](https://docs.beel.es/llms.mdx/errors/RECIPIENT_ID_REQUIRED) - Recipient must have a NIF or alternative identifier - [RECIPIENT_NIF_AND_ID_OTHER_EXCLUSIVE](https://docs.beel.es/llms.mdx/errors/RECIPIENT_NIF_AND_ID_OTHER_EXCLUSIVE) - The recipient cannot carry both a Spanish NIF and an alternative identifier. Use only one - [RECIPIENT_REQUIRED_FOR_ORDINARY](https://docs.beel.es/llms.mdx/errors/RECIPIENT_REQUIRED_FOR_ORDINARY) - Ordinary invoices require a valid recipient - [RECTIFICATION_REASON_TOO_SHORT](https://docs.beel.es/llms.mdx/errors/RECTIFICATION_REASON_TOO_SHORT) - The rectification reason must be at least {0} characters - [RECTIFICATIVA_NO_CODE](https://docs.beel.es/llms.mdx/errors/RECTIFICATIVA_NO_CODE) - The credit note must have a correction code - [RECTIFICATIVA_NO_ORIGINAL](https://docs.beel.es/llms.mdx/errors/RECTIFICATIVA_NO_ORIGINAL) - The credit note must reference an original invoice - [RECTIFICATIVA_PARCIAL_SIN_LINEAS](https://docs.beel.es/llms.mdx/errors/RECTIFICATIVA_PARCIAL_SIN_LINEAS) - Partial rectificative invoices must include correction lines. Use negative quantities/amounts to subtract, positive to add. - [RECTIFICATIVA_R1R4_NOT_SIMPLIFICADA](https://docs.beel.es/llms.mdx/errors/RECTIFICATIVA_R1R4_NOT_SIMPLIFICADA) - The R1-R4 correction methods do not apply to simplified invoices - [RECTIFICATIVA_R5_ONLY_SIMPLIFICADA](https://docs.beel.es/llms.mdx/errors/RECTIFICATIVA_R5_ONLY_SIMPLIFICADA) - The R5 correction method only applies to simplified invoices - [RECTIFICATIVA_TOTAL_CON_LINEAS](https://docs.beel.es/llms.mdx/errors/RECTIFICATIVA_TOTAL_CON_LINEAS) - Total rectificative invoices must not include lines. Lines are automatically copied from the original invoice with negative amounts. - [RECURRING_END_DATE_BEFORE_START](https://docs.beel.es/llms.mdx/errors/RECURRING_END_DATE_BEFORE_START) - The end date must be after the first scheduled generation ({0}) - [RECURRING_INVALID_DAY_OF_MONTH](https://docs.beel.es/llms.mdx/errors/RECURRING_INVALID_DAY_OF_MONTH) - The day of the month must be between 1 and 31 - [RECURRING_INVOICE_DELETED](https://docs.beel.es/llms.mdx/errors/RECURRING_INVOICE_DELETED) - Cannot create recurrence from a deleted invoice - [RECURRING_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/RECURRING_NOT_FOUND) - Recurring invoice not found - [RECURRING_NO_LINES](https://docs.beel.es/llms.mdx/errors/RECURRING_NO_LINES) - At least one line must be included - [RECURRING_START_DATE_NOT_EDITABLE](https://docs.beel.es/llms.mdx/errors/RECURRING_START_DATE_NOT_EDITABLE) - Cannot modify the start date because invoices have already been generated - [RECURRING_TYPE_NOT_SUPPORTED](https://docs.beel.es/llms.mdx/errors/RECURRING_TYPE_NOT_SUPPORTED) - Cannot create a recurrence from a rectificative invoice - [REGIME_REQUIRES_INCOMPATIBLE_EXEMPTION](https://docs.beel.es/llms.mdx/errors/REGIME_REQUIRES_INCOMPATIBLE_EXEMPTION) - Regime {0} requires exemption reason {1}; the line does not carry it - [REGIME_REQUIRES_SURCHARGE](https://docs.beel.es/llms.mdx/errors/REGIME_REQUIRES_SURCHARGE) - Regime {0} requires recargo de equivalencia and the line does not carry it - [REGISTRO_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/REGISTRO_NOT_FOUND) - VeriFactu registration record not found - [REVERT_ONLY_FROM_SENT](https://docs.beel.es/llms.mdx/errors/REVERT_ONLY_FROM_SENT) - Can only revert from SENT status. Current status: {0} - [SCHEDULED_DATE_IN_PAST](https://docs.beel.es/llms.mdx/errors/SCHEDULED_DATE_IN_PAST) - The scheduling date cannot be in the past - [SCHEDULED_DATE_REQUIRED](https://docs.beel.es/llms.mdx/errors/SCHEDULED_DATE_REQUIRED) - The scheduling date is required - [SCOPE_ESCALATION](https://docs.beel.es/llms.mdx/errors/SCOPE_ESCALATION) - Child API key cannot have more scopes than the parent key - [SERIES_CODE_DUPLICATED](https://docs.beel.es/llms.mdx/errors/SERIES_CODE_DUPLICATED) - A series with code ''{0}'' already exists in environment {1}. Choose a different code or delete the existing series before creating a new one. - [SERIES_CODIGO_LOCKED_HAS_INVOICES](https://docs.beel.es/llms.mdx/errors/SERIES_CODIGO_LOCKED_HAS_INVOICES) - Cannot modify the series code because it has associated invoices. This would affect numbering integrity. - [SERIES_DEFAULT_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/SERIES_DEFAULT_NOT_FOUND) - You have no default invoice series. Create a series in settings before issuing invoices. - [SERIES_DOCUMENT_TYPE_INCOMPATIBLE](https://docs.beel.es/llms.mdx/errors/SERIES_DOCUMENT_TYPE_INCOMPATIBLE) - Series ''{0}'' (type {1}) is not compatible with invoices of type {2} - [SERIES_FORMATO_LOCKED_HAS_INVOICES](https://docs.beel.es/llms.mdx/errors/SERIES_FORMATO_LOCKED_HAS_INVOICES) - Cannot modify the series format because it has associated invoices. This would affect numbering integrity. - [SERIES_FORMAT_EMPTY](https://docs.beel.es/llms.mdx/errors/SERIES_FORMAT_EMPTY) - The format cannot be empty - [SERIES_FORMAT_INVALID_PADDING](https://docs.beel.es/llms.mdx/errors/SERIES_FORMAT_INVALID_PADDING) - Invalid padding for {NUM}: {0} - [SERIES_FORMAT_LOWERCASE_VARS](https://docs.beel.es/llms.mdx/errors/SERIES_FORMAT_LOWERCASE_VARS) - Lowercase variables detected: {0}. Variables must be UPPERCASE (e.g., {CODIGO}, {YYYY}, {MM}, {NUM}) - [SERIES_FORMAT_NUM_REQUIRED](https://docs.beel.es/llms.mdx/errors/SERIES_FORMAT_NUM_REQUIRED) - Variable {NUM} is required in the format. Sequential numbering is required by law - [SERIES_FORMAT_UNRECOGNIZED_VARS](https://docs.beel.es/llms.mdx/errors/SERIES_FORMAT_UNRECOGNIZED_VARS) - Unrecognized variables: {0}. Valid variables: {CODIGO}, {YYYY}, {YY}, {MM}, {NUM}, {NUM:X} - [SERIES_INACTIVE](https://docs.beel.es/llms.mdx/errors/SERIES_INACTIVE) - The invoice series ''{0}'' is inactive - [SERIES_INCOMPATIBLE_DOC_TYPE](https://docs.beel.es/llms.mdx/errors/SERIES_INCOMPATIBLE_DOC_TYPE) - The selected series is not compatible with this document type. Please select a series of the correct type. - [SERIES_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/SERIES_NOT_FOUND) - Invoice series ''{0}'' not found - [SERIES_NUMERO_INICIAL_LOCKED_HAS_INVOICES](https://docs.beel.es/llms.mdx/errors/SERIES_NUMERO_INICIAL_LOCKED_HAS_INVOICES) - Cannot modify the initial number because the series has associated invoices. This would affect numbering integrity. - [SERIES_RESETEO_LOCKED_HAS_INVOICES](https://docs.beel.es/llms.mdx/errors/SERIES_RESETEO_LOCKED_HAS_INVOICES) - Cannot modify the counter reset policy because the series has associated invoices. This would affect numbering integrity. - [SIMPLIFICADA_FORBIDS_CROSS_BORDER](https://docs.beel.es/llms.mdx/errors/SIMPLIFICADA_FORBIDS_CROSS_BORDER) - Simplified invoices cannot cover intra-EU or OSS operations: identify the recipient and issue an ordinary invoice - [SIMPLIFICADA_FORBIDS_IRPF](https://docs.beel.es/llms.mdx/errors/SIMPLIFICADA_FORBIDS_IRPF) - Simplified invoices cannot carry IRPF withholding (AEAT: retention must not be reported) - [SIMPLIFICADA_FORBIDS_ISP](https://docs.beel.es/llms.mdx/errors/SIMPLIFICADA_FORBIDS_ISP) - Simplified invoices cannot carry reverse-charge: the anonymous recipient cannot auto-liquidate - [STATUS_NOT_DELETABLE](https://docs.beel.es/llms.mdx/errors/STATUS_NOT_DELETABLE) - Cannot delete an invoice in status {0} - [STATUS_NOT_IMPLEMENTED](https://docs.beel.es/llms.mdx/errors/STATUS_NOT_IMPLEMENTED) - Status ''{0}'' is not implemented - [STATUS_NOT_MODIFIABLE](https://docs.beel.es/llms.mdx/errors/STATUS_NOT_MODIFIABLE) - The invoice status cannot be modified - [STORAGE_URL_EMPTY](https://docs.beel.es/llms.mdx/errors/STORAGE_URL_EMPTY) - Storage URL cannot be empty - [STREET_EMPTY](https://docs.beel.es/llms.mdx/errors/STREET_EMPTY) - Street cannot be empty - [STREET_MAX_LENGTH](https://docs.beel.es/llms.mdx/errors/STREET_MAX_LENGTH) - Street cannot exceed {0} characters - [SUBSCRIPTION_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/SUBSCRIPTION_NOT_FOUND) - Webhook subscription not found - [SURCHARGE_REQUIRES_REGIME](https://docs.beel.es/llms.mdx/errors/SURCHARGE_REQUIRES_REGIME) - Recargo de equivalencia is only compatible with regime 18; the line is on regime {0} - [SWIFT_INVALID](https://docs.beel.es/llms.mdx/errors/SWIFT_INVALID) - Invalid SWIFT code: ''{0}''. Must be 8 or 11 characters (e.g.: ABCDESMMXXX) - [TEMPLATE_MISSING_REQUIRED_VARIABLE](https://docs.beel.es/llms.mdx/errors/TEMPLATE_MISSING_REQUIRED_VARIABLE) - Template requires variable: {0} - [TEMPLATE_UNKNOWN_VARIABLE](https://docs.beel.es/llms.mdx/errors/TEMPLATE_UNKNOWN_VARIABLE) - Template contains unknown variable: {0} - [TOO_MANY_RECORDS](https://docs.beel.es/llms.mdx/errors/TOO_MANY_RECORDS) - Too many records: {0} (maximum: {1}) - [TOO_MANY_REQUESTS](https://docs.beel.es/llms.mdx/errors/TOO_MANY_REQUESTS) - You have exceeded the request limit. Please try again in {0} seconds - [TRANSITION_NOT_SUPPORTED](https://docs.beel.es/llms.mdx/errors/TRANSITION_NOT_SUPPORTED) - Transition to status {0} is not supported - [TYPE_CHANGE_CORRECTIVE_FORBIDDEN](https://docs.beel.es/llms.mdx/errors/TYPE_CHANGE_CORRECTIVE_FORBIDDEN) - Cannot change type to/from CORRECTIVE - [TYPE_REQUIRED](https://docs.beel.es/llms.mdx/errors/TYPE_REQUIRED) - Invoice type is required - [UNAUTHORIZED](https://docs.beel.es/llms.mdx/errors/UNAUTHORIZED) - Authentication is required to access this resource - [USER_NOT_FOUND](https://docs.beel.es/llms.mdx/errors/USER_NOT_FOUND) - User not found - [UUID_BLANK](https://docs.beel.es/llms.mdx/errors/UUID_BLANK) - The VeriFactu UUID cannot be null or empty - [UUID_INVALID_FORMAT](https://docs.beel.es/llms.mdx/errors/UUID_INVALID_FORMAT) - The VeriFactu UUID format is invalid: {0} - [UUID_NULL](https://docs.beel.es/llms.mdx/errors/UUID_NULL) - The VeriFactu UUID cannot be null - [ZIP_GENERATION_ERROR](https://docs.beel.es/llms.mdx/errors/ZIP_GENERATION_ERROR) - Error generating ZIP file ## Full Documentation For the complete documentation in a single file, see: https://docs.beel.es/llms-full.txt