Tool catalog
All Factuarea MCP tools grouped by domain, plus the ten privileged managed-account tools, with the scope each one requires and its rate-limit category.
The Factuarea MCP server publishes 668 tools across the public API domains. This page is
the canonical list; each tool's input schema is discoverable at runtime via
tools/list. Every tool maps to the same operation in the
REST API Reference. The ten tools that provision managed accounts are not part of that
total: they are listed at the end, because a key needs the privileged
accounts:* scopes to see them.
How to read this catalog
- Tool — the MCP tool name your agent calls.
- Scope — the fine-grained scope the credential must hold for the tool to
appear in
tools/listand to be invocable. See Scopes & permissions. - Category — the rate-limit bucket the tool falls into:
read,write,destructive,sendorgenerate. See Errors & rate limits.
A credential only sees the tools its scopes cover. An API key with the
super-scope * sees all 668; a narrower key or an OAuth token sees a subset.
¹ OAuth-restricted (API key only). 127 tools are reachable only with an
API key, never through a third-party OAuth app: the 11 verifactu:write tools,
forget_delivery_note_signature (delivery_notes:gdpr_forget), the 20 Payments & gateways tools (the
stripe_autoinvoicing:*, payouts:read and integration_events:* scopes are
fine-grained, API-key-only scopes), the 3 Emails tools and the 4 API-request-log
tools (emails:read and developers:read inspect your own integration's
traffic — first-party scopes, never granted by third-party consent), the 14
tax ID portfolio tools and get_consolidated_workforce (companies:* is
first-party only, never granted by third-party consent), the account tools — 5
for account administration (nif_transfers:* and account:owner), 16 for
members, grants and invitations (members:*, invitations:*) and 10 for
account webhooks (they take the same webhooks:* scopes as the company
webhook tools, but the account capability refuses an OAuth token): who owns an
account, who belongs to it and where its events go is never handed to a
third-party app —, the 5 account-write self-service tools (account:write —
creating, rotating or revoking API keys, replacing the tax ID scope of a key
and updating account personalization), the 33 workforce control-horario tools
whose write/transition scopes (time_entries:write, absences:write,
absences:transition, work_schedules:write) are fine-grained, API-key-only
scopes not in the OAuth consent catalog (their read counterparts and
employees:write are OAuth-grantable), delete_automation_rule
(automations:delete is deliberately kept out of the OAuth consent catalog;
the automation engine's other three scopes — automations:read,
automations:write and automation_runs:read — are grantable) and the 9
project and task delete tools (projects:delete and tasks:delete never
appear on the consent screen: reading and writing are grantable, deleting is
not). OAuth apps therefore reach
541 of the 668 tools. The ten
managed-account tools are API-key only as well, and outside both counts. See the
channel policy.
² Batch size limit — 200 ids per call. bulk_send_invoices,
bulk_send_quotes, bulk_send_proformas and bulk_send_delivery_notes
accept at most 200 ids per call — the same limit as their REST
counterparts (POST /v1/companies/{company}/{resource}/bulk-send). A larger
batch is rejected before anything is sent: no email goes out and no job is
queued. Split the batch into blocks of 200 and repeat the call. The error
message is returned in Spanish, like every other API message, and names two
numbers and nothing else — the limit and what you sent — so no id of the
batch is echoed back:
No puedes enviar más de 200 facturas por lote. Has enviado 201. Divide el lote en bloques de 200 como máximo y repite la llamada.
Domains
Invoices
Invoices: search, CRUD, correctives, partial-payment ledger, transitions (issue/paid/sent/void/annul), scheduling, bulk operations, reminders, public links, PDFs, presentations, administrative routing and Excel export. (51 tools)
| Tool | Scope | Category |
|---|---|---|
can_annul_invoice | invoices:read | read |
check_invoice_simplified_eligibility | invoices:read | read |
export_invoices_excel | invoices:read | read |
find_invoice_by_external_id | invoices:read | read |
find_invoice_by_number | invoices:read | read |
get_available_quarters | invoices:read | read |
get_invoice | invoices:read | read |
get_invoice_activities | invoices:read | read |
get_invoice_correctives | invoices:read | read |
get_invoice_payment_receipt | pdfs:read | read |
get_invoice_pdf | pdfs:read | read |
get_invoice_presentation | invoices:read | read |
get_invoice_public_link | invoices:read | read |
get_invoice_stats | invoices:read | read |
get_invoice_statuses | invoices:read | read |
list_invoice_administrative_revisions | invoices:read | read |
list_invoice_payments | invoices:read | read |
list_invoice_presentations | invoices:read | read |
list_payment_methods | invoices:read | read |
preview_invoice_reminder | invoices:read | read |
search_invoices | invoices:read | read |
annul_invoice | invoices:void | write |
assign_invoice_presentation | invoices:write | write |
assign_invoice_real_number | invoices:write | write |
bulk_change_invoice_status | invoices:write | write |
bulk_create_invoices | invoices:write | write |
bulk_delete_invoices | invoices:delete | destructive |
bulk_invoices_pdf_link | pdfs:read | generate |
bulk_send_invoices ² | invoices:send | send |
create_corrective_invoice | invoices:write | write |
create_invoice | invoices:write | write |
delete_invoice | invoices:delete | destructive |
duplicate_invoice | invoices:write | write |
issue_invoice | invoices:write | write |
mark_invoice_as_paid | invoices:write | write |
mark_invoice_as_sent | invoices:write | write |
mark_invoice_unsent | invoices:write | write |
quarterly_send_email | invoices:send | send |
register_invoice_payment | invoices:write | write |
reschedule_invoice | invoices:write | write |
revert_invoice_payment | invoices:write | write |
revise_invoice_administrative_routing | invoices:write | write |
revise_invoice_presentation | invoices:write | write |
schedule_invoice | invoices:write | write |
send_invoice | invoices:send | send |
send_invoice_reminder | invoices:send | send |
substitute_simplified_invoice | invoices:write | write |
unschedule_invoice | invoices:write | write |
update_invoice | invoices:write | write |
update_invoice_public_link | invoices:write | write |
void_invoice | invoices:void | write |
get_invoice returns the full invoice by its public id: commercial data, line ids (UUIDv7), effective centres, snapshot, override, administrative version and revision, and the original structured snapshots. It keeps null and empty lists as stored. get_invoice_pdf returns the exact signed download link when a retained output exists; the compatible mode can still return the PDF as base64. send_invoice can attach the FacturaE file with attach_facturae=true; with submission_id it attaches that existing submission, without creating or retrying one, and it requires attach_facturae=true. update_invoice_public_link takes revoke, activate, extend (with extend_days), reset or publish, the last one with the exact reference and the observed version.
list_invoice_administrative_revisions reads the administrative version, snapshot, override and history by the invoice's public id. It keeps the legacy null distinct from [] and does not look up the contact's current centres. revise_invoice_administrative_routing appends an administrative revision with the full list of centres, a reason and expected_version (a positive integer); [] clears the effective centres, and taxation is not modified. A missing version is answered with 428; a stale one with 409 and current_version. Retrying with the old version does not duplicate the revision. It returns the created revision and its own administrative_version.
assign_invoice_presentation assigns a template_id (UUIDv7) or an explicit null to inherit, with expected_version. It only applies to drafts of the authenticated company and does not change amounts or numbering. get_invoice_presentation reads the visual state and the retained capture of an authorized document, and list_invoice_presentations lists the retained captures in descending order with page/per_page and the captured metadata; neither writes, queries artifacts or generates a PDF. revise_invoice_presentation creates an audited visual revision with its parent, a compare-and-set (CAS) check and the authentic presentation_revision preview tokens; current_legal only admits a real legal correction of an issued invoice. It does not reissue or recalculate. See Document presentations.
Contacts
(28 tools)
Canonical fiscal contacts have cumulative customer, supplier and lead roles; they are the only public MCP surface for third-party identities. Separate client and supplier tools are not published. The CSV template remains a REST download. See Contact migration.
Retired names. Four contact tools keep answering to their former names until 15 November 2026: search_clients (now search_contacts), find_client_by_tax_id (now find_contact_by_tax_id), create_client (now create_contact) and bulk_create_clients (now bulk_create_contacts). They do not appear in tools/list, the permissions of the successor apply, and the result carries _meta["io.factuarea/deprecation"] with deprecated_tool, successor and sunset. An old argument with no equivalent is rejected with -32008 invalid_param_value and a hint that names the argument and the successor; in search_clients that covers city, province, is_active, created_from, created_to and ending_before, and only one search key among search, name, tax_id, email and phone is accepted; it becomes the free-text search q (at least 2 characters) and only active customers are returned. To list without a term, use list_contacts with roles=["customer"]. After the date, the old name answers as an unknown tool (-32602).
| Tool | Scope | Category |
|---|---|---|
archive_contact | contacts:delete | destructive |
assign_contact_role | contacts:write | write |
bulk_archive_contacts | contacts:delete | destructive |
bulk_create_contacts | contacts:write | write |
bulk_change_contact_role_status | contacts:write | write |
bulk_delete_contacts | contacts:delete | destructive |
change_contact_role_status | contacts:write | write |
create_contact | contacts:write | write |
delete_contact | contacts:delete | destructive |
download_contact_import_errors | contacts:read | read |
find_contact_by_external_id | contacts:read | read |
find_contact_by_tax_id | contacts:read | read |
get_contact | contacts:read | read |
get_contact_activities | contacts:read | read |
get_contact_import | contacts:read | read |
get_contact_options | contacts:read | read |
get_contact_stats | contacts:read | read |
import_contacts | contacts:write | write |
list_contacts | contacts:read | read |
preview_contacts_import | contacts:write | write |
remove_contact_role | contacts:delete | destructive |
restore_contact | contacts:write | write |
search_contacts | contacts:read | read |
update_bank_accounts | contacts:write | write |
update_contact | contacts:write | write |
update_customer_profile | contacts:write | write |
update_supplier_profile | contacts:write | write |
verify_contact_census | contacts:read | write |
Products
Catalog: search, CRUD, configurable options/combinations, stock ledger, presentations, variants, supplier offers, bulk actions, analytics and media. (40 tools)
| Tool | Scope | Category |
|---|---|---|
download_product_gallery_image | products:read | read |
download_product_video | products:read | read |
find_product_by_external_id | products:read | read |
find_product_by_sku | products:read | read |
get_product | products:read | read |
get_product_activities | products:read | read |
get_product_sales_analytics | products:read | read |
get_product_stats | products:read | read |
low_stock_report | products:read | read |
list_product_configurations | products:read | read |
list_product_options | products:read | read |
list_product_presentations | products:read | read |
list_product_stock_movements | products:read | read |
list_product_variants | products:read | read |
resolve_catalog_selection | products:read | read |
list_supplier_product_offers | products:read | read |
preview_product_base_unit_replacement | products:write | read |
search_products | products:read | read |
bulk_change_product_status | products:write | write |
bulk_delete_products | products:delete | destructive |
bulk_update_stock | products:write | write |
create_product | products:write | write |
create_product_presentation | products:write | write |
create_product_variant | products:write | write |
create_supplier_product_offer | products:write | write |
delete_product | products:delete | destructive |
delete_product_gallery_image | products:delete | destructive |
delete_product_presentation | products:write | destructive |
delete_product_variant | products:write | destructive |
delete_product_video | products:delete | destructive |
delete_supplier_product_offer | products:write | destructive |
replace_product_base_unit | products:write | write |
set_preferred_supplier_product_offer | products:write | write |
toggle_product_active | products:write | write |
update_product | products:write | write |
update_product_presentation | products:write | write |
update_product_variant | products:write | write |
update_supplier_product_offer | products:write | write |
upload_product_gallery_image | products:write | write |
upload_product_video | products:write | write |
create_product, update_product, create_product_variant,
update_product_variant, create_product_presentation and
update_product_presentation accept gross_weight_kg: the gross transport weight in
kg (up to four decimals, greater than zero) per base unit on products and variants and
per commercial unit on fixed presentations. In the three update tools, omitting it keeps
the current weight and null clears it. Services, mass base units (KGM, GRM) and
variable_measure presentations reject it with gross_weight_not_allowed.
preview_product_base_unit_replacement and replace_product_base_unit change the base unit of
a product by replacing it with a new one. The preview computes, without writing anything,
what happens to the stock, the price, the presentations, the variants, the supplier offers,
the price lists and the packs, and which pending documents will keep pointing at the old
product; it is a read, but it requires products:write and returns the impact_token that
the replacement demands. The replacement is irreversible: the old product is deactivated and
keeps its history, it requires that impact_token and accepts idempotency_key.
Price lists
Customer and document pricing: manage active/retired items, compact selector options and resolve configurable catalog selections. (13 tools)
| Tool | Scope | Category |
|---|---|---|
get_price_list | price_lists:read | read |
get_price_list_options | price_lists:read | read |
list_price_list_items | price_lists:read | read |
list_price_lists | price_lists:read | read |
resolve_catalog_price | price_lists:read | read |
resolve_many_catalog_prices | price_lists:read | read |
create_price_list | price_lists:write | write |
delete_price_list | price_lists:write | destructive |
delete_price_list_item | price_lists:write | destructive |
purge_retired_price_list_item | price_lists:write | destructive |
reassign_retired_price_list_item | price_lists:write | write |
update_price_list | price_lists:write | write |
upsert_price_list_item | price_lists:write | write |
Quotes
Quotes: search, CRUD, accept/reject, send, convert to invoice, bulk operations, lookup by external ID, public links, PDFs and presentations. (24 tools)
| Tool | Scope | Category |
|---|---|---|
find_quote_by_external_id | quotes:read | read |
get_quote | quotes:read | read |
get_quote_pdf | pdfs:read | read |
get_quote_presentation | quotes:read | read |
get_quote_public_link | quotes:read | read |
get_quote_stats | quotes:read | read |
get_quote_statuses | quotes:read | read |
list_quote_presentations | quotes:read | read |
search_quotes | quotes:read | read |
accept_quote | quotes:transition | write |
assign_quote_presentation | quotes:write | write |
bulk_change_quote_status | quotes:transition | write |
bulk_delete_quotes | quotes:delete | destructive |
bulk_quotes_pdf_link | pdfs:read | generate |
bulk_send_quotes ² | quotes:send | send |
convert_quote | quotes:transition | write |
create_quote | quotes:write | write |
delete_quote | quotes:delete | destructive |
duplicate_quote | quotes:write | write |
reject_quote | quotes:transition | write |
revise_quote_presentation | quotes:write | write |
send_quote | quotes:send | send |
update_quote | quotes:write | write |
update_quote_public_link | quotes:write | write |
get_quote_pdf returns the exact signed download link (download_url) with its expiry (expires_at) when a retained output exists, or its state while it is still being generated; the compatible mode returns the content as base64. update_quote_public_link takes revoke, activate, extend (with extend_days), reset or publish, the last one with the exact reference and the observed version.
assign_quote_presentation assigns a template_id (UUIDv7) or an explicit null to inherit, with expected_version. It only applies to drafts of the authenticated company and does not change amounts or numbering. get_quote_presentation reads the visual state and the retained capture of an authorized document, and list_quote_presentations lists the retained captures in descending order with page/per_page and the captured metadata; neither writes, queries artifacts or generates a PDF. revise_quote_presentation creates an audited visual revision with its parent, a compare-and-set (CAS) check and the authentic presentation_revision preview tokens. It keeps the captured source and admits the purpose complete in A4 format. It does not reissue or recalculate. See Document presentations.
Pro-forma invoices
Pro-formas: search, CRUD, accept/reject, send, convert, bulk operations, lookup by external ID, public links, PDFs and presentations. (24 tools)
| Tool | Scope | Category |
|---|---|---|
find_proforma_by_external_id | proformas:read | read |
get_proforma | proformas:read | read |
get_proforma_pdf | pdfs:read | read |
get_proforma_presentation | proformas:read | read |
get_proforma_public_link | proformas:read | read |
get_proforma_stats | proformas:read | read |
get_proforma_statuses | proformas:read | read |
list_proforma_presentations | proformas:read | read |
search_proformas | proformas:read | read |
accept_proforma | proformas:transition | write |
assign_proforma_presentation | proformas:write | write |
bulk_change_proforma_status | proformas:transition | write |
bulk_delete_proformas | proformas:delete | destructive |
bulk_proformas_pdf_link | pdfs:read | generate |
bulk_send_proformas ² | proformas:send | send |
convert_proforma | proformas:transition | write |
create_proforma | proformas:write | write |
delete_proforma | proformas:delete | destructive |
duplicate_proforma | proformas:write | write |
reject_proforma | proformas:transition | write |
revise_proforma_presentation | proformas:write | write |
send_proforma | proformas:send | send |
update_proforma | proformas:write | write |
update_proforma_public_link | proformas:write | write |
get_proforma_pdf returns the exact signed download link (download_url) with its expiry (expires_at) when a prepared output exists, or its state while it is still being generated; 404 pdf_artifact_not_found means no retained PDF matches the document's current presentation, purpose and format; a retained PDF that failed to render or cannot be verified answers the PDF-unavailable error (500), and one erased for privacy answers 410; the compatible mode returns the content as base64. update_proforma_public_link takes revoke, activate, extend, reset or publish, the last one with the exact reference and the observed version.
assign_proforma_presentation assigns a template_id (UUIDv7) or an explicit null to inherit, with expected_version. It only applies to drafts of the authenticated company and does not change amounts or numbering. get_proforma_presentation reads the visual state and the retained capture of an authorized document, and list_proforma_presentations lists the retained captures in descending order with page/per_page and the captured metadata; neither writes, queries artifacts or generates a PDF. revise_proforma_presentation creates an audited visual revision with its parent, a compare-and-set (CAS) check and the authentic presentation_revision preview tokens. It only keeps the captured source and admits the purpose complete in A4 format. It does not reissue or recalculate. See Document presentations.
Delivery notes
Delivery notes: search, CRUD, deliver/cancel/sign, convert, send, bulk operations, lookup by external ID, public links, PDFs, presentations and GDPR signature erasure. (26 tools)
| Tool | Scope | Category |
|---|---|---|
find_delivery_note_by_external_id | delivery_notes:read | read |
get_delivery_note | delivery_notes:read | read |
get_delivery_note_pdf | pdfs:read | read |
get_delivery_note_presentation | delivery_notes:read | read |
get_delivery_note_public_link | delivery_notes:read | read |
get_delivery_note_stats | delivery_notes:read | read |
get_delivery_note_statuses | delivery_notes:read | read |
list_delivery_note_presentations | delivery_notes:read | read |
search_delivery_notes | delivery_notes:read | read |
assign_delivery_note_presentation | delivery_notes:write | write |
bulk_change_delivery_note_status | delivery_notes:transition | write |
bulk_delete_delivery_notes | delivery_notes:delete | destructive |
bulk_delivery_notes_pdf_link | pdfs:read | generate |
bulk_send_delivery_notes ² | delivery_notes:write | send |
cancel_delivery_note | delivery_notes:transition | write |
convert_delivery_note | delivery_notes:transition | write |
create_delivery_note | delivery_notes:write | write |
delete_delivery_note | delivery_notes:delete | destructive |
duplicate_delivery_note | delivery_notes:write | write |
forget_delivery_note_signature | delivery_notes:gdpr_forget ¹ | destructive |
mark_delivery_note_delivered | delivery_notes:transition | write |
revise_delivery_note_presentation | delivery_notes:write | write |
send_delivery_note | delivery_notes:write | send |
sign_delivery_note | delivery_notes:transition | write |
update_delivery_note | delivery_notes:write | write |
update_delivery_note_public_link | delivery_notes:write | write |
get_delivery_note_pdf returns the exact signed download link (download_url) with its expiry (expires_at) when a prepared output exists, or its state while it is still being generated; 404 pdf_artifact_not_found means no retained PDF matches the document's current presentation, purpose and format; a retained PDF that failed to render or cannot be verified answers the PDF-unavailable error (500), and one erased for privacy answers 410; the compatible mode returns the content as base64. update_delivery_note_public_link takes revoke, activate, extend, reset or publish, the last one with the exact reference and the observed version. In send_delivery_note, presentation_precondition identifies the exact PDF that was reviewed, and expected_presentation_uuid and expected_publication_id pin the expected identities. To accept an exact presentation, sign_delivery_note takes expected_presentation_id, expected_external_version, expected_source_token, expected_artifact_id and an operation_key (UUID v7); expected_publication_id is optional when there was no publication. These fields only take effect when revisioned presentation is enabled for the company; otherwise they are ignored.
assign_delivery_note_presentation assigns a template_id (UUIDv7) or an explicit null to inherit, with expected_version. It only applies to drafts of the authenticated company and does not change amounts or numbering. get_delivery_note_presentation reads the visual state and the retained capture of an authorized document, and list_delivery_note_presentations lists the retained captures in descending order with page/per_page and the captured metadata; neither writes, queries artifacts or generates a PDF. revise_delivery_note_presentation creates an audited visual revision with its parent, a compare-and-set (CAS) check and the authentic presentation_revision preview tokens. It only keeps the captured source and admits the purpose complete in A4 format. It does not reissue or recalculate. See Document presentations.
Transport control documents
Spanish electronic administrative control document (DeCA) for road freight: search, drafts (also pre-filled from delivery notes), issue, modify during the service, close, reopen, cancel, supersede, email the copy to the carrier, issuance evidence and the PDF of each version. (15 tools)
| Tool | Scope | Category |
|---|---|---|
get_transport_document | transport_documents:read | read |
get_transport_document_evidence | transport_documents:read | read |
get_transport_document_pdf | pdfs:read | read |
get_transport_document_statuses | transport_documents:read | read |
search_transport_documents | transport_documents:read | read |
cancel_transport_document | transport_documents:transition | write |
close_transport_document | transport_documents:transition | write |
create_transport_document | transport_documents:write | write |
delete_transport_document | transport_documents:delete | destructive |
issue_transport_document | transport_documents:transition | write |
modify_transport_document | transport_documents:transition | write |
reopen_transport_document | transport_documents:transition | write |
send_transport_document | transport_documents:write | send |
supersede_transport_document | transport_documents:transition | write |
update_transport_document | transport_documents:write | write |
issue_transport_document, modify_transport_document, cancel_transport_document,
supersede_transport_document and send_transport_document are irreversible and
accept idempotency_key. get_transport_document_pdf returns the permanent public
URL and the metadata of the version (sha256, size), never the PDF bytes. The QR code
and the proof of issuance are binary REST downloads without a tool
(GET /v1/companies/{company}/transport-documents/{transport_document}/qr and /issuance-proof), and loading places
are managed only in the app. See Transport control documents.
search_transport_documents takes the same q (1 to 255 characters) and sort as
GET /v1/companies/{company}/transport-documents: transport_date, number, created or updated, with a
leading - for descending order and -transport_date by default.
create_transport_document does not take id, like the REST endpoint: the server
generates it and an id argument is ignored. Both the create and the edit tools
normalise UUIDs to lower case and answer a shipments[].id that is already in use, or
that belongs to another document, with the same 422 on shipments.N.id as the REST
API. The tools that leave an entry in the issuance evidence (issue, modify, close, reopen,
cancel, supersede and send) attribute it to the credential that calls them (the API key,
or the OAuth client with the user who authorised it), never to the user who created the
key;
get_transport_document_evidence returns that actor in actor_name and reports automatic
closes as auto_closed.
Expenses
Expenses: search, CRUD, mark paid, partial-payment ledger, bulk operations, pending/overdue lists, lookup by external ID, file attachments and payment receipts. (19 tools)
create_purchase_invoice and update_purchase_invoice accept the measured-line contract (purchase_measurement, discount_percent, price_source, source_line_index); duplicating from source_purchase_invoice_id also requires purchase_invoices:read. See Measured purchase lines.
| Tool | Scope | Category |
|---|---|---|
download_purchase_invoice_file | purchase_invoices:read | read |
find_purchase_invoice_by_external_id | purchase_invoices:read | read |
get_purchase_invoice | purchase_invoices:read | read |
get_purchase_invoice_payment_receipt | pdfs:read | read |
list_purchase_invoice_expense_categories | purchase_invoices:read | read |
get_purchase_invoice_stats | purchase_invoices:read | read |
list_overdue_purchase_invoices | purchase_invoices:read | read |
list_pending_purchase_invoices | purchase_invoices:read | read |
list_purchase_invoice_payments | purchase_invoices:read | read |
search_purchase_invoices | purchase_invoices:read | read |
attach_purchase_invoice_file | purchase_invoices:write | write |
bulk_change_purchase_invoice_status | purchase_invoices:transition | write |
bulk_delete_purchase_invoices | purchase_invoices:delete | destructive |
create_purchase_invoice | purchase_invoices:write | write |
delete_purchase_invoice | purchase_invoices:delete | destructive |
delete_purchase_invoice_file | purchase_invoices:write | write |
mark_purchase_invoice_paid | purchase_invoices:transition | write |
register_purchase_invoice_payment | purchase_invoices:transition | write |
update_purchase_invoice | purchase_invoices:write | write |
Purchase scanner
Receive documents through the multipart API or scanner mailbox, inspect extraction and evidence, correct fields, resolve duplicates and create a purchase draft. Upload and original downloads use HTTP; MCP manages the persisted scans. See the document scanner guide. (10 tools)
| Tool | Scope | Category |
|---|---|---|
search_purchase_scans | purchase_invoices:read | read |
get_purchase_scan | purchase_invoices:read | read |
get_purchase_scan_stats | purchase_invoices:read | read |
list_purchase_scan_emails | purchase_invoices:read | read |
save_purchase_scan_review | purchase_invoices:write | write |
convert_purchase_scan | purchase_invoices:write | write |
resolve_purchase_scan_duplicate | purchase_invoices:write | write |
retry_purchase_scan | purchase_invoices:write | write |
archive_purchase_scan | purchase_invoices:delete | destructive |
restore_purchase_scan | purchase_invoices:write | write |
Two purchase-scanner operations stay off MCP by design and are REST-only:
uploading a scan
(POST /v1/companies/{company}/purchase-scans)
is a multipart/binary upload MCP cannot carry, and downloading the original
file
(GET /v1/companies/{company}/purchase-scans/{id}/source)
returns the encrypted binary, so MCP exposes its metadata instead.
PublicApiV1McpToolParityTest.php keeps both on its allowlist. Replacing the
original file has no v1 endpoint at all — it's only available from the web
app.
Recurring invoices
Recurring templates: search, CRUD, create from an invoice, activate/pause/resume/cancel/skip, bulk status change, preview, generate now, lookup by external ID, logs and activity. (19 tools)
| Tool | Scope | Category |
|---|---|---|
find_recurring_invoice_by_external_id | recurring_invoices:read | read |
get_recurring_invoice | recurring_invoices:read | read |
get_recurring_invoice_stats | recurring_invoices:read | read |
list_recurring_invoice_activities | recurring_invoices:read | read |
list_recurring_invoice_logs | recurring_invoices:read | read |
preview_recurring_invoice | recurring_invoices:read | read |
search_recurring_invoices | recurring_invoices:read | read |
activate_recurring_invoice | recurring_invoices:transition | write |
bulk_change_recurring_invoice_status | recurring_invoices:transition | write |
bulk_delete_recurring_invoices | recurring_invoices:delete | destructive |
cancel_recurring_invoice | recurring_invoices:transition | write |
create_recurring_invoice | recurring_invoices:write | write |
create_recurring_invoice_from_invoice | recurring_invoices:write | write |
delete_recurring_invoice | recurring_invoices:delete | destructive |
generate_recurring_invoice | recurring_invoices:transition | write |
pause_recurring_invoice | recurring_invoices:transition | write |
resume_recurring_invoice | recurring_invoices:transition | write |
skip_recurring_invoice | recurring_invoices:write | write |
update_recurring_invoice | recurring_invoices:write | write |
generate_recurring_invoice generates an invoice now from a recurrence of the authenticated company and, depending on generation_mode, can issue and send it. It is irreversible: it needs confirmation from the host or UI and an idempotency key, and retries replay the same response. It changes neither the configuration nor the date of the attempt. It requires recurring_invoices:transition, like pausing and resuming, which is what the OAuth scope recurring.generate_now grants; the REST operation POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/generate keeps requiring recurring_invoices:write.
Series
Numbering series (editable under the fiscal guards of the numbering, never deleted): search, create, update, archive/unarchive, set default, bootstrap the four default series of a brand-new company, stats, PDF template preference and activity. (15 tools)
| Tool | Scope | Category |
|---|---|---|
find_series_by_code | series:read | read |
get_default_series_for_type | series:read | read |
get_series | series:read | read |
get_series_activities | series:read | read |
get_series_pdf_template | series:read | read |
get_series_stats | series:read | read |
list_active_series | series:read | read |
search_series | series:read | read |
archive_series | series:write | write |
assign_series_pdf_template | series:write | write |
bootstrap_series | series:write | write |
create_series | series:write | write |
mark_series_as_default | series:write | write |
unarchive_series | series:write | write |
update_series | series:write | write |
create_series with a pdf_template_id requires the same authorization as update_series. get_series_pdf_template reads the PDF preference of one of your series, its version and its availability. It keeps the saved reference even when it is not currently eligible, and it neither generates documents nor alters the numbering. assign_series_pdf_template assigns a compatible company template, or clears the preference with null to inherit. expected_version is the visual CAS version read from the series, and a replay with the same key is resolved before that check. It does not renumber or generate a PDF. unarchive_series always succeeds: if the PDF template the series kept is no longer selectable, the response adds warnings with inherited_candidate_unavailable and the series uses the applicable default template, without losing the saved reference.
PDF templates
Company PDF template library: templates, commercial identities (brands), private assets, per-contact and company preferences, revisions and impact. Gated by the pdf_templates module. (25 tools)
| Tool | Scope | Category |
|---|---|---|
get_pdf_commercial_identity | pdf_templates:read | read |
get_pdf_commercial_identity_impact | pdf_templates:read | read |
get_pdf_commercial_identity_revision | pdf_templates:read | read |
get_pdf_template | pdf_templates:read | read |
get_pdf_template_asset | pdf_templates:read | read |
get_pdf_template_contact_default | pdf_templates:read | read |
get_pdf_template_defaults | pdf_templates:read | read |
get_pdf_template_impact | pdf_templates:read | read |
get_pdf_template_revision | pdf_templates:read | read |
list_pdf_commercial_identities | pdf_templates:read | read |
list_pdf_templates | pdf_templates:read | read |
archive_pdf_commercial_identity | pdf_templates:write | write |
archive_pdf_template | pdf_templates:write | write |
create_pdf_commercial_identity | pdf_templates:write | write |
create_pdf_template | pdf_templates:write | write |
duplicate_pdf_template | pdf_templates:write | write |
publish_pdf_commercial_identity_revision | pdf_templates:write | write |
publish_pdf_template_revision | pdf_templates:write | write |
restore_pdf_commercial_identity | pdf_templates:write | write |
restore_pdf_template | pdf_templates:write | write |
set_pdf_template_contact_default | pdf_templates:write | write |
set_pdf_template_defaults | pdf_templates:write | write |
update_pdf_commercial_identity | pdf_templates:write | write |
update_pdf_template | pdf_templates:write | write |
upload_pdf_template_asset | pdf_templates:write | write |
Creating, renaming, archiving, restoring and publishing a revision, and saving preferences, require an administrator. The tools that change an existing entity take expected_version (a compare-and-set check), and a replay with the same key is resolved before that check. create_pdf_template and create_pdf_commercial_identity create a new entity, so they take no expected_version; upload_pdf_template_asset creates a new private asset and takes none either. Reuse the idempotency_key when retrying them so nothing is created or uploaded twice. duplicate_pdf_template takes the expected_version of the source template you read and, with idempotency_key, avoids creating two copies. The read tools are authorized reads of the issuer and need neither an idempotency key nor a write precondition. See the PDF template library guide.
PDF artifacts and previews
PDF artifacts and previews: prepare the PDF of an authorized capture, run the retained plan, read the metadata and verify the original, and preview a template. (5 tools)
| Tool | Scope | Category |
|---|---|---|
get_pdf_artifact | pdfs:read | read |
read_pdf_artifact | pdfs:read | read |
prepare_pdf_artifact | pdfs:read | generate |
preview_pdf_template | pdfs:read + pdf_templates:read | generate |
render_pdf_artifact | pdfs:read | generate |
prepare_pdf_artifact prepares the PDF of an exact authorized capture; it never creates a capture. render_pdf_artifact runs the exact retained plan in sync or async mode, with no live fallback. get_pdf_artifact reads the safe metadata of the exact artifact; polling never generates anything. read_pdf_artifact verifies the original PDF and returns its metadata with a short signed link, never base64. preview_pdf_template prepares a preview with the authority and the scopes pdfs:read + pdf_templates:read; it neither captures nor publishes. See PDF previews and artifacts.
Taxes
Taxes (Factuarea catalog plus your own taxes): search, create, update, delete, defaults per company, in-use checks, tax/total calculations and the read-only AEAT tax catalog (regimes, exemption causes, IRPF rates and the legal VAT ↔ equivalence-surcharge pairs). (18 tools)
| Tool | Scope | Category |
|---|---|---|
calculate_tax | taxes:read | read |
calculate_totals | taxes:read | read |
check_tax_in_use | taxes:read | read |
get_active_taxes | taxes:read | read |
get_tax | taxes:read | read |
get_tax_catalog | taxes:read | read |
get_tax_defaults_for_document | taxes:read | read |
get_tax_stats | taxes:read | read |
get_taxes_by_type | taxes:read | read |
get_taxes_for_purchases | taxes:read | read |
get_taxes_for_sales | taxes:read | read |
search_taxes | taxes:read | read |
create_tax | taxes:write | write |
set_tax_as_default | taxes:write | write |
set_tax_default_for_document | taxes:write | write |
toggle_tax_active | taxes:write | write |
update_tax | taxes:write | write |
delete_tax | taxes:delete | destructive |
VeriFactu
AEAT SIF: records, events, chain validation, retry (one record or every blocked one), subsanación of accepted or rejected records, third-party remission representation, certificates, settings, responsible declaration and AEAT access log. (31 tools)
| Tool | Scope | Category |
|---|---|---|
find_verifactu_record_by_csv | verifactu:read | read |
find_verifactu_record_by_huella | verifactu:read | read |
find_verifactu_record_by_invoice_number | verifactu:read | read |
get_active_company_certificate | verifactu:read | read |
get_aeat_access_record | verifactu:read | read |
get_company_representation | verifactu:read | read |
get_declaracion_responsable | verifactu:read | read |
get_declaracion_responsable_history | verifactu:read | read |
get_invoice_verifactu | verifactu:read | read |
get_verifactu_activities | verifactu:read | read |
get_verifactu_config | verifactu:read | read |
get_verifactu_event | verifactu:read | read |
get_verifactu_event_summary | verifactu:read | read |
get_verifactu_record | verifactu:read | read |
get_verifactu_stats | verifactu:read | read |
list_aeat_access_records | verifactu:read | read |
list_company_certificates | verifactu:read | read |
list_verifactu_events | verifactu:read | read |
search_verifactu_records | verifactu:read | read |
validate_verifactu_chain | verifactu:read | read |
activate_company_certificate | verifactu:write ¹ | write |
create_invoice_verifactu | verifactu:write ¹ | write |
register_company_representation | verifactu:write ¹ | write |
retry_blocked_verifactu_records | verifactu:write ¹ | write |
retry_verifactu_event | verifactu:write ¹ | write |
retry_verifactu_record | verifactu:write ¹ | write |
revoke_company_certificate | verifactu:write ¹ | write |
revoke_company_representation | verifactu:write ¹ | write |
subsanar_verifactu_record | verifactu:write ¹ | write |
update_verifactu_settings | verifactu:write ¹ | write |
upload_company_certificate | verifactu:write ¹ | write |
FacturaE (FACe)
B2G electronic invoicing: download the FacturaE 3.2.2 XML of an invoice and manage its FACe submissions (submit, track, cancel). Gated by the facturae module. (5 tools)
| Tool | Scope | Category |
|---|---|---|
get_face_submission | facturae:read | read |
list_invoice_face_submissions | facturae:read | read |
cancel_face_submission | facturae:write | write |
get_invoice_facturae_link | facturae:read | read |
send_invoice_to_face | facturae:write | write |
cancel_face_submission also requires the edit capability on the facturae module; without it the call answers 403 facturae_operation_forbidden.
Tax reports
AEAT filings computed from your own invoicing data: generate Modelo 303, 347 and 130 as the official positional file, a PDF or a review workbook; preview the breakdown without persisting anything; and read the generation history, stats, activity and files. (9 tools)
| Tool | Scope | Category |
|---|---|---|
download_tax_report | tax_reports:read | read |
find_tax_report_by_period | tax_reports:read | read |
get_tax_report_activities | tax_reports:read | read |
get_tax_report_history | tax_reports:read | read |
get_tax_report_stats | tax_reports:read | read |
preview_tax_report | tax_reports:read | read |
generate_tax_report_130 | tax_reports:write | generate |
generate_tax_report_303 | tax_reports:write | generate |
generate_tax_report_347 | tax_reports:write | generate |
Only txt_aeat is filed with the AEAT; the PDF and the workbook are review
material built from the same calculation. See
Tax reports.
Webhooks & events
Webhook endpoints of a tax ID, deliveries, secret rotation, ping/replay, test events, and the published event catalog. The account has its own endpoints: Account webhooks. (13 tools)
| Tool | Scope | Category |
|---|---|---|
get_event | events:read | read |
get_webhook_delivery | webhooks:read | read |
get_webhook_endpoint | webhooks:read | read |
list_events | events:read | read |
list_webhook_deliveries | webhooks:read | read |
search_webhook_endpoints | webhooks:read | read |
create_webhook_endpoint | webhooks:write | write |
delete_webhook_endpoint | webhooks:delete | write |
ping_webhook_endpoint | webhooks:write | write |
replay_webhook_delivery | webhooks:write | write |
rotate_webhook_secret | webhooks:write | write |
test_webhook_endpoint | webhooks:write | write |
update_webhook_endpoint | webhooks:write | write |
Automations
The automation engine: rules in the when → if → do shape, the immutable versions of each rule's definition, the dry run that reports what a rule would do without doing it, the run history with its steps and their typed discard reasons, replay of a parked step or of a whole run, the trigger/action catalog with the fields each trigger exposes, and the monthly execution quota. Gated by the automations module. (18 tools)
replay_automation_run and replay_automation_run_step run the steps for
real: they send emails, deliver webhooks and call third parties. This is not
a harmless retry — confirm with the user before calling them. The work is
queued, so the response confirms it was accepted, not that it finished: check
the outcome with get_automation_run or list_automation_run_steps.
| Tool | Scope | Category |
|---|---|---|
dry_run_automation_rule | automations:read | read |
get_automation_catalog | automations:read | read |
get_automation_rule | automations:read | read |
get_automation_rule_version | automations:read | read |
get_automation_run | automation_runs:read | read |
get_automation_trigger_fields | automations:read | read |
get_automation_usage | automations:read | read |
list_automation_rule_versions | automations:read | read |
list_automation_rules | automations:read | read |
list_automation_run_steps | automation_runs:read | read |
list_automation_runs | automation_runs:read | read |
activate_automation_rule | automations:write | write |
create_automation_rule | automations:write | write |
delete_automation_rule | automations:delete ¹ | destructive |
pause_automation_rule | automations:write | write |
replay_automation_run | automations:write | write |
replay_automation_run_step | automations:write | write |
update_automation_rule | automations:write | write |
Account
Account fiscal identity and personalization: verify the company's registered name + NIF against the AEAT census, read personalization templates and update account personalization. (4 tools)
| Tool | Scope | Category |
|---|---|---|
get_account_billing | account:read | read |
get_account_personalization_templates | account:read | read |
update_account_personalization | account:write ¹ | write |
verify_account_census | account:read | write |
Account administration
Ownership of the account and the transfer of tax IDs between accounts: issue, list, accept and revoke a tax ID transfer, and hand the ownership of the account to another member. These tools act on the account, not on the data of a tax ID. Issuing a transfer returns its secret once; the receiving account accepts it with that secret, and the giving account can revoke it until then. accept_nif_transfer, create_nif_transfer, revoke_nif_transfer and transfer_account_ownership are irreversible: the server publishes them with destructiveHint: true and an idempotency_key input (see Protocol and transport). When the accepted tax IDs need contracted seats and none is free, accept_nif_transfer buys the missing ones, so always send an idempotency_key. (not part of the totals above: * does not cover their scopes)
| Tool | Scope | Category |
|---|---|---|
list_nif_transfers | nif_transfers:read ¹ | read |
accept_nif_transfer | nif_transfers:write ¹ | write |
create_nif_transfer | nif_transfers:write ¹ | write |
revoke_nif_transfer | nif_transfers:write ¹ | write |
transfer_account_ownership | account:owner ¹ | write |
Account members
The people of the account: list and read the members with their account role (owner, admin or member) and their external-advisor mark, add a member, change their role or their external-advisor mark and remove them, read, set and revoke the grant of a member on one tax ID, read and set their module access, and manage the invitations that create them. delete_account_member is irreversible: the server publishes it with destructiveHint: true and an idempotency_key input. (not part of the totals above: * does not cover their scopes)
| Tool | Scope | Category |
|---|---|---|
get_account_member | members:read ¹ | read |
get_account_member_grant | members:read ¹ | read |
get_account_member_module_access | members:read ¹ | read |
list_account_member_grants | members:read ¹ | read |
list_account_members | members:read ¹ | read |
get_account_invitation | invitations:read ¹ | read |
list_account_invitations | invitations:read ¹ | read |
create_account_member | members:write ¹ | write |
revoke_account_member_grant | members:write ¹ | write |
set_account_member_grant | members:write ¹ | write |
update_account_member | members:write ¹ | write |
update_account_member_module_access | members:write ¹ | write |
cancel_account_invitation | invitations:write ¹ | write |
create_account_invitation | invitations:write ¹ | write |
resend_account_invitation | invitations:write ¹ | write |
delete_account_member | members:write ¹ | destructive |
Tax IDs of the account
The tax ID portfolio of the account: list, find by fiscal identifier, read, register, update, activate (one or many), deactivate and archive tax IDs, follow and reconcile the creation of one, the invoicing statistics per tax ID, whether a tax ID can already issue and a preview of the charge of adding or activating additional tax IDs, plus the usage of the account in the current period (requests and documents, broken down by tax ID). Additional tax IDs are billed by contracted seat: get_additional_nif_seats reads the contracted, occupied and free seats of the account, preview_additional_nif_seat_change previews, without charging, setting them to a quantity, and update_additional_nif_seats sets it (absolute quantity, idempotent with idempotency_key). Buying seats charges the prorated difference at once; reducing them takes effect at renewal. Below the occupied seats, deactivate lists the UUIDs of the tax IDs that will be deactivated at renewal, exactly as many as exceed the seats; if the reduction ends an applied offer package, accept_offer_package_loss (boolean) confirms the loss. create_company, activate_company and activate_companies buy the seats that are missing when none is free and the account pays, so send an idempotency_key. Registering or reactivating an additional tax ID can be charged: see Additional tax IDs. (18 tools)
| Tool | Scope | Category |
|---|---|---|
get_account_usage | account:read | read |
find_company_by_tax_id | companies:read ¹ | read |
get_additional_nif_seats | companies:read ¹ | read |
get_companies_stats | companies:read ¹ | read |
get_company | companies:read ¹ | read |
get_company_creation_status | companies:read ¹ | read |
get_company_issuing_readiness | companies:read ¹ | read |
get_company_seat_charge_preview | companies:read ¹ | read |
list_companies | companies:read ¹ | read |
preview_additional_nif_seat_change | companies:read ¹ | read |
activate_companies | companies:write ¹ | write |
activate_company | companies:write ¹ | write |
create_company | companies:write ¹ | write |
deactivate_company | companies:write ¹ | write |
update_additional_nif_seats | companies:write ¹ | write |
update_company | companies:write ¹ | write |
verify_company_creation | companies:write ¹ | write |
delete_company | companies:delete ¹ | write |
Account webhooks
The webhook endpoints of the account, separate from the endpoints of one tax ID: create, read, list, update and delete an endpoint, rotate its signing secret, send a test delivery, read its deliveries and retry a failed one. An account endpoint receives the events of the account and, by account_relationship (own, managed or all), those of its tax IDs. See Account webhooks. (10 tools)
These tools use the same webhooks:* scopes as Webhooks & events, but they work only with an API key: an OAuth token never lists them, and calling one answers 403 forbidden_action. A test key reads the test endpoints; creating, updating, deleting, rotating, testing and retrying need a live key. The person who issued the key must be an owner or admin of the account today, and the key must cover all its tax IDs. delete_account_webhook and rotate_account_webhook_secret are irreversible: the server publishes them with destructiveHint: true and an idempotency_key input.
| Tool | Scope | Category |
|---|---|---|
get_account_webhook | webhooks:read ¹ | read |
get_account_webhook_delivery | webhooks:read ¹ | read |
list_account_webhook_deliveries | webhooks:read ¹ | read |
list_account_webhooks | webhooks:read ¹ | read |
create_account_webhook | webhooks:write ¹ | write |
retry_account_webhook_delivery | webhooks:write ¹ | write |
rotate_account_webhook_secret | webhooks:write ¹ | write |
test_account_webhook | webhooks:write ¹ | write |
update_account_webhook | webhooks:write ¹ | write |
delete_account_webhook | webhooks:delete ¹ | write |
API keys
Self-service API keys of your account: list, create, get, read its daily usage, rotate the secret, revoke and replace the tax ID scope of a key. A new scope can never exceed the one of the credential that changes it. The secret is returned once, at creation and rotation. revoke_api_key and rotate_api_key_secret are irreversible: the server publishes them with destructiveHint: true and an idempotency_key input. See scoped keys. (7 tools)
| Tool | Scope | Category |
|---|---|---|
get_api_key | account:read | read |
get_api_key_usage | account:read | read |
list_api_keys | account:read | read |
create_api_key | account:write ¹ | write |
revoke_api_key | account:write ¹ | write |
rotate_api_key_secret | account:write ¹ | write |
update_api_key_nif_scope | account:write ¹ | write |
Portfolio workforce
Consolidated time-tracking compliance across the tax ID portfolio: one row per active tax ID within the scope of the credential, the owner company of the account excluded, with the state of its latest monthly close and the totals of the last closed one (balance, overtime and number of employees). One call aggregates the whole portfolio, where every other time-tracking tool operates on one tax ID. (1 tools)
| Tool | Scope | Category |
|---|---|---|
get_consolidated_workforce | companies:read ¹ | read |
Payments & gateways
Payment and store integrations: Stripe auto-invoicing, connected accounts, payouts, the integration event inbox, WooCommerce and Shopify store management and diagnostics. These tools are API-key-only. Availability also depends on the company’s modules and provider configuration. (26 tools)
replay_integrations_event has a real fiscal effect. If the cause that blocked
invoicing is now resolved, replaying a parked event can issue an actual
invoice, with its series number and its VeriFactu submission. It is not a
harmless retry: confirm with the user before calling it. It does not duplicate
invoices — the replay goes through the same idempotency check as the original
attempt.
| Tool | Scope | Category |
|---|---|---|
get_integrations_event | integration_events:read ¹ | read |
get_payout | payouts:read ¹ | read |
get_stripe_autoinvoicing_config | stripe_autoinvoicing:read ¹ | read |
get_stripe_connected_account | stripe_autoinvoicing:read ¹ | read |
list_integrations_events | integration_events:read ¹ | read |
list_stripe_autoinvoiced_correctives | stripe_autoinvoicing:read ¹ | read |
list_stripe_autoinvoiced_payments | stripe_autoinvoicing:read ¹ | read |
list_stripe_charge_rules | stripe_autoinvoicing:read ¹ | read |
list_stripe_connected_accounts | stripe_autoinvoicing:read ¹ | read |
list_stripe_non_invoiced_charges | stripe_autoinvoicing:read ¹ | read |
search_payouts | payouts:read ¹ | read |
create_stripe_charge_rule | stripe_autoinvoicing:write ¹ | write |
delete_stripe_charge_rule | stripe_autoinvoicing:write ¹ | destructive |
disconnect_stripe_connected_account | stripe_autoinvoicing:write ¹ | write |
reorder_stripe_charge_rules | stripe_autoinvoicing:write ¹ | write |
replay_integrations_event | integration_events:write ¹ | write |
update_stripe_autoinvoicing_config | stripe_autoinvoicing:write ¹ | write |
update_stripe_charge_rule | stripe_autoinvoicing:write ¹ | write |
update_stripe_connected_account | stripe_autoinvoicing:write ¹ | write |
list_stores | stores:read ¹ | read |
get_store | stores:read ¹ | read |
connect_store | stores:write ¹ | write |
update_store | stores:write ¹ | write |
disconnect_store | stores:write ¹ | write |
test_woocommerce_store_connection | woocommerce_store:write ¹ | write |
test_shopify_store_connection | shopify_store:write ¹ | write |
Emails
Sent-email log: list the emails Factuarea sent on the company's behalf (invoices, quotes, delivery notes, payment reminders), read one by its id, and summarise the outcome for a batch of up to 100 documents in a single call. Use it to answer "did the email for this invoice go out?" and to investigate failed sends. (3 tools)
The status describes the hand-off to the outgoing SMTP server, not actual
delivery. sent means the outgoing mail server accepted the message — it can
still bounce or land in spam without Factuarea ever knowing. There is no
delivered, bounced or opened state: queued, sending, sent and
failed are the only ones. Never state that the recipient received, opened or
read the message.
| Tool | Scope | Category |
|---|---|---|
get_emails | emails:read ¹ | read |
get_emails_indicators | emails:read ¹ | read |
list_emails | emails:read ¹ | read |
API request logs
The traffic of your integration against the public v1 API over the last 30 days: list the calls with their method, path, status code, duration, API-key prefix and environment, filtering by errors only or by any of those fields, and read a single one by its request_id — the opaque identifier every response returns in its header. list_developers_request_logs and get_developers_request_logs show the requests of one tax ID; list_account_request_logs and get_account_request_log show those of every key of the account, in the environment of the key that calls. The account tools work only with an API key, issued by an owner or admin of the account and covering all its tax IDs: see account request logs. Use them to debug an integration: what it called, when, with which status and how long it took. Headers, body and query string are not stored and are never returned. (4 tools)
| Tool | Scope | Category |
|---|---|---|
get_account_request_log | developers:read ¹ | read |
get_developers_request_logs | developers:read ¹ | read |
list_account_request_logs | developers:read ¹ | read |
list_developers_request_logs | developers:read ¹ | read |
Employees
Workforce roster: search, CRUD-lite (create/update/deactivate/reactivate), stats and the invitation lifecycle (send/resend/cancel and list employee invitations). Gated by the control_horario module. (18 tools)
create_employee and reactivate_employee buy the contracted seats that are missing when none is free and the account pays: send an idempotency_key so a retry does not charge twice. See Employee seats.
Durable employee batches support preparation, quote review, confirmation and recovery through the same operation.
| Tool | Scope | Category |
|---|---|---|
find_employee_by_external_id | employees:read | read |
get_employee | employees:read | read |
get_employee_stats | employees:read | read |
list_employee_invitations | employees:read | read |
search_employees | employees:read | read |
cancel_employee_invitation | employees:write | write |
create_employee | employees:write | write |
deactivate_employee | employees:write | write |
reactivate_employee | employees:write | write |
resend_employee_invitation | employees:write | write |
send_employee_invitation | employees:write | write |
update_employee | employees:write | write |
cancel_employee_batch | employees:write | write |
confirm_employee_batch | employees:write | write |
get_employee_batch | employees:read | read |
list_employee_batches | employees:read | read |
prepare_employee_batch | employees:write | write |
refresh_employee_batch_quote | employees:write | write |
Employee seats
Employee-seat billing by contracted seat: preview and read the charge and the billing, subscribe, set the contracted seats, change the quantity and cancel the add-on, plus the seat offer redemptions. update_employee_seats sets the contracted seats (absolute quantity, idempotent with idempotency_key): buying charges the prorated difference at once, and reducing takes effect at renewal without a refund. preview_employee_seat_charge previews the charge, without charging, of hiring employees or, with contracted_seats, of setting the seats; contracted_seats cannot be combined with count or employee_ids. When the new quantity is below the occupied seats, update_employee_seats, update_additional_nif_seats and cancel_employee_seat_addon accept deactivate, the list of UUIDs of what is deactivated at renewal, and accept_offer_package_loss, a boolean that confirms the loss of an applied offer package if the reduction breaks it. Gated by the control_horario module. (12 tools)
| Tool | Scope | Category |
|---|---|---|
get_employee_seat_billing | employees:read | read |
preview_employee_seat_charge | employees:read | read |
cancel_employee_seat_addon | employees:write | write |
change_employee_seat_quantity | employees:write | write |
subscribe_employee_seat_addon | employees:write | write |
update_employee_seats | employees:write | write |
cancel_employee_seat_offer_redemption | employees:write | write |
confirm_employee_seat_offer_redemption | employees:write | write |
get_employee_seat_offer_redemption | employees:read | read |
list_employee_seat_offer_redemptions | employees:read | read |
prepare_employee_seat_offer_redemption | employees:write | write |
refresh_employee_seat_offer_redemption | employees:write | write |
Managed-company seat offers
Private managed-company seat offers use the paying master company and the current companies:* scope. Preparing or refreshing a quote does not activate companies or charge. prepare_employee_seat_offer_redemption and prepare_gestoria_seat_offer_redemption accept kind: apply_to_existing, which applies the code to the seats the account already has and creates, activates and reactivates nothing; it carries no other key. During the trial a seat redemption answers 422 customer_offer_not_eligible with details.reason = trial_active, and an offer package code, which MCP does not redeem, answers reason = product (see Offers). (6 tools)
| Tool | Scope | Category |
|---|---|---|
cancel_gestoria_seat_offer_redemption | companies:write | write |
confirm_gestoria_seat_offer_redemption | companies:write | write |
get_gestoria_seat_offer_redemption | companies:read | read |
list_gestoria_seat_offer_redemptions | companies:read | read |
prepare_gestoria_seat_offer_redemption | companies:write | write |
refresh_gestoria_seat_offer_redemption | companies:write | write |
Work schedules
Weekly work schedules and their assignments: search, CRUD, archive/unarchive, assign/unassign to employees, and read an employee's effective schedule. Gated by the control_horario module. (11 tools)
| Tool | Scope | Category |
|---|---|---|
get_employee_work_schedule | work_schedules:read | read |
get_work_schedule | work_schedules:read | read |
get_work_schedule_stats | work_schedules:read | read |
list_work_schedule_assignments | work_schedules:read | read |
search_work_schedules | work_schedules:read | read |
archive_work_schedule | work_schedules:write ¹ | write |
assign_work_schedule | work_schedules:write ¹ | write |
create_work_schedule | work_schedules:write ¹ | write |
unarchive_work_schedule | work_schedules:write ¹ | write |
unassign_work_schedule | work_schedules:write ¹ | write |
update_work_schedule | work_schedules:write ¹ | write |
Time tracking
Time clock (RD-ley 8/2019): clock in/out with pauses, manual entries, the time-correction workflow, balances and monthly time sheets, the tamper-evident monthly register close (close/reopen/seal, signature, chain validation) and its exports, plus payroll exports. Gated by the control_horario module. (29 tools)
| Tool | Scope | Category |
|---|---|---|
export_closed_register | time_entries:read | read |
get_current_time_entry_session | time_entries:read | read |
get_employee_time_balance | time_entries:read | read |
get_monthly_close_report | time_entries:read | read |
get_monthly_register_signature | time_entries:read | read |
get_monthly_time_record_close | time_entries:read | read |
get_monthly_time_sheet | time_entries:read | read |
get_team_time_balance_summary | time_entries:read | read |
get_time_correction | time_entries:read | read |
get_time_entry | time_entries:read | read |
get_time_tracking_settings | time_entries:read | read |
search_monthly_time_record_closes | time_entries:read | read |
search_time_corrections | time_entries:read | read |
search_time_entries | time_entries:read | read |
validate_time_record_chain | time_entries:read | read |
export_payroll | payroll_exports:read | read |
list_payroll_export_formats | payroll_exports:read | read |
approve_time_correction | time_entries:write ¹ | write |
clock_in | time_entries:write ¹ | write |
clock_out | time_entries:write ¹ | write |
close_monthly_time_record | time_entries:write ¹ | write |
pause_time_entry | time_entries:write ¹ | write |
record_manual_time_entry | time_entries:write ¹ | write |
reject_time_correction | time_entries:write ¹ | write |
reopen_monthly_time_record | time_entries:write ¹ | write |
request_time_correction | time_entries:write ¹ | write |
resume_time_entry | time_entries:write ¹ | write |
seal_monthly_time_record | time_entries:write ¹ | write |
update_time_tracking_settings | time_entries:write ¹ | write |
Absences
Absences: types, policies (with carryover configuration and assignments), requests (create/approve/reject/cancel), balances and the team absence calendar. Gated by the control_horario module. (25 tools)
| Tool | Scope | Category |
|---|---|---|
get_absence_balance | absences:read | read |
get_absence_calendar | absences:read | read |
get_absence_policy | absences:read | read |
get_absence_request | absences:read | read |
get_absence_type | absences:read | read |
list_absence_policy_assignments | absences:read | read |
search_absence_balances | absences:read | read |
search_absence_policies | absences:read | read |
search_absence_requests | absences:read | read |
search_absence_types | absences:read | read |
archive_absence_policy | absences:write ¹ | write |
archive_absence_type | absences:write ¹ | write |
assign_absence_policy | absences:write ¹ | write |
configure_absence_policy_carryover | absences:write ¹ | write |
create_absence_policy | absences:write ¹ | write |
create_absence_request | absences:write ¹ | write |
create_absence_type | absences:write ¹ | write |
unarchive_absence_policy | absences:write ¹ | write |
unarchive_absence_type | absences:write ¹ | write |
unassign_absence_policy | absences:write ¹ | write |
update_absence_policy | absences:write ¹ | write |
update_absence_type | absences:write ¹ | write |
approve_absence_request | absences:transition ¹ | write |
cancel_absence_request | absences:transition ¹ | write |
reject_absence_request | absences:transition ¹ | write |
Presence
Presence: the live presence board and per-employee / daily presence state. Gated by the control_horario module. (3 tools)
| Tool | Scope | Category |
|---|---|---|
get_employee_presence | presence:read | read |
get_live_presence | presence:read | read |
list_daily_presence | presence:read | read |
Holidays
Holidays: read the company holiday calendar and resolve the holidays applicable to an employee's region (CCAA). Gated by the control_horario module. (3 tools)
| Tool | Scope | Category |
|---|---|---|
get_holiday | holidays:read | read |
list_holidays | holidays:read | read |
resolve_applicable_holidays | holidays:read | read |
Projects
Task projects and their boards: create, edit, archive and delete projects, resolve one by its key (DEV), manage the columns of its board and its task custom fields, export and import its tasks as JSON, read the time logged on it and turn billable time into a draft invoice (invoice_project_time needs invoices:write, because it creates an invoice). Gated by the tasks module. delete_project, delete_project_column and delete_project_custom_field are irreversible, like the delete tools of Tasks. (22 tools)
| Tool | Scope | Category |
|---|---|---|
export_project_tasks | projects:read | read |
find_project_by_key | projects:read | read |
get_project | projects:read | read |
get_project_time_summary | projects:read | read |
list_project_columns | projects:read | read |
list_project_custom_fields | projects:read | read |
list_projects | projects:read | read |
preview_project_time_invoice | projects:read | read |
archive_project | projects:write | write |
create_project | projects:write | write |
create_project_column | projects:write | write |
create_project_custom_field | projects:write | write |
delete_project | projects:delete ¹ | destructive |
delete_project_column | projects:delete ¹ | destructive |
delete_project_custom_field | projects:delete ¹ | destructive |
import_project_tasks | projects:write | write |
invoice_project_time | invoices:write | write |
reorder_project_columns | projects:write | write |
unarchive_project | projects:write | write |
update_project | projects:write | write |
update_project_column | projects:write | write |
update_project_custom_field | projects:write | write |
Tasks
Tasks on the board: search, create, edit, duplicate, move, reposition and delete tasks — one by one or in bulk —, resolve one by its key (DEV-12), change its status, assign it, label it, comment on it, relate it to other tasks, link it to documents and contacts, attach files or create a single-use upload link, log time with a timer and read its activity. The time logged here is task time, not the working-day clock-in of Time tracking. Gated by the tasks module. (52 tools)
The delete tools — delete_task, bulk_delete_tasks, delete_task_comment, delete_task_attachment, delete_task_time_entry and delete_task_label, plus delete_project, delete_project_column and delete_project_custom_field in Projects — are irreversible: there is no trash. Confirm with the user before calling them and send an idempotency_key so a retry does not repeat the effect. Their projects:delete and tasks:delete scopes are API-key-only (¹).
| Tool | Scope | Category |
|---|---|---|
download_task_attachment | tasks:read | read |
find_task_by_key | tasks:read | read |
get_running_task_timer | tasks:read | read |
get_task | tasks:read | read |
get_task_activities | tasks:read | read |
get_task_attachment | tasks:read | read |
get_task_label | tasks:read | read |
get_task_time_entry | tasks:read | read |
list_task_attachments | tasks:read | read |
list_task_comments | tasks:read | read |
list_task_entity_links | tasks:read | read |
list_task_external_links | tasks:read | read |
list_task_labels | tasks:read | read |
list_task_relations | tasks:read | read |
list_task_time_entries | tasks:read | read |
list_tasks_linked_to_entity | tasks:read | read |
search_tasks | tasks:read | read |
assign_task | tasks:write | write |
assign_task_label | tasks:write | write |
attach_task_file | tasks:write | write |
bulk_change_task_status | tasks:write | write |
bulk_delete_tasks | tasks:delete ¹ | destructive |
bulk_update_tasks | tasks:write | write |
change_task_status | tasks:write | write |
create_task | tasks:write | write |
create_task_comment | tasks:write | write |
create_task_external_link | tasks:write | write |
create_task_label | tasks:write | write |
create_task_relation | tasks:write | write |
create_task_time_entry | tasks:write | write |
create_task_upload_link | tasks:write | generate |
delete_task | tasks:delete ¹ | destructive |
delete_task_attachment | tasks:delete ¹ | destructive |
delete_task_comment | tasks:delete ¹ | destructive |
delete_task_external_link | tasks:write | destructive |
delete_task_label | tasks:delete ¹ | destructive |
delete_task_relation | tasks:write | destructive |
delete_task_time_entry | tasks:delete ¹ | destructive |
duplicate_task | tasks:write | write |
link_task_entity | tasks:write | write |
move_task | tasks:write | write |
reposition_task | tasks:write | write |
set_task_custom_field_value | tasks:write | write |
start_task_timer | tasks:write | write |
stop_task_timer | tasks:write | write |
unassign_task | tasks:write | write |
unassign_task_label | tasks:write | destructive |
unlink_task_entity | tasks:write | destructive |
update_task | tasks:write | write |
update_task_comment | tasks:write | write |
update_task_label | tasks:write | write |
update_task_time_entry | tasks:write | write |
Users
The members of the company — the people a task can be assigned to — and the user behind the credential. Not tied to a plan module. (2 tools)
| Tool | Scope | Category |
|---|---|---|
get_current_user | users:read | read |
search_users | users:read | read |
Notifications
The in-app notifications of the credential holder: list them and mark one or all of them as read. Not tied to a plan module. (3 tools)
| Tool | Scope | Category |
|---|---|---|
list_notifications | notifications:read | read |
mark_all_notifications_as_read | notifications:write | write |
mark_notification_as_read | notifications:write | write |
Agenda
The combined agenda of a date window of up to 93 days: due tasks and, for each layer the credential can also read, invoice and expense due dates, quote and pro-forma expiries, recurring invoice runs, tax deadlines, absences and holidays. Gated by the tasks module. (1 tools)
| Tool | Scope | Category |
|---|---|---|
list_agenda_items | tasks:read | read |
Managed-account tools
The ten tools that provision and administer managed accounts are not part of the 668 above, and they do not count in the 41 domains. Their scopes, accounts:read and accounts:write, are privileged: the super-scope * does not cover them, so a key that only holds * does not see these tools in tools/list. List the scope explicitly. Every call also checks that your account holds the managed-account provider privilege that we grant, and answers 403 privileged_scope_required if it does not. They never come through OAuth: use an API key. Managed accounts explains the operation each tool mirrors.
| Tool | Scope | Category |
|---|---|---|
get_managed_account | accounts:read | read |
get_provisioning_usage | accounts:read | read |
list_managed_accounts | accounts:read | read |
preview_managed_account_plan_change | accounts:read | read |
preview_managed_account_provisioning | accounts:read | read |
change_managed_account_access_level | accounts:write | write |
change_managed_account_plan | accounts:write | write |
end_account_management | accounts:write | write |
provision_managed_account | accounts:write | write |
reissue_managed_account_claim | accounts:write | write |
provision_managed_account, change_managed_account_plan, reissue_managed_account_claim and end_account_management are irreversible: the server publishes them with destructiveHint: true and an idempotency_key input.
Three things have no tool, by design:
- The bulk import. It reads uploaded CSV files, which the MCP server does not carry, and it is privileged too. Use the REST API: Bulk import.
- The client's side of a managed account. What the client does with their account — claiming it, raising or lowering the level the provider keeps, ending the management and taking over the payment — happens in the app, and has no
/v1operation either. - The management of granted access. Giving, resending, accepting, declining, revoking, changing the level or the scope of, or renouncing an access between accounts happens in the app, never through the API or MCP. Granted access explains it.