Factuarea APIDevelopers
Contrato

Ajustes de Tareas

Límites más precisos y errores más claros en Proyectos y Tareas: descripción de tarea de hasta 400.000 caracteres, tarifa por hora de hasta 99.999.999,99, vínculos que respetan los scopes, id de la tarea en las notificaciones, borrados bloqueados por horas facturadas y facturación de horas idempotente. users:read pasa a ser un scope sensible.

30 de septiembre de 2026 — La revisión del módulo de Proyectos y Tareas afina varios contratos publicados en Proyectos y tareas. No se añade ni se retira ninguna operación, y no cambian parámetros ni códigos de respuesta; cambian límites, causas de error y el texto de los schemas. Quince operaciones quedan actualizadas, listadas al final.

  • Descripción de la tarea — POST /v1/tasks y PUT /v1/tasks/{task} declaran maxLength: 400000 en description. Por encima, la llamada devuelve 422 parameter_invalid_value. Entre 100.001 y 400.000 caracteres medidos sigue devolviendo 422 task_description_too_large. El saneado neutraliza como texto las etiquetas no permitidas y ya no trunca el documento.
  • Tarifa por hora del proyecto — billing_hourly_rate en PUT /v1/projects/{project} admite como máximo 99.999.999,99, de modo que el impuesto de una hora siempre cabe en una línea de factura.
  • Entidades vinculadas y scopes — GET /v1/tasks/{task}/entity-links y POST /v1/tasks/{task}/entity-links incluyen el resumen de una entidad vinculada solo si la credencial tiene el scope de lectura del recurso al que pertenece (por ejemplo invoices:read para una factura). Sin él, el vínculo se devuelve igualmente, con available: false y summary: null, para poder quitarlo.
  • entity_id en las notificaciones — GET /v1/notifications devuelve, con entity_type = task, el UUID de la tarea en entity_id, listo para GET /v1/tasks/{task}. Antes era siempre null.
  • users:read es sensible — da acceso al directorio completo de la empresa, con los emails. Revisa las claves y las apps OAuth que lo piden; consulta Scopes y permisos.
  • Borrar con horas facturadas — borrar una tarea (DELETE /v1/tasks/{task}), un proyecto (DELETE /v1/projects/{project}) o una selección (POST /v1/tasks/bulk-delete) que tenga horas facturadas devuelve 422 task_time_entry_invoiced. En una selección no se borra nada. Borra antes la factura.
  • Facturar el tiempo es idempotente — POST /v1/projects/{project}/time-invoices responde 409 idempotency_key_reused si se reenvía un batch_id con una petición distinta, y 409 idempotency_key_in_use mientras la primera sigue en curso. La misma petición devuelve la misma factura. Si el importe de una línea no cabe en la factura, esta operación y su vista previa devuelven 422 task_time_not_invoiceable.
  • Scopes de importar, exportar y resumir — la descripción de POST /v1/projects/{project}/tasks/import, GET /v1/projects/{project}/tasks/export y GET /v1/projects/{project}/time-summary indica ahora qué scopes exigen (solo los de proyectos).
  • Ids en los borrados — las respuestas deleted: true devuelven el id canónico en minúsculas.

Códigos de error: task_description_too_large, task_time_entry_invoiced, task_time_not_invoiceable, idempotency_key_reused y idempotency_key_in_use.

Endpoints actualizados15

EndpointDescripción
POST/v1/tasksCrear una tarea
PUT/v1/tasks/{task}Actualizar una tarea
POST/v1/tasks/bulk-deleteEliminación masiva de tareas
DEL/v1/tasks/{task}Eliminar una tarea
GET/v1/tasks/{task}/entity-linksListar vínculos de tarea con entidades
POST/v1/tasks/{task}/entity-linksVincular una tarea a una entidad
GET/v1/projects/{project}Obtener un proyecto
PUT/v1/projects/{project}Actualizar un proyecto
DEL/v1/projects/{project}Eliminar un proyecto
GET/v1/projects/{project}/tasks/exportExportar las tareas de un proyecto
POST/v1/projects/{project}/tasks/importImportar tareas a un proyecto
GET/v1/projects/{project}/time-summaryObtener el resumen de tiempo de un proyecto
POST/v1/projects/{project}/time-invoices/previewPrevisualizar la factura del tiempo de un proyecto
POST/v1/projects/{project}/time-invoicesFacturar el tiempo de un proyecto
GET/v1/notificationsListar notificaciones