Factuarea APIDevelopers
Contracte

Ajustos de Tasques

Límits més precisos i errors més clars a Projectes i Tasques: descripció de tasca de fins a 400.000 caràcters, tarifa per hora de fins a 99.999.999,99, vincles que respecten els scopes, id de la tasca a les notificacions, esborrats bloquejats per hores facturades i facturació d'hores idempotent. users:read passa a ser un scope sensible.

30 de setembre de 2026 — La revisió del mòdul de Projectes i Tasques afina diversos contractes publicats a Projectes i tasques. No s'afegeix ni es retira cap operació, i no canvien paràmetres ni codis de resposta; canvien límits, causes d'error i el text dels schemas. Quinze operacions queden actualitzades, llistades al final.

  • Descripció de la tasca — POST /v1/tasks i PUT /v1/tasks/{task} declaren maxLength: 400000 a description. Per damunt, la crida retorna 422 parameter_invalid_value. Entre 100.001 i 400.000 caràcters mesurats continua retornant 422 task_description_too_large. El sanejat neutralitza com a text les etiquetes no permeses i ja no trunca el document.
  • Tarifa per hora del projecte — billing_hourly_rate a PUT /v1/projects/{project} admet com a màxim 99.999.999,99, de manera que l'impost d'una hora sempre cap en una línia de factura.
  • Entitats vinculades i scopes — GET /v1/tasks/{task}/entity-links i POST /v1/tasks/{task}/entity-links inclouen el resum d'una entitat vinculada només si la credencial té el scope de lectura del recurs al qual pertany (per exemple invoices:read per a una factura). Sense ell, el vincle es retorna igualment, amb available: false i summary: null, per poder-lo treure.
  • entity_id a les notificacions — GET /v1/notifications retorna, amb entity_type = task, l'UUID de la tasca a entity_id, a punt per a GET /v1/tasks/{task}. Abans era sempre null.
  • users:read és sensible — dona accés al directori complet de l'empresa, amb els emails. Revisa les claus i les apps OAuth que el demanen; consulta Scopes i permisos.
  • Esborrar amb hores facturades — esborrar una tasca (DELETE /v1/tasks/{task}), un projecte (DELETE /v1/projects/{project}) o una selecció (POST /v1/tasks/bulk-delete) que tingui hores facturades retorna 422 task_time_entry_invoiced. En una selecció no s'esborra res. Esborra abans la factura.
  • Facturar el temps és idempotent — POST /v1/projects/{project}/time-invoices respon 409 idempotency_key_reused si es reenvia un batch_id amb una petició diferent, i 409 idempotency_key_in_use mentre la primera continua en curs. La mateixa petició retorna la mateixa factura. Si l'import d'una línia no cap a la factura, aquesta operació i la seva vista prèvia retornen 422 task_time_not_invoiceable.
  • Scopes d'importar, exportar i resumir — la descripció de POST /v1/projects/{project}/tasks/import, GET /v1/projects/{project}/tasks/export i GET /v1/projects/{project}/time-summary indica ara quins scopes exigeixen (només els de projectes).
  • Ids als esborrats — les respostes deleted: true retornen l'id canònic en minúscules.

Codis d'error: task_description_too_large, task_time_entry_invoiced, task_time_not_invoiceable, idempotency_key_reused i idempotency_key_in_use.

Endpoints actualitzats15

EndpointDescripció
POST/v1/tasksCrear una tasca
PUT/v1/tasks/{task}Actualitzar una tasca
POST/v1/tasks/bulk-deleteEliminació massiva de tasques
DEL/v1/tasks/{task}Eliminar una tasca
GET/v1/tasks/{task}/entity-linksLlistar vincles de tasca amb entitats
POST/v1/tasks/{task}/entity-linksVincular una tasca a una entitat
GET/v1/projects/{project}Obtenir un projecte
PUT/v1/projects/{project}Actualitzar un projecte
DEL/v1/projects/{project}Eliminar un projecte
GET/v1/projects/{project}/tasks/exportExportar les tasques d'un projecte
POST/v1/projects/{project}/tasks/importImportar tasques a un projecte
GET/v1/projects/{project}/time-summaryObtenir el resum de temps d'un projecte
POST/v1/projects/{project}/time-invoices/previewPrevisualitzar la factura del temps d'un projecte
POST/v1/projects/{project}/time-invoicesFacturar el temps d'un projecte
GET/v1/notificationsLlistar notificacions