https://api.veriko.mx/v1/public/spei-calendar/{year}Obtener el calendario de días inhábiles SPEI de un año
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 formatoYYYY-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ámetro | Ubicación | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
year* | path | integer | obligatorio | Año del calendario, de cuatro dígitos. p. ej.2026 |
If-None-Match | header | string | opcional | ETag recibido en una respuesta anterior, tal cual (débil "9b2d4c7e1f0a3b6d8e5c2a7f4b1d9e0c3a6f8b2d" |
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;
| Campo | Tipo | Descripción |
|---|---|---|
data | object | Payload principal de la respuesta. La forma varía según el endpoint (objeto, array, o envelope JSON:API con |
type* | string | Tipo de recurso JSON:API. Siempre 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 2026 |
non_business_days* | array | Días inhábiles que caen de lunes a viernes ( ["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 |
published_in* | string | Siglas del medio oficial en el que se publicó la disposición, por ejemplo DOF |
published_on* | string (date) | Fecha de publicación de la disposición ( 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 |
meta | object | 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. |
version | string | Versión de la API que procesó la petición. p. ej.1.47.0 |
api_version | string | Versión del prefijo de ruta de la API (ej. v1 |
request_id | string | Identificador único de la petición (hex). p. ej.a1b2c3d4e5f66f5e4d3c2b1a |
datetime | object | Descriptor compañero presente en el bloque {"timezone":"UTC","format":"ISO 8601"} |
timezone* | string | Siempre UTC |
format* | string | Siempre ISO 8601 |
links | object | Enlaces de paginación o relacionados, presentes solo cuando el endpoint devuelve una colección paginada. |
| Código | Clase | Descripción | Cuerpo |
|---|---|---|---|
| 200 | 2xx | Calendario de días inhábiles SPEI del año, con su fuente. | SpeiCalendarResponse |
| 304 | 3xx | No modificado: el calendario no ha cambiado según el ETag enviado. | Sin cuerpo |
| 404 | 4xx | El año no tiene calendario (código spei_calendar_year_not_covered). meta.covered_years lista los años disponibles. | ErrorResponse |
| 422 | 4xx | El año no tiene cuatro dígitos (código spei_calendar_year_invalid). | ErrorResponse |
| 429 | 4xx | Límite de tasa excedido | ErrorResponse |
| Cabecera | Tipo | Descripción |
|---|---|---|
Cache-Control | string | TTL de caché en el cliente (1 h). |
ETag | string | Firma del calendario actual. Pasar como If-None-Match en peticiones posteriores. |
| Código | Clave | Ejemplo |
|---|---|---|
| 404 | spei_calendar_year_not_covered | No tenemos el calendario de 2030. Los años disponibles van de 2024 a 2026. Envelope
|
| 422 | spei_calendar_year_invalid | El año debe tener cuatro dígitos, por ejemplo 2026. Envelope
|
| 429 | rate_limit_exceeded | Límite de peticiones excedido. Inténtalo de nuevo en 45 segundos. Envelope
Cabeceras de respuesta
|