GEThttps://api.veriko.mx/v1/public/spei-calendar/{year}

Obtener el calendario de días inhábiles SPEI de un año

Audiencia
public

Devuelve el calendario de días inhábiles SPEI de un año, con la disposición oficial de la que sale.

La respuesta incluye:

  • non_business_days: Los días inhábiles que caen de lunes a viernes, en orden y con formato YYYY-MM-DD.
  • source: La disposición de la Comisión Nacional Bancaria y de Valores (CNBV) publicada en el Diario Oficial de la Federación (DOF), con su título y su fecha de publicación.

Los sábados y los domingos también son inhábiles, siempre, y no se repiten en non_business_days.

El calendario determina el día de operación de una transferencia. El SPEI opera todos los días, pero el día hábil cambia a las 18:00 (hora del centro de México): lo enviado a partir de esa hora, en sábado, en domingo o en un día inhábil opera el siguiente día hábil. Ese día es el operationDate de banxico_result, y puede diferir de la fecha de envío.

La consulta no consume cuota de validaciones. Un año sin calendario responde un estado HTTP 404 (con spei_calendar_year_not_covered en el cuerpo), y meta.covered_years lista los años disponibles. El calendario de cada año se añade cuando la CNBV publica su disposición, normalmente en diciembre del año anterior.

La respuesta es cacheable: incluye la cabecera ETag, que puede enviarse en otra petición como If-None-Match; si el calendario no ha cambiado, responde con un estado HTTP 304 (sin cuerpo).

La diferencia entre la fecha de envío y la de operación está en fechas y zona horaria.

Parámetros
ParámetroUbicaciónTipoObligatorioDescripción
year*pathintegerobligatorio

Año del calendario, de cuatro dígitos.

p. ej. 2026
If-None-Matchheaderstringopcional

ETag recibido en una respuesta anterior, tal cual (débil W/"…" en una validación, fuerte en los catálogos públicos). Si el recurso no ha cambiado, el server responde 304 Not Modified (sin cuerpo) y evita mandar los datos de nuevo.

p. ej. "9b2d4c7e1f0a3b6d8e5c2a7f4b1d9e0c3a6f8b2d"
Petición
curl -X GET 'https://api.veriko.mx/v1/public/spei-calendar/{year}'
import requests

year = 2026
response = requests.get(f"https://api.veriko.mx/v1/public/spei-calendar/{year}")
print(response.json())
const year = 2026;

fetch(`https://api.veriko.mx/v1/public/spei-calendar/${year}`)
  .then(response => response.json())
  .then(data => console.log(data));
<?php

$year = 2026;
$ch = curl_init("https://api.veriko.mx/v1/public/spei-calendar/$year");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

echo $response;
Respuesta 200SpeiCalendarResponse — Calendario de días inhábiles SPEI del año, con su fuente.
CampoTipoDescripción
dataobject

Payload principal de la respuesta. La forma varía según el endpoint (objeto, array, o envelope JSON:API con type, id, attributes).

type*string

Tipo de recurso JSON:API. Siempre spei_calendar.

p. ej. spei_calendar
id*string

Año del calendario (cuatro dígitos).

p. ej. 2026
attributes*object

Datos del calendario del año.

year*integer

Año del calendario (cuatro dígitos). Mismo valor que id.

p. ej. 2026
non_business_days*array

Días inhábiles que caen de lunes a viernes (YYYY-MM-DD), de menor a mayor. Los sábados y los domingos también son inhábiles y no se repiten aquí.

p. ej. ["2026-01-01","2026-02-02","2026-03-16","2026-04-02","2026-04-03","2026-05-01","2026-09-16","2026-11-02","2026-11-16","2026-12-25"]
source*object

Disposición oficial de la que sale el calendario.

issuer*string

Siglas de la autoridad que emite la disposición, por ejemplo CNBV.

p. ej. CNBV
published_in*string

Siglas del medio oficial en el que se publicó la disposición, por ejemplo DOF.

