blocked) n'empêche pas les autres d'être écrites. L'appel est idempotent : renvoyer la même clé avec le même contenu rejoue le résultat (replay) ou reprend les seules lignes non écrites (resume), sans jamais créer de doublon. Utilisez dry_run: true pour tout valider sans rien écrire ; un lot malformé est refusé en 422 sans consommer la clé.x-api-key: ********************curl --location --globoff 'https://relay.exostack.cloud//api/payroll/time-sheets/write-batches' \
--header 'x-api-key: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"dry_run": false,
"idempotency_key": "export-2026-S41-chantier",
"lines": [
{
"comment": "Coffrage fondation",
"earnings_line": 102,
"employee_code": "1042",
"employee_cp": 42,
"end_date": "2026-10-05",
"end_time": 55800,
"function_cp": 518,
"function_reference": 1,
"hours": 7.5,
"kind": "hours",
"project_number": "PRJ-2041",
"source_line_id": "exp-0412.l1",
"start_date": "2026-10-05",
"start_time": 25200
},
{
"comment": "Congé férié payé",
"employee_code": "1042",
"employee_cp": 42,
"function_cp": 518,
"hr_bank": {
"code": 10
},
"kind": "hr_bank",
"movement": "disbursement",
"source_line_id": "exp-0412.v1",
"start_date": "2026-10-09",
"value": 8
}
],
"source": {
"export_id": "exp-0412",
"period_from": "2026-10-04",
"period_to": "2026-10-10"
}
}'{
"idempotency_key": "export-2026-S41-chantier",
"batch_id": 27,
"mode": "new",
"dry_run": false,
"replayed": false,
"status": "completed",
"summary": {
"lines_total": 2,
"written": 2,
"adopted": 0,
"already_written": 0,
"blocked": 0,
"failed": 0,
"readback_missing": 0,
"succeeded": 2,
"missing": 0
},
"employees": [
{
"employee_cp": 42,
"lines_total": 2,
"succeeded": 2,
"failed": 0
}
],
"lines": [
{
"source_line_id": "exp-0412.l1",
"employee_cp": 42,
"function_cp": 518,
"project_number": "PRJ-2041",
"hours": 7.5,
"status": "written",
"ts_card_pos": 312,
"ts_unique": 4821,
"errors": [],
"warnings": []
},
{
"source_line_id": "exp-0412.v1",
"employee_cp": 42,
"function_cp": 518,
"status": "written",
"ts_card_pos": 313,
"ts_unique": 4822,
"errors": [],
"warnings": [],
"kind": "hr_bank",
"hr_bank": {
"id": 6,
"code": 10
},
"movement": "disbursement",
"value": 8,
"hr_total": -8
}
],
"completed_at": "2026-10-10T16:05:12-04:00"
}