Factuarea APIDevelopers

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

Contacts

ScopeGrantsMaps toSensitive
contacts.readList and read canonical contacts.contacts:readno
contacts.writeCreate contacts and update identity, roles and profiles.contacts:writeno
contacts.deleteArchive contacts and remove unreferenced roles.contacts:deleteyes

Catalog — products, price lists, series, taxes

ScopeGrantsMaps toSensitive
products.readList and read the product catalog.products:readno
products.writeCreate and update products.products:writeno
products.deleteDelete products.products:deleteyes
price_lists.readRead price lists, items and effective prices.price_lists:readno
price_lists.writeCreate, update and delete price lists and items.price_lists:writeno
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:deleteyes
invoices.annulAnnul issued invoices.invoices:voidyes
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:deleteyes
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:deleteyes
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:deleteyes
delivery_notes.convertConvert delivery notes.delivery_notes:transitionno
delivery_notes.signMark delivered / sign delivery notes.delivery_notes:transitionyes

Purchases

ScopeGrantsMaps toSensitive
purchase_invoices.readList and read vendor bills.purchase_invoices:readno
purchase_invoices.writeCreate and update vendor bills; duplicating from source_purchase_invoice_id also needs purchase_invoices:read.purchase_invoices:writeno
purchase_invoices.mark_paidMark vendor bills as paid.purchase_invoices:transitionyes
purchase_invoices.deleteDelete vendor bills.purchase_invoices:deleteyes

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:transitionyes
recurring.deleteDelete recurring templates.recurring_invoices:deleteyes

Compliance and tax reports

ScopeGrantsMaps toSensitive
verifactu.readRead VeriFactu records, events, certificates and config.verifactu:readno
facturae.readDownload FacturaE XML and read FACe submissions.facturae:readno
facturae.writeSubmit invoices to FACe and request cancellations.facturae:writeyes
tax_reports.readRead tax-report history, previews, files, stats and activity.tax_reports:readno
tax_reports.writeGenerate tax reports and review workbooks.tax_reports:writeyes

Webhooks

ScopeGrantsMaps toSensitive
webhooks.readList webhook endpoints and deliveries.webhooks:readno
webhooks.writeCreate, update, rotate and ping webhook endpoints.webhooks:writeyes
webhooks.deleteDelete webhook endpoints.webhooks:deleteyes

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

Automations

Automation rules and their run history. Every automation scope is sensitive: a rule can send emails and fire webhooks on the account owner's behalf, and the run history carries the business payloads its actions moved (amounts, recipients, outcomes). All three require the automations plan module — see Plan & module gating. Reading and writing rules and reading the run history are grantable on the consent screen; deleting a rule is notautomations:delete has no OAuth dotted scope and is API-key-only (listed under the fine-grained scopes below).

automations.read and automation_runs.read are granted separately on purpose. The first one covers the rule book: the rules themselves, their sealed versions, the trigger/action catalog and the dry run that reports what a rule would do without doing it. The second one covers what the rules actually did: every run, its steps, their typed discard reasons and the frozen trigger payload each run carries. An app can read which automations exist without reading the business data every execution touched.

ScopeGrantsMaps toSensitive
automations.readList and read automation rules, their versions, the trigger/action catalog, the monthly quota and the dry run.automations:readyes
automations.writeCreate, update, activate and pause automation rules, and replay runs or single steps.automations:writeyes
automation_runs.readRead the run history of your automations, its steps and their outcome.automation_runs:readyes

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 457 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.

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

A fourth group is the automation engine's delete scope. Its three siblings — automations.read, automations.write and automation_runs.read — are OAuth-grantable (see the Automations consent scopes above), but removing someone's automation is destructive and cannot be undone through the API, so it stays out of the consent catalog by design — the same call made for verifactu:write. It requires the automations plan module.

ScopeGrantsModule gate
automations:deleteDelete automation rules. The deletion is logical and irreversible through the API: the rule stops firing, while its sealed versions and its run history stay auditable.automations

verifactu: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.

A final group covers the remaining first-party catalog and observability tools that have no dotted OAuth consent scope:

ScopeGrantsModule gate
taxes:deleteDelete a tax rate when it is not in use.
developers:readInspect your own API request log.
emails:readInspect sent-email history and status.
integration_events:readInspect payment-gateway events and typed discard reasons.integration_stripe
integration_events:writeReplay parked payment-gateway events.integration_stripe
gocardless_autoinvoicing:readReserved in the closed catalog; no published tool currently uses it.integration_gocardless
gocardless_autoinvoicing:writeReserved in the closed catalog; no published tool currently uses it.integration_gocardless
monei_autoinvoicing:readReserved in the closed catalog; no published tool currently uses it.integration_monei
monei_autoinvoicing:writeReserved in the closed catalog; no published tool currently uses it.integration_monei

Plan & module gating

Most published tools apply only a scope check — they're reachable as soon as the credential holds the required scope. Three families are also module-gated. The Price-list tools map price_lists:* to products. The Payments & gateways tools map their scopes (stripe_autoinvoicing:*, payouts:read, integration_events:*) 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. The Automations tools map their scopes (automations:*, automation_runs:read) to the automations 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).

Store permissions

Store management uses stores:read and stores:write; provider-specific scopes are woocommerce_store:read, woocommerce_store:write, shopify_store:read and shopify_store:write. Connection-test operations require the provider write scope. These scopes are assigned to API keys and are outside OAuth consent. See ecommerce stores for the operation matrix.

On this page

Need a hand?Contact support