Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

BeeL

REMOTE · MCP.BEEL.ES · 2 COMPONENTS

Spanish e-invoicing with VeriFactu (AEAT): issue invoices, manage customers, validate NIFs.

0 this week 38 Trust /100

Last scanned (10 hours ago)

Scores higher than 28% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Finance and Payments

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security94
Transport & Reachability0
Schema Quality & AI Usability0
  • Schema blocked by authentication: the endpoint requires auth we don't have to read it. See how to fix → Unverified
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
  • Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Tool Safety0
  • Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Capabilities0
  • Capabilities blocked by authentication: the endpoint requires auth we don't have to read them. See how to fix → Unverified

Unverified: 6 categories

Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm. Claim this server and supply a read-only token to verify it and lift the score.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 27 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 18 Sept 26 0
    • Endpoint reachability: reachable → behind authorisation ▼ security
    • Stability: 0.60 → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Transport: pass → unverified ▼ security
    • Authorization: The endpoint enforces authorisation, advertised via RFC 9728 protected-resource metadata. security
    • Capabilities: pass → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
  • 31 Aug 26 0
    • Stability: unverified → 0.03 ▲ functional
  • 30 Aug 26 0
    • Transport: unverified → pass ▲ security
    • Injection markers: unverified → pass ▲ security
    • First check of Judged manipulation: pass security
    • Authorization: Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. security
    • MCP protocol: unverified → pass ▲ functional
    • Schema quality: unverified → 100 ▲ functional
    • Tool coverage: unverified → 100 ▲ functional
    • First check of Tool coverage: 1 functional
    • First check of Schema quality: excellent functional
    • First check of Tool coverage: 84 functional
    • First check of Schema quality: fail functional
    • First check of Capabilities: pass functional
    • First check of Destructive annotations: 100 functional
    • First check of Schema quality: fail functional
  • 27 Aug 26 0
    • HTTPS: unverified → pass ▲ security
    • HSTS header: fail → pass ▲ security
  • 26 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Aug 26 0

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://mcp.beel.es/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=beel.es CN=WE1,O=Google Trust Services,C=US 9 Oct 2026 7 Jan 2027 ECDSA 256 ECDSA-SHA256 1176d595bde98281335c3796c0a4d92
SANs: beel.es, mcp.beel.es, *.mcp.beel.es
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.beel.es. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
es. present 4901, 54404 8, 8 Verified
beel.es. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On connection
HTTP status 401

WWW-Authenticate challenge Bearer realm="OAuth", resource_metadata="https://mcp.beel.es/.well-known/oauth-protected-resource/mcp", scope="accounts:read accounts:write companies:list companies:read companies:write configuration:read configuration:write customers:read customers:write emails:read invoices:read invoices:write logs:read members:read members:write nif:validate payment-connections:read payment-connections:write products:read products:write sandbox series:read series:write webhooks:read webhooks:write"

Bearer realm="OAuth", resource_metadata="https://mcp.beel.es/.well-known/oauth-protected-resource/mcp", scope="accounts:read accounts:write companies:list companies:read companies:write configuration:read configuration:write customers:read customers:write emails:read invoices:read invoices:write logs:read members:read members:write nif:validate payment-connections:read payment-connections:write products:read products:write sandbox series:read series:write webhooks:read webhooks:write"
Header Value
strict-transport-security max-age=15552000
x-content-type-options nosniff
www-authenticate Bearer realm="OAuth", resource_metadata="https://mcp.beel.es/.well-known/oauth-protected-resource/mcp", scope="accounts:read accounts:write companies:list companies:read companies:write configuration:read configuration:write customers:read customers:write emails:read invoices:read invoices:write logs:read members:read members:write nif:validate payment-connections:read payment-connections:write products:read products:write sandbox series:read series:write webhooks:read webhooks:write"

Protected resource metadata

Document https://mcp.beel.es/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://mcp.beel.es/mcp
Authorisation server https://mcp.beel.es

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.beel.es/mcp Auth required 401
http (plaintext) http://mcp.beel.es/mcp HTTPS enforced 301 https://mcp.beel.es/mcp
MCP tools · 121 exposed · ~37,184 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
beel_get_email_delivery_indicators ~278

Returns, for each related entity id given, how many emails the history holds for it, the status of the most recent one and when it was sent. Lets you show the state of an entity's email without loading its full history. - **`last_status`:** carries whatever the latest attempt ended in, `REJECTED` and `QUEUED` included, so a `count` above zero does not mean an email reached anyone. - **Ids with no associated emails:** omitted from the response rather than returned with `count` 0. **Closed catalogue.** This collection is fixed and bounded by the request itself — at most one indicator per id in `related_entity_ids`: it carries no `pagination`, it takes no `page`/`limit`, and every response holds the whole set. Endpoint: GET /v1/accounts/{account_id}/email-indicators

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
related_entity_idsarrayyesComma-separated list of related entity ids (e.g. invoice ids)

No output schema declared.

No examples provided.

beel_get_fiscal_summary ~341

