Factuarea API

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 59 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

Workforce — control horario

Employee, time-tracking, absence, work-schedule, presence, holiday and payroll-export data. Every workforce scope is sensitive (employee PII and compliance data) and requires the control_horario plan module — see Plan & module gating. Reads, employees.write and payroll-export generation are grantable on the consent screen; the privileged write and transition actions have no OAuth dotted scope and are API-key-only (listed under the fine-grained scopes below).

ScopeGrantsMaps toSensitive
employees.readList and read employees.employees:read⚠ yes
employees.writeCreate and update employees.employees:write⚠ yes
time_entries.readRead time-clock entries, balances and monthly time sheets.time_entries:read⚠ yes
absences.readList and read absences, policies and requests.absences:read⚠ yes
work_schedules.readRead work schedules and their assignments.work_schedules:read⚠ yes
presence.readRead live and daily presence.presence:read⚠ yes
holidays.readRead the company holiday calendar.holidays:read⚠ yes
payroll_exports.readRead generated payroll exports.payroll_exports:read⚠ yes
payroll_exports.writeGenerate payroll exports.payroll_exports:write⚠ 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 391 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.

Fine-grained scopes without an OAuth scope (API key only)

A few fine-grained scopes live in the closed resource:action catalog API keys use, but have no dotted OAuth equivalent — they are never granted through a third-party consent screen and are reachable only with an API key. Grant them on the key directly (or via the super-scope *). Some are gated by an integration module — the key's company must then hold the corresponding plan (see Plan & module gating); the rest are first-party account and gestoría scopes.

ScopeGrantsModule gate
stripe_autoinvoicing:readRead the Stripe Connect integration status, auto-invoicing config and connected accounts, and list auto-invoiced charges/correctives.integration_stripe
stripe_autoinvoicing:writeToggle Stripe charge auto-invoicing, set the auto-issued series, and edit/disconnect connected accounts.integration_stripe
payouts:readRead ingested Stripe payouts and their bank-reconciliation status.integration_stripe

These power the Payments & gateways tools.

A second group of API-key-only scopes governs first-party account and gestoría management — your own credentials and, for accountancies, the child sub-companies you manage and their API keys. companies:* requires the gestoría plan module; the rest have no module gate.

ScopeGrantsModule gate
account:writeManage your own API keys (create, rotate, revoke) and update account personalization.
companies:readList and read managed companies (child sub-accounts).gestoria
companies:writeCreate, update, activate and deactivate managed companies.gestoria
companies:deleteArchive managed companies.gestoria
api_keys:readList and read API keys of managed companies.
api_keys:writeCreate, rotate and revoke API keys of managed companies.
api_keys:deletePermanently delete API keys of managed companies.

A third group covers workforce (control horario) write and transition actions. Their read counterparts are OAuth-grantable (see the Workforce consent scopes above), but these privileged scopes have no OAuth dotted equivalent — they are API-key-only, the mirror of verifactu:write. All require the control_horario plan module.

ScopeGrantsModule gate
employees:deletePermanently delete employees.control_horario
time_entries:writeClock in/out, record manual entries, manage time corrections and the monthly register close.control_horario
absences:writeCreate and manage absence types, policies and requests.control_horario
absences:transitionApprove, reject and cancel absence requests.control_horario
work_schedules:writeCreate, update, assign and archive work schedules.control_horario

verifactu:write, facturae:read, facturae:write and delivery_notes:gdpr_forget are also fine-grained, API-key-only scopes (covered above) — they enforce at the tool boundary just like any other scope, but have no OAuth consent counterpart.

Plan & module gating

Most published tools apply only a scope check — they're reachable as soon as the credential holds the required scope. Two families are also module-gated. The Payments & gateways tools map their scopes (stripe_autoinvoicing:*, payouts:read) to the integration_stripe module. The workforce tools (Employees, Employee seats, Work schedules, Time tracking, Absences, Presence, Holidays) map their scopes (employees:*, time_entries:*, absences:*, work_schedules:*, presence:read, holidays:read, payroll_exports:*) to the control_horario module. When the company's plan lacks the module, the server hides those tools from tools/list 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 to have an active Factuarea plan — API access is included in every plan; otherwise every call returns addon_not_active (-32007).

On this page