Factuarea API
Saldos d'hores

Obtenir el full horari mensual d'un empleat

Retorna el full horari mensual en viu d'un empleat per al període obert (en curs): minuts esperats vs treballats, el saldo i les hores extra per dia, i els totals mensuals. employee_id (UUID v7) és obligatori; month (YYYY-MM) pren per defecte el mes actual. El full es recomputa en cada petició des del registre inalterable, així que un fitxatge acabat de registrar es reflecteix sense tancar el mes. Els minuts esperats descompten festius i absències aprovades. Els totals estan en minuts. Un recurs computat: exposa employee_id, mai un id.

GET
/time-balances/monthly-sheet
AuthorizationBearer <token>

A: header

Paràmetres de consulta

employee_id*string

ID de l'empleat (UUID v7) de qui es consulta el full mensual.

Formatuuid
month?|

Mes del full en format AAAA-MM; per defecte, el mes actual.

Coincidència^\d{4}-(0[1-9]|1[0-2])$

Paràmetres de capçalera

Factuarea-Version?string

Fixa la versió de l'API (YYYY-MM-DD, versionat per data estil Stripe) per a aquesta petició; omet-lo per usar la versió fixada de la clau, o l'última si no n'hi ha cap. Versió no suportada → 400 unsupported_api_version; mal formada → 400 parameter_invalid_format. La versió efectiva es reflecteix a la capçalera de resposta Factuarea-Version. Consulta la guia de Versioning.

Formatdate
X-Active-Profile?string

Opera en nom d'una empresa filla (API key mestra de gestoria): passa el seu id públic (UUID v7) i la petició s'executa contra les dades d'aquella filla sense canviar l'scope, el tier ni l'environment de la clau (omet-lo per usar la pròpia empresa de la clau). UUID no vàlid → 400 parameter_invalid_uuid; id desconegut o no propi → 404 profile_not_found. Consulta la guia d'Acting on behalf.

Formatuuid

Cos de la resposta

application/json

application/json

application/json

application/json

application/json

application/json

application/json

import { Factuarea } from "@factuarea/sdk";const factuarea = new Factuarea({ apiKey: process.env.FACTUAREA_API_KEY! });const result = await factuarea.timeBalances.monthlySheet();
{
  "data": {
    "object": "time_sheet",
    "employee_id": "01933a1f-8c21-7b3d-9e4f-1a2b3c4d5e01",
    "month": "2026-05",
    "total_expected_minutes": 9600,
    "total_worked_minutes": 9720,
    "total_balance_minutes": 120,
    "total_overtime_minutes": 90,
    "days": [
      {
        "date": "2026-05-04",
        "expected_minutes": 480,
        "worked_minutes": 510,
        "balance_minutes": 30,
        "overtime_minutes": 15,
        "is_holiday": false,
        "is_approved_absence": false,
        "is_rest_day": false
      }
    ]
  }
}

{
  "error": {
    "type": "authentication_error",
    "code": "missing_api_key",
    "message": "No se ha proporcionado una API key válida en el header Authorization.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#missing_api_key",
    "request_id": "req_01HKQS5N8VR7QXJ9K3T6BWPMZA"
  }
}

{
  "error": {
    "type": "authorization_error",
    "code": "insufficient_scope",
    "message": "Esta API key no tiene el scope requerido para esta operación.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#insufficient_scope",
    "request_id": "req_01HKQS5NBC3P8M1KX4V7SLNHQD"
  }
}

{
  "message": "string"
}

{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "message": "El campo `name` es obligatorio y no puede estar vacío.",
    "param": "name",
    "doc_url": "https://docs.factuarea.com/guides/errors#parameter_invalid",
    "request_id": "req_01HKQS5NGS8Z3T6Q1D2E7FYVSI"
  }
}

{
  "error": {
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded",
    "message": "Has excedido el rate limit de 60 peticiones por minuto. Reintenta tras 30 segundos.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#rate_limit_exceeded",
    "request_id": "req_01HKQS5NKW1C6W9T4G5H0JBZVL"
  }
}

{
  "error": {
    "type": "api_error",
    "code": "internal_error",
    "message": "Ha ocurrido un error inesperado. Si persiste, contacta con soporte adjuntando el request_id.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#internal_error",
    "request_id": "req_01HKQS5NLX2D7X0U5H6J1KCAWM"
  }
}