Returns the VAT and IRPF summary of the invoices issued under this company over the requested period, together with the annual IRPF projection and its progressive bracket breakdown. `start_date` and `end_date` go together: send both, or neither. Omitting both defaults to the current month; sending only one answers `400`, because a period you did not ask for is worse than an error. The range may not exceed 365 days, and every fault names itself in `details.reason`. Endpoint: GET /v1/companies/{company_id}/fiscal-summary

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
end_datestring–Period end date (inclusive), as `YYYY-MM-DD`. Goes together with `start_date`: supply both or neither. Omitting both defaults to the current month; supplying only one is rejected with `400` (`PERIOD_…
start_datestring–Period start date (inclusive), as `YYYY-MM-DD`. Goes together with `end_date`: supply both or neither. Omitting both defaults to the current month; supplying only one is rejected with `400` (`PERIOD_…

No output schema declared.

No examples provided.

beel_get_invitation ~167

Returns one invitation of the account, with the same shape the list returns. An invitation stays readable for its whole life: `ACCEPTED`, `REVOKED` and `EXPIRED` ones are returned with their `status`, because the record is the trail of who was granted access to the account's fiscal data and revoking it does not erase it. Endpoint: GET /v1/accounts/{account_id}/invitations/{invitation_id}

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
invitation_idstringyes–

No output schema declared.

No examples provided.

beel_get_invoice ~196

Retrieves the full details of an invoice of this company. Endpoint: GET /v1/companies/{company_id}/invoices/{invoice_id} ⚠️ Fiscal guardrails — read before calling: - When an invoice can still be changed, and what to do once it cannot. (resource: beel://guardrails/invoice-state-machine) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
invoice_id–yesInvoice ID

No output schema declared.

No examples provided.

beel_get_invoice_customization ~192

Returns how the invoices of a company are rendered and delivered: PDF template, accent colour, invoice language, email language and current logo. Customization is a per-NIF property, so each company of the account carries its own. The catalogue of available templates and suggested colours is served by `GET /v1/invoice-customization-options`. Endpoint: GET /v1/companies/{company_id}/invoice-customization

NameTypeReqDescription
company_idstringyesUnique 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-Compan…

No output schema declared.

No examples provided.

beel_get_invoice_pdf ~234

Returns a temporary pre-signed URL to download the invoice PDF. - **URL:** expires in five minutes and only allows `GET`. - **`202`:** the PDF is still being generated and no body is returned; poll this endpoint until it answers `200`. - **Drafts:** a draft has no fiscal PDF and answers `400 INVOICE_NOT_ISSUED_NO_PDF`. Issue it, or render it with `GET …/{invoice_id}/pdf/preview`. Endpoint: GET /v1/companies/{company_id}/invoices/{invoice_id}/pdf

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
invoice_id–yesInvoice ID

No output schema declared.

No examples provided.

beel_get_invoice_preview ~190

Returns a temporary pre-signed URL to a preview image (WebP) of the invoice, suitable for inline rendering. The image is generated and cached on first request, so a later call returns the cached image. The URL expires in five minutes and only allows `GET`. Endpoint: GET /v1/companies/{company_id}/invoices/{invoice_id}/preview

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
invoice_id–yesInvoice ID

No output schema declared.

No examples provided.

beel_get_invoice_schedule ~275

Returns the date and generation mode currently scheduled for this invoice. An invoice with no scheduling answers `404`, since the sub-resource does not exist yet. To move only the date, read the current `generation_mode` here and send it back on the `PUT`. Endpoint: GET /v1/companies/{company_id}/invoices/{invoice_id}/schedule ⚠️ Fiscal guardrails — read before calling: - When an invoice can still be changed, and what to do once it cannot. (resource: beel://guardrails/invoice-state-machine) - Choosing wrong here misreports to AEAT. The 30-second decision. (resource: beel://guardrails/cancel-vs-rectify) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
invoice_id–yesInvoice ID

No output schema declared.

No examples provided.

beel_get_issuing_readiness ~412

Returns whether a company can issue its STANDARD invoice right now in the environment of the request, and the `blockers` that stop it otherwise. Readiness is a per-NIF property, evaluated independently for each company of the account. - **`ready`:** `true` only when `blockers` is empty. - **Activation:** issuing any fiscal document requires the company to be activated in the environment of that document, whether or not it goes to VeriFactu. - **VeriFactu chain:** the AEAT census and signed representation are additionally demanded only when the company applies VeriFactu by default, the same derivation invoice creation uses when `verifactu_enabled` is omitted. A company with VeriFactu off is ready with a NIF, a default series and an activation. Issuing an invoice with an explicit `verifactu_enabled: true` still enforces the full chain at emission time regardless of this answer, and the separate `verifactu` block reports that chain independently of the setting. - **Not evaluated:** the account's quota or subscription, and the payload of any particular invoice. Endpoint: GET /v1/companies/{company_id}/issuing-readiness ⚠️ Fiscal guardrails — read before calling: - Which company an operation acts on, and how that is selected. (resource: beel://guardrails/multi-nif) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique identifier (UUID) of the company whose issuing readiness is evaluated — its identifier, not its NIF. It is the only source of context: the account that owns it is derived from it, and the `Bee…

No output schema declared.

No examples provided.

beel_get_member ~108

Returns one member of the account, with the same shape the list returns. Endpoint: GET /v1/accounts/{account_id}/members/{member_id}

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
member_idstringyesMembership unique UUID.

No output schema declared.

No examples provided.

beel_get_my_identity ~244

Returns the identity of the authenticated principal: the account the credential belongs to, the person's email, name, logo and interface language, and a description of the credential itself. Unlike every other operation, it requires no scope — any valid credential resolves, so a `200` confirms the credential works and tells you which account it belongs to, and a `401` that it does not. - **`account_id`:** identifies who the credential belongs to, not what it is currently pointed at; selecting a different company with `BeeL-Active-Company` does not change it. - **`name`:** resolves as `trade_name ?? legal_name` of the active fiscal profile, and is `null` until onboarding creates one. - **`credential`:** describes the credential the call was authenticated with — its type, the environment it operates on and the permissions it holds — so a client can adapt what it offers instead of discovering the limits through a `403`. - **Caching:** responses are never cached (`Cache-Control: no-store`). Endpoint: GET /v1/me/identity

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

beel_get_payment_event ~272

Retrieves a single payment event of the NIF's connection, including the outcome of its automatic invoicing and, when it failed, the stable failure code you can act on. - **Not found:** an event that does not belong to this NIF's connection returns `404`, the same answer an event that does not exist gets, so an event of another NIF is never disclosed. Endpoint: GET /v1/companies/{company_id}/payment-connections/{provider}/events/{event_id}

NameTypeReqDescription
company_idstringyesUnique identifier (UUID) of the company the events belong to — 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…
event_idstringyesIdentifier of the payment event, as returned by the list operation.
providerstringyesPayment provider slug in **lowercase**. Currently only `stripe` (Stripe Connect) is operative; `woocommerce` and `shopify` are reserved for future providers.

No output schema declared.

No examples provided.

beel_get_product ~142

Retrieves the details of a product of this company. Endpoint: GET /v1/companies/{company_id}/products/{product_id}

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
product_idstringyesProduct unique UUID

No output schema declared.

No examples provided.

beel_get_recurring_invoice ~246

Retrieves the full details of a recurring invoice template of this company, including its schedule, template lines and next generation date. Endpoint: GET /v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id} ⚠️ Fiscal guardrails — read before calling: - How BeeL derives the AEAT invoice type, and the rules each type imposes. (resource: beel://guardrails/invoice-types) - What regime_key means, where it lives, and which combinations are rejected. (resource: beel://guardrails/regime-keys) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
recurring_invoice_idstringyes–

No output schema declared.

No examples provided.

beel_get_recurring_invoice_history ~412

Returns the invoices previously generated from this recurring template, including their status and generation dates, newest first. **Paginated** with the usual `page`/`limit`, and the usual defaults: without them you get the 20 most recent generations, not the whole history — which grows with every cycle the template runs. Read `data.pagination` to walk the rest. The deprecated flat alias `GET /v1/recurring-invoices/{recurring_invoice_id}/history` does **not** paginate: it is frozen as it shipped until its `Sunset` date, and returns the whole history with no `pagination`. Only this route pages. Endpoint: GET /v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id}/history ⚠️ Fiscal guardrails — read before calling: - How BeeL derives the AEAT invoice type, and the rules each type imposes. (resource: beel://guardrails/invoice-types) - What regime_key means, where it lives, and which combinations are rejected. (resource: beel://guardrails/regime-keys) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
recurring_invoice_idstringyes–

No output schema declared.

No examples provided.

beel_get_recurring_next_occurrence ~267

Returns the invoice that would be produced by the next generation of this recurring template, computed from the current issuer, recipient and series data. Nothing is persisted and no numbering is consumed. Endpoint: GET /v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id}/next-occurrence ⚠️ Fiscal guardrails — read before calling: - How BeeL derives the AEAT invoice type, and the rules each type imposes. (resource: beel://guardrails/invoice-types) - What regime_key means, where it lives, and which combinations are rejected. (resource: beel://guardrails/regime-keys) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
recurring_invoice_idstringyes–

No output schema declared.

No examples provided.

beel_get_representation ~219

Returns the state of the AEAT fiscal representation of a company: whether the document has been generated, signed and submitted, and whether AEAT accepted it or it was cancelled. - **`status`:** `NOT_STARTED`, `PDF_GENERATED`, `SUBMITTED`, `ACTIVE`, `ERROR` or `CANCELLED`. - **Never started:** not an error. The endpoint answers `200` with `NOT_STARTED`, so polling it is always safe. Endpoint: GET /v1/companies/{company_id}/representation

NameTypeReqDescription
company_idstringyesUnique 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-Compan…

No output schema declared.

No examples provided.

beel_get_request_log ~299

Returns the full detail (bodies and headers) of a request made by you, with any of your API keys in this environment — including one made with a key other than the one you are authenticating with, because the axis is the person, not the individual credential. - **`{account_id}`:** authorizes the call; it does not widen what you can see. - **`404`:** the request does not exist, was made by another user (including another user of this same account), or belongs to the other environment. - **The widest read `logs:read` opens:** it returns the bodies and headers that any key of yours exchanged in this environment, so a key holding only `logs:read` reads the traffic of your privileged keys too. It never crosses to another user or to another account. Grant it accordingly. Endpoint: GET /v1/accounts/{account_id}/request-logs/{request_id}

NameTypeReqDescription
account_idstringyesAccount the call is authorized against. It does not widen the result set.
request_idstringyesCorrelation identifier (X-Request-Id).
timestampstring–Log timestamp (the one returned by the list). Narrows the search window around that instant so the detail also works for logs older than the default window. If omitted, the default recent window is s…

No output schema declared.

No examples provided.

beel_get_series ~212

Returns one invoice series of a company, with its code, format, counter state, document type and whether it is the default of that type. Endpoint: GET /v1/companies/{company_id}/series/{series_id} ⚠️ Fiscal guardrails — read before calling: - How invoice numbers are formed, and why numbering can never be rewritten. (resource: beel://guardrails/series-and-numbering) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
series_id–yesSeries ID

No output schema declared.

No examples provided.

beel_get_setup_status ~142

Read-only setup status across your account: for each company it reports whether it can issue Live, exactly what is missing (issuing-readiness blockers, default series, VeriFactu, payment connection) and the single recommended next action. Use this to drive onboarding instead of guessing. Aggregates several endpoints; a section that could not be read carries an `error` and never a default, so an unknown is never reported as ready.

NameTypeReqDescription
company_idstring–Optional: restrict the report to a single company, by its company id (a UUID). This is not the NIF; the NIF is reported as a field of each company.
NameTypeReqDescription
accountobjectyesThe authenticated account, or an error note if identity could not be read.
companiesarrayyes–
environmentstringyesWhich BeeL environment this session operates on. `live` means every invoice issued is a real fiscal document.
errorstring–Why the report is incomplete: the company listing failed, a filter matched nothing, or entries were unusable. Present only when something went wrong.
next_actionstringyesSingle recommended next action across the whole account.

No examples provided.

beel_get_tax_configuration ~201

Returns the tax configuration of a company: its default main tax (`IVA`, `IGIC`, `IPSI` or `OTHER`) with the default percentage and regime key, the default exemption reason, its IRPF and equivalence surcharge settings, and the default payment method and payment term. The catalogue of tax types this configuration draws from is not company data and lives outside this resource. Endpoint: GET /v1/companies/{company_id}/tax-configuration

NameTypeReqDescription
company_idstringyesUnique 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-Compan…

No output schema declared.

No examples provided.

beel_get_usage ~145

Returns how many accounts you have provisioned and the billable count that follows from them — the figure behind your offline B2B invoice. - **Billable unit:** the provisioned account, not the real NIF. Every account you provision counts as one, empty and unclaimed ones included. - **`account_id`:** your own account. Usage is a property of the provisioner, not of each provisioned account, so any other id returns `404`. - **Entitlement:** requires `manage_accounts`. Endpoint: GET /v1/accounts/{account_id}/usage

NameTypeReqDescription
account_idstringyesYour own account id.

No output schema declared.

No examples provided.

beel_get_verifactu_configuration ~216

Retrieves the VeriFactu configuration of this company. The configuration belongs to the NIF, so the NIF in the path is what decides which one is returned. Endpoint: GET /v1/companies/{company_id}/verifactu-configuration ⚠️ Fiscal guardrails — read before calling: - Why an issued invoice may never reach AEAT, and how to tell before issuing. (resource: beel://guardrails/verifactu-gates) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…

No output schema declared.

No examples provided.

beel_get_webhook_subscription ~167

Returns a single webhook subscription. The signing secret is never included. Endpoint: GET /v1/accounts/{account_id}/webhooks/{webhook_id}

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential, and not the `BeeL-Active-Company` header — decides which account the operation acts on. An account you do not reach answers `…
webhook_idstringyesSubscription of the account in the path. A subscription of another account answers `404`, the same as one that does not exist: under the account resolved from `{account_id}` it simply is not there.

No output schema declared.

No examples provided.

beel_initiate_payment_connection ~601

Opens an authorization session so the holder of a company your account **manages** can connect a payment provider (`stripe`), and returns the `authorization_url` where they authorize it. - **`return_url`:** once the holder authorizes, BeeL's callback finalizes the connection and redirects back to the `return_url` of your portal, if you supplied one, with the parameters described under `return_url`. - **When the connection appears:** it is created only when the holder authorizes, so it does not appear in `GET /v1/companies/{company_id}/payment-connections` until then. It is sealed under the NIF in the path, so auto-invoicing issues under that NIF. - **The NIF must be activated in the mode of your API key** (`beel_sk_test_*` → Test, `beel_sk_live_*` → Live); otherwise the request answers `400` `COMPANY_NOT_ACTIVATED_IN_ENVIRONMENT` and no `authorization_url` is issued, because without activation there is no invoice series or tax configuration to invoice with. Test and Live activations are independent — a NIF activated in one mode still needs activating in the other. - **One provider account, one NIF:** a provider account (`acct_...`) can be connected to a single NIF across the whole platform. Authorizing the same provider account from a second NIF does not move it: the callback fails with `OAUTH_ACCOUNT_CONNECTED_TO_OTHER_COMPANY`, and the existing connection keeps invoicing under the NIF it was sealed with. To move it, first `DELETE /v1/companies/{company_id}/payment-connections/{provider}` on the NIF that holds it, then open a new authorization on the NIF you want it under. Endpoint: POST /v1/companies/{company_id}/payment-connections/authorizations

NameTypeReqDescription
body–yes–
company_idstringyesUnique identifier (UUID) of the company the authorization is opened for — its identifier, not its NIF. It is the only source of context: the account that owns it is derived from it, and the `BeeL-Act…
idempotency_keystring–Optional idempotency key for this operation. Omit it and one is derived from the request itself, which makes a blind retry safe but also collapses a SECOND, deliberately identical operation into the…

No output schema declared.

No examples provided.

beel_issue_invoice ~620

Finalizes a draft invoice of this company: assigns its definitive number from the configured series and makes it immutable. - **Irreversible:** an issued invoice is corrected with a corrective invoice (`POST …/{invoice_id}/corrective`) or voided (`POST …/{invoice_id}/void`), never edited. - **Asynchronous:** PDF generation and submission to the AEAT happen after the response, so a `200` means the invoice was accepted for submission, not that the AEAT has registered it. Use `wait_for_pdf` to wait for the PDF. Endpoint: POST /v1/companies/{company_id}/invoices/{invoice_id}/issue ⚠️ Fiscal guardrails — read before calling: - When an invoice can still be changed, and what to do once it cannot. (resource: beel://guardrails/invoice-state-machine) - Why an issued invoice may never reach AEAT, and how to tell before issuing. (resource: beel://guardrails/verifactu-gates) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
attach_source_invoicesboolean–Only applies when the invoice has automatic email sending enabled. If `true`, the email sent after issuing also attaches a ZIP (`suplidos_<invoice-number>.zip`) with the PDFs of the source invoices r…
company_idstringyesUnique 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-Compan…
idempotency_keystring–Optional idempotency key for this operation. Omit it and one is derived from the request itself, which makes a blind retry safe but also collapses a SECOND, deliberately identical operation into the…
invoice_id–yesInvoice ID
wait_for_pdfboolean–If `true`, waits for PDF generation and returns the URL in the response. Adds ~1-2s of latency but guarantees the PDF is immediately available.

No output schema declared.

No examples provided.

beel_list_accounts ~263

Returns the accounts you provisioned, newest first. Each carries its lifecycle `status` (`PROVISIONED` → `CLAIMED` → `ACTIVE`), the `access_level` you hold over it and the state of its claim link. - **`status`:** narrows the list to one lifecycle stage. - **`external_ref`:** looks an account up by the reference you assigned when provisioning it; returns the 0..1 matching accounts. **Cursor pagination.** This collection pages by `cursor`/`next_cursor` instead of by `page`, so it carries no `pagination` block. That is a documented variant of pagination, not a different envelope: the collection still travels under a named key inside `data`. Keep asking with the `next_cursor` of the previous response until it comes back `null`. Endpoint: GET /v1/accounts

NameTypeReqDescription
cursorstring–Opaque pagination cursor from a previous response's `next_cursor`.
external_refstring–Your own id for the account; returns the 0..1 matching accounts.
limitinteger–Maximum number of accounts to return per page (1–200). Defaults to 50.
status–––

No output schema declared.

No examples provided.

beel_list_companies ~381

Returns the companies (NIFs) belonging to the account in the path, ordered with the primary company first. An account with no companies yet returns an empty list rather than an error. - **`search`:** filters case-insensitively on NIF, legal name and trade name. - **`include=readiness`:** adds each company's issuing-readiness block. - **`pagination`:** present only when the request is paginated — that is, when any of `page`, `limit` or `search` is sent. It is omitted for the full list. - **Series:** not part of this response. Read them from `GET /v1/companies/{company_id}/series`. Endpoint: GET /v1/accounts/{account_id}/companies ⚠️ Fiscal guardrails — read before calling: - Which company an operation acts on, and how that is selected. (resource: beel://guardrails/multi-nif) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
include––Include derived data. `readiness` adds each company's issuing-readiness status.
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
searchstring–Case-insensitive filter on NIF, legal name or trade name. Blank/omitted returns all.

No output schema declared.

No examples provided.

beel_list_customers ~376

Returns a paginated list of the customers of this company, with optional filters. Only the customers of the company in the path are returned. Endpoint: GET /v1/companies/{company_id}/customers

NameTypeReqDescription
activeboolean–Filter by active/inactive status. Defaults to `true`, so inactive customers must be requested explicitly with `active=false`. Deleted customers are never returned by either value.
citystring–Filter by city
company_idstringyesUnique 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-Compan…
emailstring–Filter by email (partial search)
legal_namestring–Filter by legal name (partial search case-insensitive)
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
nifstring–Filter by NIF (partial search)
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
phonestring–Filter by phone (partial search)
provincestring–Filter by province
searchstring–Global search by name, NIF or email
sort_by––Field to sort by. Results are always tie-broken by a stable internal key, so paging through the collection never repeats or skips a customer.
sort_order––Sort order direction

No output schema declared.

No examples provided.

beel_list_email_deliveries ~417

Returns the emails the system recorded on behalf of the account in the path: invoice deliveries, verification, onboarding. It only reads the history; it does not send or resend anything. - **Every attempt is recorded**, not only the ones that went out: an email stopped by policy is listed with `status` `REJECTED`, and one accepted but not dispatched yet as `QUEUED`, rather than being omitted. - **Order:** by `sent_at` descending, configurable with `sort_by` / `sort_order`. - **Filters:** `type`, `status`, `recipient` and `related_entity_id`. - **`sent_at`:** the moment the message was handed over, so it is absent while an email is still `QUEUED`. - **Scope:** the account is the one named in the path; the environment is not, and comes from the credential. Endpoint: GET /v1/accounts/{account_id}/emails

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
recipientstring–Filter to emails where any recipient contains the term (case-insensitive)
related_entity_idstring–Filter to emails associated with a given related entity (e.g. an invoice id)
sort_by––Field to sort by
sort_order––Sort order direction
status––Filter by delivery status
typestring–Filter by email type (e.g. INVOICE_EMITTED)

No output schema declared.

No examples provided.

beel_list_invitations ~176

Lists the invitations sent to join the account, whatever their `status`. Accepted, revoked and expired invitations stay in the list: the record is the trail of who was granted access to the account's fiscal data. Endpoint: GET /v1/accounts/{account_id}/invitations

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.

No output schema declared.

No examples provided.

beel_list_invoice_customization_options ~186

Returns the PDF templates a NIF can be rendered with. For each one, the `code` to send as `template_type` in `PUT /v1/companies/{company_id}/invoice-customization`, plus a name and a short description translated into the language of the user the credential belongs to. The accepted values are already in the `template_type` enum; what this operation adds are the readable labels, so you do not have to show `MODERN_TABLE` to a person. The catalogue is identical for every account and every NIF, so it is not nested under one. **Closed catalogue.** This collection is fixed and bounded: it carries no `pagination`, it takes no `page`/`limit`, and every response holds the whole set. Endpoint: GET /v1/invoice-customization-options

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

beel_list_invoices ~871

Returns a paginated list of the invoices of this company, filterable by status, type, series, customer, date range and free text. Only the documents of the company in the path are returned. Endpoint: GET /v1/companies/{company_id}/invoices ⚠️ Fiscal guardrails — read before calling: - When an invoice can still be changed, and what to do once it cannot. (resource: beel://guardrails/invoice-state-machine) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
customer_id––Filter by customer UUID
date_fromstring–Issue date from (YYYY-MM-DD)
date_tostring–Issue date to (YYYY-MM-DD)
external_refstring–Filter by exact external reference (client-supplied order/cart/contract id).
fiscal_onlyboolean–When `true`, returns only fiscal documents (STANDARD, CORRECTIVE, SIMPLIFIED), excluding proformas and any other non-fiscal document. Defaults to `false` (the list returns every document type). Ignor…
invoice_numberstring–Search by invoice number (e.g., 2025/0001)
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
metadataobject–Filter by metadata key/value pairs (exact match, AND between keys). Repeat the bracket-style param to filter on multiple keys. Max 50 pairs per request. Keys must match `^[A-Za-z0-9_\-.]{1,64}$`. Exa…
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
recipient_namestring–Filter by recipient's fiscal name (partial, case-insensitive search)
recipient_nifstring–Filter by recipient's NIF (partial search)
rectified_invoice_idstring–Return the corrective invoices that correct this invoice. Accepts the id of an issued invoice; a single invoice can have several partial correctives.
searchstring–Global search across invoice number, recipient name, recipient NIF, and series code (partial, case-insensitive)
series_codestring–Filter by series code (exact match, case-insensitive). Use `search` for partial matching across the invoice number, recipient and series code.
sort_bystring–Field to sort by (e.g., issue_date, invoice_number, invoice_total)
sort_order––Sort direction
statusarray–Filter by invoice status. Accepts a comma-separated list to match any of several statuses, for example `status=DRAFT,ISSUED`. A single value is also valid.
taxable_base_maxnumber–Maximum taxable base
taxable_base_minnumber–Minimum taxable base
total_maxnumber–Maximum invoice total
total_minnumber–Minimum invoice total
type––Filter by invoice type
verifactu_enabledboolean–Filter by whether VeriFactu is enabled for the invoice — the same flag published as `verifactu.enabled`. `false` returns the invoices that never reach AEAT.
verifactu_status––Filter by the VeriFactu submission status of the invoice, using the very same vocabulary that `verifactu.submission_status` publishes on each invoice. `NOT_SUBMITTED` selects issued invoices with Ver…

No output schema declared.

No examples provided.

beel_list_member_grants ~241

Lists the companies (NIFs) granted to a `MEMBER` and the `access_level` of each. Empty for `OWNER` and `ADMIN`, who reach every company of the account implicitly and hold no grants. **Paginated** with the usual `page`/`limit`, and the usual defaults: without them you get the first 20 grants, not all of them. Read `data.pagination` to walk the rest. Endpoint: GET /v1/accounts/{account_id}/members/{member_id}/grants

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
member_idstringyesMembership unique UUID.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.

No output schema declared.

No examples provided.

beel_list_members ~211

Lists the people with access to the account, each with their `account_role` and, for `MEMBER`s, the companies (NIFs) granted to them. **Paginated** with the usual `page`/`limit`, and the usual defaults: without them you get the first 20 members, not all of them. Read `data.pagination` to walk the rest. Endpoint: GET /v1/accounts/{account_id}/members

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.

No output schema declared.

No examples provided.

beel_list_payment_connections ~270

Returns the payment provider connections of a company your account **owns or manages**, with the provider-side account each one points at and its `status`. Use it to check whether a NIF you provisioned has completed its connection. - **A NIF with no connections:** answers `200` with an empty list. - **`environment`:** Test and Live connections are independent, so only the ones living in the mode of the key you ask with are returned; this field states which. **Closed catalogue.** This collection is fixed and bounded — one entry per supported provider at most: it carries no `pagination`, it takes no `page`/`limit`, and every response holds the whole set. Endpoint: GET /v1/companies/{company_id}/payment-connections

NameTypeReqDescription
company_idstringyesUnique 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-Compan…

No output schema declared.

No examples provided.

beel_list_payment_events ~344

Lists the payment events received through the payment provider connection of a NIF (company), most recent first. Use it to audit the charges that produced an invoice and to find the ones that did not. - **Scope:** events belong to the connection, not to the NIF directly. The `{provider}` segment picks the connection of the NIF in the path, and only the events of that connection are returned; an event of another NIF of the same account is never reachable from here. - **No connection:** if the NIF has none for the provider, the request returns `404`. Endpoint: GET /v1/companies/{company_id}/payment-connections/{provider}/events

NameTypeReqDescription
company_idstringyesUnique identifier (UUID) of the company the events belong to — 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…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
providerstringyesPayment provider slug in **lowercase**. Currently only `stripe` (Stripe Connect) is operative; `woocommerce` and `shopify` are reserved for future providers.

No output schema declared.

No examples provided.

beel_list_products ~354

Returns a paginated list of the products/services of this company, with optional filters. - **`q`:** searching is done on this collection, there is no separate search path. `q` matches the name, the code and the description, so it returns at least everything the withdrawn `GET /v1/products/search` returned, in the paginated envelope of this list. Endpoint: GET /v1/companies/{company_id}/products

NameTypeReqDescription
activeboolean–Filter by active/inactive status
category––Filter by product category
codestring–Filter by code (partial search)
company_idstringyesUnique 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-Compan…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
max_pricenumber–Maximum price
min_pricenumber–Minimum price
namestring–Filter by name (partial search case-insensitive)
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
qstring–Search by name, code or description
sort_by––Field to sort by
sort_order––Sort order direction

No output schema declared.

No examples provided.

beel_list_recurring_invoices ~334

Lists the recurring invoice templates of this company, with filters and pagination. Only the templates of the company in the path are returned. Endpoint: GET /v1/companies/{company_id}/recurring-invoices ⚠️ Fiscal guardrails — read before calling: - How BeeL derives the AEAT invoice type, and the rules each type imposes. (resource: beel://guardrails/invoice-types) - What regime_key means, where it lives, and which combinations are rejected. (resource: beel://guardrails/regime-keys) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
company_idstringyesUnique 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-Compan…
customer_idstring––
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
sort_by––Field to sort by. Defaults to `created_at` when omitted.
sort_order––Sort direction. Defaults to `desc` when omitted.
status–––

No output schema declared.

No examples provided.

beel_list_request_logs ~506

Returns the history of public API requests made by you, with any of your API keys in this environment — not only the key you are authenticating with. Only `auth_type=API_KEY` traffic is recorded. - **The axis is the person, not the individual credential:** a second key of yours sees the same history, and narrowing it to one key is a filter (`api_key_id`), not the default. - **It is still not the account's traffic:** requests made by other users of the same account, or by their API keys, are never returned. The `{account_id}` in the path authorizes the call; it does not widen what you can see. - **Environment is not a filter:** results are always scoped to the environment of the credential you authenticate with — a `beel_sk_test_*` key sees the test traffic of all your test keys, a `beel_sk_live_*` key the live traffic of all your live ones. To see the other environment, use a key from that environment. - **Cursor pagination:** navigate with the opaque `cursor` returned in `next_cursor` / `prev_cursor`; there is no jump to an arbitrary page N. - **Time window:** defaults to the last 30 days; narrow or move it with `from`/`to`. Endpoint: GET /v1/accounts/{account_id}/request-logs

NameTypeReqDescription
account_idstringyesAccount the call is authorized against. It does not widen the result set.
api_key_idstring–Narrow the result to one of your API keys. Any key of yours in this environment is accepted, not just the one you authenticate with; a key belonging to someone else simply yields no results.
cursorstring–Opaque cursor returned by a previous response (next_cursor / prev_cursor).
fromstring–Lower bound of the time range (inclusive). Defaults to 30 days ago.
http_statusinteger–Filter by an exact HTTP status code.
limitinteger––
methodstring–Filter by HTTP method.
only_errorsboolean–If true, only requests with status >= 400.
path_containsstring–Filter by path substring (case-insensitive).
tostring–Upper bound of the time range (inclusive). Defaults to now.

No output schema declared.

No examples provided.

beel_list_series ~397

Returns the invoice series of a company. - **Filters:** `active` restricts to active or inactive series — omit it and you get all of them. `document_type` filters by type and always includes the `UNASSIGNED` series, which are compatible with any type. - **Pagination (opt-in):** send `page` and/or `limit` to receive a single page plus a `data.pagination` block with the totals. Omit both and the response carries the full list in `data.series` and no `pagination` block. Endpoint: GET /v1/companies/{company_id}/series ⚠️ Fiscal guardrails — read before calling: - How invoice numbers are formed, and why numbering can never be rewritten. (resource: beel://guardrails/series-and-numbering) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
activeboolean–Filters by activity: `true` returns only active series, `false` only inactive ones. Omit it and you get **all** the series, active and inactive.
company_idstringyesUnique 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-Compan…
document_type––Filter by document type (UNASSIGNED series are always included)
limitinteger–Items per page. Omit for the full, unpaginated list.
pageinteger–Page number (starts at 1). Omit for the full, unpaginated list.

No output schema declared.

No examples provided.

beel_list_stats ~431

Returns, for each company of the account, how many fiscal documents it has issued and when it last issued one. - **`invoice_count`:** drafts, scheduled invoices and proformas are not counted; a rectifying invoice counts as a document of its own, and a voided invoice counts only when a live rectifying invoice compensates it. - **`last_invoice_at`:** issue date of the most recent document in that same set, or `null` when there is none. - **Not a cursor:** the count is not monotonic — voiding an uncompensated invoice lowers it and moves `last_invoice_at` backwards — so do not synchronise on it. **Paginated** with the usual `page`/`limit`, and the usual defaults: without them you get the stats of the first 20 companies, not of all of them. One row per company, over the same universe and in the same order as `GET /v1/accounts/{account_id}/companies` — `search` included — so asking both with the same `page`, `limit` and `search` lines the two responses up company by company. Endpoint: GET /v1/accounts/{account_id}/companies/stats

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
searchstring–Case-insensitive filter on NIF, legal name or trade name — the same filter, over the same universe, as the one `GET /v1/accounts/{account_id}/companies` applies. Blank or omitted returns all.

No output schema declared.

No examples provided.

beel_list_tax_types ~328

Returns the tax regimes and percentages that Spanish law allows on an invoice. Use it to validate a rate before sending it, or to build your own picker instead of hard-coding the percentages. - **Contents:** VAT (mainland), IGIC (Canary Islands), IPSI (Ceuta and Melilla), the withholding (IRPF) percentages, the equivalence surcharge that corresponds to each VAT rate, and the exemption reasons with the classification each one implies. - **Scope:** the catalogue is the same for every credential and does not depend on any account or on any NIF, so the operation takes no identifier and works before the first NIF exists. ## VAT rates and the zero case - **VAT lists 4, 5, 10 and 21, and deliberately not 0:** under VAT (and IPSI) a 0 % is not a rate but the exemption/non-subject sentinel, and on its own it says nothing. A 0 % line is only valid together with an `exemption_reason`, which this same response publishes under `exemption_reasons`. - **IGIC does list 0:** there it is the real "Tipo Cero" and needs no reason. - **The 5 % VAT rate (RD-ley 11/2022):** kept even though it no longer applies to new operations, because correctives and late filings for those periods still need it. Endpoint: GET /v1/tax-types

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

beel_list_webhook_deliveries ~329

Returns the delivery attempts of this subscription, newest first. Each entry records one attempt with the response it got, so a retried event appears once per attempt. - **`event_type`:** narrows the list to a single event type. - **`event_id`:** follows one event across every attempt made on it, without paging through the whole history. Endpoint: GET /v1/accounts/{account_id}/webhooks/{webhook_id}/deliveries

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential, and not the `BeeL-Active-Company` header — decides which account the operation acts on. An account you do not reach answers `…
event_idstring–Only deliveries of this event. Use it to follow every attempt on one event without paging through the whole history.
event_typestring–Only deliveries of this event type.
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.
webhook_idstringyesSubscription of the account in the path. A subscription of another account answers `404`, the same as one that does not exist: under the account resolved from `{account_id}` it simply is not there.

No output schema declared.

No examples provided.

beel_list_webhook_subscriptions ~198

Returns the webhook subscriptions of the account in the path, active and inactive alike. Every member of the account sees the same list: who registered a subscription is authorship, not visibility. The signing secrets are never included. Endpoint: GET /v1/accounts/{account_id}/webhooks

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential, and not the `BeeL-Active-Company` header — decides which account the operation acts on. An account you do not reach answers `…
limitinteger–How many items to return per page. The response echoes it back as `pagination.items_per_page`.
pageinteger–Page number, starting at 1. The response echoes it back as `pagination.current_page`.

No output schema declared.

No examples provided.

beel_patch_company ~538

Updates the editable fields of a company; the set is the one `UpdateCompanyRequest` declares. - **Immutable fields:** `nif`, `entity_type` and `legal_form`, once set. - **`legal_name`:** changing it requires the NIF to pass an AEAT census re-validation — which for a company checks the CIF only, so it cannot fail because of the name sent. ## Test credentials on a Live company Once the company is activated in Live, a test credential may only write the fields that affect how the invoice looks: `logo_url`, `invoice_accent_color`, `invoice_template_type`, `invoice_language`, `email_language` and `additional_info`. Any other field describes the real business — fiscal address, legal representative, bank details, contact data, IAE, activity start date, payment term — and answers `422 FISCAL_IDENTITY_LIVE_ONLY` from Test, since the company is a single record shared by both modes. A company not activated in Live accepts the whole body from Test, and sending a field its current value is never a change. ## What comes back The `200` returns `CompanyData` with **every field this request accepts**, under the same name and the same type — so the response is the confirmation of what was stored, and a later `GET` says the same. A field you never set comes back absent, which means "nothing stored", not "hidden". Two things live outside this body and keep their own reads: the invoice series (`GET /v1/companies/{company_id}/series`) and the rendering block, which is also served on its own by `GET /v1/companies/{company_id}/invoice-customization`. Endpoint: PATCH /v1/companies/{company_id} ⚠️ Fiscal guardrails — read before calling: - Which company an operation acts on, and how that is selected. (resource: beel://guardrails/multi-nif) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
body–yes–
company_idstringyesUnique 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-Compan…

No output schema declared.

No examples provided.

beel_patch_customer ~227

Updates only the fields present in the body, leaving every other field of the customer as it is. - **Null vs omitted:** a field sent as `null` is cleared, which is different from omitting it (see `PatchCustomerRequest`). - **Only update verb:** this is the canonical way to edit a customer. There is no `PUT` of full replacement under the company, which would clear the fields you omit. Endpoint: PATCH /v1/companies/{company_id}/customers/{customer_id}

NameTypeReqDescription
body–yes–
company_idstringyesUnique 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-Compan…
customer_id–yesCustomer ID

No output schema declared.

No examples provided.

beel_patch_invoice ~279

Updates only the fields present in the body, leaving every other field of the invoice as it is. - **Status:** only a draft invoice can be modified. An issued one is amended with a corrective invoice (`POST …/{invoice_id}/corrective`) or voided. - **Series:** changing `series_id` never moves the invoice to another NIF — a series of another company is not visible from here. Endpoint: PATCH /v1/companies/{company_id}/invoices/{invoice_id} ⚠️ Fiscal guardrails — read before calling: - When an invoice can still be changed, and what to do once it cannot. (resource: beel://guardrails/invoice-state-machine) For the exhaustive rules and worked examples, call beel_docs_search.

NameTypeReqDescription
body–yes–
company_idstringyesUnique 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-Compan…
invoice_id–yesInvoice ID

No output schema declared.

No examples provided.

beel_patch_member ~191

Changes a member's `account_role` between `ADMIN` and `MEMBER`. - **`OWNER`:** not an assignable value here. An account has exactly one owner, and ownership is handed over only through `PUT /v1/accounts/{account_id}/owner`, which promotes the new owner and steps the current one down in the same operation. - **Last owner:** the account's last `OWNER` cannot be demoted. Endpoint: PATCH /v1/accounts/{account_id}/members/{member_id}

NameTypeReqDescription
account_idstringyesYour own account, or an account you provisioned. It — not the credential — decides which account the operation acts on; a `403` is returned when you do not reach it, the same response an account that…
body–yes–
member_idstringyesMembership unique UUID.

No output schema declared.

No examples provided.

beel_patch_product ~252

Updates only the fields present in the body, leaving every other field of the product as it is — in particular `main_tax`, `irpf_rate` and `equivalence_surcharge_rate`. - **Null vs omitted:** a field sent as `null` is cleared, which is different from omitting it (see `PatchProductRequest`). - **Only update verb:** the total replacement `PUT /v1/products/{product_id}`, which reset the omitted fields to their creation defaults, is not carried over to the canonical form. Endpoint: PATCH /v1/companies/{company_id}/products/{product_id}

NameTypeReqDescription
body–yes–
company_idstringyesUnique 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-Compan…
product_idstringyesProduct unique UUID

No output schema declared.

No examples provided.

Install

How do I install the BeeL MCP server?

BeeL is a hosted endpoint at https://mcp.beel.es/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.beel.es

# add to Claude Code
claude mcp add --transport http es-beel-mcp 'https://mcp.beel.es/mcp'
Common questions

What is the BeeL MCP server?

BeeL is an MCP server listed in the public MCP registry as es.beel/mcp. Spanish e-invoicing with VeriFactu (AEAT): issue invoices, manage customers, validate NIFs. This page covers its hosted endpoint (https://mcp.beel.es/mcp).

Is the BeeL MCP server safe to use?

BeeL scores 38 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the BeeL MCP server expose?

BeeL exposes 121 tools: beel_activate_company, beel_cancel_representation, beel_change_managed_access_level, beel_convert_proforma_to_invoice, beel_create_claim_token, and 116 more. Their descriptions and schemas cost roughly 37,184 tokens of context every time the server is loaded.

Does the BeeL MCP server require authentication?

Yes. BeeL asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the BeeL MCP server still maintained?

BeeL is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.