Factuarea API
Cierres mensuales del registro

Sellar un registro de jornada mensual

Sella (firma digitalmente) un registro de jornada mensual closed por el id (UUID v7) del cierre: congela un digest canónico SHA-256 de la instantánea del cierre y una firma RSA-SHA256 separada hecha con el certificado de la empresa, de modo que el registro es a prueba de manipulaciones y verificable de forma independiente. Un cierre que no está closed devuelve 422 en español, un periodo ya sellado devuelve 409 (un sello por cierre, sin re-sellado) y una empresa sin un certificado activo utilizable devuelve 422. Un cierre perteneciente a otra empresa devuelve 404. Devuelve 201 con el sello (incluido su estado de verificación en vivo) y una cabecera Location.

POST
/monthly-time-record-closes/{monthly_time_record_close}/seal
AuthorizationBearer <token>

En: header

Parámetros de ruta

monthly_time_record_close*string

Parámetros de cabecera

Idempotency-Key?string

Clave opaca generada por el cliente (hasta 255 caracteres; se recomienda UUID v7) que hace seguros los reintentos: la primera respuesta se cachea y se reproduce en las repeticiones sin volver a ejecutar la mutación. Reutilizar una clave con un cuerpo distinto devuelve 409 idempotency_key_reused. Consulta la guía de Idempotency.

Longitud1 <= length <= 255
Factuarea-Version?string

Fija la versión de la API (YYYY-MM-DD, versionado por fecha estilo Stripe) para esta petición; omítelo para usar la versión fijada de la clave, o la última si no hay ninguna. Versión no soportada → 400 unsupported_api_version; malformada → 400 parameter_invalid_format. La versión efectiva se refleja en la cabecera de respuesta Factuarea-Version. Consulta la guía de Versioning.

Formatodate
X-Active-Profile?string

Opera en nombre de una empresa hija (API key maestra de gestoría): pasa su id público (UUID v7) y la petición se ejecuta contra los datos de esa hija sin cambiar el scope, el tier ni el environment de la clave (omítelo para usar la propia empresa de la clave). UUID inválido → 400 parameter_invalid_uuid; id desconocido o no propio → 404 profile_not_found. Consulta la guía de Acting on behalf.

Formatouuid

Cuerpo de la respuesta

application/json

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.monthlyTimeRecordCloses.seal("01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a01");
{
  "data": {
    "id": "01933a41-15ba-74c6-8cd3-ad1e2f3a4b01",
    "object": "monthly_register_signature",
    "monthly_time_record_close_id": "01933a40-04a9-73b5-9bc2-9c0d1e2f3a01",
    "digest": {
      "algorithm": "sha256",
      "value": "9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08"
    },
    "signature": {
      "algorithm": "RSA-SHA256",
      "value": "MEUCIQD8pXn0m2rT1cZ0Yb9k3Qq7Jc1oV9Wm5nX2sQe4rT8AgIgH1kL0pN3vB6yD9fR2sT4uW7xY0zA1bC3dE5fG8hI2k="
    },
    "certificate": {
      "serial_number": "3A:7F:1C:9E:2D:0B:44:8A",
      "subject_name": "ACME SOLUTIONS SL",
      "thumbprint": "A1B2C3D4E5F60718293A4B5C6D7E8F901A2B3C4D5E6F708192A3B4C5D6E7F8090",
      "valid_to": "2027-11-30T23:59:59Z"
    },
    "sealed_by_id": "01933a1f-8c21-7b3d-9e4f-1a2b3c4d5ecc",
    "sealed_at": "2026-05-02T08:05:00Z",
    "verified": true,
    "verification_reason": "verified"
  }
}

{
  "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"
  }
}

{
  "error": {
    "type": "not_found_error",
    "code": "resource_not_found",
    "message": "El recurso solicitado no existe o pertenece a otra empresa.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#resource_not_found",
    "request_id": "req_01HKQS5NEQ6X1R4N9B0C5DWTPG"
  }
}

{
  "error": {
    "type": "idempotency_error",
    "code": "idempotency_key_reused",
    "message": "La cabecera `Idempotency-Key` ya se usó con un body distinto. Usa una clave nueva o reenvía exactamente el mismo body.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#idempotency_key_reused",
    "request_id": "req_01HKQS5NHT9A4U7R2E3F8GZWTJ"
  }
}

{
  "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"
  }
}