Saltar al contenido
MiJornada

Desarrolladores

Documentación de la API

Con esta API, un programa lee las jornadas, los fichajes, las ausencias y los empleados de una empresa que usa MiJornada. Cada clave pertenece a una empresa y solo ve esa empresa.

Primeros pasos

  1. El propietario de la empresa crea una clave en Empresa › Integraciones. Se ve una sola vez.
  2. Envía la clave en la cabecera Authorization de cada petición.
  3. Pide /me para comprobar que funciona y después /workdays para sacar las jornadas.

curl

curl "https://api.mijornada.app/v1/me" \
  -H "Authorization: Bearer mj_live_…"

Dirección base

https://api.mijornada.app/v1

Recursos

Claves y permisos

Las claves que se crean hoy en la app son de solo lectura: employees:read, time:read y absences:read. Invitar, crear ausencias y los webhooks piden permisos que llegarán con la conexión de Zapier. Si tu programa los necesita, escríbenos.

Fechas y días

Los instantes van en UTC con la letra Z. dayKey es el día laboral en la zona horaria de la empresa, así que un turno que acaba después de medianoche pertenece al día en que empezó.

Paginación

Las listas devuelven data y nextCursor. Pasa nextCursor como cursor hasta que llegue vacío. El tamaño por defecto es 50 y el máximo, 100.

Límites

  • 120 peticiones por minuto por clave. Al pasarte, la API responde 429 con Retry-After.
  • Las consultas por fechas abarcan como mucho 93 días, y un año en las ausencias.
  • 60 invitaciones por hora y clave.

Errores

Los errores usan application/problem+json con un code estable, un detail legible y un requestId para soporte.

Estado Código Qué es
401 invalid_key La clave falta, es incorrecta o está revocada.
403 missing_scope La clave no tiene ese permiso.
403 organization_closed La empresa está cerrada.
404 not_found No existe en esta empresa.
405 method_not_allowed Esa dirección no admite ese método.
409 conflict Choca con algo que ya existe: una ausencia solapada, un plan lleno.
409 idempotency_conflict Esa Idempotency-Key ya se usó para otra petición.
422 invalid_parameter Falta un dato o no es válido.
429 rate_limited Demasiadas peticiones.
503 maintenance MiJornada está en mantenimiento.

Comprobar la firma de un webhook

Cada entrega lleva X-MiJornada-Signature: t=<unix>,v1=<hmac>, el HMAC-SHA256 de <t>.<cuerpo> con el secret que devolvió la creación del webhook.

Node.js

import crypto from "node:crypto";

export function isValid(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map((part) => part.split("=")));
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex");
  const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
  return fresh && crypto.timingSafeEqual(Buffer.from(parts.v1), Buffer.from(expected));
}

Versiones

/v1 puede ganar campos y direcciones nuevas. Quitar o redefinir algo exige /v2.

Contrato OpenAPI

Última actualización de esta página: .