p. ej. DOF
published_on*string (date)

Fecha de publicación de la disposición (YYYY-MM-DD).

p. ej. 2025-12-10
title*string

Título oficial de la disposición, en español.

p. ej. Disposiciones de carácter general que señalan los días del año 2026 en que las entidades financieras sujetas a la supervisión de la Comisión Nacional Bancaria y de Valores deberán cerrar sus puertas y suspender operaciones
metaobject

Metadatos de la respuesta, incluyendo versión de la API, prefijo de ruta, identificador único de la petición y marca temporal del servidor en UTC.

versionstring

Versión de la API que procesó la petición.

p. ej. 1.47.0
api_versionstring

Versión del prefijo de ruta de la API (ej. v1).

p. ej. v1
request_idstring

Identificador único de la petición (hex).

p. ej. a1b2c3d4e5f66f5e4d3c2b1a
datetimeobject

Descriptor compañero presente en el bloque meta de cada respuesta (y en el meta del cuerpo de los webhooks salientes). Permite a los clientes afirmar el contrato de zona horaria sin releer el spec.

p. ej. {"timezone":"UTC","format":"ISO 8601"}
timezone*string

Siempre UTC: La zona canónica para cada campo datetime del cuerpo.

p. ej. UTC
format*string

Siempre ISO 8601: Sufijo Z explícito en cada datetime.

p. ej. ISO 8601
linksobject

Enlaces de paginación o relacionados, presentes solo cuando el endpoint devuelve una colección paginada.

Códigos de respuestaGET /v1/public/spei-calendar/{year}
CódigoClaseDescripciónCuerpo
2002xxCalendario de días inhábiles SPEI del año, con su fuente.SpeiCalendarResponse
3043xxNo modificado: el calendario no ha cambiado según el ETag enviado.Sin cuerpo
4044xxEl año no tiene calendario (código spei_calendar_year_not_covered). meta.covered_years lista los años disponibles.ErrorResponse
4224xxEl año no tiene cuatro dígitos (código spei_calendar_year_invalid).ErrorResponse
4294xxLímite de tasa excedidoErrorResponse
Cabeceras de respuesta200
CabeceraTipoDescripción
Cache-ControlstringTTL de caché en el cliente (1 h).
ETagstringFirma del calendario actual. Pasar como If-None-Match en peticiones posteriores.
Errores de GET /v1/public/spei-calendar/{year}
CódigoClaveEjemplo
404spei_calendar_year_not_covered

No tenemos el calendario de 2030. Los años disponibles van de 2024 a 2026.

Envelope
meta.request_id
c1d2e3f4a5b66b5a4f3e2d1c
422spei_calendar_year_invalid

El año debe tener cuatro dígitos, por ejemplo 2026.

Envelope
meta.request_id
d2e3f4a5b6c77c6b5a4f3e2d
429rate_limit_exceeded

Límite de peticiones excedido. Inténtalo de nuevo en 45 segundos.

Envelope
meta.request_id
f7a8b9c0d1e22e1d0c9b8a7f
Cabeceras de respuesta
  • Retry-After: integer — Segundos a esperar antes de reintentar. Coincide con la ventana de rate-limit del endpoint (típicamente 60s para listas, 1-5s para operaciones idempotentes en vuelo).
  • X-RateLimit-Limit: integer — Límite de solicitudes configurado para este bucket. Se emite en cada 429 y, en la API autenticada, también en las respuestas correctas, donde es el tope por clave del plan de la cuenta.
  • X-RateLimit-Remaining: integer — Solicitudes restantes en la ventana actual. Siempre 0 en el momento del 429; en una respuesta correcta de la API autenticada es lo que queda del tope por clave.
  • X-RateLimit-Reset: integer — Unix epoch absoluto (segundos) en que se reinicia la ventana. Se emite en cada 429, junto con Retry-After, y en las respuestas correctas de la API autenticada. Puede existir sobreescritura por endpoint (p. ej. `rate_limited_login`).