{
  "about": "Ferry Watch — the Ceiba–Vieques, Ceiba–Culebra and San Juan–Cataño ferries: the published season timetable joined with the service changes Puerto Rico Ferry has announced. Status vocabulary is scheduled | cancelled | retimed | notice | past; there is no public live vessel feed, so nothing here reports a boat actually departing, and the 30-day record counts POSTED changes, not observed lateness.",
  "source": "Puerto Rico Ferry (HMS Ferries / Hornblower) official vessel itineraries, published as PDFs on puertoricoferry.com under the Autoridad de Transporte Integrado (ATI). Schedules are set by the Government of Puerto Rico (DTOP).",
  "timetableReadOn": "2026-09-07",
  "license": "The operator's timetable and notices are public information; this dataset (the join, the record, the classification) is CC BY 4.0 — credit 787daily.com and link to https://787daily.com/live/ferry/.",
  "hub": "https://787daily.com/live/ferry/",
  "generatedAt": "2026-09-10T00:41:31.657Z",
  "date": "2026-09-09",
  "nowMinutes": 1241,
  "lastPoll": "2026-09-10T00:40:13.279Z",
  "routes": [
    {
      "id": "vieques",
      "name": "Ceiba – Vieques",
      "from": "Ceiba",
      "to": "Vieques",
      "crossingMinutes": 60,
      "crossing": "1 hour crossing",
      "shuttle": false,
      "note": null,
      "season": {
        "start": "2026-08-01",
        "end": "2026-11-30",
        "lastUpdate": "2026-06-03"
      },
      "state": "ok",
      "stateWord": "On schedule",
      "stateDetail": "On schedule",
      "summary": "All 16 boats as posted.",
      "counts": {
        "total": 16,
        "cancelled": 0,
        "retimed": 0,
        "notice": 0,
        "unchanged": 16
      },
      "posted": null,
      "next": {
        "out": null,
        "back": {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "9:30 PM",
          "minutes": 1290,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "pc",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo",
          "effectiveMinutes": 1290,
          "awayMinutes": 49,
          "awayLabel": "in 49 min",
          "checkInCloses": "9:20 PM",
          "arriveBy": "8:30 PM",
          "displayTime": "9:30 PM"
        }
      },
      "tomorrow": {
        "routeId": "vieques",
        "date": "2026-09-10",
        "time": "4:30 AM",
        "minutes": 270,
        "dir": "out",
        "from": "Ceiba",
        "to": "Vieques",
        "kind": "pc",
        "state": "scheduled",
        "status": "Scheduled",
        "note": null,
        "newTime": null,
        "kindLabel": "Passenger & cargo",
        "displayTime": "4:30 AM"
      },
      "sailings": [
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "4:30 AM",
          "minutes": 270,
          "dir": "out",
          "from": "Ceiba",
          "to": "Vieques",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "4:45 AM",
          "minutes": 285,
          "dir": "out",
          "from": "Ceiba",
          "to": "Vieques",
          "kind": "c",
          "note": "Tuesdays and Fridays this cargo boat leaves at 3:45 AM",
          "state": "past",
          "status": "No cancellation posted",
          "newTime": null,
          "kindLabel": "Cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "6:00 AM",
          "minutes": 360,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "7:15 AM",
          "minutes": 435,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "c",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "8:30 AM",
          "minutes": 510,
          "dir": "out",
          "from": "Ceiba",
          "to": "Vieques",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "10:00 AM",
          "minutes": 600,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "1:00 PM",
          "minutes": 780,
          "dir": "out",
          "from": "Ceiba",
          "to": "Vieques",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "3:00 PM",
          "minutes": 900,
          "dir": "out",
          "from": "Ceiba",
          "to": "Vieques",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "3:00 PM",
          "minutes": 900,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "4:30 PM",
          "minutes": 990,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "4:45 PM",
          "minutes": 1005,
          "dir": "out",
          "from": "Ceiba",
          "to": "Vieques",
          "kind": "c",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "6:30 PM",
          "minutes": 1110,
          "dir": "out",
          "from": "Ceiba",
          "to": "Vieques",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "7:15 PM",
          "minutes": 1155,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "c",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "8:00 PM",
          "minutes": 1200,
          "dir": "out",
          "from": "Ceiba",
          "to": "Vieques",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "8:30 PM",
          "minutes": 1230,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "vieques",
          "date": "2026-09-09",
          "time": "9:30 PM",
          "minutes": 1290,
          "dir": "back",
          "from": "Vieques",
          "to": "Ceiba",
          "kind": "pc",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        }
      ]
    },
    {
      "id": "culebra",
      "name": "Ceiba – Culebra",
      "from": "Ceiba",
      "to": "Culebra",
      "crossingMinutes": 30,
      "crossing": "30 minute crossing",
      "shuttle": false,
      "note": null,
      "season": {
        "start": "2026-08-01",
        "end": "2026-11-30",
        "lastUpdate": "2026-06-03"
      },
      "state": "ok",
      "stateWord": "On schedule",
      "stateDetail": "On schedule",
      "summary": "All 14 boats as posted.",
      "counts": {
        "total": 14,
        "cancelled": 0,
        "retimed": 0,
        "notice": 0,
        "unchanged": 14
      },
      "posted": null,
      "next": {
        "out": null,
        "back": {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "9:30 PM",
          "minutes": 1290,
          "dir": "back",
          "from": "Culebra",
          "to": "Ceiba",
          "kind": "pc",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo",
          "effectiveMinutes": 1290,
          "awayMinutes": 49,
          "awayLabel": "in 49 min",
          "checkInCloses": "9:20 PM",
          "arriveBy": "8:30 PM",
          "displayTime": "9:30 PM"
        }
      },
      "tomorrow": {
        "routeId": "culebra",
        "date": "2026-09-10",
        "time": "3:30 AM",
        "minutes": 210,
        "dir": "out",
        "from": "Ceiba",
        "to": "Culebra",
        "kind": "pc",
        "state": "scheduled",
        "status": "Scheduled",
        "note": null,
        "newTime": null,
        "kindLabel": "Passenger & cargo",
        "displayTime": "3:30 AM"
      },
      "sailings": [
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "3:30 AM",
          "minutes": 210,
          "dir": "out",
          "from": "Ceiba",
          "to": "Culebra",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "5:30 AM",
          "minutes": 330,
          "dir": "out",
          "from": "Ceiba",
          "to": "Culebra",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "6:00 AM",
          "minutes": 360,
          "dir": "back",
          "from": "Culebra",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "8:00 AM",
          "minutes": 480,
          "dir": "back",
          "from": "Culebra",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "9:00 AM",
          "minutes": 540,
          "dir": "out",
          "from": "Ceiba",
          "to": "Culebra",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "11:30 AM",
          "minutes": 690,
          "dir": "back",
          "from": "Culebra",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "12:30 PM",
          "minutes": 750,
          "dir": "out",
          "from": "Ceiba",
          "to": "Culebra",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "3:30 PM",
          "minutes": 930,
          "dir": "out",
          "from": "Ceiba",
          "to": "Culebra",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "3:30 PM",
          "minutes": 930,
          "dir": "back",
          "from": "Culebra",
          "to": "Ceiba",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "5:30 PM",
          "minutes": 1050,
          "dir": "out",
          "from": "Ceiba",
          "to": "Culebra",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "5:30 PM",
          "minutes": 1050,
          "dir": "back",
          "from": "Culebra",
          "to": "Ceiba",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "7:30 PM",
          "minutes": 1170,
          "dir": "out",
          "from": "Ceiba",
          "to": "Culebra",
          "kind": "pc",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "7:30 PM",
          "minutes": 1170,
          "dir": "back",
          "from": "Culebra",
          "to": "Ceiba",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "culebra",
          "date": "2026-09-09",
          "time": "9:30 PM",
          "minutes": 1290,
          "dir": "back",
          "from": "Culebra",
          "to": "Ceiba",
          "kind": "pc",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger & cargo"
        }
      ]
    },
    {
      "id": "catano",
      "name": "San Juan – Cataño",
      "from": "San Juan",
      "to": "Cataño",
      "crossingMinutes": 10,
      "crossing": "About 10 minutes",
      "shuttle": true,
      "note": "Metro shuttle; tickets are first come, first served and do not guarantee a seat. `out` is San Juan → Cataño, `back` is Cataño → San Juan.",
      "season": {
        "start": "2026-03-01",
        "end": "2026-12-31",
        "lastUpdate": "2026-03-01"
      },
      "state": "ok",
      "stateWord": "On schedule",
      "stateDetail": "On schedule",
      "summary": "All 34 boats as posted.",
      "counts": {
        "total": 34,
        "cancelled": 0,
        "retimed": 0,
        "notice": 0,
        "unchanged": 34
      },
      "posted": null,
      "next": {
        "out": {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "9:00 PM",
          "minutes": 1260,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger",
          "effectiveMinutes": 1260,
          "awayMinutes": 19,
          "awayLabel": "in 19 min",
          "checkInCloses": "8:50 PM",
          "arriveBy": "8:00 PM",
          "displayTime": "9:00 PM"
        },
        "back": {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "9:30 PM",
          "minutes": 1290,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger",
          "effectiveMinutes": 1290,
          "awayMinutes": 49,
          "awayLabel": "in 49 min",
          "checkInCloses": "9:20 PM",
          "arriveBy": "8:30 PM",
          "displayTime": "9:30 PM"
        }
      },
      "tomorrow": null,
      "sailings": [
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "5:30 AM",
          "minutes": 330,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "6:00 AM",
          "minutes": 360,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "6:30 AM",
          "minutes": 390,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "7:00 AM",
          "minutes": 420,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "7:30 AM",
          "minutes": 450,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "8:00 AM",
          "minutes": 480,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "8:30 AM",
          "minutes": 510,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "9:00 AM",
          "minutes": 540,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "9:30 AM",
          "minutes": 570,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "10:00 AM",
          "minutes": 600,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "10:30 AM",
          "minutes": 630,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "11:00 AM",
          "minutes": 660,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "11:30 AM",
          "minutes": 690,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "12:00 PM",
          "minutes": 720,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "12:30 PM",
          "minutes": 750,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "1:00 PM",
          "minutes": 780,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "1:30 PM",
          "minutes": 810,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "2:00 PM",
          "minutes": 840,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "2:30 PM",
          "minutes": 870,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "3:00 PM",
          "minutes": 900,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "3:30 PM",
          "minutes": 930,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "4:00 PM",
          "minutes": 960,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "4:30 PM",
          "minutes": 990,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "5:00 PM",
          "minutes": 1020,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "5:30 PM",
          "minutes": 1050,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "6:00 PM",
          "minutes": 1080,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "6:30 PM",
          "minutes": 1110,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "7:00 PM",
          "minutes": 1140,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "7:30 PM",
          "minutes": 1170,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "8:00 PM",
          "minutes": 1200,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "8:30 PM",
          "minutes": 1230,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "past",
          "status": "No cancellation posted",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "9:00 PM",
          "minutes": 1260,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "9:30 PM",
          "minutes": 1290,
          "dir": "back",
          "from": "Cataño",
          "to": "San Juan",
          "kind": "p",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        },
        {
          "routeId": "catano",
          "date": "2026-09-09",
          "time": "10:00 PM",
          "minutes": 1320,
          "dir": "out",
          "from": "San Juan",
          "to": "Cataño",
          "kind": "p",
          "state": "scheduled",
          "status": "Scheduled",
          "note": null,
          "newTime": null,
          "kindLabel": "Passenger"
        }
      ]
    }
  ],
  "record": {
    "days": [
      {
        "date": "2026-08-11",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-12",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-13",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-14",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-15",
        "scheduled": 26,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-16",
        "scheduled": 26,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-17",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-18",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-19",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-20",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-21",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-22",
        "scheduled": 26,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-23",
        "scheduled": 26,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-24",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-25",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-26",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-27",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-28",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-29",
        "scheduled": 26,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-30",
        "scheduled": 26,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-08-31",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-01",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-02",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-03",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-04",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-05",
        "scheduled": 26,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-06",
        "scheduled": 26,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-07",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-08",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      },
      {
        "date": "2026-09-09",
        "scheduled": 30,
        "cancelled": 0,
        "retimed": 0,
        "reasons": []
      }
    ],
    "summary": {
      "scheduled": 868,
      "cancelled": 0,
      "retimed": 0,
      "cancelRatePct": 0,
      "cleanDays": 30,
      "days": 30,
      "worst": null
    },
    "routeIds": [
      "vieques",
      "culebra"
    ]
  },
  "notices": [
    {
      "id": "1787155122535:bnesgj",
      "at": "2026-08-19T15:58:42.535Z",
      "day": "2026-08-19",
      "kind": "notice",
      "routes": [],
      "times": [],
      "newTime": null,
      "text": "¡No pierdas tu ferry! Para recibir actualizaciones del servicio en tiempo real, únete a nuestro canal de alertas. Ver actualizaciones en vivo (https://www.messenger.com/channel/puertoricoferry)",
      "textEn": "Don't miss your ferry! To receive real-time service updates, join our alert channel."
    }
  ],
  "noticeCount": 1
}