Fichar (empujar marca)
POST
/api/v1/attendance Registra una marca de fichaje de un empleado (entrada, salida o pausa), con su momento real (ts). Pensado para volcar fichajes de un reloj o sistema externo. El registro es INMUTABLE: solo se añade, nunca se edita ni borra (valor legal). Las marcas deben llegar en orden cronológico y en una secuencia coherente (una entrada abierta antes de una salida, etc.); si no, 409. ts no puede ser futuro ni tener más de 60 días. La geolocalización no se acepta ni se devuelve. Requiere que la clave pueda administrar empleados.
Cuerpo (JSON)
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
user_id | string | Sí | Empleado que fichó. |
type | string | Sí | Tipo de marca: "in", "out", "break_start" o "break_end". |
ts | string | Sí | Momento real de la marca (ISO 8601). No futuro, máx. 60 días atrás, posterior a la última marca. |
modality | string | No | Solo para "in": "onsite" (por defecto) o "remote" (si el empleado tiene teletrabajo). |
Ejemplo
Sustituye db_live_tu_clave por tu clave.
curl -s -X POST -H "Authorization: Bearer db_live_tu_clave" \
-H "Content-Type: application/json" \
-d '{"user_id":"u-delm","type":"in","ts":"2026-07-10T09:00:00Z"}' \
"https://api.dutybeat.com/api/v1/attendance" | jq Respuesta de ejemplo
Lo que imprime cada snippet al ejecutarlo: cURL devuelve el JSON crudo; los snippets de Python y PowerShell piden campos concretos, así que su salida es la de cada uno.
{
"data": {
"id": "punch-nueva",
"user_id": "u-delm",
"type": "in",
"ts": "2026-07-10T09:00:00.000Z",
"modality": "onsite"
}
}