Scopes y permisos
El catálogo de scopes del consentimiento OAuth, cómo se mapea a los scopes detallados que aplican las tools, los scopes de cuenta y privilegiados, el super-scope y el gating por plan/módulo.
Cada tool MCP declara el scope que una credencial debe tener para invocarla. Los scopes funcionan de forma ligeramente distinta según el canal:
- Las API keys se crean directamente con scopes detallados
(
resource:action, p. ej.invoices:read) — el mismo catálogo cerrado que usa la API REST. También puedes conceder el super-scope*, que no cubre los dos scopes privilegiados. - Los tokens OAuth reciben scopes con punto (
resource.action, p. ej.invoices.read) en la pantalla de consentimiento. El servidor los traduce a los scopes detallados automáticamente, de modo que ambos canales aplican el mismo conjunto en el límite de la tool.
Catálogo de consentimiento OAuth
Estos son los scopes que un usuario puede conceder a una app de terceros en la
pantalla de consentimiento. Hay 79 scopes simples más 3 macros. El
consentimiento concede los datos de negocio de un NIF y nunca la administración de
la cuenta: las claves, el equipo, la titularidad, los traspasos de NIF, la cartera de
NIF y las cuentas que aprovisionas no tienen aquí ningún scope y necesitan una API key
(consulta los scopes sin scope OAuth). Uno de los 79, payroll_exports.write, está en el catálogo pero la pantalla no lo
ofrece, porque ninguna tool exige el scope al que se traduce.
Qué concede la pantalla según el nivel y el entorno
La pantalla no ofrece todos los scopes en todos los casos, y la confirmación lo comprueba de nuevo en el servidor:
- Nivel Ver. Si alcanzas la empresa con nivel Ver, solo se pueden conceder scopes de lectura: los que terminan en
.ready el macrofactuarea.read. Un intento de confirmar escritura responde403 invalid_scopeconread_only_restricted_scopes, que lista los scopes rechazados. - Entorno Pruebas. El sandbox no ofrece algunos módulos: VeriFactu, el asistente de WhatsApp, el Vault de documentos, las integraciones de Stripe, GoCardless, Monei, Slack y Teams, los webhooks y las integraciones de tareas. Sus scopes no se conceden en Pruebas; la confirmación responde
403consandbox_restricted_scopes. - Caducidad. La solicitud de consentimiento caduca a los 5 minutos de abrirse, y la pantalla dice cuántos minutos quedan.
Scopes simples
Cada uno concede una capacidad. La columna Maps to muestra el scope detallado que aplican las tools — la capa de consentimiento traduce los scopes OAuth con punto a estos automáticamente. La columna Sensitive marca los scopes que la pantalla de consentimiento destaca y no marca por defecto.
Perfil
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
profile.read | Leer tu nombre, email y empresa activa. | account:read | no |
Contactos
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
contacts.read | Listar y consultar contactos canónicos. | contacts:read | no |
contacts.write | Crear contactos y modificar identidad, roles y perfiles. | contacts:write | no |
contacts.delete | Archivar contactos y retirar roles sin referencias. | contacts:delete | sí |
Catálogo — productos, tarifas, series, impuestos
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
products.read | Listar y leer el catálogo de productos. | products:read | no |
products.write | Crear y actualizar productos. | products:write | no |
products.delete | Eliminar productos. | products:delete | sí |
price_lists.read | Leer tarifas, ítems y precios efectivos. | price_lists:read | no |
price_lists.write | Crear, actualizar y eliminar tarifas e ítems. | price_lists:write | no |
series.read | Leer series de numeración. | series:read | no |
series.write | Crear y actualizar series de numeración. | series:write | no |
taxes.read | Leer tipos impositivos y retenciones. | taxes:read | no |
taxes.write | Crear y actualizar tipos impositivos. | taxes:write | no |
taxes.delete | Eliminar tus propios tipos impositivos. | taxes:delete | sí |
Ventas — facturas, presupuestos, proformas, albaranes, documentos de control
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
invoices.read | Listar y leer facturas. | invoices:read | no |
invoices.write | Crear y actualizar facturas. | invoices:write | no |
invoices.send | Enviar facturas por email. | invoices:send | no |
invoices.delete | Eliminar facturas en borrador. | invoices:delete | sí |
invoices.annul | Anular facturas emitidas. | invoices:void | sí |
invoices.create_corrective | Emitir facturas rectificativas. | invoices:write | no |
quotes.read | Listar y leer presupuestos. | quotes:read | no |
quotes.write | Crear y actualizar presupuestos. | quotes:write | no |
quotes.send | Enviar presupuestos por email. | quotes:send | no |
quotes.delete | Eliminar presupuestos. | quotes:delete | sí |
quotes.convert_to_invoice | Aceptar/rechazar y convertir presupuestos en facturas. | quotes:transition | no |
proformas.read | Listar y leer facturas proforma. | proformas:read | no |
proformas.write | Crear y actualizar proformas. | proformas:write | no |
proformas.send | Enviar proformas por email. | proformas:send | no |
proformas.delete | Eliminar proformas. | proformas:delete | sí |
proformas.convert | Convertir proformas en facturas. | proformas:transition | no |
delivery_notes.read | Listar y leer albaranes. | delivery_notes:read | no |
delivery_notes.write | Crear, actualizar y enviar albaranes. | delivery_notes:write | no |
delivery_notes.send | Enviar albaranes por email. | delivery_notes:write | no |
delivery_notes.delete | Eliminar albaranes. | delivery_notes:delete | sí |
delivery_notes.convert | Convertir albaranes. | delivery_notes:transition | no |
delivery_notes.sign | Marcar como entregados / firmar albaranes. | delivery_notes:transition | sí |
transport_documents.read | Listar y leer documentos de control (DeCA), su registro de emisión y su código QR; concede además pdfs:read para el PDF de cada versión. | transport_documents:read | no |
transport_documents.write | Crear y editar borradores de documentos de control y enviarlos por email al transportista. | transport_documents:write | no |
transport_documents.delete | Eliminar documentos de control en borrador. Uno emitido nunca se elimina. | transport_documents:delete | sí |
transport_documents.transition | Emitir, modificar, cerrar, reabrir, anular y marcar como sustituidos documentos de control. Emitir, modificar, anular y sustituir no se deshacen. | transport_documents:transition | sí |
Plantillas PDF
La biblioteca de plantillas PDF de la empresa: plantillas, marcas (identidades comerciales), activos privados y preferencias. Ambos scopes requieren el módulo de plan pdf_templates — consulta Gating por plan y módulo — y cubren las tools de Plantillas PDF. Ninguna macro factuarea.* los incluye, así que una app tiene que pedirlos de forma explícita. preview_pdf_template necesita además pdfs:read.
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
pdf_templates.read | Leer la biblioteca de plantillas PDF, sus revisiones, marcas y las preferencias del emisor. | pdf_templates:read | no |
pdf_templates.write | Gestionar plantillas PDF, revisiones, marcas, activos privados y las preferencias del emisor. | pdf_templates:write | no |
Compras
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
purchase_invoices.read | Listar y leer gastos. | purchase_invoices:read | no |
purchase_invoices.write | Crear y actualizar gastos; duplicar desde source_purchase_invoice_id exige además purchase_invoices:read. | purchase_invoices:write | no |
purchase_invoices.mark_paid | Marcar gastos como pagados. | purchase_invoices:transition | sí |
purchase_invoices.delete | Eliminar gastos. | purchase_invoices:delete | sí |
Los scopes de pago son asimétricos entre ventas y compras. Registrar un
pago en una factura (register_invoice_payment) requiere
invoices:write — edita la factura. En cambio, registrar un pago en un
gasto (register_purchase_invoice_payment) requiere
purchase_invoices:transition, porque en el lado de compra un pago hace
avanzar el gasto por su ciclo de vida (pendiente → pagado) en vez de
editarlo.
Facturas recurrentes
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
recurring.read | Listar y leer plantillas recurrentes. | recurring_invoices:read | no |
recurring.write | Crear y actualizar plantillas recurrentes. | recurring_invoices:write | no |
recurring.pause | Pausar plantillas recurrentes. | recurring_invoices:transition | no |
recurring.resume | Reanudar plantillas recurrentes. | recurring_invoices:transition | no |
recurring.generate_now | Emitir una factura recurrente manualmente. | recurring_invoices:transition | sí |
recurring.delete | Eliminar plantillas recurrentes. | recurring_invoices:delete | sí |
Cumplimiento e informes fiscales
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
verifactu.read | Leer registros, eventos, certificados y configuración de VeriFactu. | verifactu:read | no |
facturae.read | Descargar XML FacturaE y leer envíos a FACe. | facturae:read | no |
facturae.write | Enviar facturas a FACe y solicitar anulaciones. | facturae:write | sí |
tax_reports.read | Leer histórico, previews, ficheros, estadísticas y actividad fiscal. | tax_reports:read | no |
tax_reports.write | Generar informes fiscales y libros de revisión. | tax_reports:write | sí |
Webhooks
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
webhooks.read | Listar webhook endpoints y entregas. | webhooks:read | no |
webhooks.write | Crear, actualizar, rotar y hacer ping de webhook endpoints. | webhooks:write | sí |
webhooks.delete | Eliminar webhook endpoints. | webhooks:delete | sí |
Estos scopes cubren los webhook endpoints de un NIF. Las tools de webhooks de la cuenta reutilizan los mismos scopes detallados, pero el consentimiento nunca las alcanza: consulta las tools de cuenta que comparten scope con un NIF.
Personal — control horario
Datos de empleados, fichajes, ausencias, horarios de trabajo, presencia, festivos
y exportaciones de nómina. Todos los scopes de personal son sensibles (PII de
empleado y datos de cumplimiento) y requieren el módulo de plan control_horario
— consulta Gating por plan y módulo. Las lecturas y
employees.write se conceden en la pantalla de consentimiento, payroll_exports.write
no se ofrece, y las acciones privilegiadas de escritura y transición no tienen scope
OAuth con punto y son solo API key (listadas más abajo en los scopes detallados).
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
employees.read | Listar y leer empleados. | employees:read | sí |
employees.write | Crear y actualizar empleados. | employees:write | sí |
time_entries.read | Leer fichajes, saldos y hojas de horas mensuales. | time_entries:read | sí |
absences.read | Listar y leer ausencias, políticas y solicitudes. | absences:read | sí |
work_schedules.read | Leer horarios de trabajo y sus asignaciones. | work_schedules:read | sí |
presence.read | Leer la presencia en vivo y diaria. | presence:read | sí |
holidays.read | Leer el calendario de festivos de la empresa. | holidays:read | sí |
payroll_exports.read | Leer las exportaciones de nómina generadas. | payroll_exports:read | sí |
payroll_exports.write | No se ofrece: las exportaciones de nómina son de solo lectura y ninguna tool exige payroll_exports:write. | payroll_exports:write | sí |
Automatizaciones
Reglas de automatización y su historial de ejecuciones. Todos los scopes de
automatizaciones son sensibles: una regla puede enviar correos y disparar webhooks
en nombre del titular, y el historial de ejecuciones lleva dentro los payloads de
negocio que movieron sus acciones (importes, destinatarios, resultados). Los tres
requieren el módulo de plan automations — consulta
Gating por plan y módulo. Leer y escribir reglas y leer el
historial de ejecuciones se conceden en la pantalla de consentimiento; borrar una
regla no — automations:delete no tiene scope OAuth con punto y es solo API key
(listado más abajo en los scopes detallados).
automations.read y automation_runs.read se conceden por separado a propósito. El
primero cubre el reglamento: las reglas, sus versiones selladas, el catálogo de
disparadores y acciones, y el ensayo que dice qué haría una regla sin llegar a hacerlo.
El segundo cubre lo que las reglas hicieron de verdad: cada ejecución, sus pasos, sus
motivos de descarte tipificados y el payload congelado del disparador que lleva cada
ejecución. Una app puede leer qué automatizaciones existen sin leer los datos de
negocio que tocó cada ejecución.
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
automations.read | Listar y leer las reglas de automatización, sus versiones, el catálogo de disparadores y acciones, la cuota mensual y el ensayo. | automations:read | sí |
automations.write | Crear, actualizar, activar y pausar reglas de automatización, y relanzar ejecuciones o pasos sueltos. | automations:write | sí |
automation_runs.read | Leer el historial de ejecuciones de tus automatizaciones, sus pasos y su resultado. | automation_runs:read | sí |
Proyectos y tareas
Proyectos de tareas, tareas y su entorno. projects.* y tasks.* requieren el
módulo de plan tasks — consulta Gating por plan y módulo—,
mientras que users.read y notifications.* son transversales y no pertenecen a
ningún módulo. projects.write y tasks.write son sensibles: una app puede
crear, mover y comentar tareas e imputar tiempo en nombre del titular. users.read también es sensible:
expone el directorio completo de la empresa, con los emails. Leer y
escribir se conceden en la pantalla de consentimiento; borrar no —
projects:delete y tasks:delete no tienen scope OAuth con punto y son solo API key
(listados más abajo en los scopes detallados).
| Scope | Concede | Maps to | Sensitive |
|---|---|---|---|
projects.read | Listar y leer proyectos, sus columnas, campos personalizados, tiempo imputado y exportación. | projects:read | no |
projects.write | Crear y actualizar proyectos: columnas, campos personalizados, archivado e importación de tareas. | projects:write | sí |
tasks.read | Buscar y leer tareas, comentarios, actividad, relaciones, vínculos, adjuntos, tiempo imputado, etiquetas y la agenda. | tasks:read | no |
tasks.write | Crear y actualizar tareas: estado, asignación, comentarios, etiquetas, adjuntos y tiempo imputado en tu nombre. | tasks:write | sí |
users.read | Leer los miembros de tu empresa (nombre y email) para asignarles tareas, y tu propio usuario. | users:read | sí |
notifications.read | Leer las notificaciones de tu bandeja. | notifications:read | no |
notifications.write | Marcar como leídas las notificaciones de tu bandeja. | notifications:write | no |
Macros
Paquetes de conveniencia que se expanden a una lista de scopes simples en el momento de emitir el token. El token persiste los scopes expandidos — las macros nunca se almacenan.
| Macro | Concede | Sensitive |
|---|---|---|
factuarea.read | Acceso de lectura completo a todo (sin escrituras). | no |
factuarea.write | Leer todo, además de crear/actualizar documentos y enviar emails. | no |
factuarea.full | Leer, escribir, enviar y acciones destructivas (eliminar, anular, marcar como pagada, firmar). Excluye las escrituras de VeriFactu. | sí |
El super-scope *
Una credencial que tiene * cubre todos los scopes excepto los dos
privilegiados, accounts:read y accounts:write — las
686 tools del catálogo en el caso de una API key. Es el equivalente a una
clave de propietario. Resérvalo para migraciones puntuales o automatizaciones de
propietario totalmente confiables; para todo lo demás, prefiere el conjunto de scopes
más reducido. El super-scope está disponible para las API keys; el consentimiento OAuth
concede scopes explícitos (o macros), nunca un * directo.
Una clave que solo tiene * no alcanza las diez
tools de cuentas gestionadas: necesitan accounts:read o
accounts:write en la clave, y que la cuenta tenga el privilegio.
Cómo los scopes OAuth se convierten en scopes detallados
Cuando se emite un token OAuth, sus scopes con punto se traducen una vez al catálogo detallado que aplican las tools. Conviene conocer algunas reconciliaciones:
recurring.*se mapea al recursorecurring_invoices:*.invoices.create_correctivese mapea ainvoices:write(crear es una escritura).invoices.annulse mapea ainvoices:void.- Las acciones de ciclo de vida (
*.convert,*.sign,*.pause,*.resume,*.generate_now,*.mark_paid,quotes.convert_to_invoice) se mapean al scope:transitiondel recurso. - Cualquier scope de lectura sobre un documento también concede las utilidades de
lectura transversales
pdfs:read(descargar su PDF/recibo) yevents:read(su registro de actividad). pdf_templates.readypdf_templates.writese mapean apdf_templates:readypdf_templates:write. No concedenpdfs:read: las tools de artefactos PDF lo obtienen de un scope de lectura de documento, como en el punto anterior.verifactu.writeydelivery_notes:gdpr_forgetno tienen scope OAuth con punto — son inalcanzables vía OAuth por diseño.- Los scopes de la cuenta —
account:write,account:owner,members:*,invitations:*,nif_transfers:*,companies:*y los privilegiadosaccounts:*— tampoco tienen.profile.reades el único scope de cuenta que traduce el consentimiento, y daaccount:read.
Scopes detallados sin scope OAuth (solo API key)
Algunos scopes detallados viven en el catálogo cerrado recurso:accion que usan las
API keys, pero no tienen equivalente OAuth con punto — nunca se conceden a través de
una pantalla de consentimiento de terceros y solo son accesibles con API key.
Concédelos directamente en la key (o vía el super-scope *, salvo accounts:*). Algunos
están gateados por un módulo de integración —entonces la empresa de la key debe tener el
plan correspondiente (consulta Gating por plan y módulo)—; el
resto son scopes first-party de la cuenta.
| Scope | Concede | Gating de módulo |
|---|---|---|
stripe_autoinvoicing:read | Leer el estado de la integración Stripe Connect, la configuración de auto-facturación y las cuentas conectadas, y listar cobros/rectificativas auto-facturados. | integration_stripe |
stripe_autoinvoicing:write | Activar/desactivar la auto-facturación de cobros Stripe, fijar la serie auto-emitida y editar/desconectar cuentas conectadas. | integration_stripe |
payouts:read | Leer los payouts de Stripe ingeridos y su estado de conciliación bancaria. | integration_stripe |
Estos scopes habilitan las tools de Pagos y pasarelas.
Un segundo grupo de scopes solo para API key gobierna lo que tiene la cuenta
misma: sus claves, su equipo, su titularidad y sus traspasos de NIF. account:read es el
único scope de cuenta que alcanza el consentimiento, mediante profile.read. No son
privilegiados, así que el super-scope * sí los cubre. Los scopes members:*,
invitations:* y nif_transfers:* requieren el módulo user_management: en un plan sin
él no se pueden asignar a una clave (consulta
Gating por plan y módulo).
| Scope | Concede | Gating de módulo |
|---|---|---|
account:write | Crear, rotar y revocar las API keys de la cuenta, cambiar los NIF que alcanza una clave y actualizar la personalización de la cuenta. | — |
account:owner | Transferir la titularidad de la cuenta a otra persona del equipo. | — |
members:read | Leer los miembros de la cuenta, sus grants (permisos por NIF) en cada NIF y sus restricciones de módulo. | user_management |
members:write | Añadir, cambiar el rol y dar de baja miembros, fijar y retirar sus grants en un NIF —también en uno que otra cuenta cede a la tuya— y cambiar sus restricciones de módulo. | user_management |
invitations:read | Listar y consultar las invitaciones de la cuenta. | user_management |
invitations:write | Enviar, reenviar y revocar invitaciones. | user_management |
nif_transfers:read | Listar los traspasos de NIF que emitió la cuenta. | user_management |
nif_transfers:write | Emitir, aceptar y revocar un traspaso de NIF. | user_management |
Cómo funcionan los grants de un miembro en un NIF de otra cuenta está en acceso cedido.
Un tercer grupo gobierna la cartera de NIF de la cuenta. Cualquier cuenta, en
cualquier plan, lista y consulta sus propios NIF, así que companies:* no tiene gating de
módulo. Lo que el plan controla es añadir un NIF que paga la cuenta, y lo hace dentro de
la operación, no en el scope: consulta NIF adicionales.
| Scope | Concede | Gating de módulo |
|---|---|---|
companies:read | Listar y consultar los NIF de la cuenta, sus estadísticas, su estado de creación y su aptitud para emitir, la vista previa del cargo de un NIF adicional y el resumen consolidado de cumplimiento de jornada. | — |
companies:write | Dar de alta, editar, activar y desactivar NIF de la cuenta, y verificar la creación de uno. | — |
companies:delete | Archivar un NIF de la cuenta. | — |
Un cuarto grupo cubre las acciones de escritura y transición de personal
(control horario). Sus lecturas se conceden por OAuth (consulta los scopes de
consentimiento de Personal más arriba), pero estos scopes privilegiados no tienen
equivalente OAuth con punto — son solo API key, el espejo de verifactu:write.
Todos requieren el módulo de plan control_horario.
| Scope | Concede | Gating de módulo |
|---|---|---|
employees:delete | Eliminar empleados de forma permanente. | control_horario |
time_entries:write | Fichar entrada/salida, registrar entradas manuales, gestionar correcciones de fichaje y el cierre mensual del registro. | control_horario |
absences:write | Crear y gestionar tipos, políticas y solicitudes de ausencia. | control_horario |
absences:transition | Aprobar, rechazar y cancelar solicitudes de ausencia. | control_horario |
work_schedules:write | Crear, actualizar, asignar y archivar horarios de trabajo. | control_horario |
Un quinto grupo es el scope de borrado del motor de automatizaciones. Sus tres
hermanos —automations.read, automations.write y automation_runs.read— sí se
conceden por OAuth (consulta los scopes de consentimiento de Automatizaciones más
arriba), pero eliminar la automatización de otro es destructivo y no se puede deshacer
desde la API, así que queda fuera del catálogo de consentimiento por diseño — la misma
decisión que con verifactu:write. Requiere el módulo de plan automations.
| Scope | Concede | Gating de módulo |
|---|---|---|
automations:delete | Eliminar reglas de automatización. La baja es lógica e irreversible desde la API: la regla deja de dispararse, mientras que sus versiones selladas y su historial de ejecuciones siguen siendo auditables. | automations |
Un quinto grupo son los scopes de borrado del módulo de tareas. Sus hermanos
—projects.read|write y tasks.read|write— sí se conceden por OAuth (consulta los
scopes de consentimiento de Proyectos y tareas más arriba), pero borrar un proyecto o
una tarea se lleva consigo sus comentarios, adjuntos y tiempo imputado y no se puede
deshacer desde la API, así que los dos quedan fuera del catálogo de consentimiento por
diseño — la misma decisión que con automations:delete. Requieren el módulo de plan
tasks.
| Scope | Concede | Gating de módulo |
|---|---|---|
projects:delete | Borrar de forma permanente proyectos, columnas de tablero y definiciones de campos personalizados. | tasks |
tasks:delete | Borrar de forma permanente tareas, comentarios, adjuntos, imputaciones de tiempo y etiquetas. | tasks |
verifactu:write y delivery_notes:gdpr_forget también son scopes detallados
solo para API key
(descritos arriba) — se aplican en la frontera de la tool como cualquier otro
scope, pero no tienen contraparte en el consentimiento OAuth.
Un último grupo cubre las demás tools de observabilidad first-party y los scopes que el catálogo cerrado reserva, ninguno de los cuales tiene scope punteado en OAuth:
| Scope | Concede | Módulo requerido |
|---|---|---|
api_keys:read | Reservado en el catálogo cerrado; ninguna tool publicada lo usa. Las API keys de la cuenta se gestionan con account:read y account:write. | — |
api_keys:write | Reservado en el catálogo cerrado; ninguna tool publicada lo usa. Las API keys de la cuenta se gestionan con account:read y account:write. | — |
api_keys:delete | Reservado en el catálogo cerrado; ninguna tool publicada lo usa. Las API keys de la cuenta se gestionan con account:read y account:write. | — |
developers:read | Inspeccionar el log de peticiones API de un NIF y de la cuenta. | — |
emails:read | Inspeccionar historial y estado de emails enviados. | — |
integration_events:read | Inspeccionar eventos de pasarela y motivos tipados de descarte. | integration_stripe |
integration_events:write | Reprocesar eventos de pasarela aparcados. | integration_stripe |
gocardless_autoinvoicing:read | Reservado en el catálogo cerrado; ninguna tool publicada lo usa hoy. | integration_gocardless |
gocardless_autoinvoicing:write | Reservado en el catálogo cerrado; ninguna tool publicada lo usa hoy. | integration_gocardless |
monei_autoinvoicing:read | Reservado en el catálogo cerrado; ninguna tool publicada lo usa hoy. | integration_monei |
monei_autoinvoicing:write | Reservado en el catálogo cerrado; ninguna tool publicada lo usa hoy. | integration_monei |
Scopes privilegiados
Dos scopes son privilegiados: accounts:read y accounts:write. Permiten que una
cuenta aprovisione, administre y cobre las cuentas de sus clientes, y las diez
tools de cuentas gestionadas los necesitan. Se distinguen
de todos los demás scopes:
- El super-scope
*no los cubre. Lístalos en la clave, junto a*si quieres también el resto de la cuenta. - Factuarea los concede, cuenta por cuenta. No puedes asignártelos: la API no tiene
ninguna operación que conceda el privilegio, y crear una clave que los lista sin él
responde
403 privileged_scope_required.GET /v1/mete dice si tu cuenta lo tiene, enaccount.is_provideryaccount.privileged_scopes. - Se comprueban en cada llamada. La clave debe listar el scope, tu cuenta debe tener hoy
el privilegio y la persona que emitió la clave debe seguir siendo titular o administrador
de la cuenta. Si falla cualquiera de las tres, la respuesta es
403 privileged_scope_required, y las dos causas responden igual. Nada sale de una caché, así que un privilegio retirado detiene la misma clave en su siguiente llamada. - El consentimiento nunca los concede y ningún módulo del plan los controla: el gate es el privilegio. Necesitan una API key.
| Scope | Concede | Gating de módulo |
|---|---|---|
accounts:read | Listar y consultar las cuentas gestionadas de tu cuenta, leer su consumo de aprovisionamiento y la vista previa de un cambio de plan, y descargar la plantilla de una importación masiva. | — |
accounts:write | Aprovisionar una cuenta gestionada, cambiar su plan y su nivel, reemitir su vale, terminar su gestión, y previsualizar y aplicar una importación masiva. | — |
La importación masiva necesita los mismos scopes y no tiene tool MCP: consulta lo que el servidor MCP no transporta.
Tools de cuenta que comparten scope con un NIF
Diez tools administran los webhook endpoints de la cuenta y dos leen su log de peticiones
API. Reutilizan webhooks:read, webhooks:write, webhooks:delete y developers:read, los
scopes que ya usan las tools de un NIF, así que el scope por sí solo no las distingue. Las
distingue el canal:
| Scope | Tools de la cuenta | Canal |
|---|---|---|
webhooks:read | list_account_webhooks, get_account_webhook, list_account_webhook_deliveries, get_account_webhook_delivery | Solo API key |
webhooks:write | create_account_webhook, update_account_webhook, rotate_account_webhook_secret, test_account_webhook, retry_account_webhook_delivery | Solo API key |
webhooks:delete | delete_account_webhook | Solo API key |
developers:read | list_account_request_logs, get_account_request_log | Solo API key |
OAuth no las alcanza aunque tenga el scope: tools/list no las anuncia a una conexión OAuth,
y una llamada directa responde 403 forbidden_action. Las tools de webhooks de un NIF
conservan sus scopes de consentimiento.
Con una API key, cada llamada comprueba primero que la cuenta de la credencial sea alcanzable
(404 account_not_found), luego, en una tool que escribe, que la clave sea live
(403 live_credential_required con una clave de pruebas) y, por último, que la persona que
emitió la clave sea hoy titular o administrador de la cuenta y que el scope de la clave cubra
todos los NIF reales de la cuenta (403 forbidden_action, la misma respuesta para las dos
causas). El tramo del pagador de la cuenta también limita los endpoints: un tramo sin webhooks
de cuenta responde 402 addon_required, y uno que ya está en su tope
422 account_webhook_endpoint_limit_reached.
Webhooks de cuenta describe cada comprobación.
Gating por plan y módulo
La mayoría de las tools publicadas solo aplican una comprobación de scope: son
accesibles en cuanto la credencial tiene el scope requerido. Varias familias además están
limitadas por módulo. Las tools de Tarifas mapean
price_lists:* a products. Las tools de Pagos y pasarelas
mapean sus scopes (stripe_autoinvoicing:*, payouts:read,
integration_events:*) al módulo integration_stripe.
Las tools de personal (Empleados, Asientos de empleado, Horarios de trabajo, Control
horario, Ausencias, Presencia, Festivos) mapean sus scopes (employees:*,
time_entries:*, absences:*, work_schedules:*, presence:read, holidays:read,
payroll_exports:*) al módulo control_horario. Las
tools de Automatizaciones mapean sus scopes (automations:*,
automation_runs:read) al módulo automations. Los scopes de equipo y traspaso
(members:*, invitations:*, nif_transfers:*) se mapean al módulo user_management, que
incluyen los planes empresario y enterprise. Las
tools de Proyectos y Tareas mapean projects:* y tasks:* al
módulo tasks, que incluyen todos los planes; users:read y notifications:* no
pertenecen a ningún módulo. Las tools de Plantillas PDF mapean pdf_templates:* al módulo pdf_templates, y las tools de FacturaE (FACe) requieren el módulo facturae. Cuando el plan de la empresa no incluye
el módulo, el servidor oculta esas tools de tools/list y devuelve module_not_in_plan
(-32005) ante una llamada directa.
- Algunos scopes no tienen gating de módulo, a propósito.
accounts:*los controla el privilegio de la cuenta, no el plan.companies:*deja que cualquier cuenta, en cualquier plan, liste y consulte sus propios NIF: el plan controla la compra de un NIF adicional dentro de la operación (NIF adicionales), no el scope, así que la cartera de NIF no depende de un módulo del plan.account:*son operaciones de la cuenta sobre sí misma y tampoco lo tienen. - Los límites de uso del plan (p. ej. cuotas mensuales de documentos) se aplican en
el momento de la llamada y se manifiestan como
plan_limit_exceeded(-32004). Consulta Errores y límites de peticiones.
Toda la superficie pública MCP también requiere que la empresa tenga un
plan de Factuarea activo — el acceso a la API está incluido en todos los
planes; de lo contrario, cada llamada devuelve addon_not_active (-32007).
Permisos de tiendas
La gestión de tiendas usa stores:read y stores:write; los scopes del proveedor son woocommerce_store:read, woocommerce_store:write, shopify_store:read y shopify_store:write. Las pruebas de conexión requieren el scope de escritura del proveedor. Estos scopes se asignan a API keys y quedan fuera del consentimiento OAuth. Consulta la tabla de operaciones de tiendas.