Factuarea APIDevelopers
Contrato

Plazas contratadas, paquetes de oferta y prueba

La factura sigue las plazas que contratas: crear un empleado ocupa una plaza libre, reducir tiene efecto en la renovación sin abono y eliges a quién se desactiva. Cuatro operaciones nuevas fijan y previsualizan las plazas, la API REST y el MCP compran solos las plazas que faltan, los paquetes de oferta conservan sus precios mientras se mantienen sus mínimos y la prueba responde con su propio motivo.

31 de octubre de 2026 — La factura de las plazas de empleado y de las plazas de NIF adicional pasa a ser la factura de las plazas contratadas. Crear, activar o reactivar ocupa una plaza libre y nunca cobra por sí solo; solo cobra comprar plazas. Desactivar libera una plaza sin bajar la factura y una reducción tiene efecto en la renovación, sin abono, eligiendo a quién se desactiva cuando bajas de las plazas ocupadas. Comprar o crear lo que una reducción iba a quitar la anula.

Los paquetes de oferta, hasta tres líneas con un código que se canjea desde la aplicación o por soporte, conservan su precio pactado mientras se mantienen sus mínimos y la suscripción se paga, y terminan enteros, con todas sus líneas de vuelta al precio de catálogo, si no. No se retira ninguna operación.

Operaciones de esta versión

OperaciónoperationIdHerramienta MCPQué cambia
PATCH /v1/accounts/{account}/employee-seatspublic-api.v1.employee-seats.updateupdate_employee_seatsNueva. Fija las plazas de empleado contratadas.
GET /v1/accounts/{account}/additional-nif-seatspublic-api.v1.additional-nif-seats.statusget_additional_nif_seatsNueva. Lee las plazas de NIF adicional contratadas.
GET /v1/accounts/{account}/additional-nif-seats/previewpublic-api.v1.additional-nif-seats.previewpreview_additional_nif_seat_changeNueva. Previsualiza un cambio de esas plazas.
PATCH /v1/accounts/{account}/additional-nif-seatspublic-api.v1.additional-nif-seats.updateupdate_additional_nif_seatsNueva. Fija las plazas de NIF adicional contratadas.
Estado de las plazas de empleadopublic-api.v1.employee-seats.statusget_employee_seat_billingquantity son las plazas contratadas. Bloque seats nuevo. reducible_to vale siempre 0. pending_reduction lleva deactivations y offer_package_loss.
Vista previa de las plazas de empleadopublic-api.v1.employee-seats.previewpreview_employee_seat_chargeNuevos contracted_seats, seats_to_buy, free_seats_used, included_in_seats, deactivations_required, cancels_pending_reduction y offer_package_loss. already_covered vale siempre false.
Cancelar las plazas de empleadopublic-api.v1.employee-seats.cancelcancel_employee_seat_addondeactivate y accept_offer_package_loss opcionales. Sin deactivate, se desactivan en la renovación todos los empleados activos.
Suscribir y cambiar la cantidad de plazas de empleadopublic-api.v1.employee-seats.subscribe, public-api.v1.employee-seats.change-quantitysubscribe_employee_seat_addon, change_employee_seat_quantityConvergen a las plazas contratadas.
Crear y reactivar empleadospublic-api.v1.employees.create, public-api.v1.employees.reactivatecreate_employee, reactivate_employeeOcupan una plaza libre y compran las que faltan. Envía Idempotency-Key.
Crear, activar y recibir NIFpublic-api.v1.companies.create, public-api.v1.companies.activate, public-api.v1.companies.activate_batch, public-api.v1.account.nif_transfers.acceptcreate_company, activate_company, activate_companies, accept_nif_transferEl mismo comportamiento para las plazas de NIF adicional. Envía Idempotency-Key.
Vista previa de plazas de NIFpublic-api.v1.companies.seat_charge_previewget_company_seat_charge_previewzero_reason puede valer included_in_seats.
Lotes de empleadospublic-api.v1.employee-batches.prepare, public-api.v1.employee-batches.refresh_quote, public-api.v1.employee-batches.confirmprepare_employee_batch, refresh_employee_batch_quote, confirm_employee_batchUsan las plazas libres y compran solo las que faltan. La cotización devuelve ahora seats_to_buy, free_seats_used, original_quantity, projected_quantity y cancels_pending_reduction.
Canjes de oferta de plazas de empleado y de empresa gestionadapublic-api.v1.employee-seat-offer-redemptions.* y public-api.v1.gestoria-seat-offer-redemptions.*: list, prepare, show, refresh_quote, confirm y cancellist, prepare, get, refresh, confirm y cancel de *_seat_offer_redemptionNuevos apply_to_existing, minimum_quantity y target_quantity, y los nuevos motivos de rechazo.

