Temps imputat a tasques
Imputa temps a les tasques a mà o amb un temporitzador, consulta el resum de temps d'un projecte i converteix les hores facturables en un esborrany de factura, i per què no és el fitxatge de jornada.
El temps imputat a una tasca mesura el treball dedicat a ella, perquè vegis on van les hores i les puguis facturar. Les imputes a mà, com un període tancat, o amb un temporitzador que corre fins que l'aturis, i un projecte converteix les seves hores facturables en un esborrany de factura.
No és el registre de jornada. Una imputació de temps de tasca pertany al
mòdul tasks: fa servir els scopes tasks:*, els seus esdeveniments són
task_time_entry.* i les seves operacions viuen sota
/v1/tasks/{task}/time-entries i /v1/task-timers. Els fitxatges del mòdul de
control horari (/v1/time-entries, time_entries:*, el mòdul
control_horario) són el registre legal de jornada encadenat per hash: un altre
recurs, amb el seu propi registre. Les hores imputades a una tasca mai no
apareixen en aquest registre, ni en els seus balanços, ni en els tancaments
mensuals, ni en les exportacions de nòmina. Consulta
Control horari.
Imputar temps a mà
POST /v1/tasks/{task}/time-entries
imputa un període tancat de treball:
curl -X POST https://api.factuarea.com/v1/tasks/$TASK_ID/time-entries \
-H "Authorization: Bearer $FACTUAREA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"started_at": "2026-09-28T09:00:00+02:00",
"ended_at": "2026-09-28T11:00:00+02:00",
"description": "Payment gateway integration",
"billable": true
}'started_atiended_atsón ISO 8601 amb zona horària. El període ha d'acabar després de començar, durar com a màxim 24 hores i no començar amb més d'un dia d'avanç; si no, la crida retorna 422invalid_time_entry_period. Una imputació amb inici i fi iguals és vàlida i dura zero segons.descriptionés opcional, de fins a 1000 caràcters.billablevaltrueper defecte.- L'autoria és sempre de qui té la credencial.
- Les imputacions es poden solapar: és treball que atribueixes a tasques, no un fitxatge.
La imputació es retorna amb el seu duration_seconds, is_running i, un cop
facturada, l'invoice_id i l'invoiced_at de la factura que la inclou.
El temporitzador
En lloc d'escriure un període, arrenca un temporitzador quan comences i atura'l quan acabes:
# Arrencar-lo en una tasca (sense cos)
curl -X POST https://api.factuarea.com/v1/tasks/$TASK_ID/timer/start \
-H "Authorization: Bearer $FACTUAREA_API_KEY"
# Què està corrent ara? `data` és null si no hi ha res
curl https://api.factuarea.com/v1/task-timers/current \
-H "Authorization: Bearer $FACTUAREA_API_KEY"
# Aturar-lo, a la tasca on corri
curl -X POST https://api.factuarea.com/v1/task-timers/stop \
-H "Authorization: Bearer $FACTUAREA_API_KEY"- Un temporitzador per usuari i empresa. Arrencar-ne un altre mentre un corre,
en qualsevol tasca, retorna 409
task_timer_already_runningi deixa intacte el que estava en marxa. Un usuari amb un temporitzador en una altra empresa en pot arrencar un aquí. - Un temporitzador en marxa és una imputació amb
ended_at: nulliis_running: true. - Aturar-lo fixa la fi en l'instant actual i retorna la imputació tancada. Sense
temporitzador en marxa retorna 422
task_timer_not_running. - Un temporitzador que porta més de 24 hores corrent es tanca exactament a les 24 hores del seu inici, així que un d'oblidat mai no bloqueja el següent.
- El temporitzador pertany a qui té la credencial, així que
GET /v1/task-timers/currentmostra el seu i mai el d'una altra persona.
Editar i esborrar imputacions
PUT /v1/tasks/{task}/time-entries/{time_entry} és parcial i canvia
started_at, ended_at, description i billable. En una imputació en marxa
només pots canviar la descripció i la marca de facturable: atura el
temporitzador per tancar-la.
Quan una imputació s'inclou en una factura queda bloquejada: editar-la o
esborrar-la retorna 422
task_time_entry_invoiced fins que
s'esborri l'esborrany de factura. DELETE .../time-entries/{time_entry} és
permanent i necessita el scope tasks:delete i una Idempotency-Key; esborrar
una imputació en marxa cancel·la el temporitzador.
GET /v1/tasks/{task}/time-entries
llista les imputacions d'una tasca, de la més recent a la més antiga i amb
paginació per cursor.
Resum de temps d'un projecte
GET /v1/projects/{project}/time-summary
respon quant de temps ha consumit un projecte, opcionalment entre from i to
(dates a la zona horària de l'empresa):
{
"data": {
"object": "project_time_summary",
"project_id": "0193a4f2-7c20-7a11-8b52-4d6e8f0a2c01",
"from": "2026-09-01",
"to": "2026-09-30",
"total_seconds": 36900,
"billable_seconds": 33300,
"invoiced_seconds": 9900,
"pending_seconds": 23400,
"by_task": [
{
"task_id": "0193a4f2-8f53-7d44-8e85-7a9b1c3d5f12",
"key": "DEV-12",
"title": "Integrate the payment gateway in the checkout",
"total_seconds": 22500,
"billable_seconds": 22500,
"invoiced_seconds": 9900,
"pending_seconds": 12600
}
],
"by_user": [
{
"user_id": "0193a4f2-6b1c-7d3e-8a41-2c5e7f9a1b01",
"name": "Ana Pérez",
"total_seconds": 22500,
"billable_seconds": 22500
}
]
}
}pending_seconds és el que encara pots facturar: el temps facturable que encara
no s'ha facturat. Els temporitzadors en marxa queden fora de tots els totals.
Facturar les hores
Un projecte converteix les seves hores facturables en un esborrany de factura
per al seu contacte de facturació. Han d'estar definits al projecte, amb
PUT /v1/projects/{project} o a l'app:
- un contacte de facturació (
billing_contact_id) que pugui rebre factures de venda; - un preu: una tarifa per hora (
billing_hourly_rate) o un producte de facturació (billing_product_id), el preu del qual per a aquest contacte es fa servir quan no hi ha tarifa.
Sense ells, la crida retorna 422
task_time_not_invoiceable i indica què hi
falta.
Tria les hores amb entry_ids (fins a 500 imputacions) o amb un period
(from i to, inclusius, per la data d'inici de les imputacions) —mai les dues
coses— i una grouping: per_task dona una línia per tasca, per_entry una
línia per imputació i single_line una sola línia amb el total. Només compleixen
els requisits les imputacions del projecte tancades, facturables i encara sense
facturar.
Primer, la vista prèvia. Aplica les mateixes comprovacions i no crea res:
curl -X POST https://api.factuarea.com/v1/projects/$PROJECT_ID/time-invoices/preview \
-H "Authorization: Bearer $FACTUAREA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "period": { "from": "2026-09-01", "to": "2026-09-30" }, "grouping": "per_task" }'La vista prèvia llista el client, les línies (quantitat en hores, unitat HUR,
preu i import abans d'impostos), els totals en segons i en hores, les imputacions
que es facturarien i els warnings. Després crea la factura amb el mateix cos:
curl -X POST https://api.factuarea.com/v1/projects/$PROJECT_ID/time-invoices \
-H "Authorization: Bearer $FACTUAREA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{ "period": { "from": "2026-09-01", "to": "2026-09-30" }, "grouping": "per_task" }'{
"data": {
"id": "0193a4f2-c3fd-7bee-8c8f-7e9f1a3b5d01",
"object": "task_time_invoice",
"project_id": "0193a4f2-7c20-7a11-8b52-4d6e8f0a2c01",
"invoice_id": "0193a4f2-c3fd-7bee-8c8f-7e9f1a3b5d10",
"grouping": "per_task",
"status": "draft"
}
}- Exigeix
invoices:write, no un scope de projectes: l'operació crea una factura. Una credencial amb nomésprojects:writerep 403insufficient_scope. La vista prèvia és una lectura i necessitaprojects:read. - La factura és un esborrany. Mai no s'emet, s'envia ni es registra davant de
l'AEAT per si sola; l'acabes amb l'API de factures. S'hi
apliquen les regles normals de les factures: si el pla ha esgotat les seves
factures, la crida retorna 402
limit_exceededi no es crea res. - Tot o res. En una transacció es crea la factura i es marquen les imputacions com a facturades. Si falla qualsevol pas, no queda cap imputació marcada.
- Els reintents són segurs. Repetir la petició amb la mateixa
Idempotency-Key, o amb el mateixbatch_id, retorna la mateixa factura. Dues peticions alhora sobre les mateixes imputacions produeixen una sola factura; l'altra reptask_time_entry_invoiced. - Esborrar l'esborrany allibera les hores. Tornen a ser pendents. Emetre, enviar, cobrar o anul·lar la factura no les allibera.
Esdeveniments
Les imputacions emeten task_time_entry.created (també en arrencar un
temporitzador), task_time_entry.updated (també en aturar-lo),
task_time_entry.deleted i task_time_entry.invoiced, un per cada imputació
d'un lot facturat. Consulta
Esdeveniments de tasques.
Propers passos
projectes, tauler, tasques, etiquetes, comentaris i adjunts.
acaba, emet i envia l'esborrany que produeixen les hores.
el registre legal de jornada, que és una altra cosa.
create_task_time_entry, start_task_timer i invoice_project_time per a un agent.
factuarea tasks time-entries i factuarea task-timers.