Las operaciones recientes pasan al eje
Las operaciones publicadas desde el 21 de septiembre —proyectos y tareas, el escáner de gastos, notificaciones, usuarios, la representación VeriFactu, emitir sin enviar y la edición de series— viven bajo /v1/companies/{company}, y ocho actualizaciones parciales pasan de PUT a PATCH.
5 de octubre de 2026 — las operaciones que llegaron a la API desde el 21 de septiembre se publicaron en rutas planas, antes de que existiera el eje de empresa. Ahora viven donde vive cualquier otro recurso de empresa, bajo /v1/companies/{company}/…: las operaciones de las tablas de abajo. Es la misma migración que la ventana del eje, aplicada a lo que vino después, y no necesita un segundo paso.
- Sin alias plano. Una llamada a la ruta antigua responde el
404estándar de una ruta que no existe. Usa la ruta de la columna Ahora. - Nada más cambia por defecto. Los nombres de ruta (
public-api.v1.*), los scopes, los cuerpos y las respuestas siguen como se publicaron, salvo lo que indican las secciones siguientes: ocho verbos, unas pocas rutas que cambian más que el prefijo, un puñado de estados de error y una versión de payload de webhook. - La empresa sale de la credencial. El segmento
{company}se valida contra el ámbito de la credencial:403company_inactivesi el NIF está inactivo y404profile_not_foundsi queda fuera del ámbito, no existe o es del otro entorno. Los tres404son iguales a propósito. Locationlleva el eje. Las altas dePOST …/tasks,…/tasks/{task}/duplicate,…/projects,…/task-labelsyPOST …/verifactu/representationresponden/v1/companies/{company}/<recurso>/<id>.
Adáptate una vez. Cambia la ruta, envía PATCH donde lo indica la tabla y lee los estados nuevos, y tu cliente está listo. No hay modo de compatibilidad para las rutas ni los verbos antiguos.
Verbos: PUT pasa a PATCH
Las actualizaciones parciales de las familias nuevas siguen la convención del resto de la API: PATCH cambia solo los campos que envías. PUT se queda donde el recurso entero se reemplaza por diseño.
| Operación | Antes | Ahora |
|---|---|---|
public-api.v1.projects.update | PUT /v1/projects/{project} | PATCH /v1/companies/{company}/projects/{project} |
public-api.v1.projects.columns.update | PUT /v1/projects/{project}/columns/{column} | PATCH /v1/companies/{company}/projects/{project}/columns/{column} |
public-api.v1.projects.custom_fields.update | PUT /v1/projects/{project}/custom-fields/{field} | PATCH /v1/companies/{company}/projects/{project}/custom-fields/{field} |
public-api.v1.task_labels.update | PUT /v1/task-labels/{label} | PATCH /v1/companies/{company}/task-labels/{label} |
public-api.v1.tasks.update | PUT /v1/tasks/{task} | PATCH /v1/companies/{company}/tasks/{task} |
public-api.v1.tasks.time_entries.update | PUT /v1/tasks/{task}/time-entries/{time_entry} | PATCH /v1/companies/{company}/tasks/{task}/time-entries/{time_entry} |
public-api.v1.purchase_scans.review | PUT /v1/purchase_scans/{purchase_scan}/review | PATCH /v1/companies/{company}/purchase-scans/{purchase_scan}/review |
public-api.v1.series.update | PUT /v1/series/{series} | PATCH /v1/companies/{company}/series/{series} |
Siguen en PUT, porque reemplazan el recurso entero: projects.columns.reorder, tasks.comments.update y tasks.custom_fields.set. Un PUT a una de las ocho rutas migradas responde 405.
Editar una serie conserva el mismo cuerpo parcial y las mismas guardas fiscales (BR-SER-020, BR-SER-021, 422 con su subcode). En …/series/{series}, el 405 series_immutable lleva ahora Allow: GET, PATCH y su mensaje remite a PATCH /v1/companies/{company}/series/{id} y a POST …/archive; PUT y DELETE responden 405. La tool MCP update_series es la misma tool, descrita como un PATCH parcial; sus argumentos no cambian.
Rutas que cambian más que el prefijo
| Operación | Antes | Ahora |
|---|---|---|
public-api.v1.purchase_invoices.expense_categories | GET /v1/purchase_invoices/expense_categories | GET /v1/companies/{company}/purchase-invoices/expense-categories |
public-api.v1.users.list | GET /v1/users | GET /v1/companies/{company}/users |
public-api.v1.users.me | GET /v1/users/me | GET /v1/companies/{company}/users/me |
public-api.v1.contacts.imports.show | GET /v1/contacts/imports/{id} | GET /v1/companies/{company}/contacts/imports/{id} |
public-api.v1.purchase_scans.list | GET /v1/purchase_scans | GET /v1/companies/{company}/purchase-scans |
public-api.v1.purchase_scans.duplicate_resolution | POST /v1/purchase_scans/{purchase_scan}/duplicate_resolution | POST /v1/companies/{company}/purchase-scans/{purchase_scan}/duplicate-resolution |
public-api.v1.purchase_scan_emails.list | GET /v1/purchase_scan_emails | GET /v1/companies/{company}/purchase-scan-emails |
Dos consecuencias visibles: el source_url de las respuestas del escáner y el error_report_url de las importaciones de contactos llevan ahora el eje. El límite de subida de 101 MB del escáner se aplica a POST /v1/companies/<uuid>/purchase-scans.
Códigos y estados de error
| Caso | Antes | Ahora |
|---|---|---|
idempotency_key_reused: un Idempotency-Key reenviado con otro cuerpo | 409, type: idempotency_error | 422, mismo code y type. Vale para todas las operaciones que documentaban el 409: tareas y proyectos, el escáner de gastos (también una subida con otro fichero), el cobro desatendido con su cabecera y el lote de las horas de un proyecto |
Un cobro reenviado por external_id con otro tipo o total | 409 con code: idempotency_key_reused, subcode: unattended_replay_mismatch | code: unattended_replay_mismatch, mismo 409, type, subcode y param: external_id. Un código, un estado: idempotency_key_reused queda solo para la cabecera (422) |
La cabecera X-Active-Profile | Aceptada por las familias nuevas | 400 parameter_unknown, subcódigo retired_active_profile_header: la empresa viaja en la ruta |
{company} fuera del ámbito de la credencial, inexistente o del otro entorno | No existía: la empresa salía de la credencial | 404 profile_not_found; 403 company_inactive si está inactiva |
api_key_creator_not_member (escáner) | Pertenencia por fila de pivote | Mismo código; la pertenencia la decide el acceso del creador al NIF |
El 409 idempotency_key_in_use (la clave está en curso) no cambia.
Las operaciones planas /v1/clients y /v1/suppliers y las tools MCP *_client y *_supplier siguen retiradas; los contactos las sustituyen bajo /v1/companies/{company}/contacts. Los nombres de tool search_clients, find_client_by_tax_id, create_client y bulk_create_clients siguen resolviendo a las tools de contactos hasta el 15 de noviembre de 2026, marcados con _meta["io.factuarea/deprecation"].
Versión de payload de los webhooks
Las versiones de payload son ahora 2026-05-22, 2026-10-01 y 2026-10-05 (la más reciente). 2026-10-01 es la que introdujo el vocabulario issued de las facturas; 2026-10-05 añade importes como cadena decimal y paid_recorded_at y paid_date. Un endpoint fijado a 2026-10-01 o 2026-05-22 no cambia: sigue recibiendo importes numéricos, paid_at y paid_on. Un endpoint creado sin api_version explícito queda en 2026-05-22, salvo que la petición que lo crea use la versión REST 2026-10-01: entonces toma la más reciente (2026-10-05). Puedes mover un endpoint existente con PATCH y api_version. La versión de petición Factuarea-Version: 2026-10-01 mantiene su fecha y su efecto. Consulta Versiones de payload de los webhooks.
MCP
Las tools no llevan argumento de empresa: la empresa sale del token o de la sesión. Las tools de proyectos y tareas, notificaciones, usuarios, agenda, el escáner, la representación VeriFactu, issue_invoice, list_purchase_invoice_expense_categories y las importaciones de contactos (get_contact_import, download_contact_import_errors) espejan una a una las rutas de las tablas de abajo. Un error de dominio de tools/call es ahora un resultado con isError: true, el mensaje del dominio y _meta["com.factuarea/error"] (code, subcode, param, con el mismo estado que la REST API).
Otros cambios de contrato
- Plantillas de importación de contactos.
GET /v1/companies/{company}/contacts/import/templateaceptaformat:csv(por defecto, separado por;) oxlsx, un libro con las hojas Datos, Instrucciones, Ejemplos y Valores permitidos. Ambos salen de los mismos descriptores de columna que el importador. - Informes de importación. El recurso de importación (
GET …/contacts/imports/{id}y la respuesta dePOST …/contacts/import) añadeupdated_count,warnings_count,outcome_kind,skip_reasons,first_diagnosticsyoutcomes_truncated, y cada fila deoutcomeslleva unreason.outcome_kind: nothing_changedsignifica que la importación terminó sin crear ni actualizar nada: no la presentes como un éxito. El código nuevomapping_header_not_foundlo devuelvencontacts.importycontacts.preview_import. - Documentos de venta. Las facturas (y sus eventos) publican
origin(nativeohistorical_import); los presupuestos y las proformas publicanreferenceyoperation_regime. - Importación de tareas.
POST …/projects/{project}/tasks/importy la tool MCPimport_project_tasksaceptan unidempotency_keyopcional e informanwarnings_totalywarnings_truncated. - Escrituras del escáner sin acceso. En las escrituras del escáner de gastos (
POST …/purchase-scans,…/retry,PATCH …/review,…/duplicate-resolution,…/convert,DELETE …/{purchase_scan},…/restore), una clave cuyo creador no tiene acceso a la empresa responde ahora404profile_not_founden lugar de403api_key_creator_not_member. El403se mantiene en la descarga del original (GET …/source) y en las tools MCP de escritura. - Importes de cobro en la actividad. En
GET …/invoices/{invoice}/activities(y la toolget_invoice_activities),metadata.amountde los eventospayment.payment_createdypayment.payment_reversedes ahora una cadena de dos decimales ("50.50"), no un número en euros.
Todas las operaciones, por familia
Proyectos y tareas
Tareas, proyectos, etiquetas, temporizadores y la agenda (75).
| Operación | Antes | Ahora |
|---|---|---|
public-api.v1.agenda.list | GET /v1/agenda | GET /v1/companies/{company}/agenda |
public-api.v1.projects.archive | POST /v1/projects/{project}/archive | POST /v1/companies/{company}/projects/{project}/archive |
public-api.v1.projects.columns.create | POST /v1/projects/{project}/columns | POST /v1/companies/{company}/projects/{project}/columns |
public-api.v1.projects.columns.delete | DELETE /v1/projects/{project}/columns/{column} | DELETE /v1/companies/{company}/projects/{project}/columns/{column} |
public-api.v1.projects.columns.list | GET /v1/projects/{project}/columns | GET /v1/companies/{company}/projects/{project}/columns |
public-api.v1.projects.columns.reorder | PUT /v1/projects/{project}/columns/reorder | PUT /v1/companies/{company}/projects/{project}/columns/reorder |
public-api.v1.projects.columns.update | PUT /v1/projects/{project}/columns/{column} | PATCH /v1/companies/{company}/projects/{project}/columns/{column} |
public-api.v1.projects.create | POST /v1/projects | POST /v1/companies/{company}/projects |
public-api.v1.projects.custom_fields.create | POST /v1/projects/{project}/custom-fields | POST /v1/companies/{company}/projects/{project}/custom-fields |
public-api.v1.projects.custom_fields.delete | DELETE /v1/projects/{project}/custom-fields/{field} | DELETE /v1/companies/{company}/projects/{project}/custom-fields/{field} |
public-api.v1.projects.custom_fields.list | GET /v1/projects/{project}/custom-fields | GET /v1/companies/{company}/projects/{project}/custom-fields |
public-api.v1.projects.custom_fields.update | PUT /v1/projects/{project}/custom-fields/{field} | PATCH /v1/companies/{company}/projects/{project}/custom-fields/{field} |
public-api.v1.projects.delete | DELETE /v1/projects/{project} | DELETE /v1/companies/{company}/projects/{project} |
public-api.v1.projects.find_by_key | POST /v1/projects/find-by-key | POST /v1/companies/{company}/projects/find-by-key |
public-api.v1.projects.list | GET /v1/projects | GET /v1/companies/{company}/projects |
public-api.v1.projects.show | GET /v1/projects/{project} | GET /v1/companies/{company}/projects/{project} |
public-api.v1.projects.tasks.export | GET /v1/projects/{project}/tasks/export | GET /v1/companies/{company}/projects/{project}/tasks/export |
public-api.v1.projects.tasks.import | POST /v1/projects/{project}/tasks/import | POST /v1/companies/{company}/projects/{project}/tasks/import |
public-api.v1.projects.time_invoices.create | POST /v1/projects/{project}/time-invoices | POST /v1/companies/{company}/projects/{project}/time-invoices |
public-api.v1.projects.time_invoices.preview | POST /v1/projects/{project}/time-invoices/preview | POST /v1/companies/{company}/projects/{project}/time-invoices/preview |
public-api.v1.projects.time_summary.show | GET /v1/projects/{project}/time-summary | GET /v1/companies/{company}/projects/{project}/time-summary |
public-api.v1.projects.unarchive | POST /v1/projects/{project}/unarchive | POST /v1/companies/{company}/projects/{project}/unarchive |
public-api.v1.projects.update | PUT /v1/projects/{project} | PATCH /v1/companies/{company}/projects/{project} |
public-api.v1.task_labels.create | POST /v1/task-labels | POST /v1/companies/{company}/task-labels |
public-api.v1.task_labels.delete | DELETE /v1/task-labels/{label} | DELETE /v1/companies/{company}/task-labels/{label} |
public-api.v1.task_labels.list | GET /v1/task-labels | GET /v1/companies/{company}/task-labels |
public-api.v1.task_labels.show | GET /v1/task-labels/{label} | GET /v1/companies/{company}/task-labels/{label} |
public-api.v1.task_labels.update | PUT /v1/task-labels/{label} | PATCH /v1/companies/{company}/task-labels/{label} |
public-api.v1.task_timers.current | GET /v1/task-timers/current | GET /v1/companies/{company}/task-timers/current |
public-api.v1.task_timers.stop | POST /v1/task-timers/stop | POST /v1/companies/{company}/task-timers/stop |
public-api.v1.tasks.activities.list | GET /v1/tasks/{task}/activities | GET /v1/companies/{company}/tasks/{task}/activities |
public-api.v1.tasks.assign | POST /v1/tasks/{task}/assign | POST /v1/companies/{company}/tasks/{task}/assign |
public-api.v1.tasks.attachments.create | POST /v1/tasks/{task}/attachments | POST /v1/companies/{company}/tasks/{task}/attachments |
public-api.v1.tasks.attachments.delete | DELETE /v1/tasks/{task}/attachments/{attachment} | DELETE /v1/companies/{company}/tasks/{task}/attachments/{attachment} |
public-api.v1.tasks.attachments.download | GET /v1/tasks/{task}/attachments/{attachment}/download | GET /v1/companies/{company}/tasks/{task}/attachments/{attachment}/download |
public-api.v1.tasks.attachments.list | GET /v1/tasks/{task}/attachments | GET /v1/companies/{company}/tasks/{task}/attachments |
public-api.v1.tasks.attachments.show | GET /v1/tasks/{task}/attachments/{attachment} | GET /v1/companies/{company}/tasks/{task}/attachments/{attachment} |
public-api.v1.tasks.bulk_delete | POST /v1/tasks/bulk-delete | POST /v1/companies/{company}/tasks/bulk-delete |
public-api.v1.tasks.bulk_status | POST /v1/tasks/bulk-status | POST /v1/companies/{company}/tasks/bulk-status |
public-api.v1.tasks.bulk_update | POST /v1/tasks/bulk-update | POST /v1/companies/{company}/tasks/bulk-update |
public-api.v1.tasks.comments.create | POST /v1/tasks/{task}/comments | POST /v1/companies/{company}/tasks/{task}/comments |
public-api.v1.tasks.comments.delete | DELETE /v1/tasks/{task}/comments/{comment} | DELETE /v1/companies/{company}/tasks/{task}/comments/{comment} |
public-api.v1.tasks.comments.list | GET /v1/tasks/{task}/comments | GET /v1/companies/{company}/tasks/{task}/comments |
public-api.v1.tasks.comments.update | PUT /v1/tasks/{task}/comments/{comment} | PUT /v1/companies/{company}/tasks/{task}/comments/{comment} |
public-api.v1.tasks.create | POST /v1/tasks | POST /v1/companies/{company}/tasks |
public-api.v1.tasks.custom_fields.set | PUT /v1/tasks/{task}/custom-fields/{field} | PUT /v1/companies/{company}/tasks/{task}/custom-fields/{field} |
public-api.v1.tasks.delete | DELETE /v1/tasks/{task} | DELETE /v1/companies/{company}/tasks/{task} |
public-api.v1.tasks.duplicate | POST /v1/tasks/{task}/duplicate | POST /v1/companies/{company}/tasks/{task}/duplicate |
public-api.v1.tasks.entity_links.create | POST /v1/tasks/{task}/entity-links | POST /v1/companies/{company}/tasks/{task}/entity-links |
public-api.v1.tasks.entity_links.delete | DELETE /v1/tasks/{task}/entity-links/{link} | DELETE /v1/companies/{company}/tasks/{task}/entity-links/{link} |
public-api.v1.tasks.entity_links.list | GET /v1/tasks/{task}/entity-links | GET /v1/companies/{company}/tasks/{task}/entity-links |
public-api.v1.tasks.external_links.create | POST /v1/tasks/{task}/external-links | POST /v1/companies/{company}/tasks/{task}/external-links |
public-api.v1.tasks.external_links.delete | DELETE /v1/tasks/{task}/external-links/{link} | DELETE /v1/companies/{company}/tasks/{task}/external-links/{link} |
public-api.v1.tasks.external_links.list | GET /v1/tasks/{task}/external-links | GET /v1/companies/{company}/tasks/{task}/external-links |
public-api.v1.tasks.find_by_key | POST /v1/tasks/find-by-key | POST /v1/companies/{company}/tasks/find-by-key |
public-api.v1.tasks.labels.assign | POST /v1/tasks/{task}/labels | POST /v1/companies/{company}/tasks/{task}/labels |
public-api.v1.tasks.labels.unassign | DELETE /v1/tasks/{task}/labels/{label} | DELETE /v1/companies/{company}/tasks/{task}/labels/{label} |
public-api.v1.tasks.linked | GET /v1/tasks/linked | GET /v1/companies/{company}/tasks/linked |
public-api.v1.tasks.move | POST /v1/tasks/{task}/move | POST /v1/companies/{company}/tasks/{task}/move |
public-api.v1.tasks.relations.create | POST /v1/tasks/{task}/relations | POST /v1/companies/{company}/tasks/{task}/relations |
public-api.v1.tasks.relations.delete | DELETE /v1/tasks/{task}/relations/{relation} | DELETE /v1/companies/{company}/tasks/{task}/relations/{relation} |
public-api.v1.tasks.relations.list | GET /v1/tasks/{task}/relations | GET /v1/companies/{company}/tasks/{task}/relations |
public-api.v1.tasks.reposition | POST /v1/tasks/{task}/reposition | POST /v1/companies/{company}/tasks/{task}/reposition |
public-api.v1.tasks.search | GET /v1/tasks | GET /v1/companies/{company}/tasks |
public-api.v1.tasks.show | GET /v1/tasks/{task} | GET /v1/companies/{company}/tasks/{task} |
public-api.v1.tasks.status | POST /v1/tasks/{task}/status | POST /v1/companies/{company}/tasks/{task}/status |
public-api.v1.tasks.time_entries.create | POST /v1/tasks/{task}/time-entries | POST /v1/companies/{company}/tasks/{task}/time-entries |
public-api.v1.tasks.time_entries.delete | DELETE /v1/tasks/{task}/time-entries/{time_entry} | DELETE /v1/companies/{company}/tasks/{task}/time-entries/{time_entry} |
public-api.v1.tasks.time_entries.list | GET /v1/tasks/{task}/time-entries | GET /v1/companies/{company}/tasks/{task}/time-entries |
public-api.v1.tasks.time_entries.show | GET /v1/tasks/{task}/time-entries/{time_entry} | GET /v1/companies/{company}/tasks/{task}/time-entries/{time_entry} |
public-api.v1.tasks.time_entries.update | PUT /v1/tasks/{task}/time-entries/{time_entry} | PATCH /v1/companies/{company}/tasks/{task}/time-entries/{time_entry} |
public-api.v1.tasks.timer.start | POST /v1/tasks/{task}/timer/start | POST /v1/companies/{company}/tasks/{task}/timer/start |
public-api.v1.tasks.unassign | POST /v1/tasks/{task}/unassign | POST /v1/companies/{company}/tasks/{task}/unassign |
public-api.v1.tasks.update | PUT /v1/tasks/{task} | PATCH /v1/companies/{company}/tasks/{task} |
public-api.v1.tasks.upload_links.create | POST /v1/tasks/{task}/upload-links | POST /v1/companies/{company}/tasks/{task}/upload-links |
Escáner de gastos
El escáner de gastos y su buzón (12). Los segmentos van en kebab-case.
| Operación | Antes | Ahora |
|---|---|---|
public-api.v1.purchase_scan_emails.list | GET /v1/purchase_scan_emails | GET /v1/companies/{company}/purchase-scan-emails |
public-api.v1.purchase_scans.archive | DELETE /v1/purchase_scans/{purchase_scan} | DELETE /v1/companies/{company}/purchase-scans/{purchase_scan} |
public-api.v1.purchase_scans.convert | POST /v1/purchase_scans/{purchase_scan}/convert | POST /v1/companies/{company}/purchase-scans/{purchase_scan}/convert |
public-api.v1.purchase_scans.create | POST /v1/purchase_scans | POST /v1/companies/{company}/purchase-scans |
public-api.v1.purchase_scans.duplicate_resolution | POST /v1/purchase_scans/{purchase_scan}/duplicate_resolution | POST /v1/companies/{company}/purchase-scans/{purchase_scan}/duplicate-resolution |
public-api.v1.purchase_scans.list | GET /v1/purchase_scans | GET /v1/companies/{company}/purchase-scans |
public-api.v1.purchase_scans.restore | POST /v1/purchase_scans/{purchase_scan}/restore | POST /v1/companies/{company}/purchase-scans/{purchase_scan}/restore |
public-api.v1.purchase_scans.retry | POST /v1/purchase_scans/{purchase_scan}/retry | POST /v1/companies/{company}/purchase-scans/{purchase_scan}/retry |
public-api.v1.purchase_scans.review | PUT /v1/purchase_scans/{purchase_scan}/review | PATCH /v1/companies/{company}/purchase-scans/{purchase_scan}/review |
public-api.v1.purchase_scans.show | GET /v1/purchase_scans/{purchase_scan} | GET /v1/companies/{company}/purchase-scans/{purchase_scan} |
public-api.v1.purchase_scans.source | GET /v1/purchase_scans/{purchase_scan}/source | GET /v1/companies/{company}/purchase-scans/{purchase_scan}/source |
public-api.v1.purchase_scans.stats | GET /v1/purchase_scans/stats | GET /v1/companies/{company}/purchase-scans/stats |
Notificaciones
Las notificaciones de quien posee la credencial (3).
| Operación | Antes | Ahora |
|---|---|---|
public-api.v1.notifications.list | GET /v1/notifications | GET /v1/companies/{company}/notifications |
public-api.v1.notifications.mark_all_read | POST /v1/notifications/mark-all-read | POST /v1/companies/{company}/notifications/mark-all-read |
public-api.v1.notifications.read | POST /v1/notifications/{notification}/read | POST /v1/companies/{company}/notifications/{notification}/read |
VeriFactu: representación y registros bloqueados
Representación y reintento de los registros bloqueados (4).
| Operación | Antes | Ahora |
|---|---|---|
public-api.v1.verifactu.records.retry_blocked | POST /v1/verifactu/records/retry-blocked | POST /v1/companies/{company}/verifactu/records/retry-blocked |
public-api.v1.verifactu.representation.register | POST /v1/verifactu/representation | POST /v1/companies/{company}/verifactu/representation |
public-api.v1.verifactu.representation.revoke | DELETE /v1/verifactu/representation | DELETE /v1/companies/{company}/verifactu/representation |
public-api.v1.verifactu.representation.show | GET /v1/verifactu/representation | GET /v1/companies/{company}/verifactu/representation |
Facturas, importaciones de contactos, usuarios, categorías de gasto y series
(7)
| Operación | Antes | Ahora |
|---|---|---|
public-api.v1.invoices.issue | POST /v1/invoices/{invoice}/issue | POST /v1/companies/{company}/invoices/{invoice}/issue |
public-api.v1.contacts.imports.show | GET /v1/contacts/imports/{id} | GET /v1/companies/{company}/contacts/imports/{id} |
public-api.v1.contacts.imports.errors | GET /v1/contacts/imports/{id}/errors.csv | GET /v1/companies/{company}/contacts/imports/{id}/errors.csv |
public-api.v1.users.list | GET /v1/users | GET /v1/companies/{company}/users |
public-api.v1.users.me | GET /v1/users/me | GET /v1/companies/{company}/users/me |
public-api.v1.purchase_invoices.expense_categories | GET /v1/purchase_invoices/expense_categories | GET /v1/companies/{company}/purchase-invoices/expense-categories |
public-api.v1.series.update | PUT /v1/series/{series} | PATCH /v1/companies/{company}/series/{series} |