Las operaciones que solo ajustan su esquema están en la tabla del final y en la sección de esquema.

Plazas contratadas

El bloque seats del estado publica contracted, occupied, free, agreed_minimum, agreed_minimum_ends_at, reducible_to, pending_reduction y enforced. reducible_to vale siempre 0 porque una reducción no tiene suelo.

PATCH /v1/accounts/{account}/employee-seats y PATCH /v1/accounts/{account}/additional-nif-seats reciben {"contracted_seats": N}. Un número mayor compra plazas con un cobro prorrateado con la tarjeta de la cuenta y Idempotency-Key es obligatoria. Un número menor es una reducción. La vista previa recibe el mismo parámetro y muestra el importe de hoy, la cantidad de la próxima factura y si anula una reducción pendiente. Consulta las plazas de empleado y las plazas de NIF adicional.

Comprar plazas de empleado exige ahora el control horario: con un plan que no lo incluye, PATCH /v1/accounts/{account}/employee-seats, POST /v1/accounts/{account}/employee-seats/subscribe y POST /v1/accounts/{account}/employee-seats/change-quantity responden el nuevo 403 employee_seats_not_in_plan antes de cobrar nada, mientras que bajar o mantener las plazas sigue permitido. Consulta el error.

Compra automática

Sin una plaza libre, la aplicación responde 422 contracted_seats_exhausted y te lleva a comprar antes. La API REST y el MCP no: crear, activar, reactivar y aceptar un traspaso de NIF compran las plazas que faltan con un cobro prorrateado y después crean, con los mismos 402 de siempre. Un reintento no cobra dos veces y la plaza comprada se queda. Envía Idempotency-Key en cada alta: sin ella, un reintento tras un alta que sí llegó a crearse crea otra entidad. Consulta la compra automática.

Reducción

Una reducción puede llegar hasta 0 y tiene efecto en la renovación, sin abono. Queda como pending_reduction y las plazas siguen disponibles hasta entonces.

  • Por debajo de las ocupadas. deactivate es una lista de exactamente ocupadas - contratadas entidades activas. Si no, la respuesta es 422 contracted_seats_selection_required.
  • Aviso y renovación. Unos días antes, la propietaria recibe los nombres. En la renovación la tarea desactiva a los elegidos y fija la cantidad.
  • Se anula con una compra, o con un alta, activación, reactivación, lote o traspaso que ocupe lo que la reducción iba a quitar, y con un PATCH a la cantidad actual. Un PATCH menor la sustituye.
  • A 0. Exige elegir todas las ocupadas y cancela el add-on al final del periodo. cancel es una reducción a 0 y, sin deactivate, desactiva a todos los empleados activos.

Consulta la reducción.

Paquetes de oferta

Un paquete agrupa hasta tres líneas (plan, plazas de empleado y plazas de NIF adicional) bajo un código. Se canjea desde la aplicación o por soporte; en REST y MCP su código responde 422 customer_offer_not_eligible con details.reason product.

  • apply_to_existing aplica una oferta de plazas a las plazas que la cuenta ya tiene y no crea nada. El presupuesto publica target_quantity y minimum_quantity.
  • Condiciones. El paquete conserva sus precios mientras las plazas contratadas de cada línea se mantienen en su mínimo o por encima y la suscripción se paga. Desactivar no lo rompe; reducir sí.
  • El precio pactado rige para todas las plazas contratadas, también las compradas después, incluso por la compra automática.
  • Fin. Termina entero, con todas las líneas al precio de catálogo desde la siguiente renovación y sin abono, por reduction_below_minimum, subscription_ended_unpaid, subscription_cancelled, revoked_by_support o duration_elapsed.
  • Confirmación. Una reducción que rompería un paquete se previsualiza con offer_package_loss y la escritura exige accept_offer_package_loss: true; sin él, 422 offer_package_loss_unconfirmed.

