{
  "info": {
    "name": "feriados.io API",
    "description": "API de feriados y días hábiles para Latinoamérica.\n\nCubre Chile (CL), Uruguay (UY), Paraguay (PY), Colombia (CO), Perú (PE), Bolivia (BO), Ecuador (EC), Costa Rica (CR), Panamá (PA), Argentina (AR) y México (MX).\n\n**Base URL:** `https://api.feriados.io`\n\n**Autenticación:** Bearer token en el header `Authorization`. Una API key es requerida para todos los planes, incluyendo el plan Free. Obtén la tuya gratis en feriados.io/register — sin tarjeta.\n\n**Docs:** https://feriados.io/docs",
    "_postman_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "baseUrl", "value": "https://api.feriados.io", "type": "string" },
    { "key": "apiKey",  "value": "frd_tu_api_key",          "type": "string" },
    { "key": "country", "value": "CL",                       "type": "string" },
    { "key": "year",    "value": "2026",                      "type": "string" },
    { "key": "month",   "value": "4",                         "type": "string" },
    { "key": "today",   "value": "",                          "type": "string" },
    { "key": "slug",    "value": "mi-calendario",             "type": "string" }
  ],
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Establece 'today' automáticamente en cada request",
          "pm.collectionVariables.set('today', new Date().toISOString().slice(0, 10));"
        ]
      }
    }
  ],
  "item": [
    {
      "name": "Holidays",
      "description": "Consulta de feriados por país y año.",
      "item": [
        {
          "name": "All holidays of the year",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — incluido el plan Free" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/holidays/{{year}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "holidays", "{{year}}"]
            },
            "description": "Retorna todos los feriados del país indicado para el año indicado.\n\nCambiá `country` por CL, UY, PY, CO, PE, BO, EC, CR, PA, AR o MX y `year` por el año deseado.\n\nCada feriado incluye los campos: `date`, `name`, `type`, `irrenunciable`, `scope`, `regions`, `communes`, `law` y opcionalmente `comment`."
          },
          "response": [
            {
              "name": "Chile 2026 — Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"date\": \"2026-01-01\",\n      \"name\": \"Año Nuevo\",\n      \"type\": \"national\",\n      \"irrenunciable\": true,\n      \"scope\": \"national\",\n      \"regions\": [],\n      \"communes\": [],\n      \"law\": \"Ley 2.977\"\n    },\n    {\n      \"date\": \"2026-04-03\",\n      \"name\": \"Viernes Santo\",\n      \"type\": \"national\",\n      \"irrenunciable\": false,\n      \"scope\": \"national\",\n      \"regions\": [],\n      \"communes\": [],\n      \"law\": \"Ley 2.977\"\n    }\n  ],\n  \"meta\": { \"country\": \"CL\", \"year\": 2026, \"total\": 16 }\n}"
            },
            {
              "name": "País no soportado — 404",
              "status": "Not Found",
              "code": 404,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"COUNTRY_NOT_SUPPORTED\",\n    \"message\": \"Country 'XX' is not yet supported. See /v1/countries for the full list.\",\n    \"status\": 404\n  }\n}"
            }
          ]
        },
        {
          "name": "Holidays by month",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — incluido el plan Free" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/holidays/{{year}}/{{month}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "holidays", "{{year}}", "{{month}}"]
            },
            "description": "Retorna los feriados de un mes específico.\n\nEl parámetro `month` es un número entre 1 y 12."
          },
          "response": [
            {
              "name": "Chile abril 2026 — Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"date\": \"2026-04-03\",\n      \"name\": \"Viernes Santo\",\n      \"type\": \"national\",\n      \"irrenunciable\": false,\n      \"scope\": \"national\",\n      \"regions\": [],\n      \"communes\": [],\n      \"law\": \"Ley 2.977\"\n    },\n    {\n      \"date\": \"2026-04-04\",\n      \"name\": \"Sábado Santo\",\n      \"type\": \"national\",\n      \"irrenunciable\": false,\n      \"scope\": \"national\",\n      \"regions\": [],\n      \"communes\": [],\n      \"law\": \"Ley 19.668\"\n    }\n  ],\n  \"meta\": { \"country\": \"CL\", \"year\": 2026, \"month\": 4, \"total\": 2 }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Business Days",
      "description": "Endpoints para validar días hábiles y encontrar el próximo feriado. Disponibles en plan Free.",
      "item": [
        {
          "name": "Is business day?",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — incluido el plan Free" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/is-business-day?date={{today}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "is-business-day"],
              "query": [
                { "key": "date",   "value": "{{today}}", "description": "Fecha en formato YYYY-MM-DD. Se setea automáticamente al día de hoy." },
                { "key": "region", "value": "",           "description": "Opcional. Solo aplica a CL. Ej: CL-AP, CL-RM", "disabled": true }
              ]
            },
            "description": "Indica si una fecha es día hábil considerando fines de semana y feriados del país.\n\nEl parámetro `region` es opcional y solo aplica a Chile para feriados regionales (ISO 3166-2, ej: `CL-RM`).\n\nLa variable `{{today}}` se actualiza automáticamente con la fecha de hoy via pre-request script."
          },
          "response": [
            {
              "name": "Día hábil",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"date\": \"2026-04-06\", \"is_business_day\": true, \"day_of_week\": \"Monday\", \"region\": null },\n  \"meta\": { \"country\": \"CL\", \"total\": 1 }\n}"
            },
            {
              "name": "Feriado",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"date\": \"2026-04-03\", \"is_business_day\": false, \"day_of_week\": \"Friday\", \"region\": null },\n  \"meta\": { \"country\": \"CL\", \"total\": 1 }\n}"
            },
            {
              "name": "Sin API key — 401",
              "status": "Unauthorized",
              "code": 401,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"API_KEY_REQUIRED\",\n    \"message\": \"An API key is required. Get your free key at feriados.io/register.\",\n    \"status\": 401\n  }\n}"
            }
          ]
        },
        {
          "name": "Is business day? (with region — CL only)",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — incluido el plan Free" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/CL/is-business-day?date={{today}}&region=CL-RM",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "CL", "is-business-day"],
              "query": [
                { "key": "date",   "value": "{{today}}" },
                { "key": "region", "value": "CL-RM", "description": "Región Metropolitana. Cambiá por cualquier código ISO 3166-2 de Chile." }
              ]
            },
            "description": "Valida considerando también feriados regionales de Chile.\n\nCódigos de región: CL-AP, CL-TA, CL-AN, CL-AT, CL-CO, CL-VS, CL-RM, CL-LI, CL-ML, CL-BI, CL-AR, CL-LR, CL-LL, CL-AI, CL-MA."
          },
          "response": []
        },
        {
          "name": "Is business day? — batch",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — incluido el plan Free" },
              { "key": "Content-Type",  "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"dates\": [\"2026-09-18\", \"2026-09-19\", \"2026-09-21\"]\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/is-business-day/batch",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "is-business-day", "batch"]
            },
            "description": "Verifica si múltiples fechas son días hábiles en una sola llamada.\n\nCada fecha consume 1 unidad de quota. Límites: 31 fechas en Free · 366 fechas en Starter, Team y Business.\n\nEl campo `calendar` es opcional — agrega el slug de un calendario personalizado para aplicarlo como overlay."
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    { \"date\": \"2026-09-18\", \"is_business_day\": false, \"day_of_week\": \"Friday\" },\n    { \"date\": \"2026-09-19\", \"is_business_day\": false, \"day_of_week\": \"Saturday\" },\n    { \"date\": \"2026-09-21\", \"is_business_day\": true,  \"day_of_week\": \"Monday\" }\n  ],\n  \"meta\": {\n    \"country\": \"CL\",\n    \"total\": 3,\n    \"business_days\": 1,\n    \"non_business_days\": 2,\n    \"requests_consumed\": 3\n  }\n}"
            },
            {
              "name": "Límite excedido — 422",
              "status": "Unprocessable Entity",
              "code": 422,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BATCH_LIMIT_EXCEEDED\",\n    \"message\": \"Free plan allows up to 31 dates per batch request.\",\n    \"status\": 422\n  }\n}"
            }
          ]
        },
        {
          "name": "Next holiday",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — incluido el plan Free" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/next-holiday?from={{today}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "next-holiday"],
              "query": [
                { "key": "from", "value": "{{today}}", "description": "Fecha de inicio. Default: hoy." }
              ]
            },
            "description": "Retorna el próximo feriado a partir de la fecha indicada.\n\nSi no se indica `from`, usa el día de hoy.\n\nLa respuesta incluye todos los campos del feriado más `days_until` (días desde la fecha `from` hasta el feriado)."
          },
          "response": [
            {
              "name": "Chile — Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"date\": \"2026-04-03\",\n    \"name\": \"Viernes Santo\",\n    \"type\": \"national\",\n    \"irrenunciable\": false,\n    \"scope\": \"national\",\n    \"regions\": [],\n    \"communes\": [],\n    \"law\": \"Ley 2.977\",\n    \"days_until\": 13\n  },\n  \"meta\": { \"country\": \"CL\", \"from\": \"2026-03-21\", \"total\": 1 }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Business Logic — Starter+",
      "description": "Endpoints de lógica operativa. Disponibles desde el plan Starter.\n\nPermiten sumar/restar días hábiles, contar días hábiles entre fechas y obtener el último día hábil del mes — considerando feriados oficiales del país.",
      "item": [
        {
          "name": "Add business days",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — plan Starter, Team o Business" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/business-days/add?date={{today}}&days=5",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "business-days", "add"],
              "query": [
                { "key": "date", "value": "{{today}}", "description": "Fecha de inicio (YYYY-MM-DD)." },
                { "key": "days", "value": "5",          "description": "Número de días hábiles a sumar (1–365)." }
              ]
            },
            "description": "Suma N días hábiles a una fecha, considerando fines de semana y feriados oficiales del país.\n\nÚtil para calcular fechas de entrega, vencimientos de plazos y SLAs.\n\n⚠️ Requiere plan Starter o superior. El plan Free retorna 403 PLAN_UPGRADE_REQUIRED."
          },
          "response": [
            {
              "name": "Chile — saltando Fiestas Patrias",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"result_date\": \"2026-09-25\" },\n  \"meta\": { \"country\": \"CL\", \"start_date\": \"2026-09-17\", \"business_days_added\": 5 }\n}"
            },
            {
              "name": "Plan Free — 403",
              "status": "Forbidden",
              "code": 403,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"PLAN_UPGRADE_REQUIRED\",\n    \"message\": \"Business logic endpoints require a Starter plan or higher. See feriados.io/pricing for details.\",\n    \"status\": 403\n  }\n}"
            }
          ]
        },
        {
          "name": "Subtract business days",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — plan Starter, Team o Business" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/business-days/subtract?date={{today}}&days=5",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "business-days", "subtract"],
              "query": [
                { "key": "date", "value": "{{today}}", "description": "Fecha de referencia (YYYY-MM-DD)." },
                { "key": "days", "value": "5",          "description": "Número de días hábiles a restar (1–365)." }
              ]
            },
            "description": "Resta N días hábiles a una fecha, considerando fines de semana y feriados.\n\nÚtil para calcular fechas límite hacia atrás desde un vencimiento.\n\n⚠️ Requiere plan Starter o superior."
          },
          "response": [
            {
              "name": "Colombia — Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"result_date\": \"2026-09-10\" },\n  \"meta\": { \"country\": \"CO\", \"start_date\": \"2026-09-17\", \"business_days_subtracted\": 5 }\n}"
            }
          ]
        },
        {
          "name": "Business days between two dates",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — plan Starter, Team o Business" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/business-days/between?from=2026-01-01&to=2026-01-31",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "business-days", "between"],
              "query": [
                { "key": "from", "value": "2026-01-01", "description": "Fecha de inicio (YYYY-MM-DD, inclusive)." },
                { "key": "to",   "value": "2026-01-31", "description": "Fecha de fin (YYYY-MM-DD, inclusive)." }
              ]
            },
            "description": "Cuenta los días hábiles entre dos fechas (ambas inclusive), descontando fines de semana y feriados.\n\nÚtil para medir SLAs, calcular días trabajados en un período o verificar plazos contractuales.\n\n⚠️ Requiere plan Starter o superior."
          },
          "response": [
            {
              "name": "Colombia enero 2026 — Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"business_days\": 20 },\n  \"meta\": { \"country\": \"CO\", \"from\": \"2026-01-01\", \"to\": \"2026-01-31\" }\n}"
            }
          ]
        },
        {
          "name": "Last business day of the month",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — plan Starter, Team o Business" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/last-business-day?date={{today}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "last-business-day"],
              "query": [
                { "key": "date", "value": "{{today}}", "description": "Cualquier fecha dentro del mes objetivo (YYYY-MM-DD)." }
              ]
            },
            "description": "Retorna el último día hábil del mes al que pertenece la fecha indicada.\n\nÚtil para programar cortes de caja, liquidaciones de nómina y cierres contables.\n\n⚠️ Requiere plan Starter o superior."
          },
          "response": [
            {
              "name": "Perú enero 2026 — Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"last_business_day\": \"2026-01-30\" },\n  \"meta\": { \"country\": \"PE\", \"month\": \"2026-01\" }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Calendars iCal",
      "description": "Descarga de calendarios en formato iCalendar (.ics). Compatible con Google Calendar, Apple Calendar, Outlook y Notion.",
      "item": [
        {
          "name": "Download calendar (.ics) — Free",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — incluido el plan Free" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/calendar/{{year}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "calendar", "{{year}}"]
            },
            "description": "Retorna un archivo `.ics` con todos los feriados del año.\n\nDisponible para todos los planes. Content-Type: `text/calendar; charset=utf-8`. Para importar en Google Calendar u Outlook, copiá la URL completa y agregala como calendario externo."
          },
          "response": []
        },
        {
          "name": "Live URL — current year auto (Team / Business)",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — plan Starter, Team o Business" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/calendar",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "calendar"]
            },
            "description": "URL permanente que siempre devuelve el año en curso.\n\nIdeal para suscribir en Google Calendar / Apple Calendar / Outlook una sola vez. La misma URL sirve para 2026, 2027, 2028...\n\n⚠️ Requiere plan Starter o superior. El plan Free retorna 403 PLAN_UPGRADE_REQUIRED."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Custom Calendars — Starter / Team / Business",
      "description": "Calendarios personalizados para agregar días no laborables propios de tu empresa (cierres de planta, vacaciones colectivas, ferias anuales).\n\nFlujo típico:\n1. Crear el calendario (POST /calendars)\n2. Agregar fechas (POST /calendars/:slug/dates)\n3. Usar el parámetro ?calendar=slug en cualquier endpoint de días hábiles\n\nLímites por plan:\n- Free: 1 calendario / 10 fechas futuras\n- Starter: 3 calendarios / ilimitadas\n- Team: 10 calendarios / ilimitadas\n- Business: ilimitados / ilimitadas\n\n⚠️ Requiere plan Starter o superior para más de 1 calendario.",
      "item": [
        {
          "name": "Create calendar",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" },
              { "key": "Content-Type",  "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Planta Norte\",\n  \"slug\": \"{{slug}}\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/calendars",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "calendars"]
            },
            "description": "Crea un nuevo calendario personalizado asociado a tu API key.\n\nEl `slug` debe ser único para tu cuenta y solo puede contener letras minúsculas, números y guiones.\n\nCambia la variable de colección `slug` para personalizar el identificador."
          },
          "response": [
            {
              "name": "Éxito — 201",
              "status": "Created",
              "code": 201,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"01HZ4XYZABC123\",\n    \"name\": \"Planta Norte\",\n    \"slug\": \"mi-calendario\",\n    \"created_at\": \"2026-04-04T12:00:00.000Z\"\n  }\n}"
            },
            {
              "name": "Slug ya existe — 409",
              "status": "Conflict",
              "code": 409,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SLUG_ALREADY_EXISTS\",\n    \"message\": \"A calendar with slug 'mi-calendario' already exists.\",\n    \"status\": 409\n  }\n}"
            },
            {
              "name": "Límite de calendarios alcanzado — 403",
              "status": "Forbidden",
              "code": 403,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"CALENDAR_LIMIT_REACHED\",\n    \"message\": \"Your plan allows a maximum of 1 calendar(s). Upgrade to create more.\",\n    \"status\": 403\n  }\n}"
            }
          ]
        },
        {
          "name": "List calendars",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/calendars",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "calendars"]
            },
            "description": "Lista todos los calendarios asociados a tu API key, con el conteo de fechas registradas en cada uno."
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    { \"id\": \"01HZ4XYZABC123\", \"name\": \"Planta Norte\", \"slug\": \"mi-calendario\", \"date_count\": 3 }\n  ],\n  \"meta\": { \"total\": 1 }\n}"
            }
          ]
        },
        {
          "name": "Get calendar",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/calendars/{{slug}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "calendars", "{{slug}}"]
            },
            "description": "Retorna los metadatos de un calendario específico junto con el conteo de fechas registradas."
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"id\": \"01HZ4XYZABC123\", \"name\": \"Planta Norte\", \"slug\": \"mi-calendario\", \"date_count\": 3 }\n}"
            },
            {
              "name": "No encontrado — 404",
              "status": "Not Found",
              "code": 404,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"CALENDAR_NOT_FOUND\",\n    \"message\": \"Calendar 'mi-calendario' not found.\",\n    \"status\": 404\n  }\n}"
            }
          ]
        },
        {
          "name": "Delete calendar",
          "request": {
            "method": "DELETE",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/calendars/{{slug}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "calendars", "{{slug}}"]
            },
            "description": "Elimina el calendario y todas sus fechas.\n\n⚠️ Esta acción es irreversible."
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{ \"success\": true }"
            }
          ]
        },
        {
          "name": "Add dates",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" },
              { "key": "Content-Type",  "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"dates\": [\n    { \"date\": \"2026-07-15\", \"name\": \"Mantención anual\" },\n    { \"date\": \"2026-12-26\", \"name\": \"Cierre de año\" },\n    { \"date\": \"2026-12-27\", \"name\": \"Cierre de año\" }\n  ]\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/calendars/{{slug}}/dates",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "calendars", "{{slug}}", "dates"]
            },
            "description": "Agrega una o más fechas no laborables al calendario.\n\n- Máximo 100 fechas por request\n- Los duplicados se ignoran (idempotente)\n- El plan Free solo permite fechas presentes o futuras, con un máximo de 10 fechas futuras activas\n- `name` es opcional"
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"added\": 3, \"skipped\": 0 }\n}"
            },
            {
              "name": "Límite de fechas futuras — 403",
              "status": "Forbidden",
              "code": 403,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"DATE_LIMIT_REACHED\",\n    \"message\": \"Your plan allows a maximum of 10 future date(s) per calendar.\",\n    \"status\": 403\n  }\n}"
            }
          ]
        },
        {
          "name": "List dates",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/calendars/{{slug}}/dates",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "calendars", "{{slug}}", "dates"]
            },
            "description": "Lista todas las fechas registradas en el calendario, ordenadas por fecha ascendente."
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    { \"date\": \"2026-07-15\", \"name\": \"Mantención anual\" },\n    { \"date\": \"2026-12-26\", \"name\": \"Cierre de año\" },\n    { \"date\": \"2026-12-27\", \"name\": \"Cierre de año\" }\n  ],\n  \"meta\": { \"total\": 3 }\n}"
            }
          ]
        },
        {
          "name": "Delete date",
          "request": {
            "method": "DELETE",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/calendars/{{slug}}/dates/2026-07-15",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "calendars", "{{slug}}", "dates", "2026-07-15"]
            },
            "description": "Elimina una fecha específica del calendario.\n\nReemplaza `2026-07-15` en la URL con la fecha a eliminar (formato YYYY-MM-DD)."
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{ \"success\": true }"
            }
          ]
        },
        {
          "name": "Is business day? (with custom calendar)",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/{{country}}/is-business-day?date=2026-07-15&calendar={{slug}}",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "{{country}}", "is-business-day"],
              "query": [
                { "key": "date",     "value": "2026-07-15",  "description": "Fecha a verificar (YYYY-MM-DD)." },
                { "key": "calendar", "value": "{{slug}}",    "description": "Slug del calendario personalizado a aplicar como overlay." }
              ]
            },
            "description": "Verifica si una fecha es hábil considerando tanto los feriados oficiales del país como las fechas del calendario personalizado.\n\nEl parámetro `?calendar=slug` también funciona en:\n- /business-days/add\n- /business-days/subtract\n- /business-days/between\n- /last-business-day\n\nEn este ejemplo, 2026-07-15 es miércoles (día hábil en Chile), pero si está registrado en el calendario como cierre de planta, la respuesta será `is_business_day: false`."
          },
          "response": [
            {
              "name": "Fecha en el calendario — no hábil",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": { \"date\": \"2026-07-15\", \"is_business_day\": false, \"day_of_week\": \"Wednesday\", \"region\": null },\n  \"meta\": { \"country\": \"CL\", \"calendar\": \"mi-calendario\", \"total\": 1 }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Utilities",
      "description": "Endpoints auxiliares.",
      "item": [
        {
          "name": "Supported countries",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}", "description": "Requerido — incluido el plan Free" }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/countries",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "countries"]
            },
            "description": "Retorna la lista de países soportados con sus endpoints disponibles y cobertura de años."
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    { \"code\": \"CL\", \"name\": \"Chile\", \"status\": \"available\" },\n    { \"code\": \"UY\", \"name\": \"Uruguay\", \"status\": \"available\" },\n    { \"code\": \"PY\", \"name\": \"Paraguay\", \"status\": \"available\" },\n    { \"code\": \"CO\", \"name\": \"Colombia\", \"status\": \"available\" },\n    { \"code\": \"PE\", \"name\": \"Perú\", \"status\": \"available\" },\n    { \"code\": \"BO\", \"name\": \"Bolivia\", \"status\": \"available\" },\n    { \"code\": \"EC\", \"name\": \"Ecuador\", \"status\": \"available\" },\n    { \"code\": \"CR\", \"name\": \"Costa Rica\", \"status\": \"available\" },\n    { \"code\": \"PA\", \"name\": \"Panamá\", \"status\": \"available\" },\n    { \"code\": \"AR\", \"name\": \"Argentina\", \"status\": \"available\" },\n    { \"code\": \"MX\", \"name\": \"México\", \"status\": \"available\" }\n  ],\n  \"meta\": { \"total\": 11, \"available\": 11 }\n}"
            }
          ]
        },
        {
          "name": "Revoke API key",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "Bearer {{apiKey}}" },
              { "key": "Content-Type",  "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/keys/revoke",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "keys", "revoke"]
            },
            "description": "Revoca la API key usada en el header Authorization.\n\n⚠️ Esta acción es irreversible. Necesitarás generar una nueva key desde el dashboard."
          },
          "response": [
            {
              "name": "Éxito",
              "status": "OK",
              "code": 200,
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"success\": true,\n  \"message\": \"API key revoked successfully.\"\n}"
            }
          ]
        }
      ]
    }
  ]
}
