Factuarea API
MCP server

Scopes & permissions

The OAuth consent scope catalog, how it maps to the fine-grained scopes tools enforce, the super-scope, and plan/module gating.

Every MCP tool declares the scope a credential must hold to call it. Scopes work slightly differently per channel:

  • API keys are created directly with fine-grained scopes (resource:action, e.g. invoices:read) — the same closed catalog the REST API uses. You can also grant the super-scope *.
  • OAuth tokens are granted dotted scopes (resource.action, e.g. invoices.read) on the consent screen. The server translates these to the fine-grained scopes automatically, so both channels enforce the same set at the tool boundary.

These are the scopes a user can grant a third-party app on the consent screen. There are 56 simple scopes plus 3 macros.

Simple scopes

Each grants one capability. The Maps to column shows the fine-grained scope the tools enforce — the consent layer translates dotted OAuth scopes to these automatically. The Sensitive column marks scopes the consent screen flags and does not pre-check.

Profile

ScopeGrantsMaps toSensitive
profile.readRead your name, email and active company.account:readno

CRM — clients & suppliers

ScopeGrantsMaps toSensitive
clients.readList and read clients.clients:readno
clients.writeCreate and update clients.clients:writeno
clients.deleteDelete clients.clients:delete⚠ yes
suppliers.readList and read suppliers.suppliers:readno
suppliers.writeCreate and update suppliers.suppliers:writeno
suppliers.deleteDelete suppliers.suppliers:delete⚠ yes

Catalog — products, series, taxes

ScopeGrantsMaps toSensitive
products.readList and read the product catalog.products:readno
products.writeCreate and update products.products:writeno
products.deleteDelete products.products:delete⚠ yes
series.readRead numbering series.series:readno
series.writeCreate and update numbering series.series:writeno
taxes.readRead tax rates and retentions.taxes:readno
taxes.writeCreate and update tax rates.taxes:writeno

Sales — invoices, quotes, pro-formas, delivery notes

ScopeGrantsMaps toSensitive
invoices.readList and read invoices.invoices:readno
invoices.writeCreate and update invoices.invoices:writeno
invoices.sendSend invoices by email.invoices:sendno
invoices.deleteDelete draft invoices.invoices:delete⚠ yes
invoices.annulAnnul issued invoices.invoices:void⚠ yes
invoices.create_correctiveIssue corrective invoices.invoices:writeno
quotes.readList and read quotes.quotes:readno
quotes.writeCreate and update quotes.quotes:writeno
quotes.sendSend quotes by email.quotes:sendno
quotes.deleteDelete quotes.quotes:delete⚠ yes
quotes.convert_to_invoiceAccept/reject and convert quotes to invoices.quotes:transitionno
proformas.readList and read pro-forma invoices.proformas:readno
proformas.writeCreate and update pro-formas.proformas:writeno
proformas.sendSend pro-formas by email.proformas:sendno
proformas.deleteDelete pro-formas.proformas:delete⚠ yes
proformas.convertConvert pro-formas to invoices.proformas:transitionno
delivery_notes.readList and read delivery notes.delivery_notes:readno
delivery_notes.writeCreate, update and send delivery notes.delivery_notes:writeno
delivery_notes.sendSend delivery notes by email.delivery_notes:writeno
delivery_notes.deleteDelete delivery notes.delivery_notes:delete⚠ yes
delivery_notes.convertConvert delivery notes.delivery_notes:transitionno
delivery_notes.signMark delivered / sign delivery notes.delivery_notes:transition⚠ yes

Purchases

ScopeGrantsMaps toSensitive
purchase_invoices.readList and read vendor bills.purchase_invoices:readno
purchase_invoices.writeCreate and update vendor bills.purchase_invoices:writeno
purchase_invoices.mark_paidMark vendor bills as paid.purchase_invoices:transition⚠ yes
purchase_invoices.deleteDelete vendor bills.purchase_invoices:delete⚠ yes

Payment scopes are asymmetric across sales and purchases. Registering a payment on a sales invoice (register_invoice_payment) needs invoices:write — it edits the invoice. Registering a payment on a purchase invoice (register_purchase_invoice_payment) needs purchase_invoices:transition instead, because on the buy side a payment moves the bill through its lifecycle (pending → paid) rather than editing it.

Recurring invoices

ScopeGrantsMaps toSensitive
recurring.readList and read recurring templates.recurring_invoices:readno
recurring.writeCreate and update recurring templates.recurring_invoices:writeno
recurring.pausePause recurring templates.recurring_invoices:transitionno
recurring.resumeResume recurring templates.recurring_invoices:transitionno
recurring.generate_nowEmit a recurring invoice manually.recurring_invoices:transition⚠ yes
recurring.deleteDelete recurring templates.recurring_invoices:delete⚠ yes

Compliance (VeriFactu)

ScopeGrantsMaps toSensitive
verifactu.readRead VeriFactu records, events, certificates and config.verifactu:readno

Webhooks

ScopeGrantsMaps toSensitive
webhooks.readList webhook endpoints and deliveries.webhooks:readno
webhooks.writeCreate, update, rotate and ping webhook endpoints.webhooks:write⚠ yes
webhooks.deleteDelete webhook endpoints.webhooks:delete⚠ yes

Macro scopes

Convenience bundles that expand to a list of simple scopes at token-issue time. The token persists the expanded scopes — macros are never stored.

MacroGrantsSensitive
factuarea.readFull read access to everything (no writes).no
factuarea.writeRead everything, plus create/update documents and send emails.no
factuarea.fullRead, write, send and destructive actions (delete, annul, mark paid, sign). Excludes VeriFactu writes.⚠ yes

The super-scope *

A credential holding * covers every scope — all 232 tools for an API key. It's the equivalent of an owner key. Reserve it for one-off migrations or fully-trusted owner automations; prefer the narrowest scope set for everything else. The super-scope is available to API keys; OAuth consent grants explicit scopes (or macros), never a raw *.

How OAuth scopes become fine scopes

When an OAuth token is issued, its dotted scopes are translated once to the fine-grained catalog the tools enforce. A few reconciliations are worth knowing:

  • recurring.* maps to the recurring_invoices:* resource.
  • invoices.create_corrective maps to invoices:write (creating is a write).
  • invoices.annul maps to invoices:void.
  • Lifecycle actions (*.convert, *.sign, *.pause, *.resume, *.generate_now, *.mark_paid, quotes.convert_to_invoice) map to the resource's :transition scope.
  • Any read scope on a document also grants the transversal read utilities pdfs:read (download its PDF/receipt) and events:read (its activity log).
  • verifactu.write and delivery_notes:gdpr_forget have no OAuth dotted scope — they are unreachable via OAuth by design.
  • facturae:read / facturae:write are not in the OAuth consent catalog yet — the FacturaE (FACe) tools are reachable only with an API key for now.

Plan & module gating

No public MCP tool is module-gated today: every published tool is reachable once the credential holds the required scope — only the scope check applies. If a future module-gated tool is published, the server hides it from tools/list when the company's plan lacks the module and returns module_not_in_plan (-32005) on a direct call.

  • Plan usage limits (e.g. monthly document quotas) are enforced at call time and surface as plan_limit_exceeded (-32004). See Errors & rate limits.

The whole public MCP surface also requires the company's developer API add-on to be active; otherwise every call returns addon_not_active (-32007).

On this page