Consulta los paquetes de oferta y el mínimo pactado.

La prueba

Durante la prueba no se cobra nada y los empleados o NIF no ocupan plazas. Ya puedes elegir las plazas contratadas sin cobro. Un canje de plazas de empleado o de NIF durante la prueba responde 422 customer_offer_not_eligible con details.reason trial_active, en lugar del 409 anterior de los lotes de empleados y de active_population. Cuando la cuenta empieza a pagar, las entidades más antiguas ocupan las plazas contratadas y las que no caben pasan a inactivas, sin cobro; con cero plazas contratadas, todas. Consulta la prueba en las plazas de empleado y la regla de la prueba en las plazas de NIF.

Errores

  • customer_offer_not_eligible con reason product responde 422 donde antes respondía 403.
  • contracted_seats_selection_required: param deactivate, con details product, requested, occupied, required, selected e invalid. En cancel solo se emite con una lista que no cuadra.
  • offer_package_loss_unconfirmed: param accept_offer_package_loss, con details product, package_id, name, effective_at y lines.
  • contracted_seats_exhausted solo lo emite la aplicación web. La API REST y el MCP compran en su lugar.
  • contracted_seats_below_minimum queda retirado: no llegó a emitirse.

Los tres códigos son subcódigos de business_rule_violation. Consulta el catálogo de errores.

Eventos

account.seats_updated anuncia cada cambio de las plazas contratadas. Su pending_reduction lleva las deactivations y la causa reduction_superseded marca una reducción anulada por una compra o una entrada. account.offer_package_ended anuncia el fin de un paquete, con su motivo y los conceptos de sus líneas, sin importes. Ambos van a los endpoints de la cuenta. Consulta los webhooks de cuenta.

Ajustes de esquema y qué hacer

Varias operaciones solo cambian en el esquema publicado, sin nada distinto en el cable: las que usaban not ahora describen la misma regla de otra forma y los campos obligatorios anidados quedan documentados. No tienes que hacer nada con ellas.

Una serie creada sin number_format nace ahora con {code}-{YYYY}-{0000}, cuatro cifras en lugar de tres. Las series que ya existen conservan su formato.

Como integrador:

  1. Envía Idempotency-Key en altas, activaciones, reactivaciones y traspasos, que ahora pueden comprar plazas.
  2. Admite included_in_seats en el enum zero_reason de las vistas previas.
  3. Trata already_covered como siempre false.
  4. Si cancelabas el add-on con empleados activos, envía deactivate: sin él se desactivan todos en la renovación.
  5. Cuenta con que una compra o un alta anule una reducción pendiente.
  6. Confirma con accept_offer_package_loss la reducción que rompa un paquete.

La tabla siguiente lista las operaciones de esta versión.

Nuevos endpoints4

EndpointDescripción
GET/v1/accounts/{account}/additional-nif-seatsObtener las plazas de NIF adicional
PATCH/v1/accounts/{account}/additional-nif-seatsFijar las plazas de NIF adicional contratadas
PATCH/v1/accounts/{account}/employee-seatsFijar las plazas de empleado contratadas
GET/v1/accounts/{account}/additional-nif-seats/previewPrevisualizar un cambio de las plazas de NIF adicional

Endpoints actualizados98

