Una sola ventana de rotura: eje y payload
Los recursos de empresa y de cuenta pasan a la URL, los importes viajan como cadenas decimales, la fecha de cobro cambia de nombre, X-Active-Profile se rechaza y la cuenta pasa a ser el cliente. Todas las operaciones que toca la ventana —519— recurso por recurso.
30 de septiembre de 2026 — el contrato de la v1 rompe en cinco sitios a la vez, y esta publicación anuncia los cinco juntos porque son una sola migración: el código que tocas por cualquiera de ellos es el que tocas por los otros cuatro. No habrá una segunda ventana.
- El eje viaja en la URL. Un recurso de empresa vive ahora bajo
/v1/companies/{company}/…y uno de cuenta bajo/v1/accounts/{account}/…. La empresa efectiva deja de deducirse de la credencial y va en la ruta, donde se ve, se registra y se audita. - Los importes viajan como cadenas decimales. Cada campo monetario de un payload publicado es una cadena, ya no un número JSON.
- La fecha de cobro cambia de nombre.
paid_atypaid_ondesaparecen del payload publicado. Una factura y una factura de compra publicanpaid_recorded_atypaid_date. X-Active-Profilequeda retirada. Una petición que aún lleve la cabecera se rechaza con400 parameter_unknown, subcódigoretired_active_profile_header, antes de llegar al controlador.- La cuenta pasa a ser el cliente. Un NIF cambia de manos con un traspaso
(
nif-transfers), las personas de una cuenta son miembros con grants por NIF, un NIF extra es un NIF adicional (paid_untilsustituye aseat_paid_until, y tres códigos de error cambian de nombre), y se retiran las API keys emitidas por empresa y las escrituras del catálogo de impuestos.
Adapta una vez. Un cliente que escriba el segmento del eje en la URL, lea los importes como cadenas, use los nuevos nombres de las fechas, deje de enviar la cabecera y trate las operaciones y los códigos que se listan abajo ya ha terminado con esta ventana. No hay modo de compatibilidad, ni campo en paralelo, ni una segunda rotura.
Esta página enumera todas las operaciones que la ventana toca, recurso por recurso: 519 filas en total — 49 nuevas, 294 movidas al eje con solo su ruta cambiada, 161 movidas con cambios añadidos, 11 retiradas y 4 intactas. Una ruta es su verbo y su path, así que las treinta y tres operaciones de la tabla de verbos cuentan como movidas aunque no cambie nada más en ellas. El contrato resultante, junto con las operaciones que se sumaron después al eje, publica 664 operaciones vivas en 51 recursos, y cada cifra de esta página sale de ese contrato, no de un resumen suyo.
De dónde sale el id de la empresa
El segmento de empresa lleva el id opaco de la empresa, nunca su NIF.
GET /v1/me publica una entrada por cada NIF que alcanza tu credencial, y su
id es exactamente lo que va en la ruta:
{
"data": {
"object": "me",
"account": {
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a00",
"name": "Asesoría Martínez",
"environment": "live",
"is_provider": true,
"privileged_scopes": [
"accounts:read",
"accounts:write"
]
},
"api_key": {
"id": "019e81ef-e1d4-7208-a51d-94c2c2a54a84",
"name": "Producción",
"prefix": "fact_live_1OSf9KdP",
"scopes": [
"account:read",
"series:read",
"series:write"
],
"tier": "scale",
"environment": "live",
"created_at": "2026-01-15T09:30:00Z",
"last_used_at": "2026-05-25T18:00:00Z",
"expires_at": null
},
"scope": [
{
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a01",
"tax_id": "B12345674",
"name": "Acme Corporation"
},
{
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a02",
"tax_id": "B87654323",
"name": "Acme Logística S.L."
}
],
"client_accounts": [
{
"id": "0199a1f0-1c22-7a10-b111-5a5b5c5d5e5f",
"name": "Construcciones Ruiz",
"origin": "granted",
"access_level": "view",
"status": "active",
"paid_by_provider": false,
"environment": "live"
},
{
"id": "0199a1f0-1c22-7a10-b111-6a6b6c6d6e6f",
"name": "Talleres García",
"origin": "provisioned",
"access_level": "operate",
"status": "provisioned",
"paid_by_provider": true,
"environment": "live"
}
],
"client_accounts_visible": true,
"client_accounts_has_more": false
}
}GET /v1/me es además el sustituto de GET /v1/account, que ya no existe, y no
exige ningún scope: cualquier credencial válida puede introspeccionarse.
data.account.id va en el segmento de cuenta; cada data.scope[].id va en el
segmento de empresa. Cuando tu cuenta provisiona cuentas gestionadas, o otras
cuentas le cedieron acceso, data.client_accounts[] lista las cuentas de
clientes que alcanza, con su origin, su access_level y su status y si tu
cuenta las paga. Solo se rellena cuando la clave lleva el scope privilegiado
accounts:read: sin él la lista va vacía y client_accounts_visible es
false. Llámalo una vez al arrancar y guarda la correspondencia: es estable.
Eje de empresa — /v1/companies/{company}/<recurso>
Del segmento de empresa cuelgan 44 familias de recursos, 359 rutas y 432 de las operaciones de la ventana:
| Recurso | Rutas | Operaciones |
|---|---|---|
absence-balances | 2 | 2 |
absence-calendar | 1 | 1 |
absence-policies | 8 | 10 |
absence-requests | 5 | 6 |
absence-types | 4 | 6 |
automations | 15 | 18 |
billing | 1 | 1 |
census-verification | 1 | 1 |
connected-accounts | 2 | 4 |
contacts | 23 | 27 |
delivery-notes | 18 | 22 |
emails | 3 | 3 |
employee-invitations | 3 | 4 |
employees | 6 | 8 |
events | 2 | 2 |
face-submissions | 2 | 2 |
holidays | 3 | 3 |
integrations | 3 | 3 |
invoices | 45 | 52 |
monthly-time-record-closes | 7 | 9 |
payouts | 2 | 2 |
personalization | 2 | 2 |
presence | 3 | 3 |
price-lists | 9 | 13 |
products | 31 | 41 |
proformas | 16 | 20 |
purchase-invoices | 13 | 18 |
quotes | 16 | 20 |
recurring-invoices | 15 | 18 |
request-logs | 2 | 2 |
series | 11 | 12 |
shopify | 1 | 1 |
stores | 2 | 5 |
stripe-autoinvoicing | 3 | 4 |
tax-reports | 9 | 9 |
taxes | 11 | 11 |
time-balances | 3 | 3 |
time-corrections | 4 | 5 |
time-entries | 9 | 9 |
time-tracking-settings | 1 | 2 |
verifactu | 24 | 25 |
webhook-endpoints | 8 | 11 |
woocommerce | 1 | 1 |
work-schedules | 9 | 11 |
| Total | 359 | 432 |
Eje de cuenta — /v1/accounts/{account}/<recurso>
El segmento de cuenta lleva el id de tu propia cuenta, data.account.id de
GET /v1/me; en una lista cerrada de rutas admite también el id de una cuenta
gestionada tuya. Del segmento cuelgan 16 familias de recursos,
49 rutas y 65 de las operaciones de la ventana:
| Recurso | Rutas | Operaciones |
|---|---|---|
access-level | 1 | 1 |
api-keys | 5 | 6 |
claim-tokens | 1 | 1 |
companies | 10 | 13 |
employee-seats | 5 | 5 |
gestoria | 1 | 1 |
invitations | 3 | 5 |
management | 1 | 1 |
members | 5 | 11 |
nif-transfers | 3 | 4 |
owner | 1 | 1 |
plan | 2 | 2 |
provisioning-usage | 1 | 1 |
request-logs | 2 | 2 |
usage | 1 | 1 |
webhooks | 7 | 10 |
| Total | 49 | 65 |
claim-tokens conserva su fila en la tabla, pero ya no es el traspaso de NIF:
POST /v1/accounts/{account}/claim-tokens reemite el vale de reclamación de una
cuenta gestionada. El traspaso es nif-transfers, y sus scopes y sus códigos se
renombran igual: nif_transfers:read, nif_transfers:write,
nif_transfer_expired y nif_transfer_invalid. Las rutas claim-tokens del
traspaso, los scopes claim_tokens:* y los códigos claim_token_* de las
compilaciones previas de este contrato no existen en el definitivo.
Raíz — sin eje
Diez rutas no pertenecen ni a una empresa ni al eje de tu propia cuenta, y entre
todas llevan once operaciones. Cinco son introspección y catálogos, y solo una se
movió: GET /v1/me sustituye a GET /v1/account. Las otras cinco son la
raíz de aprovisionamiento, nueva en esta ventana: ahí el recurso es una
cuenta gestionada o una importación masiva, así que no cuelga de ningún eje.
| Ruta | Qué es |
|---|---|
GET /v1/me | Introspección de la credencial autenticada: su cuenta, su API key, sus scopes efectivos y cada NIF que alcanza, cada uno con su id opaco, más las cuentas de clientes que alcanza por una relación. No exige ningún scope. Sustituye a GET /v1/account, y los ajustes por empresa que devolvía aquella (company, plan, addon y personalization) ya no forman parte de ella: viven en el eje de empresa. |
GET /v1/event-catalog | Catálogo de tipos de evento a los que puedes suscribir un webhook endpoint de empresa. |
GET /v1/payment-methods | Catálogo de métodos de pago admitidos en un documento. |
GET /v1/payroll-export-formats | Catálogo de formatos de exportación de nómina para el cierre mensual. |
GET /v1/tax-catalog | Catálogo de tipos impositivos españoles, sin empresa propia. |
GET /v1/accounts | Lista las cuentas gestionadas que tu cuenta ha provisionado, en el entorno de la clave. |
POST /v1/accounts | Provisiona una cuenta separada para uno de tus clientes, con su NIF, su plan y el nivel de acceso que conserva tu cuenta sobre ella. Cada cuenta lleva tu external_ref; la operación es irreversible y exige Idempotency-Key. |
GET /v1/accounts/{account} | Detalle de una cuenta gestionada: su estado, su entorno, su plan, tu nivel de acceso sobre ella, sus NIF y el estado de la gestión. |
GET /v1/accounts/imports/template | Plantilla CSV de la importación masiva de cuentas gestionadas. |
POST /v1/accounts/imports/preview | Vista previa de una importación masiva sin ningún efecto: cada fila vuelve con su estado y sus errores por columna. |
POST /v1/accounts/imports | Aplica una importación masiva de cuentas gestionadas y NIF propios. Es irreversible y exige Idempotency-Key. |
El propio contrato, /v1/openapi.json, también sigue donde estaba.
Cinco trampas antes de reescribir una URL
- El guion bajo pasa a guion. Cinco recursos cambian de separador al
moverse:
tax_reports,purchase_invoices,recurring_invoices,delivery_notesywebhook_endpointspasan atax-reports,purchase-invoices,recurring-invoices,delivery-notesywebhook-endpoints. Cuatro segmentos de acción los siguen:dry_run,mark_paid,rotate_secretytest_eventpasan adry-run,mark-paid,rotate-secretytest-event. Ningún segmento de ruta del contrato conserva un guion bajo. - Familias que esperarías en la raíz están en el eje de empresa. Festivos,
el catálogo de automatizaciones y sus campos por disparador, la facturación
del plan, la verificación censal, la personalización, las entregas de correo,
los eventos, los registros de peticiones y los cuatro listados de estados de
documento (
invoices,quotes,proformasydelivery-notespublican cada uno sustatuses) parecen catálogos globales y no lo son: su respuesta depende de la empresa. {company}no siempre es el eje, y{account}no siempre es la cuenta. En/v1/accounts/{account}/companies/{company}/…—los NIF de una cartera— y en/v1/accounts/{account}/members/{member}/grants/{company}—el grant de un miembro sobre un NIF—,{company}es el recurso al que apuntas, así que lo escribes aunque tu credencial alcance una sola empresa. Y en/v1/companies/{company}/connected-accounts/{account},{account}es una cuenta conectada de Stripe. Catorce operaciones llevan los dos parámetros: distínguelos por la ruta, nunca por el nombre del parámetro.- Los webhooks de empresa, los eventos, los correos, los registros de
peticiones y la facturación del plan son recursos de empresa, no de cuenta. En el eje de cuenta
están las API keys, los miembros (con sus grants y su acceso por módulo), las
invitaciones, los traspasos de NIF, los asientos de empleado, la cartera de
NIF, su consumo, su titular, las rutas de aprovisionamiento de una cuenta
gestionada y, nuevos en esta ventana, los webhooks y los registros de
peticiones de la propia cuenta:
/v1/accounts/{account}/webhooksno es/v1/companies/{company}/webhook-endpoints, y sus operaciones difieren. Consulta la guía de webhooks de cuenta. - Bajo
/v1/accounts/{account}/…,{account}es tu propia cuenta. Solo una lista cerrada de rutas admite también el id de una cuenta gestionada tuya —las rutas de aprovisionamiento y los datos de sus NIF—; cualquier otro id de cuenta, exista o no, responde el mismo404 account_not_found. La raíz de aprovisionamiento es distinta: en/v1/accountsy enGET /v1/accounts/{account}la cuenta es el propio recurso. Consulta la guía de cuentas gestionadas.
Dieciséis operaciones que la ventana añade
Abren el eje de cuenta, que no tenía superficie pública propia más allá de las API keys: el traspaso de NIF, el equipo con sus invitaciones, la titularidad, el consumo y, bajo la cartera, la aptitud de emisión de un NIF. Son rutas nuevas, así que nada de lo que hoy existe rompe por ellas.
No son las únicas operaciones nuevas. La ventana publica 49 en total, y las otras treinta y tres pertenecen al modelo de cuentas —aprovisionamiento y cuentas gestionadas, importación masiva, webhooks y registros de peticiones de cuenta, los grants de un miembro sobre cada NIF y la revocación de un traspaso, entre otras—. La nota de la publicación modelo de cuentas las describe, y sus filas están en el inventario del final de esta página.
| Operación | Scope | Qué hace |
|---|---|---|
GET /v1/accounts/{account}/nif-transfers | nif_transfers:read | Lista los traspasos de NIF que ha emitido tu cuenta, con su estado (active, expired, revoked o consumed). Los traspasos recibidos de otras cuentas no se listan nunca. |
POST /v1/accounts/{account}/nif-transfers | nif_transfers:write | Emite un traspaso sobre un NIF de la cuenta y devuelve su secret una sola vez. Caduca a las 24 horas salvo que pases un expires_at (hasta 7 días), y recipient_account_id lo cierra a una sola cuenta. Irreversible, y exige Idempotency-Key. |
POST /v1/accounts/{account}/nif-transfers/accept | nif_transfers:write | Canjea un traspaso con su secret y mueve el NIF a la cuenta que lo presenta, donde cuenta como NIF adicional salvo que la cuenta se registrara sin ninguno. Irreversible. Un traspaso vencido responde 422 nif_transfer_expired; cualquier otro secreto inservible responde 422 nif_transfer_invalid. |
GET /v1/accounts/{account}/invitations | invitations:read | Lista las invitaciones de la cuenta, que puedes filtrar por status (pending, accepted, revoked o expired). |
POST /v1/accounts/{account}/invitations | invitations:write | Invita a una persona por correo con un role de cuenta (admin o member) y la lista de grants que un member tiene sobre los NIF de la cuenta. Exige Idempotency-Key. |
POST /v1/accounts/{account}/invitations/{invitation}/resend | invitations:write | Emite un nuevo secreto de aceptación para una invitación pendiente y renueva su plazo; el anterior deja de funcionar. Una invitación fuera de plazo responde 422 invitation_expired. Exige Idempotency-Key. |
DELETE /v1/accounts/{account}/invitations/{invitation} | invitations:write | Revoca una invitación pendiente; nunca retira a un miembro existente. Una que no existe o es de otra cuenta responde 404 invitation_not_found. |
GET /v1/accounts/{account}/members | members:read | Lista a las personas del equipo de la cuenta, con su role de cuenta (owner, admin o member), su marca external_advisor y los grants de cada member. |
POST /v1/accounts/{account}/members | members:write | Añade a una persona al equipo de la cuenta con un role de cuenta (admin o member) y la lista obligatoria de grants, sin pasar por una invitación. La titularidad se transfiere, nunca se asigna. |
PATCH /v1/accounts/{account}/members/{member} | members:write | Cambia el role de cuenta de un miembro, su marca external_advisor, o ambos. El titular no puede cambiar de rol: la titularidad se transfiere. |
DELETE /v1/accounts/{account}/members/{member} | members:write | Retira a una persona de todo el equipo de la cuenta: deja de alcanzar todos los NIF de la cuenta y pierde sus grants. Irreversible. El titular de la cuenta responde 422 member_is_last_owner: transfiere antes la titularidad. |
GET /v1/accounts/{account}/members/{member}/module-access | members:read | Lee las restricciones por módulo de un miembro en un NIF, que pasas en el parámetro de query obligatorio company_id. |
PATCH /v1/accounts/{account}/members/{member}/module-access | members:write | Sustituye el conjunto completo de restricciones por módulo de un miembro en un NIF (company_id); un objeto restrictions vacío las levanta todas. |
PATCH /v1/accounts/{account}/owner | account:owner | Entrega la titularidad de la cuenta a otro miembro, que se indica en owner_user_id; el titular saliente pasa a admin. Irreversible, y exige Idempotency-Key. Quien no es el titular actual recibe 403 owner_transfer_forbidden. |
GET /v1/accounts/{account}/usage | account:read | Consumo de la cuenta en el periodo en curso: peticiones totales, documentos totales y el desglose por cada NIF que alcanza tu credencial. |
GET /v1/accounts/{account}/companies/{company}/issuing-readiness | companies:read | Dice si un NIF de la cartera ya puede emitir: un veredicto can_issue y una lista cerrada de blockers (censo, serie por defecto, perfil fiscal, certificado VeriFactu y otros), resueltos en una llamada. Nunca informa de la facturación. |
Los códigos invitation_expired, invitation_not_found, member_is_last_owner,
nif_transfer_expired y nif_transfer_invalid forman parte de los treinta y
siete códigos de error nuevos que se listan más abajo.
Once operaciones que la ventana retira
Cinco son las API keys emitidas por empresa, que desaparecen. Una key es una
credencial de la cuenta, no de una de sus empresas, y las operaciones que
sobreviven lo dicen en la ruta y en el scope: api_keys:read /
api_keys:write dejan paso a account:read / account:write, que es lo que ya
usaba el eje de cuenta.
| Antes | Ahora |
|---|---|
GET /v1/companies/{company}/api-keys · api_keys:read | GET /v1/accounts/{account}/api-keys · account:read |
POST /v1/companies/{company}/api-keys · api_keys:write | POST /v1/accounts/{account}/api-keys · account:write |
GET /v1/companies/{company}/api-keys/{api_key} · api_keys:read | GET /v1/accounts/{account}/api-keys/{api_key} · account:read |
POST /v1/companies/{company}/api-keys/{api_key}/rotate-secret · api_keys:write | POST /v1/accounts/{account}/api-keys/{api_key}/rotate-secret · account:write |
DELETE /v1/companies/{company}/api-keys/{api_key} · api_keys:write | POST /v1/accounts/{account}/api-keys/{api_key}/revoke · account:write |
scoped_company_ids es un campo nuevo del body de
POST /v1/accounts/{account}/api-keys:
ahí es donde se restringe una key a una parte de la cartera, que es justo lo que
hacía la ruta por empresa.
El catálogo de impuestos pasa a ser de solo lectura
Las otras seis operaciones retiradas son las escrituras del catálogo de impuestos. El catálogo es común a toda la plataforma, así que una credencial de empresa que lo editaba lo editaba para todas las empresas; ahora solo lo escribe la administración de la plataforma.
| Operación | Antes | Scope |
|---|---|---|
public-api.v1.taxes.create | POST /v1/taxes | taxes:write |
public-api.v1.taxes.delete | DELETE /v1/taxes/{tax} | taxes:delete |
public-api.v1.taxes.update | PUT /v1/taxes/{tax} | taxes:write |
public-api.v1.taxes.set_default | POST /v1/taxes/{tax}/set-default | taxes:write |
public-api.v1.taxes.set_default_for_document | PUT /v1/taxes/{tax}/set-default/{docType} | taxes:write |
public-api.v1.taxes.toggle | POST /v1/taxes/{tax}/toggle | taxes:write |
No tienen sustituto. Las lecturas se quedan: GET /v1/companies/{company}/taxes
y sus hermanas en el eje de empresa, y GET /v1/tax-catalog en la raíz. Una
llamada a una escritura retirada responde 405 method_not_allowed donde su ruta
aún sirve una lectura, y 404 route_not_found donde no. Los scopes
taxes:write y taxes:delete siguen en el catálogo de scopes, pero ninguna
operación los exige ya: concederlos no da acceso a nada.
Clientes y proveedores siguen retirados
/v1/clients y /v1/suppliers se retiraron antes de esta ventana, con la
llegada de los contactos canónicos, y no
vuelven en el eje. Un NIF es un contacto, y los roles customer y supplier se
acumulan sobre él:
- Clientes:
GET /v1/companies/{company}/contacts?roles[]=customer - Proveedores:
GET /v1/companies/{company}/contacts?roles[]=supplier
Las familias de scopes clients:* y suppliers:* quedan sustituidas por
contacts:read, contacts:write y contacts:delete.
Treinta y tres operaciones cambian de verbo
Treinta y dos pasan de PUT a PATCH: ya aceptaban un body parcial, así que el
verbo mentía. El body no cambia; solo el método. La actualización de facturas
recurrentes es una de ellas: todos los campos son opcionales y el omitido se
conserva. La restante, contacts.restore, pasa a POST: es una
acción sin body, como archive y unarchive, no una actualización parcial.
Tras esta ventana el único PUT del contrato es una operación nueva,
PUT /v1/accounts/{account}/members/{member}/grants/{company}, que crea o
sustituye el grant de un miembro sobre un NIF.
| Operación | Antes | Ahora |
|---|---|---|
public-api.v1.absence-policies.update | PUT /v1/absence-policies/{absence_policy} | PATCH /v1/companies/{company}/absence-policies/{absence_policy} |
public-api.v1.absence-types.update | PUT /v1/absence-types/{absence_type} | PATCH /v1/companies/{company}/absence-types/{absence_type} |
public-api.v1.automations.rules.update | PUT /v1/automations/rules/{rule} | PATCH /v1/companies/{company}/automations/rules/{rule} |
public-api.v1.contacts.change_contact_role_status | PUT /v1/contacts/{contact}/roles/{role}/status | PATCH /v1/companies/{company}/contacts/{contact}/roles/{role}/status |
public-api.v1.contacts.restore | PUT /v1/contacts/{contact}/restore | POST /v1/companies/{company}/contacts/{contact}/restore |
public-api.v1.contacts.update | PUT /v1/contacts/{contact} | PATCH /v1/companies/{company}/contacts/{contact} |
public-api.v1.contacts.update_bank_accounts | PUT /v1/contacts/{contact}/bank-accounts | PATCH /v1/companies/{company}/contacts/{contact}/bank-accounts |
public-api.v1.contacts.update_customer_profile | PUT /v1/contacts/{contact}/customer-profile | PATCH /v1/companies/{company}/contacts/{contact}/customer-profile |
public-api.v1.contacts.update_supplier_profile | PUT /v1/contacts/{contact}/supplier-profile | PATCH /v1/companies/{company}/contacts/{contact}/supplier-profile |
public-api.v1.delivery_notes.public_link.update | PUT /v1/delivery_notes/{delivery_note}/public-link | PATCH /v1/companies/{company}/delivery-notes/{delivery_note}/public-link |
public-api.v1.delivery_notes.update | PUT /v1/delivery_notes/{delivery_note} | PATCH /v1/companies/{company}/delivery-notes/{delivery_note} |
public-api.v1.employees.update | PUT /v1/employees/{employee} | PATCH /v1/companies/{company}/employees/{employee} |
public-api.v1.invoices.public_link_update | PUT /v1/invoices/{invoice}/public-link | PATCH /v1/companies/{company}/invoices/{invoice}/public-link |
public-api.v1.invoices.update | PUT /v1/invoices/{invoice} | PATCH /v1/companies/{company}/invoices/{invoice} |
public-api.v1.price-lists.update | PUT /v1/price-lists/{priceList} | PATCH /v1/companies/{company}/price-lists/{priceList} |
public-api.v1.products.presentations.update | PUT /v1/products/{product}/presentations/{presentation} | PATCH /v1/companies/{company}/products/{product}/presentations/{presentation} |
public-api.v1.products.supplier-offers.update | PUT /v1/products/{product}/supplier-offers/{offer} | PATCH /v1/companies/{company}/products/{product}/supplier-offers/{offer} |
public-api.v1.products.update | PUT /v1/products/{product} | PATCH /v1/companies/{company}/products/{product} |
public-api.v1.products.update_stock | PUT /v1/products/{product}/stock | PATCH /v1/companies/{company}/products/{product}/stock |
public-api.v1.products.variants.update | PUT /v1/products/{product}/variants/{variant} | PATCH /v1/companies/{company}/products/{product}/variants/{variant} |
public-api.v1.proformas.public_link_update | PUT /v1/proformas/{proforma}/public-link | PATCH /v1/companies/{company}/proformas/{proforma}/public-link |
public-api.v1.proformas.update | PUT /v1/proformas/{proforma} | PATCH /v1/companies/{company}/proformas/{proforma} |
public-api.v1.purchase_invoices.update | PUT /v1/purchase_invoices/{purchase_invoice} | PATCH /v1/companies/{company}/purchase-invoices/{purchase_invoice} |
public-api.v1.quotes.public_link_update | PUT /v1/quotes/{quote}/public-link | PATCH /v1/companies/{company}/quotes/{quote}/public-link |
public-api.v1.quotes.update | PUT /v1/quotes/{quote} | PATCH /v1/companies/{company}/quotes/{quote} |
public-api.v1.recurring_invoices.update | PUT /v1/recurring_invoices/{recurring_invoice} | PATCH /v1/companies/{company}/recurring-invoices/{recurring_invoice} |
public-api.v1.stores.update | PUT /v1/stores/{store} | PATCH /v1/companies/{company}/stores/{store} |
public-api.v1.stripe_autoinvoicing.accounts.update | PUT /v1/connected-accounts/{account} | PATCH /v1/companies/{company}/connected-accounts/{account} |
public-api.v1.stripe_autoinvoicing.config.update | PUT /v1/stripe-autoinvoicing/config | PATCH /v1/companies/{company}/stripe-autoinvoicing/config |
public-api.v1.time_tracking_settings.update | PUT /v1/time-tracking-settings | PATCH /v1/companies/{company}/time-tracking-settings |
public-api.v1.verifactu.settings.update | PUT /v1/verifactu/settings | PATCH /v1/companies/{company}/verifactu/settings |
public-api.v1.webhook_endpoints.update | PUT /v1/webhook_endpoints/{webhook_endpoint} | PATCH /v1/companies/{company}/webhook-endpoints/{webhook_endpoint} |
public-api.v1.work_schedules.update | PUT /v1/work-schedules/{schedule} | PATCH /v1/companies/{company}/work-schedules/{schedule} |
Treinta y siete códigos de error nuevos
El catálogo pasa de 376 a 410 códigos: llegan treinta y siete y se retiran tres (siguiente sección). Treinta de los nuevos pertenecen a la superficie de cuenta, cuatro a la puerta del NIF adicional, dos al acceso que tiene sobre un NIF la persona que emitió una key, y uno a los webhooks de cuenta.
| Código | Estado | Tipo | Significado |
|---|---|---|---|
access_level_raise_forbidden | 422 | invalid_request_error | Se intentó subir el nivel de acceso sobre una cuenta gestionada cuyo titular ya la reclamó. Desde la reclamación solo el titular puede subir ese nivel; el proveedor solo puede bajarlo. |
account_webhook_endpoint_limit_reached | 422 | invalid_request_error | La cuenta alcanzó el número de endpoints de webhook de cuenta que permite su tramo en ese entorno. El tope se cuenta por cuenta y por entorno (live o test) e incluye los endpoints desactivados: solo se libera una plaza al borrar un endpoint. |
additional_nif_charge_failed | 402 | payment_required_error | El cobro inmediato del NIF adicional fue rechazado: la tarjeta se denegó, necesita autenticación, o el proveedor de pago estaba inaccesible. Si no se cobra, el NIF no se añade ni se activa y no queda ningún cargo. |
additional_nif_not_in_plan | 403 | authorization_error | La cuenta tiene un plan vigente, pero ese plan no incluye NIF adicionales: solo Empresario y Enterprise (también en prueba) los admiten. No se ha cobrado nada ni se ha escrito ningún cambio. |
additional_nif_plan_required | 402 | payment_required_error | La cuenta no tiene un plan vigente, así que no hay suscripción sobre la que cobrar el NIF adicional. No se ha cobrado nada ni se ha escrito ningún cambio. |
billing_managed_by_provider | 403 | authorization_error | La facturación de esta cuenta la paga otra cuenta, así que esta no puede contratar por su cuenta un NIF adicional. No se ha cobrado nada ni se ha escrito ningún cambio. |
company_read_only | 403 | authorization_error | Quien emitió la credencial tiene acceso de solo lectura (nivel view) a la empresa efectiva: su rol en la cuenta le permite ver ese NIF, no escribir en él. El nivel efectivo es el menor entre el guardado en la credencial y el que la persona tiene hoy. |
emitter_capability_restricted | 403 | authorization_error | La persona que emitió la credencial tiene retirada, en la empresa efectiva, la sección o la acción que exige la operación. Es la misma restricción por módulo que el administrador de la empresa le puso en la aplicación web, y se aplica aunque su nivel de acceso al NIF sea operate. |
enterprise_contract_transition_required | 422 | invalid_request_error | La cuenta gestionada tiene un contrato enterprise y, al terminar la gestión, su pago pasaría al titular sin que Factuarea haya fijado todavía el plan con el que continúa. Nunca se crea una suscripción sin precio, así que no se ha cambiado nada. |
external_advisor_already_assigned | 422 | invalid_request_error | La cuenta ya tiene un asesor externo marcado: solo puede haber uno por cuenta. |
grant_company_not_in_account | 422 | invalid_request_error | El NIF del grant no es un NIF real de la cuenta o queda fuera del ámbito de NIF de la credencial. La respuesta es la misma en los dos casos, sin revelar cuál. |
grants_only_for_member | 422 | invalid_request_error | Solo un miembro con rol member puede tener permisos por NIF (grants). El titular (owner) y los administradores (admin) alcanzan todos los NIF de la cuenta, así que un grant sobre ellos no significaría nada. |
import_file_invalid | 422 | invalid_request_error | Uno de los ficheros de la importación no se puede leer con el formato de la plantilla: no es un CSV legible, su cabecera no aparece en las 20 primeras líneas, le falta una columna obligatoria o tiene una línea rota. param indica qué fichero falla (accounts_file o customers_file) y el mensaje, la columna o la línea. No se ha escrito nada. |
import_file_too_large | 413 | invalid_request_error | Uno de los ficheros de la importación supera los 5 MB. El tamaño se comprueba antes de leer ninguna fila, así que no se ha procesado ni escrito nada. param indica qué fichero falla (accounts_file o customers_file). |
import_in_progress | 409 | conflict_error | Ya hay una importación masiva de esta cuenta proveedora en curso. Las importaciones de una misma cuenta se aplican de una en una para no crear cuentas, cargos ni NIF por duplicado, así que esta no se ha aplicado ni ha escrito nada. |
import_row_limit_exceeded | 422 | invalid_request_error | Uno de los ficheros de la importación trae más filas de las que admite una importación: 100 en el fichero de cuentas (accounts_file) y 1.000 en el de clientes (customers_file). Las filas se cuentan antes de leerlas, así que no se ha procesado ni escrito nada. param indica qué fichero falla. |
invitation_expired | 422 | invalid_request_error | La invitación existe y es de esta empresa, pero su ventana de aceptación ya se cerró, así que quien la recibió no puede canjearla. |
invitation_not_found | 404 | not_found_error | El identificador no corresponde a ninguna invitación pendiente de la empresa autenticada: puede haberse cancelado, haberse aceptado ya o pertenecer a otra empresa. |
live_credential_required | 403 | authorization_error | Una clave de pruebas intentó modificar una cuenta de producción. Solo ocurre en las operaciones que cambian la cuenta —miembros, invitaciones, titularidad, traspasos de NIF, cartera de NIF, claves y asientos—: una clave de pruebas no puede alterar datos reales. |
managed_account_external_ref_in_other_environment | 409 | conflict_error | La referencia externa ya la usa una cuenta gestionada del otro entorno (real o de pruebas). La referencia es única entre los dos entornos, y la respuesta no nombra esa cuenta porque este entorno no la lista. No se ha escrito nada. |
managed_account_not_claimable | 422 | invalid_request_error | La cuenta gestionada es de pruebas, y una cuenta de pruebas nunca se reclama: no tiene vale de reclamación que emitir ni que reemitir. |
managed_account_plan_not_self_serve | 422 | invalid_request_error | Se pidió el plan enterprise para una cuenta gestionada. Una cuenta gestionada se crea o se cambia en emprendedor o empresario; enterprise solo lo asigna Factuarea por contrato. |
managed_account_provider_in_trial | 422 | invalid_request_error | La cuenta proveedora está en periodo de prueba y pidió una cuenta gestionada real, que se cobra. Durante la prueba solo se pueden crear cuentas gestionadas de pruebas. |
managed_accounts_limit_reached | 422 | invalid_request_error | La cuenta proveedora ya tiene tantas cuentas gestionadas reales con la gestión vigente como admite su tope. Las cuentas gestionadas de pruebas no cuentan para ese tope. |
member_is_last_owner | 422 | invalid_request_error | La operación dejaría el NIF sin ninguna persona que lo administre: el miembro que se da de baja, o que se degrada a un rol sin administración, es el último con rol owner o admin en ese NIF. |
member_not_found | 404 | not_found_error | El identificador no corresponde a ningún miembro del equipo de la cuenta: o esa persona nunca perteneció a la empresa autenticada, o es de otra. La superficie de cuenta responde igual en ambos casos. |
nif_transfer_expired | 422 | invalid_request_error | El traspaso de NIF se emitió de verdad, pero su plazo de validez venció. A diferencia de un traspaso no reconocido, esta respuesta solo le llega a quien ya tenía uno real, así que no revela nada nuevo. |
nif_transfer_invalid | 422 | invalid_request_error | El traspaso de NIF presentado no autoriza nada: su secreto está mal copiado, truncado, ya consumido o nunca se emitió. Todos esos casos responden igual a propósito, para que la operación no sirva para sondear qué traspasos existen. |
owner_transfer_forbidden | 403 | authorization_error | Quien hace la petición no está autorizado a transferir la titularidad de la cuenta: o no es el titular actual, o el destinatario propuesto no puede recibirla. Es cuestión de permiso, no de payload mal formado. |
privileged_scope_required | 403 | authorization_error | La operación exige el privilegio de proveedor de cuentas (accounts:read o accounts:write) y no se cumple: o la cuenta de la clave no lo tiene concedido, o la persona que emitió la clave ya no es propietaria ni administradora de la cuenta. Las dos causas responden igual. |
provisioning_account_claimed | 409 | conflict_error | El titular ya reclamó esta cuenta gestionada y la administra por su cuenta: ya no se puede reclamar otra vez, reemitir su vale de reclamación ni volver a provisionarla con la misma referencia externa. |
relation_already_exists | 422 | invalid_request_error | Ya hay un acceso pendiente o vigente entre estas dos cuentas, y solo puede haber uno abierto por cada pareja de cuentas. |
relation_company_not_in_grantor | 422 | invalid_request_error | La lista de NIF del acceso no es válida: o nombra un NIF que no pertenece a la cuenta que cede el acceso, o viene vacía. El error señala el campo company_ids y no dice cuál de los NIF falla. |
relation_invitation_expired | 422 | invalid_request_error | La invitación de acceso existe y sigue pendiente, pero su plazo de aceptación venció, así que ya no se puede aceptar. |
relation_invitation_invalid | 422 | invalid_request_error | La invitación de acceso presentada no sirve: su secreto no existe, ya se usó, se revocó o va dirigida a otra cuenta. Todos esos casos responden igual a propósito, para que la operación no sirva para sondear invitaciones ajenas. |
relation_self_grant_not_allowed | 422 | invalid_request_error | La cuenta indicada no puede recibir el acceso: o es la misma cuenta que lo cede, o el identificador no corresponde a una cuenta válida. Los dos casos responden igual. |
relation_transition_not_allowed | 422 | invalid_request_error | El acceso entre cuentas está en un estado que no admite el cambio pedido: por ejemplo, aceptar uno que ya está vigente o reenviar la invitación de uno que ya terminó. |
nif_transfer_expired y nif_transfer_invalid ocupan el lugar de
claim_token_expired y claim_token_invalid, los códigos del traspaso
claim-tokens de las compilaciones previas, que ya no existen.
Aparte, 190 de las operaciones que ya existían documentan ahora un 404
que antes no documentaban: un segmento de eje que nombra una empresa o una cuenta
que tu credencial no alcanza responde 404, no 403, de modo que la API nunca
confirma la existencia de una empresa que no puedes ver. Toda operación del eje
de empresa documenta 404 profile_not_found para ello; una cuenta que no
alcanzas responde 404 account_not_found.
Tres códigos de error que la ventana retira
El NIF adicional sustituye al cargo por asiento de cada empresa y a sus puertas
de plan y de módulo, así que tres códigos salen del catálogo. Ramifica según el
sustituto: el estado y el error.type son los mismos en cada pareja.
| Código retirado | Estado | Lo sustituye |
|---|---|---|
gestoria_module_required | 403 | additional_nif_not_in_plan (403) |
gestoria_plan_required | 402 | additional_nif_plan_required (402) |
seat_charge_failed | 402 | additional_nif_charge_failed (402) |
Payload: importes, fechas y cobertura
Cada importe es una cadena decimal
123 propiedades monetarias repartidas en 40 esquemas
publicados pasan de número JSON a cadena: totales, subtotales de línea,
impuestos, retenciones, recargos, precios y costes unitarios, importes cobrados y
pendientes, estadísticas, cifras de payouts, vistas previas de cargo y los
umbrales de la factura simplificada. La cadena lleva dos decimales, punto como
separador, sin separador de millares ni símbolo de moneda; la moneda conserva su
campo currency. La única excepción es el unit_price de una línea de
documento, que conserva la escala de cuatro decimales con la que se guarda
("100.0000"), de modo que leer una línea y reenviarla nunca cambia su precio;
los importes derivados de la línea (subtotal, taxes y total) conservan dos.
{
"object": "invoice",
"subtotal": "1000.00",
"total_vat": "210.00",
"total": "1210.00",
"paid_amount": "1210.00",
"pending_amount": "0.00",
"currency": "EUR"
}Un número JSON no declara escala: 1210 vuelve como 1210, 1210.0 o
1209.9999999999998 según quién lo parsee. Lee cada campo de dinero a un tipo
decimal de precisión fija — Decimal en Python, un big decimal o unidades
mínimas en JavaScript — y jamás a un float binario. Los esquemas afectados son
BusinessContactActivity, CompanySeatChargePreview, DeliveryNote,
DeliveryNoteLine, DeliveryNoteStats, EmployeeSeatBillingStatus,
EmployeeSeatChargePreview, EventDataInvoicePaid, Invoice,
InvoiceCorrective, InvoiceLine, InvoicePaymentDetail,
InvoiceReminderPreview, InvoiceStats, ProductSalesAnalytics,
ProductVariant, Proforma, ProformaLine, ProformaStats,
PurchaseInvoice, PurchaseInvoiceLine, PurchaseInvoicePayment,
PurchaseInvoiceStats, Quote, QuoteLine, QuoteStats,
RecurringInvoice, RecurringInvoiceLine, RecurringInvoicePreviewDate,
RecurringInvoiceStats, SimplifiedInvoiceEligibility, Store,
StripeAutoinvoicedCorrective, StripeAutoinvoicedPayment, StripePayout,
SupplierProductOffer, TaxCalculation, TaxTotals, TaxTotalsLine y
VeriFactuRecord.
La fecha de cobro cambia de nombre
paid_at y paid_on desaparecen del payload publicado. No se emiten en
paralelo ni se mantienen como alias: el sufijo _at marca un instante, y cada
nombre canónico dice ahora de qué fecha se trata.
| Antes leías | Ahora lees |
|---|---|
paid_at en una factura | paid_recorded_at (date-time), el instante en que se registró el cobro |
paid_on en una factura | paid_date (date), la fecha de cobro declarada |
paid_at en una factura de compra | paid_date (date), la fecha de pago declarada, y paid_recorded_at (date-time), el instante en que se registró el pago |
paid_on en un pago de factura de compra | paid_date (date) |
El body de la petición no cambia: mark-paid y el registro de pagos siguen
tomando paid_on, una fecha YYYY-MM-DD, y el listado de facturas filtra por
paid_on[gte], paid_on[lte], paid_on[gt] y paid_on[lt]. Envías paid_on
y lees paid_date y paid_recorded_at.
La cobertura pagada de un NIF cambia de nombre
El recurso Company pierde seat_paid_until y publica paid_until: la fecha
hasta la que el NIF está cubierto como NIF adicional de la cuenta (ISO 8601).
Vale null cuando el NIF nunca se cobró o su cobertura caducó, y reactivarlo
antes de esa fecha es gratis. El recurso gana además readiness, el mismo
veredicto y los mismos bloqueos que issuing-readiness, y suspension_reason:
payer_blocked cuando la cuenta que paga una cuenta gestionada tiene su
facturación bloqueada, management_ended cuando la gestión terminó antes de que
nadie asumiera el pago, y null en cualquier otro caso.
Las respuestas de creación declaran Location
Cuarenta y una operaciones responden 201 Created con una cabecera Location:
la URL canónica, relativa al servidor, del recurso que creó la petición, con el
segmento del eje dentro —para una factura, /v1/companies/{company}/invoices/{invoice}
con los dos ids rellenos—. La cabecera no es nueva en el cable: veintidós de esas
operaciones ya la enviaban sin declararla, y ahora el contrato lo dice. Cuatro de
las cuarenta y una son operaciones nuevas. Sigue Location en vez de reconstruir
la URL a partir de la respuesta.
La cabecera que ya no existe
X-Active-Profile se rechaza por presencia, nunca por su valor: un id bien
formado, el id de una empresa que no alcanzas, un valor mal formado y una cadena
vacía reciben el mismo error.
| Campo | Valor |
|---|---|
| Estado | 400 |
error.code | parameter_unknown |
error.type | invalid_request_error |
error.param | X-Active-Profile |
error.subcode | retired_active_profile_header |
Ignorar la cabecera habría sido la opción «compatible» peligrosa: la llamada saldría bien y emitiría el documento con el NIF del titular de la credencial en vez del que pretendías, sin ninguna señal.
# Antes
curl https://api.factuarea.com/v1/invoices \
-H "Authorization: Bearer $FACTUAREA_API_KEY" \
-H "X-Active-Profile: $COMPANY_ID"
# Ahora
curl https://api.factuarea.com/v1/companies/$COMPANY_ID/invoices \
-H "Authorization: Bearer $FACTUAREA_API_KEY"Todo identificador público es un UUID v7
Todo id que devuelve la API, y todo identificador de una ruta, es un UUID
v7: ordenado en el tiempo, así que ordenar por id sigue el orden de
creación. Hay un único formato, sea cual sea el recurso.
- Los registros nuevos reciben siempre un UUID v7, también las facturas que se emiten automáticamente a partir de cobros de Stripe.
- Los identificadores que creas tú —el
idde una configuración, un grupo de opciones o un valor de opción nuevos enproducts.createyproducts.update— tienen que ser UUID v7. Cualquier otra versión se rechaza con422; un elemento existente conserva su identificador. - Unos pocos registros antiguos —algunos documentos, configuraciones de
producto y certificados de VeriFactu creados antes de que UUID v7 fuera la
norma— reciben un UUID v7 nuevo en esta ventana. El
idantiguo deja de responder en la API, así que vuelve a leer esos registros desde sus listados si guardaste sus ids. Los enlaces públicos de documentos que ya enviaste siguen funcionando y abren el documento con su identificador nuevo.
Idempotencia tras la mudanza
El mecanismo de replay no cambia y crece con la superficie. Las 287
escrituras publican Idempotent-Replayed y repiten la respuesta de una key
repetida, y 130 declaran Idempotency-Key como obligatoria — trece más
que antes de la ventana, porque el eje de cuenta y la superficie de
aprovisionamiento suman escrituras irreversibles (emitir, canjear y revocar un
traspaso de NIF, retirar a un miembro, transferir la titularidad, crear una
cuenta gestionada, terminar su gestión, cambiar su plan, reemitir su vale,
aplicar una importación, rotar el secreto de un webhook de cuenta y borrarlo) y
unas pocas más que no son irreversibles pero merecen la misma protección (enviar
y reenviar una invitación, reintentar la entrega de un webhook de cuenta y
probar un endpoint). 69 quedan marcadas como irreversibles, nueve más que
antes.
| Código | Estado | Significado |
|---|---|---|
idempotency_key_reused | 422 | Esa key ya se usó con otro payload. Una key identifica una operación concreta, así que reutilizarla para otra dejaría el replay sin sentido. |
idempotency_key_required | 422 | La operación produce un efecto que no se puede deshacer y faltaba la cabecera. Se rechaza antes de ejecutar nada de negocio. |
idempotency_key_in_use | 409 | Otra petición con la misma key sigue en vuelo y su resultado aún no se conoce. |
idempotency_key_invalid | 400 | La key no tiene entre 1 y 255 caracteres ASCII imprimibles. |
idempotency_key_reused es la que se movió: antes de esta ventana respondía
409, y ahora responde 422. La huella a la que se ata una key incluye la
ruta, así que la misma key enviada a /v1/invoices y a
/v1/companies/{company}/invoices no es un replay. Mientras migras, genera una
key nueva por llamada en vez de reutilizar las que ya tenga tu cola. Lee la
guía de idempotencia.
CLI, SDK de PHP y SDK de Node
Los tres se generan desde este contrato y se regeneran contra él: las rutas de recurso de la CLI, los métodos de operación del SDK de PHP y los del SDK de Node toman el segmento del eje como primer argumento, los importes vuelven como cadenas y la cabecera retirada ya no tiene opción en ninguno. Sus notas de versión apuntan a esta página en vez de describir una rotura propia.
Lista de migración
- Llama a
GET /v1/mey guardadata.account.idy cadadata.scope[].id. Si trabajas para cuentas de clientes, lee tambiéndata.client_accounts[]: lista las cuentas que cedieron acceso a la tuya y las cuentas gestionadas que provisionaste, con el nivel que tienes sobre cada una. - Reescribe tus rutas base: recursos de empresa bajo
/v1/companies/{company}/…, recursos de cuenta bajo/v1/accounts/{account}/…, la raíz de aprovisionamiento y las cinco rutas de catálogo e introspección en la raíz. Vigila los cinco renombrados de guion bajo a guion y los cuatro segmentos de acción que pierden el guion bajo. - Cambia
PUTporPATCHen las treinta y dos operaciones de la tabla de verbos, y llama acontacts.restoreconPOST. - Quita
X-Active-Profilede tu cliente. Si la usabas para operar sobre varias empresas, el segmento de empresa hace eso mismo por petición, sin cabecera. - Lee cada campo de dinero como cadena hacia un tipo decimal de precisión fija,
con el
unit_pricede cuatro decimales de las líneas; leepaid_recorded_atypaid_datedonde leíaspaid_atypaid_on, y sigue enviandopaid_on; leepaid_untildonde leíasseat_paid_until. - Lleva cualquier llamada a las API keys de una empresa a
/v1/accounts/{account}/api-keys, restringe la key conscoped_company_idsy cambiaapi_keys:*poraccount:read/account:writeen tus keys. - Cambia
claim-tokenspornif-transferssi integraste el traspaso de NIF contra una compilación previa: scopesnif_transfers:readynif_transfers:write, códigosnif_transfer_expiredynif_transfer_invalid. - Trata los códigos de la puerta del NIF adicional:
additional_nif_charge_faileddonde tratabasseat_charge_failed,additional_nif_plan_requireddonde tratabasgestoria_plan_required,additional_nif_not_in_plandonde tratabasgestoria_module_required, ybilling_managed_by_providerpara una cuenta cuya facturación paga otra cuenta. - Trata los
403del modelo de cuentas:privileged_scope_required,live_credential_required,company_read_only,emitter_capability_restricted,owner_transfer_forbidden,additional_nif_not_in_planybilling_managed_by_provider. Ramifica segúncode, no segúnmessage. - Deja de llamar a las escrituras del catálogo de impuestos: léelo con
GET /v1/companies/{company}/taxesoGET /v1/tax-catalog. - Añade los treinta y siete códigos nuevos y
parameter_unknowna tu manejo de errores, leeidempotency_key_reusedcomo un422, y trata un404en un segmento de eje como «fuera de alcance», no como un fallo pasajero. - Repite tu integración con una key
fact_test_antes de mover tráfico real. - Si guardaste ids de registros creados antes de la ventana, vuelve a leerlos desde los listados: los pocos que aún tenían una versión de UUID antigua tienen ahora un UUID v7.
Lee Importes y fechas, Alcanzar un NIF por el segmento de empresa, Cuentas y NIF, NIF adicionales y Errores.
Cada operación, recurso por recurso
Operaciones: 519 — 49 nuevas, 294 movidas al eje, 161 movidas con otros cambios, 11 retiradas, 4 sin cambios.
Los cambios que alcanzan a 50 o más operaciones a la vez no se repiten en las filas de abajo: se documentan aquí una sola vez, con el número de operaciones que toca cada uno. Todo lo demás que cambió en una operación está en su fila.
| Cambio | Operaciones |
|---|---|
código de error 400 parameter_unknown/retired_active_profile_header documentado | 459 |
código de error 400 unsupported_api_version documentado | 459 |
código de error 403 company_inactive documentado | 432 |
código de error 404 profile_not_found documentado | 432 |
código de error 400 parameter_invalid_format documentado | 430 |
respuesta 400 añadida | 426 |
código de error 422 idempotency_key_reused documentado | 260 |
el código de error 409 idempotency_key_reused deja de documentarse | 210 |
respuesta 404 añadida | 190 |
código de error 404 resource_not_found documentado | 187 |
respuesta 409 retirada | 181 |
código de error 422 invalid_param_format documentado | 160 |
código de error 422 idempotency_key_required documentado | 114 |
el código de error 409 resource_conflict deja de documentarse | 59 |
código de error 409 resource_conflict documentado | 54 |
parámetro X-Active-Profile retirado | 459 |
parámetro de ruta {company} añadido | 432 |
parámetro de ruta {account} añadido | 22 |
importes y unit_price pasan a cadena decimal | 147 |
Saldos de ausencia
Operaciones: 2 — 0 nuevas, 2 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.absence-balances.list — Ruta movida | GET /v1/absence-balances | GET /v1/companies/{company}/absence-balances | — |
public-api.v1.absence-balances.show — Ruta movida | GET /v1/absence-balances/{absence_balance} | GET /v1/companies/{company}/absence-balances/{absence_balance} | — |
Calendario de ausencias
Operaciones: 1 — 0 nuevas, 1 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.absence-calendar.show — Ruta movida | GET /v1/absence-calendar | GET /v1/companies/{company}/absence-calendar | — |
Políticas de ausencia
Operaciones: 10 — 0 nuevas, 7 movidas al eje, 3 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.absence-policies.archive — Cambiada | POST /v1/absence-policies/{absence_policy}/archive | POST /v1/companies/{company}/absence-policies/{absence_policy}/archive | respuestas añadidas: 422 |
public-api.v1.absence-policies.assign — Ruta movida | POST /v1/absence-policies/{absence_policy}/assign | POST /v1/companies/{company}/absence-policies/{absence_policy}/assign | — |
public-api.v1.absence-policies.assignments — Ruta movida | GET /v1/absence-policies/{absence_policy}/assignments | GET /v1/companies/{company}/absence-policies/{absence_policy}/assignments | — |
public-api.v1.absence-policies.carryover — Ruta movida | POST /v1/absence-policies/{absence_policy}/carryover | POST /v1/companies/{company}/absence-policies/{absence_policy}/carryover | — |
public-api.v1.absence-policies.create — Cambiada | POST /v1/absence-policies | POST /v1/companies/{company}/absence-policies | cabecera Location declarada en 201 |
public-api.v1.absence-policies.list — Ruta movida | GET /v1/absence-policies | GET /v1/companies/{company}/absence-policies | — |
public-api.v1.absence-policies.show — Ruta movida | GET /v1/absence-policies/{absence_policy} | GET /v1/companies/{company}/absence-policies/{absence_policy} | — |
public-api.v1.absence-policies.unarchive — Cambiada | POST /v1/absence-policies/{absence_policy}/unarchive | POST /v1/companies/{company}/absence-policies/{absence_policy}/unarchive | respuestas añadidas: 422 |
public-api.v1.absence-policies.unassign — Ruta movida | POST /v1/absence-policies/{absence_policy}/unassign | POST /v1/companies/{company}/absence-policies/{absence_policy}/unassign | — |
public-api.v1.absence-policies.update — Ruta movida | PUT /v1/absence-policies/{absence_policy} | PATCH /v1/companies/{company}/absence-policies/{absence_policy} | verbo PUT → PATCH |
Solicitudes de ausencia
Operaciones: 6 — 0 nuevas, 4 movidas al eje, 2 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.absence-requests.approve — Ruta movida | POST /v1/absence-requests/{absence_request}/approve | POST /v1/companies/{company}/absence-requests/{absence_request}/approve | — |
public-api.v1.absence-requests.cancel — Cambiada | POST /v1/absence-requests/{absence_request}/cancel | POST /v1/companies/{company}/absence-requests/{absence_request}/cancel | respuestas añadidas: 422 |
public-api.v1.absence-requests.create — Cambiada | POST /v1/absence-requests | POST /v1/companies/{company}/absence-requests | cabecera Location declarada en 201 |
public-api.v1.absence-requests.list — Ruta movida | GET /v1/absence-requests | GET /v1/companies/{company}/absence-requests | — |
public-api.v1.absence-requests.reject — Ruta movida | POST /v1/absence-requests/{absence_request}/reject | POST /v1/companies/{company}/absence-requests/{absence_request}/reject | — |
public-api.v1.absence-requests.show — Ruta movida | GET /v1/absence-requests/{absence_request} | GET /v1/companies/{company}/absence-requests/{absence_request} | — |
Tipos de ausencia
Operaciones: 6 — 0 nuevas, 3 movidas al eje, 3 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.absence-types.archive — Cambiada | POST /v1/absence-types/{absence_type}/archive | POST /v1/companies/{company}/absence-types/{absence_type}/archive | respuestas añadidas: 422 |
public-api.v1.absence-types.create — Cambiada | POST /v1/absence-types | POST /v1/companies/{company}/absence-types | cabecera Location declarada en 201 |
public-api.v1.absence-types.list — Ruta movida | GET /v1/absence-types | GET /v1/companies/{company}/absence-types | — |
public-api.v1.absence-types.show — Ruta movida | GET /v1/absence-types/{absence_type} | GET /v1/companies/{company}/absence-types/{absence_type} | — |
public-api.v1.absence-types.unarchive — Cambiada | POST /v1/absence-types/{absence_type}/unarchive | POST /v1/companies/{company}/absence-types/{absence_type}/unarchive | respuestas añadidas: 422 |
public-api.v1.absence-types.update — Ruta movida | PUT /v1/absence-types/{absence_type} | PATCH /v1/companies/{company}/absence-types/{absence_type} | verbo PUT → PATCH |
Cuenta
Operaciones: 57 — 47 nuevas, 4 movidas al eje, 6 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.account.api_keys.create — Cambiada | POST /v1/account/api-keys | POST /v1/accounts/{account}/api-keys | campos nuevos del cuerpo: scoped_company_ids; cabecera Location declarada en 201; data.secret puede ser null; códigos de error documentados: 404 account_not_found |
public-api.v1.account.api_keys.list — Cambiada | GET /v1/account/api-keys | GET /v1/accounts/{account}/api-keys | códigos de error documentados: 404 account_not_found |
public-api.v1.account.api_keys.revoke — Cambiada | POST /v1/account/api-keys/{api_key}/revoke | POST /v1/accounts/{account}/api-keys/{api_key}/revoke | códigos de error documentados: 404 account_not_found |
public-api.v1.account.api_keys.rotate_secret — Cambiada | POST /v1/account/api-keys/{api_key}/rotate_secret | POST /v1/accounts/{account}/api-keys/{api_key}/rotate-secret | data.secret puede ser null; códigos de error documentados: 404 account_not_found |
public-api.v1.account.api_keys.show — Cambiada | GET /v1/account/api-keys/{api_key} | GET /v1/accounts/{account}/api-keys/{api_key} | códigos de error documentados: 404 account_not_found |
public-api.v1.account.api_keys.update_nif_scope — Nueva | — | PATCH /v1/accounts/{account}/api-keys/{api_key}/nif-scope | Nueva |
public-api.v1.account.billing — Ruta movida | GET /v1/account/billing | GET /v1/companies/{company}/billing | — |
public-api.v1.account.invitations.cancel — Nueva | — | DELETE /v1/accounts/{account}/invitations/{invitation} | Nueva |
public-api.v1.account.invitations.create — Nueva | — | POST /v1/accounts/{account}/invitations | Nueva |
public-api.v1.account.invitations.list — Nueva | — | GET /v1/accounts/{account}/invitations | Nueva |
public-api.v1.account.invitations.resend — Nueva | — | POST /v1/accounts/{account}/invitations/{invitation}/resend | Nueva |
public-api.v1.account.invitations.show — Nueva | — | GET /v1/accounts/{account}/invitations/{invitation} | Nueva |
public-api.v1.account.members.create — Nueva | — | POST /v1/accounts/{account}/members | Nueva |
public-api.v1.account.members.delete — Nueva | — | DELETE /v1/accounts/{account}/members/{member} | Nueva |
public-api.v1.account.members.grants.delete — Nueva | — | DELETE /v1/accounts/{account}/members/{member}/grants/{company} | Nueva |
public-api.v1.account.members.grants.list — Nueva | — | GET /v1/accounts/{account}/members/{member}/grants | Nueva |
public-api.v1.account.members.grants.show — Nueva | — | GET /v1/accounts/{account}/members/{member}/grants/{company} | Nueva |
public-api.v1.account.members.grants.update — Nueva | — | PUT /v1/accounts/{account}/members/{member}/grants/{company} | Nueva |
public-api.v1.account.members.list — Nueva | — | GET /v1/accounts/{account}/members | Nueva |
public-api.v1.account.members.module_access.show — Nueva | — | GET /v1/accounts/{account}/members/{member}/module-access | Nueva |
public-api.v1.account.members.module_access.update — Nueva | — | PATCH /v1/accounts/{account}/members/{member}/module-access | Nueva |
public-api.v1.account.members.show — Nueva | — | GET /v1/accounts/{account}/members/{member} | Nueva |
public-api.v1.account.members.update — Nueva | — | PATCH /v1/accounts/{account}/members/{member} | Nueva |
public-api.v1.account.nif_transfers.accept — Nueva | — | POST /v1/accounts/{account}/nif-transfers/accept | Nueva |
public-api.v1.account.nif_transfers.create — Nueva | — | POST /v1/accounts/{account}/nif-transfers | Nueva |
public-api.v1.account.nif_transfers.list — Nueva | — | GET /v1/accounts/{account}/nif-transfers | Nueva |
public-api.v1.account.nif_transfers.revoke — Nueva | — | POST /v1/accounts/{account}/nif-transfers/{nif_transfer}/revoke | Nueva |
public-api.v1.account.owner.transfer — Nueva | — | PATCH /v1/accounts/{account}/owner | Nueva |
public-api.v1.account.personalization.templates — Ruta movida | GET /v1/account/personalization/templates | GET /v1/companies/{company}/personalization/templates | — |
public-api.v1.account.personalization.update — Ruta movida | PATCH /v1/account/personalization | PATCH /v1/companies/{company}/personalization | — |
public-api.v1.account.provisioning_usage — Nueva | — | GET /v1/accounts/{account}/provisioning-usage | Nueva |
public-api.v1.account.request_logs.list — Nueva | — | GET /v1/accounts/{account}/request-logs | Nueva |
public-api.v1.account.request_logs.show — Nueva | — | GET /v1/accounts/{account}/request-logs/{request_id} | Nueva |
public-api.v1.account.show — Cambiada | GET /v1/account | GET /v1/me | scope account:read → ninguno; campos nuevos de la respuesta: data.account, data.client_accounts, data.client_accounts_has_more, data.client_accounts_visible, data.scope; campos retirados de la respuesta: data.addon, data.company, data.personalization, data.plan |
public-api.v1.account.usage — Nueva | — | GET /v1/accounts/{account}/usage | Nueva |
public-api.v1.account.verify_census — Ruta movida | POST /v1/account/census-verification | POST /v1/companies/{company}/census-verification | — |
public-api.v1.account.webhooks.create — Nueva | — | POST /v1/accounts/{account}/webhooks | Nueva |
public-api.v1.account.webhooks.delete — Nueva | — | DELETE /v1/accounts/{account}/webhooks/{webhook} | Nueva |
public-api.v1.account.webhooks.deliveries.list — Nueva | — | GET /v1/accounts/{account}/webhooks/{webhook}/deliveries | Nueva |
public-api.v1.account.webhooks.deliveries.retry — Nueva | — | POST /v1/accounts/{account}/webhooks/{webhook}/deliveries/{delivery}/retry | Nueva |
public-api.v1.account.webhooks.deliveries.show — Nueva | — | GET /v1/accounts/{account}/webhooks/{webhook}/deliveries/{delivery} | Nueva |
public-api.v1.account.webhooks.list — Nueva | — | GET /v1/accounts/{account}/webhooks | Nueva |
public-api.v1.account.webhooks.rotate_secret — Nueva | — | POST /v1/accounts/{account}/webhooks/{webhook}/secret | Nueva |
public-api.v1.account.webhooks.show — Nueva | — | GET /v1/accounts/{account}/webhooks/{webhook} | Nueva |
public-api.v1.account.webhooks.test — Nueva | — | POST /v1/accounts/{account}/webhooks/{webhook}/test | Nueva |
public-api.v1.account.webhooks.update — Nueva | — | PATCH /v1/accounts/{account}/webhooks/{webhook} | Nueva |
public-api.v1.managed_accounts.access_level.update — Nueva | — | PATCH /v1/accounts/{account}/access-level | Nueva |
public-api.v1.managed_accounts.claim_tokens.create — Nueva | — | POST /v1/accounts/{account}/claim-tokens | Nueva |
public-api.v1.managed_accounts.create — Nueva | — | POST /v1/accounts | Nueva |
public-api.v1.managed_accounts.imports.create — Nueva | — | POST /v1/accounts/imports | Nueva |
public-api.v1.managed_accounts.imports.preview — Nueva | — | POST /v1/accounts/imports/preview | Nueva |
public-api.v1.managed_accounts.imports.template — Nueva | — | GET /v1/accounts/imports/template | Nueva |
public-api.v1.managed_accounts.list — Nueva | — | GET /v1/accounts | Nueva |
public-api.v1.managed_accounts.management.end — Nueva | — | DELETE /v1/accounts/{account}/management | Nueva |
public-api.v1.managed_accounts.plan.preview — Nueva | — | GET /v1/accounts/{account}/plan/preview | Nueva |
public-api.v1.managed_accounts.plan.update — Nueva | — | PATCH /v1/accounts/{account}/plan | Nueva |
public-api.v1.managed_accounts.show — Nueva | — | GET /v1/accounts/{account} | Nueva |
Automatizaciones
Operaciones: 18 — 0 nuevas, 0 movidas al eje, 18 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.automations.catalog.show — Cambiada | GET /v1/automations/catalog | GET /v1/companies/{company}/automations/catalog | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded |
public-api.v1.automations.catalog.trigger_fields — Cambiada | GET /v1/automations/catalog/triggers/{trigger}/fields | GET /v1/companies/{company}/automations/catalog/triggers/{trigger}/fields | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found |
public-api.v1.automations.rules.activate — Cambiada | POST /v1/automations/rules/{rule}/activate | POST /v1/companies/{company}/automations/rules/{rule}/activate | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.automations.rules.create — Cambiada | POST /v1/automations/rules | POST /v1/companies/{company}/automations/rules | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 409 resource_already_exists/tax_id_already_exists |
public-api.v1.automations.rules.delete — Cambiada | DELETE /v1/automations/rules/{rule} | DELETE /v1/companies/{company}/automations/rules/{rule} | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.automations.rules.dry_run — Cambiada | POST /v1/automations/rules/{rule}/dry_run | POST /v1/companies/{company}/automations/rules/{rule}/dry-run | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.automations.rules.list — Cambiada | GET /v1/automations/rules | GET /v1/companies/{company}/automations/rules | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 422 invalid_param_format |
public-api.v1.automations.rules.pause — Cambiada | POST /v1/automations/rules/{rule}/pause | POST /v1/companies/{company}/automations/rules/{rule}/pause | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.automations.rules.show — Cambiada | GET /v1/automations/rules/{rule} | GET /v1/companies/{company}/automations/rules/{rule} | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found |
public-api.v1.automations.rules.update — Cambiada | PUT /v1/automations/rules/{rule} | PATCH /v1/companies/{company}/automations/rules/{rule} | verbo PUT → PATCH; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.automations.rules.versions.list — Cambiada | GET /v1/automations/rules/{rule}/versions | GET /v1/companies/{company}/automations/rules/{rule}/versions | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 422 invalid_param_format |
public-api.v1.automations.rules.versions.show — Cambiada | GET /v1/automations/rules/{rule}/versions/{version} | GET /v1/companies/{company}/automations/rules/{rule}/versions/{version} | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found |
public-api.v1.automations.runs.list — Cambiada | GET /v1/automations/runs | GET /v1/companies/{company}/automations/runs | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 422 invalid_param_format |
public-api.v1.automations.runs.replay — Cambiada | POST /v1/automations/runs/{run}/replay | POST /v1/companies/{company}/automations/runs/{run}/replay | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.automations.runs.show — Cambiada | GET /v1/automations/runs/{run} | GET /v1/companies/{company}/automations/runs/{run} | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found |
public-api.v1.automations.runs.steps.list — Cambiada | GET /v1/automations/runs/{run}/steps | GET /v1/companies/{company}/automations/runs/{run}/steps | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 422 invalid_param_format |
public-api.v1.automations.runs.steps.replay — Cambiada | POST /v1/automations/runs/{run}/steps/{step_index}/replay | POST /v1/companies/{company}/automations/runs/{run}/steps/{step_index}/replay | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.automations.usage.show — Cambiada | GET /v1/automations/usage | GET /v1/companies/{company}/automations/usage | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded |
Empresas
Operaciones: 19 — 2 nuevas, 0 movidas al eje, 12 movidas con otros cambios, 5 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.companies.activate — Cambiada | POST /v1/companies/{company}/activate | POST /v1/accounts/{account}/companies/{company}/activate | campos nuevos de la respuesta: data.paid_until, data.readiness, data.suspension_reason; campos retirados de la respuesta: data.seat_paid_until; códigos de error documentados: 402 additional_nif_charge_failed/additional_nif_charge_failed, 402 additional_nif_plan_required, 403 additional_nif_not_in_plan, 403 billing_managed_by_provider, 403 company_read_only, 404 account_not_found, 422 business_rule_violation/additional_nif_limit_reached |
public-api.v1.companies.activate_batch — Cambiada | POST /v1/companies/activate | POST /v1/accounts/{account}/companies/activate | campos nuevos de la respuesta: data[].address, data[].business_name, data[].city, data[].country_aeat_zone, data[].created_at, data[].email, data[].id, data[].logo_url (+11 más); campos retirados de la respuesta: data.address, data.business_name, data.city, data.country_aeat_zone, data.created_at, data.email, data.id, data.logo_url (+9 más); data cambia de tipo (object → array); códigos de error documentados: 402 additional_nif_charge_failed/additional_nif_charge_failed, 402 additional_nif_plan_required, 403 additional_nif_not_in_plan, 403 billing_managed_by_provider, 403 company_read_only, 404 account_not_found, 422 business_rule_violation/additional_nif_limit_reached |
public-api.v1.companies.api_keys.create — Retirada | POST /v1/companies/{company}/api-keys | — | Retirada |
public-api.v1.companies.api_keys.list — Retirada | GET /v1/companies/{company}/api-keys | — | Retirada |
public-api.v1.companies.api_keys.revoke — Retirada | DELETE /v1/companies/{company}/api-keys/{api_key} | — | Retirada |
public-api.v1.companies.api_keys.rotate_secret — Retirada | POST /v1/companies/{company}/api-keys/{api_key}/rotate-secret | — | Retirada |
public-api.v1.companies.api_keys.show — Retirada | GET /v1/companies/{company}/api-keys/{api_key} | — | Retirada |
public-api.v1.companies.create — Cambiada | POST /v1/companies | POST /v1/accounts/{account}/companies | campos nuevos de la respuesta: data.paid_until, data.readiness, data.suspension_reason; campos retirados de la respuesta: data.seat_paid_until; cabecera Location declarada en 201; códigos de error documentados: 402 additional_nif_charge_failed/additional_nif_charge_failed, 402 additional_nif_plan_required, 403 additional_nif_not_in_plan, 403 billing_managed_by_provider, 404 account_not_found, 409 resource_already_exists/managed_company_tax_id_already_exists, 422 business_rule_violation/additional_nif_limit_reached |
public-api.v1.companies.creation_status — Cambiada | GET /v1/companies/{company}/creation-status | GET /v1/accounts/{account}/companies/{company}/creation-status | códigos de error documentados: 404 account_not_found |
public-api.v1.companies.deactivate — Cambiada | POST /v1/companies/{company}/deactivate | POST /v1/accounts/{account}/companies/{company}/deactivate | respuestas añadidas: 422; campos nuevos de la respuesta: data.paid_until, data.readiness, data.suspension_reason; campos retirados de la respuesta: data.seat_paid_until; códigos de error documentados: 403 company_read_only, 404 account_not_found |
public-api.v1.companies.delete — Cambiada | DELETE /v1/companies/{company} | DELETE /v1/accounts/{account}/companies/{company} | respuestas añadidas: 422; códigos de error documentados: 403 company_read_only, 404 account_not_found |
public-api.v1.companies.issuing_readiness — Nueva | — | GET /v1/accounts/{account}/companies/{company}/issuing-readiness | Nueva |
public-api.v1.companies.list — Cambiada | GET /v1/companies | GET /v1/accounts/{account}/companies | parámetros nuevos: cursor, include, limit, tax_id; campos nuevos de la respuesta: data[].paid_until, data[].readiness, data[].suspension_reason; campos retirados de la respuesta: data[].seat_paid_until; códigos de error documentados: 404 account_not_found |
public-api.v1.companies.seat_charge_preview — Cambiada | GET /v1/companies/seat-charge-preview | GET /v1/accounts/{account}/companies/seat-charge-preview | company_ids[] pasa a opcional; códigos de error documentados: 404 account_not_found |
public-api.v1.companies.show — Cambiada | GET /v1/companies/{company} | GET /v1/accounts/{account}/companies/{company} | campos nuevos de la respuesta: data.paid_until, data.readiness, data.suspension_reason; campos retirados de la respuesta: data.seat_paid_until; códigos de error documentados: 404 account_not_found |
public-api.v1.companies.stats — Nueva | — | GET /v1/accounts/{account}/companies/stats | Nueva |
public-api.v1.companies.update — Cambiada | PATCH /v1/companies/{company} | PATCH /v1/accounts/{account}/companies/{company} | campos nuevos de la respuesta: data.paid_until, data.readiness, data.suspension_reason; campos retirados de la respuesta: data.seat_paid_until; códigos de error documentados: 403 company_read_only, 404 account_not_found |
public-api.v1.companies.verify_creation — Cambiada | POST /v1/companies/{company}/verify-creation | POST /v1/accounts/{account}/companies/{company}/verify-creation | respuestas añadidas: 422; códigos de error documentados: 403 company_read_only, 404 account_not_found |
public-api.v1.gestoria.workforce_summary — Cambiada | GET /v1/gestoria/workforce-summary | GET /v1/accounts/{account}/gestoria/workforce-summary | códigos de error documentados: 404 account_not_found |
Contactos
Operaciones: 27 — 0 nuevas, 2 movidas al eje, 25 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.contacts.activities — Cambiada | GET /v1/contacts/{contact}/activities | GET /v1/companies/{company}/contacts/{contact}/activities | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 422 invalid_param_format |
public-api.v1.contacts.archive — Cambiada | POST /v1/contacts/{contact}/archive | POST /v1/companies/{company}/contacts/{contact}/archive | respuestas añadidas: 422; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.assign_contact_role — Cambiada | POST /v1/contacts/{contact}/roles/{role} | POST /v1/companies/{company}/contacts/{contact}/roles/{role} | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.bulk_archive — Cambiada | POST /v1/contacts/bulk/archive | POST /v1/companies/{company}/contacts/bulk/archive | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.bulk_change_contact_role_status — Cambiada | POST /v1/contacts/bulk/status | POST /v1/companies/{company}/contacts/bulk/status | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.bulk_create — Ruta movida | POST /v1/contacts/bulk-create | POST /v1/companies/{company}/contacts/bulk-create | — |
public-api.v1.contacts.bulk_delete — Cambiada | POST /v1/contacts/bulk-delete | POST /v1/companies/{company}/contacts/bulk-delete | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.change_contact_role_status — Cambiada | PUT /v1/contacts/{contact}/roles/{role}/status | PATCH /v1/companies/{company}/contacts/{contact}/roles/{role}/status | verbo PUT → PATCH; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.create — Cambiada | POST /v1/contacts | POST /v1/companies/{company}/contacts | respuestas añadidas: 201; campos nuevos de la respuesta: data; cabecera Location declarada en 200; cabecera Location declarada en 201; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded |
public-api.v1.contacts.delete — Cambiada | DELETE /v1/contacts/{contact} | DELETE /v1/companies/{company}/contacts/{contact} | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.find_by_external_id — Cambiada | POST /v1/contacts/find-by-external-id | POST /v1/companies/{company}/contacts/find-by-external-id | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 404 contact_not_found, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded (+1 más); códigos de error que dejan de documentarse: 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.find_by_tax_id — Cambiada | POST /v1/contacts/find-by-tax-id | POST /v1/companies/{company}/contacts/find-by-tax-id | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 404 contact_not_found, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded (+1 más) |
public-api.v1.contacts.import — Cambiada | POST /v1/contacts/import | POST /v1/companies/{company}/contacts/import | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 409 resource_already_exists/external_id_already_exists, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded (+1 más) |
public-api.v1.contacts.import_template — Cambiada | GET /v1/contacts/import/template | GET /v1/companies/{company}/contacts/import/template | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded |
public-api.v1.contacts.list — Cambiada | GET /v1/contacts | GET /v1/companies/{company}/contacts | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 422 invalid_param_format |
public-api.v1.contacts.options — Cambiada | GET /v1/contacts/options | GET /v1/companies/{company}/contacts/options | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 422 invalid_param_format |
public-api.v1.contacts.preview_import — Cambiada | POST /v1/contacts/import/preview | POST /v1/companies/{company}/contacts/import/preview | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.remove_contact_role — Cambiada | DELETE /v1/contacts/{contact}/roles/{role} | DELETE /v1/companies/{company}/contacts/{contact}/roles/{role} | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.restore — Cambiada | PUT /v1/contacts/{contact}/restore | POST /v1/companies/{company}/contacts/{contact}/restore | verbo PUT → POST; respuestas añadidas: 422; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.search — Cambiada | GET /v1/contacts/search | GET /v1/companies/{company}/contacts/search | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 422 invalid_param_format |
public-api.v1.contacts.show — Cambiada | GET /v1/contacts/{contact} | GET /v1/companies/{company}/contacts/{contact} | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found |
public-api.v1.contacts.stats — Cambiada | GET /v1/contacts/stats | GET /v1/companies/{company}/contacts/stats | códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded |
public-api.v1.contacts.update — Cambiada | PUT /v1/contacts/{contact} | PATCH /v1/companies/{company}/contacts/{contact} | verbo PUT → PATCH; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 409 resource_already_exists/external_id_already_exists, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded (+1 más); códigos de error que dejan de documentarse: 404 tax_report_not_found |
public-api.v1.contacts.update_bank_accounts — Cambiada | PUT /v1/contacts/{contact}/bank-accounts | PATCH /v1/companies/{company}/contacts/{contact}/bank-accounts | verbo PUT → PATCH; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.update_customer_profile — Cambiada | PUT /v1/contacts/{contact}/customer-profile | PATCH /v1/companies/{company}/contacts/{contact}/customer-profile | verbo PUT → PATCH; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.update_supplier_profile — Cambiada | PUT /v1/contacts/{contact}/supplier-profile | PATCH /v1/companies/{company}/contacts/{contact}/supplier-profile | verbo PUT → PATCH; códigos de error documentados: 401 api_key_expired, 401 ip_not_allowed, 403 forbidden_action, 403 module_not_available_in_sandbox, 403 privileged_scope_required, 429 monthly_quota_exceeded, 429 portfolio_monthly_quota_exceeded, 429 portfolio_rate_limit_exceeded; códigos de error que dejan de documentarse: 404 tax_report_not_found, 409 resource_already_exists/tax_id_already_exists |
public-api.v1.contacts.verify_census — Ruta movida | POST /v1/contacts/census-verification | POST /v1/companies/{company}/contacts/census-verification | — |
Albaranes
Operaciones: 22 — 0 nuevas, 19 movidas al eje, 3 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.delivery_notes.bulk_delete — Ruta movida | POST /v1/delivery_notes/bulk-delete | POST /v1/companies/{company}/delivery-notes/bulk-delete | — |
public-api.v1.delivery_notes.bulk_pdf — Ruta movida | POST /v1/delivery_notes/bulk-pdf | POST /v1/companies/{company}/delivery-notes/bulk-pdf | — |
public-api.v1.delivery_notes.bulk_send — Ruta movida | POST /v1/delivery_notes/bulk-send | POST /v1/companies/{company}/delivery-notes/bulk-send | — |
public-api.v1.delivery_notes.bulk_status — Ruta movida | POST /v1/delivery_notes/bulk-status | POST /v1/companies/{company}/delivery-notes/bulk-status | — |
public-api.v1.delivery_notes.cancel — Ruta movida | POST /v1/delivery_notes/{delivery_note}/cancel | POST /v1/companies/{company}/delivery-notes/{delivery_note}/cancel | — |
public-api.v1.delivery_notes.convert — Cambiada | POST /v1/delivery_notes/{delivery_note}/convert | POST /v1/companies/{company}/delivery-notes/{delivery_note}/convert | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.delivery_notes.create — Ruta movida | POST /v1/delivery_notes | POST /v1/companies/{company}/delivery-notes | — |
public-api.v1.delivery_notes.delete — Ruta movida | DELETE /v1/delivery_notes/{delivery_note} | DELETE /v1/companies/{company}/delivery-notes/{delivery_note} | — |
public-api.v1.delivery_notes.duplicate — Cambiada | POST /v1/delivery_notes/{delivery_note}/duplicate | POST /v1/companies/{company}/delivery-notes/{delivery_note}/duplicate | respuestas añadidas: 422 |
public-api.v1.delivery_notes.find_by_external_id — Ruta movida | POST /v1/delivery_notes/find-by-external-id | POST /v1/companies/{company}/delivery-notes/find-by-external-id | — |
public-api.v1.delivery_notes.list — Ruta movida | GET /v1/delivery_notes | GET /v1/companies/{company}/delivery-notes | — |
public-api.v1.delivery_notes.mark_delivered — Ruta movida | POST /v1/delivery_notes/{delivery_note}/mark-delivered | POST /v1/companies/{company}/delivery-notes/{delivery_note}/mark-delivered | — |
public-api.v1.delivery_notes.pdf — Ruta movida | GET /v1/delivery_notes/{delivery_note}/pdf | GET /v1/companies/{company}/delivery-notes/{delivery_note}/pdf | — |
public-api.v1.delivery_notes.public_link.get — Ruta movida | GET /v1/delivery_notes/{delivery_note}/public-link | GET /v1/companies/{company}/delivery-notes/{delivery_note}/public-link | — |
public-api.v1.delivery_notes.public_link.update — Ruta movida | PUT /v1/delivery_notes/{delivery_note}/public-link | PATCH /v1/companies/{company}/delivery-notes/{delivery_note}/public-link | verbo PUT → PATCH |
public-api.v1.delivery_notes.send — Ruta movida | POST /v1/delivery_notes/{delivery_note}/send | POST /v1/companies/{company}/delivery-notes/{delivery_note}/send | — |
public-api.v1.delivery_notes.show — Ruta movida | GET /v1/delivery_notes/{delivery_note} | GET /v1/companies/{company}/delivery-notes/{delivery_note} | — |
public-api.v1.delivery_notes.sign — Ruta movida | POST /v1/delivery_notes/{delivery_note}/sign | POST /v1/companies/{company}/delivery-notes/{delivery_note}/sign | — |
public-api.v1.delivery_notes.signature_audits.forget — Ruta movida | POST /v1/delivery_notes/signature-audits/{auditId}/forget | POST /v1/companies/{company}/delivery-notes/signature-audits/{auditId}/forget | — |
public-api.v1.delivery_notes.stats — Ruta movida | GET /v1/delivery_notes/stats | GET /v1/companies/{company}/delivery-notes/stats | — |
public-api.v1.delivery_notes.statuses — Ruta movida | GET /v1/delivery_notes/statuses | GET /v1/companies/{company}/delivery-notes/statuses | — |
public-api.v1.delivery_notes.update — Cambiada | PUT /v1/delivery_notes/{delivery_note} | PATCH /v1/companies/{company}/delivery-notes/{delivery_note} | verbo PUT → PATCH; códigos de error documentados: 409 resource_already_exists/external_id_already_exists |
Registros de peticiones
Operaciones: 2 — 0 nuevas, 2 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.developers.request_logs.list — Ruta movida | GET /v1/developers/request-logs | GET /v1/companies/{company}/request-logs | — |
public-api.v1.developers.request_logs.show — Ruta movida | GET /v1/developers/request-logs/{request_id} | GET /v1/companies/{company}/request-logs/{request_id} | — |
Entregas de correo
Operaciones: 3 — 0 nuevas, 3 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.emails.indicators — Ruta movida | GET /v1/emails/indicators | GET /v1/companies/{company}/emails/indicators | — |
public-api.v1.emails.list — Ruta movida | GET /v1/emails | GET /v1/companies/{company}/emails | — |
public-api.v1.emails.show — Ruta movida | GET /v1/emails/{email} | GET /v1/companies/{company}/emails/{email} | — |
Empleados
Operaciones: 17 — 0 nuevas, 8 movidas al eje, 9 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.employee-invitations.cancel — Cambiada | DELETE /v1/employee-invitations/{invitation} | DELETE /v1/companies/{company}/employee-invitations/{invitation} | respuestas añadidas: 422 |
public-api.v1.employee-invitations.list — Ruta movida | GET /v1/employee-invitations | GET /v1/companies/{company}/employee-invitations | — |
public-api.v1.employee-invitations.resend — Ruta movida | POST /v1/employee-invitations/{invitation}/resend | POST /v1/companies/{company}/employee-invitations/{invitation}/resend | — |
public-api.v1.employee-invitations.send — Cambiada | POST /v1/employee-invitations | POST /v1/companies/{company}/employee-invitations | cabecera Location declarada en 201 |
public-api.v1.employee-seats.cancel — Cambiada | POST /v1/employee-seats/cancel | POST /v1/accounts/{account}/employee-seats/cancel | códigos de error documentados: 404 account_not_found |
public-api.v1.employee-seats.change-quantity — Cambiada | POST /v1/employee-seats/change-quantity | POST /v1/accounts/{account}/employee-seats/change-quantity | códigos de error documentados: 404 account_not_found |
public-api.v1.employee-seats.preview — Cambiada | GET /v1/employee-seats/preview | GET /v1/accounts/{account}/employee-seats/preview | códigos de error documentados: 404 account_not_found |
public-api.v1.employee-seats.status — Cambiada | GET /v1/employee-seats | GET /v1/accounts/{account}/employee-seats | códigos de error documentados: 404 account_not_found |
public-api.v1.employee-seats.subscribe — Cambiada | POST /v1/employee-seats/subscribe | POST /v1/accounts/{account}/employee-seats/subscribe | códigos de error documentados: 404 account_not_found |
public-api.v1.employees.create — Cambiada | POST /v1/employees | POST /v1/companies/{company}/employees | cabecera Location declarada en 201; códigos de error documentados: 409 resource_already_exists/external_id_already_exists |
public-api.v1.employees.deactivate — Ruta movida | POST /v1/employees/{employee}/deactivate | POST /v1/companies/{company}/employees/{employee}/deactivate | — |
public-api.v1.employees.find_by_external_id — Ruta movida | POST /v1/employees/find-by-external-id | POST /v1/companies/{company}/employees/find-by-external-id | — |
public-api.v1.employees.list — Ruta movida | GET /v1/employees | GET /v1/companies/{company}/employees | — |
public-api.v1.employees.reactivate — Ruta movida | POST /v1/employees/{employee}/reactivate | POST /v1/companies/{company}/employees/{employee}/reactivate | — |
public-api.v1.employees.show — Ruta movida | GET /v1/employees/{employee} | GET /v1/companies/{company}/employees/{employee} | — |
public-api.v1.employees.stats — Ruta movida | GET /v1/employees/stats | GET /v1/companies/{company}/employees/stats | — |
public-api.v1.employees.update — Cambiada | PUT /v1/employees/{employee} | PATCH /v1/companies/{company}/employees/{employee} | verbo PUT → PATCH; códigos de error documentados: 409 resource_already_exists/external_id_already_exists |
Eventos
Operaciones: 3 — 0 nuevas, 0 movidas al eje, 2 movidas con otros cambios, 0 retiradas, 1 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.event_catalog.list — Sin cambios | GET /v1/event-catalog | GET /v1/event-catalog | Sin cambios |
public-api.v1.events.list — Cambiada | GET /v1/events | GET /v1/companies/{company}/events | campos nuevos de la respuesta: data[].data.object.paid_date, data[].data.object.paid_recorded_at; campos retirados de la respuesta: data[].data.object.paid_at, data[].data.object.paid_on |
public-api.v1.events.show — Cambiada | GET /v1/events/{event} | GET /v1/companies/{company}/events/{event} | campos nuevos de la respuesta: data.data.object.paid_date, data.data.object.paid_recorded_at; campos retirados de la respuesta: data.data.object.paid_at, data.data.object.paid_on |
FacturaE / FACe
Operaciones: 5 — 0 nuevas, 4 movidas al eje, 1 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.face_submissions.cancel — Ruta movida | POST /v1/face-submissions/{faceSubmission}/cancel | POST /v1/companies/{company}/face-submissions/{faceSubmission}/cancel | — |
public-api.v1.face_submissions.show — Ruta movida | GET /v1/face-submissions/{faceSubmission} | GET /v1/companies/{company}/face-submissions/{faceSubmission} | — |
public-api.v1.invoices.face_submissions.list — Ruta movida | GET /v1/invoices/{invoice}/face-submissions | GET /v1/companies/{company}/invoices/{invoice}/face-submissions | — |
public-api.v1.invoices.face_submissions.submit — Cambiada | POST /v1/invoices/{invoice}/face-submissions | POST /v1/companies/{company}/invoices/{invoice}/face-submissions | códigos de error documentados: 409 resource_already_exists/face_submission_already_exists |
public-api.v1.invoices.facturae — Ruta movida | GET /v1/invoices/{invoice}/facturae | GET /v1/companies/{company}/invoices/{invoice}/facturae | — |
Festivos
Operaciones: 3 — 0 nuevas, 3 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.holidays.list — Ruta movida | GET /v1/holidays | GET /v1/companies/{company}/holidays | — |
public-api.v1.holidays.resolve — Ruta movida | GET /v1/holidays/resolve | GET /v1/companies/{company}/holidays/resolve | — |
public-api.v1.holidays.show — Ruta movida | GET /v1/holidays/{holiday} | GET /v1/companies/{company}/holidays/{holiday} | — |
Eventos de integración
Operaciones: 3 — 0 nuevas, 3 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.integrations.events.list — Ruta movida | GET /v1/integrations/events | GET /v1/companies/{company}/integrations/events | — |
public-api.v1.integrations.events.replay — Ruta movida | POST /v1/integrations/events/{event}/replay | POST /v1/companies/{company}/integrations/events/{event}/replay | — |
public-api.v1.integrations.events.show — Ruta movida | GET /v1/integrations/events/{event} | GET /v1/companies/{company}/integrations/events/{event} | — |
Facturas
Operaciones: 48 — 0 nuevas, 25 movidas al eje, 22 movidas con otros cambios, 0 retiradas, 1 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.invoices.activities — Ruta movida | GET /v1/invoices/{invoice}/activities | GET /v1/companies/{company}/invoices/{invoice}/activities | — |
public-api.v1.invoices.annul — Cambiada | POST /v1/invoices/{invoice}/annul | POST /v1/companies/{company}/invoices/{invoice}/annul | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.assign_real_number — Cambiada | POST /v1/invoices/{invoice}/assign-real-number | POST /v1/companies/{company}/invoices/{invoice}/assign-real-number | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.bulk_create — Cambiada | POST /v1/invoices/bulk-create | POST /v1/companies/{company}/invoices/bulk-create | campos nuevos del cuerpo: invoices[].client_id, invoices[].custom_fields, invoices[].due_on, invoices[].external_id, invoices[].issued_on, invoices[].lines, invoices[].metadata, invoices[].metadata{} (+6 más); campos retirados del cuerpo: invoices[][] |
public-api.v1.invoices.bulk_delete — Ruta movida | POST /v1/invoices/bulk-delete | POST /v1/companies/{company}/invoices/bulk-delete | — |
public-api.v1.invoices.bulk_pdf — Ruta movida | POST /v1/invoices/bulk-pdf | POST /v1/companies/{company}/invoices/bulk-pdf | — |
public-api.v1.invoices.bulk_send — Ruta movida | POST /v1/invoices/bulk-send | POST /v1/companies/{company}/invoices/bulk-send | — |
public-api.v1.invoices.bulk_status — Ruta movida | POST /v1/invoices/bulk-status | POST /v1/companies/{company}/invoices/bulk-status | — |
public-api.v1.invoices.can_annul — Ruta movida | GET /v1/invoices/{invoice}/can-annul | GET /v1/companies/{company}/invoices/{invoice}/can-annul | — |
public-api.v1.invoices.corrective — Cambiada | POST /v1/invoices/{invoice}/corrective | POST /v1/companies/{company}/invoices/{invoice}/corrective | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.correctives — Cambiada | GET /v1/invoices/{invoice}/correctives | GET /v1/companies/{company}/invoices/{invoice}/correctives | campos nuevos de la respuesta: data[].paid_date, data[].paid_recorded_at; campos retirados de la respuesta: data[].paid_at, data[].paid_on |
public-api.v1.invoices.create — Cambiada | POST /v1/invoices | POST /v1/companies/{company}/invoices | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.create_recurring — Cambiada | POST /v1/invoices/{invoice}/create-recurring | POST /v1/companies/{company}/invoices/{invoice}/create-recurring | cabecera Location declarada en 201 |
public-api.v1.invoices.delete — Ruta movida | DELETE /v1/invoices/{invoice} | DELETE /v1/companies/{company}/invoices/{invoice} | — |
public-api.v1.invoices.duplicate — Cambiada | POST /v1/invoices/{invoice}/duplicate | POST /v1/companies/{company}/invoices/{invoice}/duplicate | respuestas añadidas: 422; campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.export_excel — Ruta movida | POST /v1/invoices/export/excel | POST /v1/companies/{company}/invoices/export/excel | — |
public-api.v1.invoices.find_by_external_id — Cambiada | POST /v1/invoices/find-by-external-id | POST /v1/companies/{company}/invoices/find-by-external-id | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.find_by_number — Cambiada | POST /v1/invoices/find-by-number | POST /v1/companies/{company}/invoices/find-by-number | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.list — Cambiada | GET /v1/invoices | GET /v1/companies/{company}/invoices | parámetros nuevos: paid_on[gt], paid_on[gte], paid_on[lt], paid_on[lte]; campos nuevos de la respuesta: data[].paid_date, data[].paid_recorded_at; campos retirados de la respuesta: data[].paid_at, data[].paid_on |
public-api.v1.invoices.mark_paid — Cambiada | POST /v1/invoices/{invoice}/mark-paid | POST /v1/companies/{company}/invoices/{invoice}/mark-paid | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.mark_sent — Cambiada | POST /v1/invoices/{invoice}/mark-sent | POST /v1/companies/{company}/invoices/{invoice}/mark-sent | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.payment_receipt — Ruta movida | GET /v1/invoices/{invoice}/payment-receipt | GET /v1/companies/{company}/invoices/{invoice}/payment-receipt | — |
public-api.v1.invoices.payments_create — Ruta movida | POST /v1/invoices/{invoice}/payments | POST /v1/companies/{company}/invoices/{invoice}/payments | — |
public-api.v1.invoices.payments_list — Ruta movida | GET /v1/invoices/{invoice}/payments | GET /v1/companies/{company}/invoices/{invoice}/payments | — |
public-api.v1.invoices.payments_revert — Ruta movida | POST /v1/invoices/{invoice}/payments/{payment}/reversal | POST /v1/companies/{company}/invoices/{invoice}/payments/{payment}/reversal | — |
public-api.v1.invoices.pdf — Ruta movida | GET /v1/invoices/{invoice}/pdf | GET /v1/companies/{company}/invoices/{invoice}/pdf | — |
public-api.v1.invoices.pdf_link — Ruta movida | GET /v1/invoices/{invoice}/pdf-link | GET /v1/companies/{company}/invoices/{invoice}/pdf-link | — |
public-api.v1.invoices.pdf_preview — Ruta movida | GET /v1/invoices/{invoice}/pdf/preview | GET /v1/companies/{company}/invoices/{invoice}/pdf/preview | — |
public-api.v1.invoices.public_link_get — Ruta movida | GET /v1/invoices/{invoice}/public-link | GET /v1/companies/{company}/invoices/{invoice}/public-link | — |
public-api.v1.invoices.public_link_update — Ruta movida | PUT /v1/invoices/{invoice}/public-link | PATCH /v1/companies/{company}/invoices/{invoice}/public-link | verbo PUT → PATCH |
public-api.v1.invoices.quarterly.available — Ruta movida | GET /v1/invoices/quarterly/available-quarters | GET /v1/companies/{company}/invoices/quarterly/available-quarters | — |
public-api.v1.invoices.quarterly.download_zip — Ruta movida | POST /v1/invoices/quarterly/download-zip | POST /v1/companies/{company}/invoices/quarterly/download-zip | — |
public-api.v1.invoices.quarterly.send_email — Ruta movida | POST /v1/invoices/quarterly/send-email | POST /v1/companies/{company}/invoices/quarterly/send-email | — |
public-api.v1.invoices.reminder_preview — Ruta movida | POST /v1/invoices/{invoice}/reminder-preview | POST /v1/companies/{company}/invoices/{invoice}/reminder-preview | — |
public-api.v1.invoices.reschedule — Cambiada | PATCH /v1/invoices/{invoice}/reschedule | PATCH /v1/companies/{company}/invoices/{invoice}/reschedule | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.schedule — Cambiada | POST /v1/invoices/{invoice}/schedule | POST /v1/companies/{company}/invoices/{invoice}/schedule | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.send — Cambiada | POST /v1/invoices/{invoice}/send | POST /v1/companies/{company}/invoices/{invoice}/send | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.send_reminder — Ruta movida | POST /v1/invoices/{invoice}/send-reminder | POST /v1/companies/{company}/invoices/{invoice}/send-reminder | — |
public-api.v1.invoices.show — Cambiada | GET /v1/invoices/{invoice} | GET /v1/companies/{company}/invoices/{invoice} | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.simplified_eligibility — Ruta movida | POST /v1/invoices/simplified-eligibility | POST /v1/companies/{company}/invoices/simplified-eligibility | — |
public-api.v1.invoices.stats — Ruta movida | GET /v1/invoices/stats | GET /v1/companies/{company}/invoices/stats | — |
public-api.v1.invoices.statuses — Ruta movida | GET /v1/invoices/statuses | GET /v1/companies/{company}/invoices/statuses | — |
public-api.v1.invoices.substitute_simplified — Cambiada | POST /v1/invoices/substitute-simplified | POST /v1/companies/{company}/invoices/substitute-simplified | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.unschedule — Cambiada | POST /v1/invoices/{invoice}/unschedule | POST /v1/companies/{company}/invoices/{invoice}/unschedule | respuestas añadidas: 422; campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.unsend — Cambiada | POST /v1/invoices/{invoice}/unsend | POST /v1/companies/{company}/invoices/{invoice}/unsend | respuestas añadidas: 422; campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.invoices.update — Cambiada | PUT /v1/invoices/{invoice} | PATCH /v1/companies/{company}/invoices/{invoice} | verbo PUT → PATCH; campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on; códigos de error documentados: 409 resource_already_exists/external_id_already_exists |
public-api.v1.invoices.void — Cambiada | POST /v1/invoices/{invoice}/void | POST /v1/companies/{company}/invoices/{invoice}/void | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.payment_methods.list — Sin cambios | GET /v1/payment-methods | GET /v1/payment-methods | Sin cambios |
VeriFactu
Operaciones: 27 — 0 nuevas, 24 movidas al eje, 3 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.invoices.verifactu_create — Ruta movida | POST /v1/invoices/{invoice}/verifactu | POST /v1/companies/{company}/invoices/{invoice}/verifactu | — |
public-api.v1.invoices.verifactu_get — Ruta movida | GET /v1/invoices/{invoice}/verifactu | GET /v1/companies/{company}/invoices/{invoice}/verifactu | — |
public-api.v1.verifactu.aeat_access.list — Ruta movida | GET /v1/verifactu/aeat-access/records | GET /v1/companies/{company}/verifactu/aeat-access/records | — |
public-api.v1.verifactu.aeat_access.show — Ruta movida | GET /v1/verifactu/aeat-access/records/{record} | GET /v1/companies/{company}/verifactu/aeat-access/records/{record} | — |
public-api.v1.verifactu.certificates.activate — Ruta movida | POST /v1/verifactu/certificates/{certificate}/activate | POST /v1/companies/{company}/verifactu/certificates/{certificate}/activate | — |
public-api.v1.verifactu.certificates.active — Ruta movida | GET /v1/verifactu/certificates/active | GET /v1/companies/{company}/verifactu/certificates/active | — |
public-api.v1.verifactu.certificates.list — Ruta movida | GET /v1/verifactu/certificates | GET /v1/companies/{company}/verifactu/certificates | — |
public-api.v1.verifactu.certificates.revoke — Ruta movida | DELETE /v1/verifactu/certificates/{certificate} | DELETE /v1/companies/{company}/verifactu/certificates/{certificate} | — |
public-api.v1.verifactu.certificates.upload — Cambiada | POST /v1/verifactu/certificates | POST /v1/companies/{company}/verifactu/certificates | códigos de error documentados: 422 business_rule_violation/certificate_too_large, 422 business_rule_violation/invalid_certificate_format, 422 business_rule_violation/invalid_certificate_password, 422 verifactu_not_eligible/certificate_expired, 422 verifactu_not_eligible/certificate_nif_mismatch |
public-api.v1.verifactu.chain.validate — Ruta movida | GET /v1/verifactu/chain/validate | GET /v1/companies/{company}/verifactu/chain/validate | — |
public-api.v1.verifactu.config — Ruta movida | GET /v1/verifactu/config | GET /v1/companies/{company}/verifactu/config | — |
public-api.v1.verifactu.declaracion.current — Ruta movida | GET /v1/verifactu/declaracion-responsable | GET /v1/companies/{company}/verifactu/declaracion-responsable | — |
public-api.v1.verifactu.declaracion.history — Ruta movida | GET /v1/verifactu/declaracion-responsable/history | GET /v1/companies/{company}/verifactu/declaracion-responsable/history | — |
public-api.v1.verifactu.events.list — Ruta movida | GET /v1/verifactu/events | GET /v1/companies/{company}/verifactu/events | — |
public-api.v1.verifactu.events.retry — Ruta movida | POST /v1/verifactu/events/{event}/retry | POST /v1/companies/{company}/verifactu/events/{event}/retry | — |
public-api.v1.verifactu.events.show — Ruta movida | GET /v1/verifactu/events/{event} | GET /v1/companies/{company}/verifactu/events/{event} | — |
public-api.v1.verifactu.events.summary — Ruta movida | GET /v1/verifactu/events/summary | GET /v1/companies/{company}/verifactu/events/summary | — |
public-api.v1.verifactu.records.activities — Ruta movida | GET /v1/verifactu/records/{record}/activities | GET /v1/companies/{company}/verifactu/records/{record}/activities | — |
public-api.v1.verifactu.records.find_by_csv — Cambiada | POST /v1/verifactu/records/find-by-csv | POST /v1/companies/{company}/verifactu/records/find-by-csv | respuestas añadidas: 422 |
public-api.v1.verifactu.records.find_by_huella — Ruta movida | POST /v1/verifactu/records/find-by-huella | POST /v1/companies/{company}/verifactu/records/find-by-huella | — |
public-api.v1.verifactu.records.find_by_invoice_number — Cambiada | POST /v1/verifactu/records/find-by-invoice-number | POST /v1/companies/{company}/verifactu/records/find-by-invoice-number | respuestas añadidas: 422 |
public-api.v1.verifactu.records.list — Ruta movida | GET /v1/verifactu/records | GET /v1/companies/{company}/verifactu/records | — |
public-api.v1.verifactu.records.retry — Ruta movida | POST /v1/verifactu/records/{record}/retry | POST /v1/companies/{company}/verifactu/records/{record}/retry | — |
public-api.v1.verifactu.records.show — Ruta movida | GET /v1/verifactu/records/{record} | GET /v1/companies/{company}/verifactu/records/{record} | — |
public-api.v1.verifactu.records.subsanar — Ruta movida | POST /v1/verifactu/records/{record}/subsanar | POST /v1/companies/{company}/verifactu/records/{record}/subsanar | — |
public-api.v1.verifactu.settings.update — Ruta movida | PUT /v1/verifactu/settings | PATCH /v1/companies/{company}/verifactu/settings | verbo PUT → PATCH |
public-api.v1.verifactu.stats — Ruta movida | GET /v1/verifactu/stats | GET /v1/companies/{company}/verifactu/stats | — |
Cierres mensuales
Operaciones: 8 — 0 nuevas, 5 movidas al eje, 3 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.monthly_time_record_closes.create — Cambiada | POST /v1/monthly-time-record-closes | POST /v1/companies/{company}/monthly-time-record-closes | cabecera Location declarada en 201; códigos de error documentados: 409 resource_already_exists/monthly_register_already_closed |
public-api.v1.monthly_time_record_closes.export — Ruta movida | GET /v1/monthly-time-record-closes/{monthly_time_record_close}/export | GET /v1/companies/{company}/monthly-time-record-closes/{monthly_time_record_close}/export | — |
public-api.v1.monthly_time_record_closes.list — Ruta movida | GET /v1/monthly-time-record-closes | GET /v1/companies/{company}/monthly-time-record-closes | — |
public-api.v1.monthly_time_record_closes.reopen — Cambiada | POST /v1/monthly-time-record-closes/{monthly_time_record_close}/reopen | POST /v1/companies/{company}/monthly-time-record-closes/{monthly_time_record_close}/reopen | respuestas añadidas: 422 |
public-api.v1.monthly_time_record_closes.report — Ruta movida | GET /v1/monthly-time-record-closes/{monthly_time_record_close}/report | GET /v1/companies/{company}/monthly-time-record-closes/{monthly_time_record_close}/report | — |
public-api.v1.monthly_time_record_closes.seal — Cambiada | POST /v1/monthly-time-record-closes/{monthly_time_record_close}/seal | POST /v1/companies/{company}/monthly-time-record-closes/{monthly_time_record_close}/seal | cabecera Location declarada en 201; códigos de error documentados: 409 resource_already_exists/monthly_register_already_sealed |
public-api.v1.monthly_time_record_closes.seal_show — Ruta movida | GET /v1/monthly-time-record-closes/{monthly_time_record_close}/seal | GET /v1/companies/{company}/monthly-time-record-closes/{monthly_time_record_close}/seal | — |
public-api.v1.monthly_time_record_closes.show — Ruta movida | GET /v1/monthly-time-record-closes/{monthly_time_record_close} | GET /v1/companies/{company}/monthly-time-record-closes/{monthly_time_record_close} | — |
Exportaciones de nómina
Operaciones: 2 — 0 nuevas, 1 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 1 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.monthly_time_record_closes.payroll_export — Ruta movida | GET /v1/monthly-time-record-closes/{monthly_time_record_close}/payroll-export | GET /v1/companies/{company}/monthly-time-record-closes/{monthly_time_record_close}/payroll-export | — |
public-api.v1.payroll_export_formats.list — Sin cambios | GET /v1/payroll-export-formats | GET /v1/payroll-export-formats | Sin cambios |
Stripe
Operaciones: 10 — 0 nuevas, 9 movidas al eje, 1 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.payouts.list — Ruta movida | GET /v1/payouts | GET /v1/companies/{company}/payouts | — |
public-api.v1.payouts.show — Ruta movida | GET /v1/payouts/{payout} | GET /v1/companies/{company}/payouts/{payout} | — |
public-api.v1.stripe_autoinvoicing.accounts.disconnect — Ruta movida | DELETE /v1/connected-accounts/{account} | DELETE /v1/companies/{company}/connected-accounts/{account} | — |
public-api.v1.stripe_autoinvoicing.accounts.list — Ruta movida | GET /v1/connected-accounts | GET /v1/companies/{company}/connected-accounts | — |
public-api.v1.stripe_autoinvoicing.accounts.show — Ruta movida | GET /v1/connected-accounts/{account} | GET /v1/companies/{company}/connected-accounts/{account} | — |
public-api.v1.stripe_autoinvoicing.accounts.update — Ruta movida | PUT /v1/connected-accounts/{account} | PATCH /v1/companies/{company}/connected-accounts/{account} | verbo PUT → PATCH |
public-api.v1.stripe_autoinvoicing.config.show — Ruta movida | GET /v1/stripe-autoinvoicing/config | GET /v1/companies/{company}/stripe-autoinvoicing/config | — |
public-api.v1.stripe_autoinvoicing.config.update — Cambiada | PUT /v1/stripe-autoinvoicing/config | PATCH /v1/companies/{company}/stripe-autoinvoicing/config | verbo PUT → PATCH; el cuerpo de la petición pasa a opcional; enabled pasa a opcional |
public-api.v1.stripe_autoinvoicing.correctives.list — Ruta movida | GET /v1/stripe-autoinvoicing/correctives | GET /v1/companies/{company}/stripe-autoinvoicing/correctives | — |
public-api.v1.stripe_autoinvoicing.payments.list — Ruta movida | GET /v1/stripe-autoinvoicing/payments | GET /v1/companies/{company}/stripe-autoinvoicing/payments | — |
Presencia
Operaciones: 3 — 0 nuevas, 3 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.presence.daily — Ruta movida | GET /v1/presence/daily | GET /v1/companies/{company}/presence/daily | — |
public-api.v1.presence.live — Ruta movida | GET /v1/presence | GET /v1/companies/{company}/presence | — |
public-api.v1.presence.show — Ruta movida | GET /v1/presence/{employee} | GET /v1/companies/{company}/presence/{employee} | — |
Tarifas
Operaciones: 13 — 0 nuevas, 12 movidas al eje, 1 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.price-lists.create — Cambiada | POST /v1/price-lists | POST /v1/companies/{company}/price-lists | cabecera Location declarada en 201 |
public-api.v1.price-lists.delete — Ruta movida | DELETE /v1/price-lists/{priceList} | DELETE /v1/companies/{company}/price-lists/{priceList} | — |
public-api.v1.price-lists.items.delete — Ruta movida | DELETE /v1/price-lists/{priceList}/items/{item} | DELETE /v1/companies/{company}/price-lists/{priceList}/items/{item} | — |
public-api.v1.price-lists.items.list — Ruta movida | GET /v1/price-lists/{priceList}/items | GET /v1/companies/{company}/price-lists/{priceList}/items | — |
public-api.v1.price-lists.items.purge_retired — Ruta movida | POST /v1/price-lists/{priceList}/items/{item}/purge | POST /v1/companies/{company}/price-lists/{priceList}/items/{item}/purge | — |
public-api.v1.price-lists.items.reassign_retired — Ruta movida | POST /v1/price-lists/{priceList}/items/{item}/reassign | POST /v1/companies/{company}/price-lists/{priceList}/items/{item}/reassign | — |
public-api.v1.price-lists.items.upsert — Ruta movida | POST /v1/price-lists/{priceList}/items | POST /v1/companies/{company}/price-lists/{priceList}/items | — |
public-api.v1.price-lists.list — Ruta movida | GET /v1/price-lists | GET /v1/companies/{company}/price-lists | — |
public-api.v1.price-lists.options — Ruta movida | GET /v1/price-lists/options | GET /v1/companies/{company}/price-lists/options | — |
public-api.v1.price-lists.resolve — Ruta movida | POST /v1/price-lists/resolve | POST /v1/companies/{company}/price-lists/resolve | — |
public-api.v1.price-lists.resolve_many — Ruta movida | POST /v1/price-lists/resolve-many | POST /v1/companies/{company}/price-lists/resolve-many | — |
public-api.v1.price-lists.show — Ruta movida | GET /v1/price-lists/{priceList} | GET /v1/companies/{company}/price-lists/{priceList} | — |
public-api.v1.price-lists.update — Ruta movida | PUT /v1/price-lists/{priceList} | PATCH /v1/companies/{company}/price-lists/{priceList} | verbo PUT → PATCH |
Productos
Operaciones: 41 — 0 nuevas, 37 movidas al eje, 4 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.products.activities — Ruta movida | GET /v1/products/{product}/activities | GET /v1/companies/{company}/products/{product}/activities | — |
public-api.v1.products.bulk_delete — Ruta movida | POST /v1/products/bulk-delete | POST /v1/companies/{company}/products/bulk-delete | — |
public-api.v1.products.bulk_status — Ruta movida | POST /v1/products/bulk-status | POST /v1/companies/{company}/products/bulk-status | — |
public-api.v1.products.bulk_update_stock — Ruta movida | POST /v1/products/bulk-update-stock | POST /v1/companies/{company}/products/bulk-update-stock | — |
public-api.v1.products.configurations.impact_preview — Ruta movida | POST /v1/products/{product}/configurations/impact-preview | POST /v1/companies/{company}/products/{product}/configurations/impact-preview | — |
public-api.v1.products.configurations.list — Ruta movida | GET /v1/products/{product}/configurations | GET /v1/companies/{company}/products/{product}/configurations | — |
public-api.v1.products.create — Cambiada | POST /v1/products | POST /v1/companies/{company}/products | códigos de error documentados: 409 resource_already_exists/external_id_already_exists, 409 resource_already_exists/sku_already_exists |
public-api.v1.products.delete — Ruta movida | DELETE /v1/products/{product} | DELETE /v1/companies/{company}/products/{product} | — |
public-api.v1.products.find_by_external_id — Ruta movida | POST /v1/products/find-by-external-id | POST /v1/companies/{company}/products/find-by-external-id | — |
public-api.v1.products.find_by_sku — Ruta movida | POST /v1/products/find-by-sku | POST /v1/companies/{company}/products/find-by-sku | — |
public-api.v1.products.gallery.delete — Ruta movida | DELETE /v1/products/{product}/gallery/{index} | DELETE /v1/companies/{company}/products/{product}/gallery/{index} | — |
public-api.v1.products.gallery.download — Ruta movida | GET /v1/products/{product}/gallery/{index}/download | GET /v1/companies/{company}/products/{product}/gallery/{index}/download | — |
public-api.v1.products.gallery.upload — Ruta movida | POST /v1/products/{product}/gallery | POST /v1/companies/{company}/products/{product}/gallery | — |
public-api.v1.products.list — Ruta movida | GET /v1/products | GET /v1/companies/{company}/products | — |
public-api.v1.products.low_stock_report — Ruta movida | GET /v1/products/low-stock-report | GET /v1/companies/{company}/products/low-stock-report | — |
public-api.v1.products.options.list — Ruta movida | GET /v1/products/{product}/options | GET /v1/companies/{company}/products/{product}/options | — |
public-api.v1.products.presentations.create — Ruta movida | POST /v1/products/{product}/presentations | POST /v1/companies/{company}/products/{product}/presentations | — |
public-api.v1.products.presentations.delete — Ruta movida | DELETE /v1/products/{product}/presentations/{presentation} | DELETE /v1/companies/{company}/products/{product}/presentations/{presentation} | — |
public-api.v1.products.presentations.list — Ruta movida | GET /v1/products/{product}/presentations | GET /v1/companies/{company}/products/{product}/presentations | — |
public-api.v1.products.presentations.update — Ruta movida | PUT /v1/products/{product}/presentations/{presentation} | PATCH /v1/companies/{company}/products/{product}/presentations/{presentation} | verbo PUT → PATCH |
public-api.v1.products.resolve_selection — Ruta movida | POST /v1/products/{product}/resolve-selection | POST /v1/companies/{company}/products/{product}/resolve-selection | — |
public-api.v1.products.sales_analytics — Ruta movida | GET /v1/products/{product}/sales-analytics | GET /v1/companies/{company}/products/{product}/sales-analytics | — |
public-api.v1.products.search — Ruta movida | GET /v1/products/search | GET /v1/companies/{company}/products/search | — |
public-api.v1.products.show — Ruta movida | GET /v1/products/{product} | GET /v1/companies/{company}/products/{product} | — |
public-api.v1.products.stats — Ruta movida | GET /v1/products/stats | GET /v1/companies/{company}/products/stats | — |
public-api.v1.products.stock_movements.list — Ruta movida | GET /v1/products/{product}/stock-movements | GET /v1/companies/{company}/products/{product}/stock-movements | — |
public-api.v1.products.supplier-offers.create — Ruta movida | POST /v1/products/{product}/supplier-offers | POST /v1/companies/{company}/products/{product}/supplier-offers | — |
public-api.v1.products.supplier-offers.delete — Ruta movida | DELETE /v1/products/{product}/supplier-offers/{offer} | DELETE /v1/companies/{company}/products/{product}/supplier-offers/{offer} | — |
public-api.v1.products.supplier-offers.list — Ruta movida | GET /v1/products/{product}/supplier-offers | GET /v1/companies/{company}/products/{product}/supplier-offers | — |
public-api.v1.products.supplier-offers.preferred — Ruta movida | POST /v1/products/{product}/supplier-offers/{offer}/preferred | POST /v1/companies/{company}/products/{product}/supplier-offers/{offer}/preferred | — |
public-api.v1.products.supplier-offers.update — Ruta movida | PUT /v1/products/{product}/supplier-offers/{offer} | PATCH /v1/companies/{company}/products/{product}/supplier-offers/{offer} | verbo PUT → PATCH |
public-api.v1.products.toggle_active — Cambiada | POST /v1/products/{product}/toggle-active | POST /v1/companies/{company}/products/{product}/toggle-active | respuestas añadidas: 422 |
public-api.v1.products.update — Cambiada | PUT /v1/products/{product} | PATCH /v1/companies/{company}/products/{product} | verbo PUT → PATCH; códigos de error documentados: 409 resource_already_exists/external_id_already_exists, 409 resource_already_exists/sku_already_exists |
public-api.v1.products.update_stock — Ruta movida | PUT /v1/products/{product}/stock | PATCH /v1/companies/{company}/products/{product}/stock | verbo PUT → PATCH |
public-api.v1.products.variants.create — Ruta movida | POST /v1/products/{product}/variants | POST /v1/companies/{company}/products/{product}/variants | — |
public-api.v1.products.variants.delete — Ruta movida | DELETE /v1/products/{product}/variants/{variant} | DELETE /v1/companies/{company}/products/{product}/variants/{variant} | — |
public-api.v1.products.variants.list — Ruta movida | GET /v1/products/{product}/variants | GET /v1/companies/{company}/products/{product}/variants | — |
public-api.v1.products.variants.update — Ruta movida | PUT /v1/products/{product}/variants/{variant} | PATCH /v1/companies/{company}/products/{product}/variants/{variant} | verbo PUT → PATCH |
public-api.v1.products.video.delete — Cambiada | DELETE /v1/products/{product}/video | DELETE /v1/companies/{company}/products/{product}/video | respuestas añadidas: 422 |
public-api.v1.products.video.download — Ruta movida | GET /v1/products/{product}/video/download | GET /v1/companies/{company}/products/{product}/video/download | — |
public-api.v1.products.video.upload — Ruta movida | POST /v1/products/{product}/video | POST /v1/companies/{company}/products/{product}/video | — |
Facturas proforma
Operaciones: 20 — 0 nuevas, 17 movidas al eje, 3 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.proformas.accept — Ruta movida | POST /v1/proformas/{proforma}/accept | POST /v1/companies/{company}/proformas/{proforma}/accept | — |
public-api.v1.proformas.bulk_delete — Ruta movida | POST /v1/proformas/bulk-delete | POST /v1/companies/{company}/proformas/bulk-delete | — |
public-api.v1.proformas.bulk_pdf — Ruta movida | POST /v1/proformas/bulk-pdf | POST /v1/companies/{company}/proformas/bulk-pdf | — |
public-api.v1.proformas.bulk_send — Ruta movida | POST /v1/proformas/bulk-send | POST /v1/companies/{company}/proformas/bulk-send | — |
public-api.v1.proformas.bulk_status — Ruta movida | POST /v1/proformas/bulk-status | POST /v1/companies/{company}/proformas/bulk-status | — |
public-api.v1.proformas.convert — Cambiada | POST /v1/proformas/{proforma}/convert | POST /v1/companies/{company}/proformas/{proforma}/convert | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.proformas.create — Ruta movida | POST /v1/proformas | POST /v1/companies/{company}/proformas | — |
public-api.v1.proformas.delete — Ruta movida | DELETE /v1/proformas/{proforma} | DELETE /v1/companies/{company}/proformas/{proforma} | — |
public-api.v1.proformas.duplicate — Cambiada | POST /v1/proformas/{proforma}/duplicate | POST /v1/companies/{company}/proformas/{proforma}/duplicate | respuestas añadidas: 422 |
public-api.v1.proformas.find_by_external_id — Ruta movida | POST /v1/proformas/find-by-external-id | POST /v1/companies/{company}/proformas/find-by-external-id | — |
public-api.v1.proformas.list — Ruta movida | GET /v1/proformas | GET /v1/companies/{company}/proformas | — |
public-api.v1.proformas.pdf — Ruta movida | GET /v1/proformas/{proforma}/pdf | GET /v1/companies/{company}/proformas/{proforma}/pdf | — |
public-api.v1.proformas.public_link_get — Ruta movida | GET /v1/proformas/{proforma}/public-link | GET /v1/companies/{company}/proformas/{proforma}/public-link | — |
public-api.v1.proformas.public_link_update — Ruta movida | PUT /v1/proformas/{proforma}/public-link | PATCH /v1/companies/{company}/proformas/{proforma}/public-link | verbo PUT → PATCH |
public-api.v1.proformas.reject — Ruta movida | POST /v1/proformas/{proforma}/reject | POST /v1/companies/{company}/proformas/{proforma}/reject | — |
public-api.v1.proformas.send — Ruta movida | POST /v1/proformas/{proforma}/send | POST /v1/companies/{company}/proformas/{proforma}/send | — |
public-api.v1.proformas.show — Ruta movida | GET /v1/proformas/{proforma} | GET /v1/companies/{company}/proformas/{proforma} | — |
public-api.v1.proformas.stats — Ruta movida | GET /v1/proformas/stats | GET /v1/companies/{company}/proformas/stats | — |
public-api.v1.proformas.statuses — Ruta movida | GET /v1/proformas/statuses | GET /v1/companies/{company}/proformas/statuses | — |
public-api.v1.proformas.update — Cambiada | PUT /v1/proformas/{proforma} | PATCH /v1/companies/{company}/proformas/{proforma} | verbo PUT → PATCH; códigos de error documentados: 409 resource_already_exists/external_id_already_exists |
Facturas de compra
Operaciones: 18 — 0 nuevas, 6 movidas al eje, 12 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.purchase_invoices.attach_file — Cambiada | POST /v1/purchase_invoices/{purchase_invoice}/attach-file | POST /v1/companies/{company}/purchase-invoices/{purchase_invoice}/attach-file | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at; data.lines[].unit_price cambia de tipo (number|string → string) |
public-api.v1.purchase_invoices.bulk_delete — Ruta movida | POST /v1/purchase_invoices/bulk-delete | POST /v1/companies/{company}/purchase-invoices/bulk-delete | — |
public-api.v1.purchase_invoices.bulk_status — Ruta movida | POST /v1/purchase_invoices/bulk-status | POST /v1/companies/{company}/purchase-invoices/bulk-status | — |
public-api.v1.purchase_invoices.create — Cambiada | POST /v1/purchase_invoices | POST /v1/companies/{company}/purchase-invoices | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at; data.lines[].unit_price cambia de tipo (number|string → string); códigos de error documentados: 409 resource_already_exists/purchase_invoice_already_exists |
public-api.v1.purchase_invoices.delete — Ruta movida | DELETE /v1/purchase_invoices/{purchase_invoice} | DELETE /v1/companies/{company}/purchase-invoices/{purchase_invoice} | — |
public-api.v1.purchase_invoices.delete_file — Cambiada | DELETE /v1/purchase_invoices/{purchase_invoice}/file | DELETE /v1/companies/{company}/purchase-invoices/{purchase_invoice}/file | respuestas añadidas: 422 |
public-api.v1.purchase_invoices.file — Ruta movida | GET /v1/purchase_invoices/{purchase_invoice}/file | GET /v1/companies/{company}/purchase-invoices/{purchase_invoice}/file | — |
public-api.v1.purchase_invoices.find_by_external_id — Cambiada | POST /v1/purchase_invoices/find-by-external-id | POST /v1/companies/{company}/purchase-invoices/find-by-external-id | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at; data.lines[].unit_price cambia de tipo (number|string → string) |
public-api.v1.purchase_invoices.list — Cambiada | GET /v1/purchase_invoices | GET /v1/companies/{company}/purchase-invoices | campos nuevos de la respuesta: data[].paid_date, data[].paid_recorded_at; campos retirados de la respuesta: data[].paid_at; data[].lines[].unit_price cambia de tipo (number|string → string) |
public-api.v1.purchase_invoices.list_payments — Cambiada | GET /v1/purchase_invoices/{purchase_invoice}/payments | GET /v1/companies/{company}/purchase-invoices/{purchase_invoice}/payments | campos nuevos de la respuesta: data[].paid_date; campos retirados de la respuesta: data[].paid_on |
public-api.v1.purchase_invoices.mark_paid — Cambiada | POST /v1/purchase_invoices/{purchase_invoice}/mark_paid | POST /v1/companies/{company}/purchase-invoices/{purchase_invoice}/mark-paid | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at; data.lines[].unit_price cambia de tipo (number|string → string) |
public-api.v1.purchase_invoices.overdue — Cambiada | GET /v1/purchase_invoices/overdue | GET /v1/companies/{company}/purchase-invoices/overdue | campos nuevos de la respuesta: data[].paid_date, data[].paid_recorded_at; campos retirados de la respuesta: data[].paid_at; data[].lines[].unit_price cambia de tipo (number|string → string) |
public-api.v1.purchase_invoices.payment_receipt — Ruta movida | GET /v1/purchase_invoices/{purchase_invoice}/payment-receipt | GET /v1/companies/{company}/purchase-invoices/{purchase_invoice}/payment-receipt | — |
public-api.v1.purchase_invoices.pending — Cambiada | GET /v1/purchase_invoices/pending | GET /v1/companies/{company}/purchase-invoices/pending | campos nuevos de la respuesta: data[].paid_date, data[].paid_recorded_at; campos retirados de la respuesta: data[].paid_at; data[].lines[].unit_price cambia de tipo (number|string → string) |
public-api.v1.purchase_invoices.register_payment — Cambiada | POST /v1/purchase_invoices/{purchase_invoice}/payments | POST /v1/companies/{company}/purchase-invoices/{purchase_invoice}/payments | campos nuevos de la respuesta: data.paid_date; campos retirados de la respuesta: data.paid_on; cabecera Location declarada en 201 |
public-api.v1.purchase_invoices.show — Cambiada | GET /v1/purchase_invoices/{purchase_invoice} | GET /v1/companies/{company}/purchase-invoices/{purchase_invoice} | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at; data.lines[].unit_price cambia de tipo (number|string → string) |
public-api.v1.purchase_invoices.stats — Ruta movida | GET /v1/purchase_invoices/stats | GET /v1/companies/{company}/purchase-invoices/stats | — |
public-api.v1.purchase_invoices.update — Cambiada | PUT /v1/purchase_invoices/{purchase_invoice} | PATCH /v1/companies/{company}/purchase-invoices/{purchase_invoice} | verbo PUT → PATCH; campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at; data.lines[].unit_price cambia de tipo (number|string → string); códigos de error documentados: 409 resource_already_exists/external_id_already_exists |
Presupuestos
Operaciones: 20 — 0 nuevas, 17 movidas al eje, 3 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.quotes.accept — Ruta movida | POST /v1/quotes/{quote}/accept | POST /v1/companies/{company}/quotes/{quote}/accept | — |
public-api.v1.quotes.bulk_delete — Ruta movida | POST /v1/quotes/bulk-delete | POST /v1/companies/{company}/quotes/bulk-delete | — |
public-api.v1.quotes.bulk_pdf — Ruta movida | POST /v1/quotes/bulk-pdf | POST /v1/companies/{company}/quotes/bulk-pdf | — |
public-api.v1.quotes.bulk_send — Ruta movida | POST /v1/quotes/bulk-send | POST /v1/companies/{company}/quotes/bulk-send | — |
public-api.v1.quotes.bulk_status — Ruta movida | POST /v1/quotes/bulk-status | POST /v1/companies/{company}/quotes/bulk-status | — |
public-api.v1.quotes.convert — Cambiada | POST /v1/quotes/{quote}/convert | POST /v1/companies/{company}/quotes/{quote}/convert | campos nuevos de la respuesta: data.paid_date, data.paid_recorded_at; campos retirados de la respuesta: data.paid_at, data.paid_on |
public-api.v1.quotes.create — Ruta movida | POST /v1/quotes | POST /v1/companies/{company}/quotes | — |
public-api.v1.quotes.delete — Ruta movida | DELETE /v1/quotes/{quote} | DELETE /v1/companies/{company}/quotes/{quote} | — |
public-api.v1.quotes.duplicate — Cambiada | POST /v1/quotes/{quote}/duplicate | POST /v1/companies/{company}/quotes/{quote}/duplicate | respuestas añadidas: 422 |
public-api.v1.quotes.find_by_external_id — Ruta movida | POST /v1/quotes/find-by-external-id | POST /v1/companies/{company}/quotes/find-by-external-id | — |
public-api.v1.quotes.list — Ruta movida | GET /v1/quotes | GET /v1/companies/{company}/quotes | — |
public-api.v1.quotes.pdf — Ruta movida | GET /v1/quotes/{quote}/pdf | GET /v1/companies/{company}/quotes/{quote}/pdf | — |
public-api.v1.quotes.public_link_get — Ruta movida | GET /v1/quotes/{quote}/public-link | GET /v1/companies/{company}/quotes/{quote}/public-link | — |
public-api.v1.quotes.public_link_update — Ruta movida | PUT /v1/quotes/{quote}/public-link | PATCH /v1/companies/{company}/quotes/{quote}/public-link | verbo PUT → PATCH |
public-api.v1.quotes.reject — Ruta movida | POST /v1/quotes/{quote}/reject | POST /v1/companies/{company}/quotes/{quote}/reject | — |
public-api.v1.quotes.send — Ruta movida | POST /v1/quotes/{quote}/send | POST /v1/companies/{company}/quotes/{quote}/send | — |
public-api.v1.quotes.show — Ruta movida | GET /v1/quotes/{quote} | GET /v1/companies/{company}/quotes/{quote} | — |
public-api.v1.quotes.stats — Ruta movida | GET /v1/quotes/stats | GET /v1/companies/{company}/quotes/stats | — |
public-api.v1.quotes.statuses — Ruta movida | GET /v1/quotes/statuses | GET /v1/companies/{company}/quotes/statuses | — |
public-api.v1.quotes.update — Cambiada | PUT /v1/quotes/{quote} | PATCH /v1/companies/{company}/quotes/{quote} | verbo PUT → PATCH; códigos de error documentados: 409 resource_already_exists/external_id_already_exists |
Facturas recurrentes
Operaciones: 18 — 0 nuevas, 15 movidas al eje, 3 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.recurring_invoices.activate — Ruta movida | POST /v1/recurring_invoices/{recurring_invoice}/activate | POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/activate | — |
public-api.v1.recurring_invoices.activities — Ruta movida | GET /v1/recurring_invoices/{recurring_invoice}/activities | GET /v1/companies/{company}/recurring-invoices/{recurring_invoice}/activities | — |
public-api.v1.recurring_invoices.bulk-delete — Ruta movida | POST /v1/recurring_invoices/bulk-delete | POST /v1/companies/{company}/recurring-invoices/bulk-delete | — |
public-api.v1.recurring_invoices.bulk_status — Ruta movida | POST /v1/recurring_invoices/bulk-status | POST /v1/companies/{company}/recurring-invoices/bulk-status | — |
public-api.v1.recurring_invoices.cancel — Ruta movida | POST /v1/recurring_invoices/{recurring_invoice}/cancel | POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/cancel | — |
public-api.v1.recurring_invoices.create — Ruta movida | POST /v1/recurring_invoices | POST /v1/companies/{company}/recurring-invoices | — |
public-api.v1.recurring_invoices.delete — Ruta movida | DELETE /v1/recurring_invoices/{recurring_invoice} | DELETE /v1/companies/{company}/recurring-invoices/{recurring_invoice} | — |
public-api.v1.recurring_invoices.find_by_external_id — Ruta movida | POST /v1/recurring_invoices/find-by-external-id | POST /v1/companies/{company}/recurring-invoices/find-by-external-id | — |
public-api.v1.recurring_invoices.generate — Ruta movida | POST /v1/recurring_invoices/{recurring_invoice}/generate | POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/generate | — |
public-api.v1.recurring_invoices.list — Ruta movida | GET /v1/recurring_invoices | GET /v1/companies/{company}/recurring-invoices | — |
public-api.v1.recurring_invoices.logs — Ruta movida | GET /v1/recurring_invoices/{recurring_invoice}/logs | GET /v1/companies/{company}/recurring-invoices/{recurring_invoice}/logs | — |
public-api.v1.recurring_invoices.pause — Cambiada | POST /v1/recurring_invoices/{recurring_invoice}/pause | POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/pause | respuestas añadidas: 422 |
public-api.v1.recurring_invoices.preview — Ruta movida | GET /v1/recurring_invoices/{recurring_invoice}/preview | GET /v1/companies/{company}/recurring-invoices/{recurring_invoice}/preview | — |
public-api.v1.recurring_invoices.resume — Ruta movida | POST /v1/recurring_invoices/{recurring_invoice}/resume | POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/resume | — |
public-api.v1.recurring_invoices.show — Ruta movida | GET /v1/recurring_invoices/{recurring_invoice} | GET /v1/companies/{company}/recurring-invoices/{recurring_invoice} | — |
public-api.v1.recurring_invoices.skip — Cambiada | POST /v1/recurring_invoices/{recurring_invoice}/skip | POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/skip | respuestas añadidas: 422 |
public-api.v1.recurring_invoices.stats — Ruta movida | GET /v1/recurring_invoices/stats | GET /v1/companies/{company}/recurring-invoices/stats | — |
public-api.v1.recurring_invoices.update — Cambiada | PUT /v1/recurring_invoices/{recurring_invoice} | PATCH /v1/companies/{company}/recurring-invoices/{recurring_invoice} | verbo PUT → PATCH; códigos de error documentados: 409 resource_already_exists/external_id_already_exists |
Series
Operaciones: 12 — 0 nuevas, 8 movidas al eje, 4 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.series.active — Ruta movida | GET /v1/series/active | GET /v1/companies/{company}/series/active | — |
public-api.v1.series.activities — Ruta movida | GET /v1/series/{series}/activities | GET /v1/companies/{company}/series/{series}/activities | — |
public-api.v1.series.archive — Cambiada | POST /v1/series/{series}/archive | POST /v1/companies/{company}/series/{series}/archive | respuestas añadidas: 422 |
public-api.v1.series.bootstrap — Cambiada | POST /v1/series/bootstrap | POST /v1/companies/{company}/series/bootstrap | respuestas añadidas: 422 |
public-api.v1.series.create — Ruta movida | POST /v1/series | POST /v1/companies/{company}/series | — |
public-api.v1.series.default — Ruta movida | GET /v1/series/default | GET /v1/companies/{company}/series/default | — |
public-api.v1.series.find_by_code — Ruta movida | POST /v1/series/find-by-code | POST /v1/companies/{company}/series/find-by-code | — |
public-api.v1.series.list — Ruta movida | GET /v1/series | GET /v1/companies/{company}/series | — |
public-api.v1.series.set_default — Cambiada | POST /v1/series/{series}/default | POST /v1/companies/{company}/series/{series}/default | respuestas añadidas: 422 |
public-api.v1.series.show — Ruta movida | GET /v1/series/{series} | GET /v1/companies/{company}/series/{series} | — |
public-api.v1.series.stats — Ruta movida | GET /v1/series/stats | GET /v1/companies/{company}/series/stats | — |
public-api.v1.series.unarchive — Cambiada | POST /v1/series/{series}/unarchive | POST /v1/companies/{company}/series/{series}/unarchive | respuestas añadidas: 422 |
Tienda Shopify
Operaciones: 1 — 0 nuevas, 1 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.shopify.stores.connection_test — Ruta movida | POST /v1/shopify/stores/{store}/connection-test | POST /v1/companies/{company}/shopify/stores/{store}/connection-test | — |
Tiendas
Operaciones: 5 — 0 nuevas, 4 movidas al eje, 1 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.stores.create — Cambiada | POST /v1/stores | POST /v1/companies/{company}/stores | cabecera Location declarada en 201 |
public-api.v1.stores.disconnect — Ruta movida | DELETE /v1/stores/{store} | DELETE /v1/companies/{company}/stores/{store} | — |
public-api.v1.stores.index — Ruta movida | GET /v1/stores | GET /v1/companies/{company}/stores | — |
public-api.v1.stores.show — Ruta movida | GET /v1/stores/{store} | GET /v1/companies/{company}/stores/{store} | — |
public-api.v1.stores.update — Ruta movida | PUT /v1/stores/{store} | PATCH /v1/companies/{company}/stores/{store} | verbo PUT → PATCH |
Impuestos
Operaciones: 18 — 0 nuevas, 11 movidas al eje, 0 movidas con otros cambios, 6 retiradas, 1 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.tax-catalog.show — Sin cambios | GET /v1/tax-catalog | GET /v1/tax-catalog | Sin cambios |
public-api.v1.taxes.active — Ruta movida | GET /v1/taxes/active | GET /v1/companies/{company}/taxes/active | — |
public-api.v1.taxes.by_type — Ruta movida | GET /v1/taxes/by-type | GET /v1/companies/{company}/taxes/by-type | — |
public-api.v1.taxes.calculate — Ruta movida | POST /v1/taxes/calculate | POST /v1/companies/{company}/taxes/calculate | — |
public-api.v1.taxes.calculate_totals — Ruta movida | POST /v1/taxes/calculate-totals | POST /v1/companies/{company}/taxes/calculate-totals | — |
public-api.v1.taxes.create — Retirada | POST /v1/taxes | — | Retirada |
public-api.v1.taxes.defaults — Ruta movida | GET /v1/taxes/defaults/{docType} | GET /v1/companies/{company}/taxes/defaults/{docType} | — |
public-api.v1.taxes.delete — Retirada | DELETE /v1/taxes/{tax} | — | Retirada |
public-api.v1.taxes.for_purchases — Ruta movida | GET /v1/taxes/for-purchases | GET /v1/companies/{company}/taxes/for-purchases | — |
public-api.v1.taxes.for_sales — Ruta movida | GET /v1/taxes/for-sales | GET /v1/companies/{company}/taxes/for-sales | — |
public-api.v1.taxes.is_in_use — Ruta movida | GET /v1/taxes/{tax}/is-in-use | GET /v1/companies/{company}/taxes/{tax}/is-in-use | — |
public-api.v1.taxes.list — Ruta movida | GET /v1/taxes | GET /v1/companies/{company}/taxes | — |
public-api.v1.taxes.set_default — Retirada | POST /v1/taxes/{tax}/set-default | — | Retirada |
public-api.v1.taxes.set_default_for_document — Retirada | PUT /v1/taxes/{tax}/set-default/{docType} | — | Retirada |
public-api.v1.taxes.show — Ruta movida | GET /v1/taxes/{tax} | GET /v1/companies/{company}/taxes/{tax} | — |
public-api.v1.taxes.stats — Ruta movida | GET /v1/taxes/stats | GET /v1/companies/{company}/taxes/stats | — |
public-api.v1.taxes.toggle — Retirada | POST /v1/taxes/{tax}/toggle | — | Retirada |
public-api.v1.taxes.update — Retirada | PUT /v1/taxes/{tax} | — | Retirada |
Informes fiscales
Operaciones: 9 — 0 nuevas, 8 movidas al eje, 1 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.tax_reports.activities — Ruta movida | GET /v1/tax_reports/{tax_report}/activities | GET /v1/companies/{company}/tax-reports/{tax_report}/activities | — |
public-api.v1.tax_reports.download — Ruta movida | GET /v1/tax_reports/{tax_report}/download | GET /v1/companies/{company}/tax-reports/{tax_report}/download | — |
public-api.v1.tax_reports.find_by_period — Ruta movida | POST /v1/tax_reports/find-by-period | POST /v1/companies/{company}/tax-reports/find-by-period | — |
public-api.v1.tax_reports.generate_130 — Cambiada | POST /v1/tax_reports/130 | POST /v1/companies/{company}/tax-reports/130 | cabecera Location declarada en 201 |
public-api.v1.tax_reports.generate_303 — Ruta movida | POST /v1/tax_reports/303 | POST /v1/companies/{company}/tax-reports/303 | — |
public-api.v1.tax_reports.generate_347 — Ruta movida | POST /v1/tax_reports/347 | POST /v1/companies/{company}/tax-reports/347 | — |
public-api.v1.tax_reports.history — Ruta movida | GET /v1/tax_reports/history | GET /v1/companies/{company}/tax-reports/history | — |
public-api.v1.tax_reports.preview — Ruta movida | POST /v1/tax_reports/preview | POST /v1/companies/{company}/tax-reports/preview | — |
public-api.v1.tax_reports.stats — Ruta movida | GET /v1/tax_reports/stats | GET /v1/companies/{company}/tax-reports/stats | — |
Balances de jornada
Operaciones: 3 — 0 nuevas, 3 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.time_balances.employee — Ruta movida | GET /v1/time-balances/employee/{employee} | GET /v1/companies/{company}/time-balances/employee/{employee} | — |
public-api.v1.time_balances.monthly_sheet — Ruta movida | GET /v1/time-balances/monthly-sheet | GET /v1/companies/{company}/time-balances/monthly-sheet | — |
public-api.v1.time_balances.team_summary — Ruta movida | GET /v1/time-balances/team-summary | GET /v1/companies/{company}/time-balances/team-summary | — |
Correcciones de fichajes
Operaciones: 5 — 0 nuevas, 4 movidas al eje, 1 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.time_corrections.approve — Ruta movida | POST /v1/time-corrections/{time_correction}/approve | POST /v1/companies/{company}/time-corrections/{time_correction}/approve | — |
public-api.v1.time_corrections.create — Cambiada | POST /v1/time-corrections | POST /v1/companies/{company}/time-corrections | cabecera Location declarada en 201 |
public-api.v1.time_corrections.list — Ruta movida | GET /v1/time-corrections | GET /v1/companies/{company}/time-corrections | — |
public-api.v1.time_corrections.reject — Ruta movida | POST /v1/time-corrections/{time_correction}/reject | POST /v1/companies/{company}/time-corrections/{time_correction}/reject | — |
public-api.v1.time_corrections.show — Ruta movida | GET /v1/time-corrections/{time_correction} | GET /v1/companies/{company}/time-corrections/{time_correction} | — |
Fichajes
Operaciones: 9 — 0 nuevas, 4 movidas al eje, 5 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.time_entries.chain.validate — Ruta movida | GET /v1/time-entries/chain/validate | GET /v1/companies/{company}/time-entries/chain/validate | — |
public-api.v1.time_entries.clock_in — Cambiada | POST /v1/time-entries/clock-in | POST /v1/companies/{company}/time-entries/clock-in | cabecera Location declarada en 201 |
public-api.v1.time_entries.clock_out — Cambiada | POST /v1/time-entries/clock-out | POST /v1/companies/{company}/time-entries/clock-out | cabecera Location declarada en 201 |
public-api.v1.time_entries.current — Ruta movida | GET /v1/time-entries/current | GET /v1/companies/{company}/time-entries/current | — |
public-api.v1.time_entries.list — Ruta movida | GET /v1/time-entries | GET /v1/companies/{company}/time-entries | — |
public-api.v1.time_entries.manual — Cambiada | POST /v1/time-entries/manual | POST /v1/companies/{company}/time-entries/manual | cabecera Location declarada en 201 |
public-api.v1.time_entries.pause — Cambiada | POST /v1/time-entries/pause | POST /v1/companies/{company}/time-entries/pause | cabecera Location declarada en 201 |
public-api.v1.time_entries.resume — Cambiada | POST /v1/time-entries/resume | POST /v1/companies/{company}/time-entries/resume | cabecera Location declarada en 201 |
public-api.v1.time_entries.show — Ruta movida | GET /v1/time-entries/{time_entry} | GET /v1/companies/{company}/time-entries/{time_entry} | — |
Configuración del registro
Operaciones: 2 — 0 nuevas, 1 movidas al eje, 1 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.time_tracking_settings.show — Ruta movida | GET /v1/time-tracking-settings | GET /v1/companies/{company}/time-tracking-settings | — |
public-api.v1.time_tracking_settings.update — Cambiada | PUT /v1/time-tracking-settings | PATCH /v1/companies/{company}/time-tracking-settings | verbo PUT → PATCH; el cuerpo de la petición pasa a opcional; clock_in_reminder_enabled pasa a opcional; clock_in_reminder_grace_minutes pasa a opcional; overtime_basis pasa a opcional; overtime_tolerance_minutes pasa a opcional |
Webhooks
Operaciones: 11 — 0 nuevas, 6 movidas al eje, 5 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.webhook_endpoints.create — Cambiada | POST /v1/webhook_endpoints | POST /v1/companies/{company}/webhook-endpoints | data.secret puede ser null |
public-api.v1.webhook_endpoints.delete — Ruta movida | DELETE /v1/webhook_endpoints/{webhook_endpoint} | DELETE /v1/companies/{company}/webhook-endpoints/{webhook_endpoint} | — |
public-api.v1.webhook_endpoints.deliveries.list — Cambiada | GET /v1/webhook_endpoints/{webhook_endpoint}/deliveries | GET /v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/deliveries | campos nuevos de la respuesta: data[].payload.data.object.paid_date, data[].payload.data.object.paid_recorded_at; campos retirados de la respuesta: data[].payload.data.object.paid_at, data[].payload.data.object.paid_on |
public-api.v1.webhook_endpoints.deliveries.replay — Ruta movida | POST /v1/webhook_endpoints/{webhook_endpoint}/deliveries/{delivery}/replay | POST /v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/deliveries/{delivery}/replay | — |
public-api.v1.webhook_endpoints.deliveries.show — Cambiada | GET /v1/webhook_endpoints/{webhook_endpoint}/deliveries/{delivery} | GET /v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/deliveries/{delivery} | campos nuevos de la respuesta: data.payload.data.object.paid_date, data.payload.data.object.paid_recorded_at; campos retirados de la respuesta: data.payload.data.object.paid_at, data.payload.data.object.paid_on |
public-api.v1.webhook_endpoints.list — Ruta movida | GET /v1/webhook_endpoints | GET /v1/companies/{company}/webhook-endpoints | — |
public-api.v1.webhook_endpoints.ping — Ruta movida | POST /v1/webhook_endpoints/{webhook_endpoint}/ping | POST /v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/ping | — |
public-api.v1.webhook_endpoints.rotate_secret — Cambiada | POST /v1/webhook_endpoints/{webhook_endpoint}/rotate_secret | POST /v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/rotate-secret | data.secret puede ser null; códigos de error documentados: 422 business_rule_violation/webhook_secret_recently_rotated |
public-api.v1.webhook_endpoints.show — Ruta movida | GET /v1/webhook_endpoints/{webhook_endpoint} | GET /v1/companies/{company}/webhook-endpoints/{webhook_endpoint} | — |
public-api.v1.webhook_endpoints.test_event — Ruta movida | POST /v1/webhook_endpoints/{webhook_endpoint}/test_event | POST /v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/test-event | — |
public-api.v1.webhook_endpoints.update — Cambiada | PUT /v1/webhook_endpoints/{webhook_endpoint} | PATCH /v1/companies/{company}/webhook-endpoints/{webhook_endpoint} | verbo PUT → PATCH; campos nuevos del cuerpo: status |
Tienda WooCommerce
Operaciones: 1 — 0 nuevas, 1 movidas al eje, 0 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.woocommerce.stores.connection_test — Ruta movida | POST /v1/woocommerce/stores/{store}/connection-test | POST /v1/companies/{company}/woocommerce/stores/{store}/connection-test | — |
Horarios
Operaciones: 11 — 0 nuevas, 7 movidas al eje, 4 movidas con otros cambios, 0 retiradas, 0 sin cambios.
| Operación | Antes | Ahora | Qué cambia |
|---|---|---|---|
public-api.v1.work_schedules.archive — Cambiada | POST /v1/work-schedules/{schedule}/archive | POST /v1/companies/{company}/work-schedules/{schedule}/archive | respuestas añadidas: 422 |
public-api.v1.work_schedules.assign — Ruta movida | POST /v1/work-schedules/{schedule}/assign | POST /v1/companies/{company}/work-schedules/{schedule}/assign | — |
public-api.v1.work_schedules.assignments — Ruta movida | GET /v1/work-schedules/{schedule}/assignments | GET /v1/companies/{company}/work-schedules/{schedule}/assignments | — |
public-api.v1.work_schedules.create — Cambiada | POST /v1/work-schedules | POST /v1/companies/{company}/work-schedules | cabecera Location declarada en 201 |
public-api.v1.work_schedules.employee_schedule — Ruta movida | GET /v1/work-schedules/employee/{employee} | GET /v1/companies/{company}/work-schedules/employee/{employee} | — |
public-api.v1.work_schedules.list — Ruta movida | GET /v1/work-schedules | GET /v1/companies/{company}/work-schedules | — |
public-api.v1.work_schedules.show — Ruta movida | GET /v1/work-schedules/{schedule} | GET /v1/companies/{company}/work-schedules/{schedule} | — |
public-api.v1.work_schedules.stats — Ruta movida | GET /v1/work-schedules/stats | GET /v1/companies/{company}/work-schedules/stats | — |
public-api.v1.work_schedules.unarchive — Cambiada | POST /v1/work-schedules/{schedule}/unarchive | POST /v1/companies/{company}/work-schedules/{schedule}/unarchive | respuestas añadidas: 422 |
public-api.v1.work_schedules.unassign — Ruta movida | POST /v1/work-schedules/{schedule}/unassign | POST /v1/companies/{company}/work-schedules/{schedule}/unassign | — |
public-api.v1.work_schedules.update — Cambiada | PUT /v1/work-schedules/{schedule} | PATCH /v1/companies/{company}/work-schedules/{schedule} | verbo PUT → PATCH; el cuerpo de la petición pasa a opcional; mode pasa a opcional; name pasa a opcional; week_pattern pasa a opcional |