EndpointDescripción
POST/v1/accounts/{account}/nif-transfers/acceptAceptar un traspaso de NIF
POST/v1/accounts/{account}/companies/activateActivar varios NIF de la cuenta
POST/v1/accounts/{account}/companies/{company}/activateActivar un NIF de la cuenta
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/activateActivar factura recurrente
POST/v1/companies/{company}/invoices/{invoice}/annulAnular una factura
POST/v1/companies/{company}/invoices/{invoice}/assign-real-numberAsignar un número de factura real
POST/v1/companies/{company}/invoices/bulk-createCrear facturas en bloque
POST/v1/accounts/{account}/employee-seats/cancelCancelar el add-on de asientos de empleado
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/cancelAnular factura recurrente
POST/v1/companies/{company}/employee-seat-offer-redemptions/{id}/cancelCancelar un canje de oferta de plazas de empleados
POST/v1/companies/{company}/gestoria-seat-offer-redemptions/{id}/cancelCancelar un canje de oferta de plazas de empresas gestionadas
POST/v1/accounts/{account}/employee-seats/change-quantitySincronizar la cantidad de asientos de empleado
POST/v1/companies/{company}/employee-batches/{id}/confirmConfirmar un lote de empleados
POST/v1/companies/{company}/employee-seat-offer-redemptions/{id}/confirmConfirmar un canje de oferta de plazas de empleados
POST/v1/companies/{company}/gestoria-seat-offer-redemptions/{id}/confirmConfirmar un canje de oferta de plazas de empresas gestionadas
POST/v1/companies/{company}/delivery-notes/{delivery_note}/convertConvertir albarán en factura
POST/v1/companies/{company}/proformas/{proforma}/convertConvertir proforma en factura
POST/v1/companies/{company}/quotes/{quote}/convertConvertir presupuesto en factura
POST/v1/accounts/{account}/webhooksCrear un webhook endpoint de cuenta
POST/v1/companies/{company}/invoices/{invoice}/correctiveGenerar factura rectificativa
POST/v1/companies/{company}/employeesCrear un empleado
POST/v1/companies/{company}/invoicesCrea una factura
GET/v1/companies/{company}/invoicesListar todas las facturas
POST/v1/companies/{company}/pdf-template-previewsCrear una vista previa de plantilla de PDF
POST/v1/companies/{company}/purchase-invoicesCrea un gasto
POST/v1/companies/{company}/invoices/{invoice}/create-recurringCrear una factura recurrente a partir de una factura
POST/v1/companies/{company}/recurring-invoicesCrea una factura recurrente
GET/v1/companies/{company}/recurring-invoicesListar todas las facturas recurrentes
POST/v1/companies/{company}/transport-documentsCrear un documento de control
POST/v1/accounts/{account}/companies/{company}/deactivateDesactivar un NIF de la cuenta
PATCH/v1/accounts/{account}/webhooks/{webhook}Actualizar un webhook endpoint de cuenta
DEL/v1/accounts/{account}/companies/{company}Archivar un NIF de la cuenta
PATCH/v1/companies/{company}/delivery-notes/{delivery_note}Actualizar un albarán
GET/v1/companies/{company}/invoices/{invoice}Recupera una factura
PATCH/v1/companies/{company}/invoices/{invoice}Actualizar una factura
PATCH/v1/companies/{company}/proformas/{proforma}Actualizar una proforma
PATCH/v1/companies/{company}/purchase-invoices/{purchase_invoice}Actualizar un gasto
PATCH/v1/companies/{company}/quotes/{quote}Actualizar un presupuesto
GET/v1/companies/{company}/recurring-invoices/{recurring_invoice}Obtener una factura recurrente
PATCH/v1/companies/{company}/recurring-invoices/{recurring_invoice}Actualizar una factura recurrente
PATCH/v1/companies/{company}/transport-documents/{transport_document}Actualizar un documento de control en borrador
POST/v1/companies/{company}/invoices/{invoice}/duplicateDuplicar una factura
POST/v1/companies/{company}/invoices/find-by-external-idBuscar una factura por external ID
POST/v1/companies/{company}/invoices/find-by-numberBuscar una factura por número
POST/v1/companies/{company}/recurring-invoices/find-by-external-idBuscar una factura recurrente por external ID
PATCH/v1/companies/{company}/delivery-notes/{delivery_note}/public-linkActualizar el enlace público de un albarán
GET/v1/accounts/{account}/employee-seatsObtener el estado de facturación de asientos de empleado
GET/v1/accounts/{account}/employee-seats/previewPrevisualizar el cargo del asiento de empleado
PATCH/v1/companies/{company}/invoices/{invoice}/public-linkActualizar el enlace público de una factura
PATCH/v1/companies/{company}/proformas/{proforma}/public-linkActualizar el enlace público de una proforma
PATCH/v1/companies/{company}/quotes/{quote}/public-linkActualizar el enlace público de un presupuesto
GET/v1/accounts/{account}/companies/seat-charge-previewPrevisualiza el cargo por asiento de añadir una empresa
POST/v1/companies/{company}/invoices/{invoice}/issueEmite una factura
GET/v1/accounts/{account}/webhooks/{webhook}/deliveriesListar las entregas de un webhook endpoint de cuenta
POST/v1/accounts/{account}/companiesRegistrar un NIF en la cuenta
POST/v1/companies/{company}/employee-batchesPreparar un lote de empleados
GET/v1/companies/{company}/eventsListar todos los eventos
GET/v1/companies/{company}/invoices/{invoice}/correctivesListar facturas rectificativas
GET/v1/companies/{company}/employee-seat-offer-redemptionsListar un canje de oferta de plazas de empleados
POST/v1/companies/{company}/employee-seat-offer-redemptionsPreparar un canje de oferta de plazas de empleados
GET/v1/companies/{company}/gestoria-seat-offer-redemptionsListar un canje de oferta de plazas de empresas gestionadas
POST/v1/companies/{company}/gestoria-seat-offer-redemptionsPreparar un canje de oferta de plazas de empresas gestionadas
GET/v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/deliveriesLista las entregas de webhook
POST/v1/companies/{company}/invoices/{invoice}/mark-paidMarca la factura como pagada
POST/v1/companies/{company}/invoices/{invoice}/mark-sentMarca una factura como enviada
POST/v1/companies/{company}/transport-documents/{transport_document}/modifyModificar un documento de control emitido
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/pausePausar factura recurrente
POST/v1/companies/{company}/products/{product}/configurations/impact-previewPrevisualizar el impacto de restringir un catálogo
POST/v1/companies/{company}/employees/{employee}/reactivateReactivar un empleado
POST/v1/companies/{company}/employee-batches/{id}/quoteRecalcular la cotización de un lote de empleados
POST/v1/companies/{company}/employee-seat-offer-redemptions/{id}/quoteRecalcular la cotización de un canje de oferta de plazas de empleados
POST/v1/companies/{company}/gestoria-seat-offer-redemptions/{id}/quoteRecalcular la cotización de un canje de oferta de plazas de empresas gestionadas
PATCH/v1/companies/{company}/invoices/{invoice}/rescheduleReprogramar una factura
POST/v1/companies/{company}/price-lists/resolve-manyResolver varios precios de catálogo
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/resumeReanudar factura recurrente
POST/v1/companies/{company}/invoices/{invoice}/scheduleProgramar una factura
POST/v1/accounts/{account}/webhooks/{webhook}/testEnviar un evento de prueba a un webhook endpoint de cuenta
POST/v1/companies/{company}/invoices/{invoice}/sendEnvía la factura por email
GET/v1/accounts/{account}/webhooks/{webhook}/deliveries/{delivery}Consultar una entrega de un webhook endpoint de cuenta
GET/v1/companies/{company}/events/{event}Obtener un evento
GET/v1/companies/{company}/employee-seat-offer-redemptions/{id}Consultar un canje de oferta de plazas de empleados
GET/v1/companies/{company}/gestoria-seat-offer-redemptions/{id}Consultar un canje de oferta de plazas de empresas gestionadas
GET/v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/deliveries/{delivery}Recupera la entrega del webhook
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/skipOmitir la próxima generación de la factura recurrente
POST/v1/accounts/{account}/employee-seats/subscribeSuscribirse al add-on de asientos de empleado
POST/v1/companies/{company}/invoices/substitute-simplifiedSustituir facturas simplificadas por factura completa
POST/v1/companies/{company}/invoices/{invoice}/unscheduleDesprogramar una factura
POST/v1/companies/{company}/invoices/{invoice}/unsendAnular el envío de una factura
POST/v1/accounts/{account}/companies/{company}/verify-creationVerificar la creación de un NIF
POST/v1/companies/{company}/invoices/{invoice}/voidAnular una factura
POST/v1/companies/{company}/seriesCrea una serie
GET/v1/companies/{company}/seriesListar todas las series
POST/v1/companies/{company}/series/find-by-codeBuscar una serie por código
GET/v1/companies/{company}/series/defaultObtener la serie por defecto para un tipo de documento
GET/v1/companies/{company}/series/activeListar series activas por tipo de documento
GET/v1/companies/{company}/series/{series}Obtener una serie
PATCH/v1/companies/{company}/series/{series}Actualizar una serie
GET/v1/companies/{company}/billingObtener los detalles de facturación de la cuenta

En esta página

¿Te echamos una mano?Contactar con soporte