> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://catena.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://catena.ferndocs.com/_mcp/server.

# Hos availability added

POST 

Emitted when a new HOS availability is added to our database.

e.g. The record fetched from the TSP is new and generated a new record in our database.

Reference: https://catena.ferndocs.com/api-reference/notifications/webhook-events/hos-availability-added

## Request

### Payload

- `version` (string, required) — Version of the schema used for this event
- `data` (list of BaseHosAvailability, required) — The event payload, with one or more records of the specified type
- `webhook_id` (string, required) — Unique identifier for the webhook subscription that triggered this delivery
- `event_name` (string, optional, default: hos_availability.added)
- `timestamp` (datetime, optional, nullable) — ISO 8601 timestamp when the event occurred
- `id` (string, optional, nullable) — Unique identifier for this specific event instance (UUID v7 for time-ordered sorting)
- `delivery_attempt` (integer, optional, default: 0) — The number of times the event has been attempted to be delivered

## Types

### BaseHosAvailability

Base Hos availability event.

- `id` (string, required) — Internal unique identifier for the telematics event record (Catena PK).
- `fleet_id` (string, required) — The Catena fleet this record belongs to (multi-tenant scope).
- `fleet_ref` (string, required, nullable) — The reference of the fleet in the partner system
- `source_name` (enum, required) — The underlying telematics platform that provided this data (e.g., `samsara`, `motive`, `hos247`). Note: Some platforms like `hos247` offer white-labeling, so multiple TSPs may share the same source_name — use `tsp_id` or `tsp_slug` to identify the specific ELD provider.
  - Allowed values: `ada`, `ai_eld`, `air_eld`, `alfa_eld`, `alpha_eld`, `als`, `anytrek_pro`, `anytrek_classic`, `apex_eld`, `apollo`, `apollocloud`, `ascend`, `att`, `awaregps`, `azuga`, `bigroad`, `bluehorse_eld`, `blueinktech`, `bouncie`, `budgetgps`, `catena_simulator`, `captain_eld`, `carrier_lynx`, `chronos`, `club_eld`, `cogo_eld`, `counting_trucks_eld`, `cyntrx`, `digital_eld`, `dragon_eld`, `dreyev`, `drive_hos`, `drive_hos_v2`, `driver_tech`, `dsg_elogs`, `dynamic_eld`, `eighteighteight_eld`, `eld_88`, `eld_books`, `eld_mandate`, `eld_mandate_prime`, `eroad`, `eva_eld`, `evo_eld`, `expressway_eld`, `extreme_eld`, `ezlogz`, `ez_lynk`, `factor_eld`, `firstgate`, `fleetcomplete`, `fleetcompletehub`, `fleethunt`, `fleetpulse`, `fleetsharp`, `fleetup`, `fm`, `fordpro`, `forwardthinking`, `forza_eld`, `geotab`, `gpsinsight`, `gpstab`, `gpstrackit`, `grand_eld`, `greenlight`, `groundhog`, `hcss`, `hos247`, `hutch`, `intellishift`, `ironman_eld`, `isaac`, `jjkeller`, `kinexaiot`, `knight_eld`, `konexial`, `lioneight`, `linxup`, `loop_eld`, `lucid_eld`, `luna_eld`, `lytx`, `lytxv3`, `mapon`, `matrack`, `maven`, `mdm_eld`, `michelin_connected_fleet`, `mobilefleet`, `moonlight_eld`, `motion_eld`, `motive`, `my_drivebook`, `my_logs_eld`, `nero`, `netradyne`, `new_eld_world`, `nextgen_eld`, `nextraq`, `nexus_eld`, `omnitracs`, `1sew_eld`, `onestep`, `ontime_eld`, `optima`, `optimus_tracker`, `orbcomm`, `orient_eld`, `ozod_eld`, `panda_eld`, `patriot_eld`, `payd`, `peak_eld`, `pedigree`, `peoplenet`, `phillips_connect`, `phoenix`, `pop_eld`, `prologs`, `proride_eld`, `qualitylogs_eld`, `randmcnally`, `rastrac`, `raven`, `redfox`, `regulog_eld`, `ridehub`, `rigbot`, `roadeazy`, `roadready`, `rock_eld`, `rollingtrans`, `routemate`, `route_one_eld`, `royal_eld`, `safelane`, `samsara`, `selectivedrive`, `simba_eld`, `skybitz`, `smart_elds`, `sparkle_eld`, `spireon`, `sts_eld`, `sun_eld`, `surfsight`, `swift`, `switchboard`, `synergy_eld`, `teletracnavman`, `teletracnavman_director`, `telogis`, `tenna`, `teslemetry`, `thermo_king`, `think`, `tive`, `topcompliance_eld`, `traccar`, `trackease_eld`, `trackpro`, `traclog`, `transflo`, `trimac`, `trimble`, `truckford`, `truckspy`, `truckx`, `trueroad_eld`, `tt`, `txt_eld`, `us_fast_eld`, `verizon_connect`, `vista_eld`, `vistracks`, `vlog_eld`, `vulcansols_eld`, `wialon`, `webfleet`, `wizefleet_eld`, `xplore_eld`, `zigzag_eld`, `zms_eld`, `zonar`, `zubie`
- `connection_id` (string, required) — The specific fleet↔TSP connection through which this record was sourced.
- `source_id` (string, required) — The ID of the record in the TSP or a deterministic ID/Hash generated from a composite unique key
- `created_at` (datetime, required) — Immutable: first time this record was ingested into our system.
- `updated_at` (datetime, required) — Last time we modified this record in our system.
- `occurred_at` (datetime, required) — When the underlying event/observation occurred, as reported by the TSP, or the moment it was ingested by us if not available.
- `tsp_id` (string, optional, nullable) — Unique identifier of the TSP at Catena Telematics from which this record was ingested.
- `tsp_slug` (string, optional, nullable) — Human readable slug of the TSP at Catena Telematics from which this record was ingested.
- `deleted_at` (datetime, optional, nullable) — Logical delete marker: when the TSP stopped reporting this record.
- `execution_id` (string, optional, nullable) — Identifier for the ingestion execution that processed this record (for tracing).
- `schedule_id` (string, optional, nullable) — Identifier for the ingestion schedule that triggered this record's processing (for tracing).
- `extras` (map from string to any, optional, nullable) — Additional data available in the TSP (e.g., we may have `external_id`, `provider_resource_id`, etc. — this field captures all those extra attributes in a flexible way).
- `driver_id` (string, optional, nullable) — Internal driver identifier (Catena FK)
- `vehicle_id` (string, optional, nullable) — Internal vehicle identifier (Catena FK), if mapped
- `hos_ruleset_code` (enum, optional, nullable) — Normalized HOS ruleset code
  - Allowed values: `US_INT_PROP_60_7`, `US_INT_PROP_60_7_BIG`, `US_INT_PROP_60_7_BIG_SLP`, `US_INT_PROP_60_7_NORST`, `US_INT_PROP_60_7_NORST_SLP`, `US_INT_PROP_60_7_NOBRK`, `US_INT_PROP_60_7_NOBRK_BIG`, `US_INT_PROP_60_7_NOBRK_BIG_SLP`, `US_INT_PROP_60_7_NOBRK_SLP`, `US_INT_PROP_60_7_SH`, `US_INT_PROP_60_7_SH_NORST`, `US_INT_PROP_70_8`, `US_INT_PROP_70_8_BIG`, `US_INT_PROP_70_8_BIG_SLP`, `US_INT_PROP_70_8_NORST`, `US_INT_PROP_70_8_NORST_SLP`, `US_INT_PROP_70_8_NOBRK`, `US_INT_PROP_70_8_NOBRK_BIG`, `US_INT_PROP_70_8_NOBRK_BIG_SLP`, `US_INT_PROP_70_8_NOBRK_SLP`, `US_INT_PROP_70_8_SH`, `US_INT_PROP_70_8_SH_14H`, `US_INT_PROP_70_8_SH_NORST`, `US_INT_PROP_SH_14H`, `US_INT_PAX_60_7`, `US_INT_PAX_60_7_SH`, `US_INT_PAX_70_8`, `US_INT_PAX_70_8_SH`, `US_INT_SALESP`, `US_INT_SALESP_NCDL_SH`, `US_INT_OILTR_60_7`, `US_INT_OILTR_70_8`, `US_INT_OILWL_60_7`, `US_INT_OILWL_70_8`, `US_INT_RAIL_EX`, `US_INT_PROP_SLPVAR`, `US_INT_PROP_60_7_SLPVAR`, `US_INT_PROP_70_8_SLPVAR`, `US_INT_CARRIER_EX`, `US_INT_NOHOS_7`, `US_INT_NOHOS_8`, `US_TX_INTRA_PROP_70_7`, `US_TX_INTRA_SH_70_7`, `US_TX_INTRA_SH_70_8`, `US_CA_INTRA_PROP_80_8`, `US_CA_INTRA_PAX_80_8`, `US_CA_INTRA_FARM_112_8`, `US_CA_INTRA_FARM_BRK`, `US_CA_INTRA_FLAM_80_8`, `US_CA_INTRA_FLAM_BRK`, `US_CA_INTRA_SCH_80_8`, `US_CA_INTRA_SCH_BRK`, `US_AK_INTRA_PROP_70_7`, `US_AK_INTRA_PROP_80_8`, `US_AK_INTRA_PAX_70_7`, `US_AK_INTRA_PAX_80_8`, `US_AK_INTRA_PROP_70_7_SLP`, `US_AK_INTRA_PROP_80_8_SLP`, `US_FL_INTRA_PROP_70_7`, `US_FL_INTRA_PROP_80_8`, `US_FL_INTRA_SH_70_7`, `US_FL_INTRA_SH_80_8`, `US_OR_INTRA_PROP_70_7`, `US_OR_INTRA_PROP_80_8`, `US_MD_INTRA_SH_70_7`, `US_MD_INTRA_SH_80_8`, `US_NE_INTRA_PROP_70_7`, `US_NE_INTRA_PROP_80_8`, `US_NC_INTRA_PROP_70_7`, `US_NC_INTRA_PROP_80_8`, `US_ND_INTRA_PROP_70_7`, `US_ND_INTRA_SH_70_7`, `US_SC_INTRA_PROP_70_7`, `US_SC_INTRA_PROP_80_8`, `US_WA_INTRA_PROP_70_7`, `US_WA_INTRA_PROP_80_8`, `US_WI_INTRA_PROP_70_7`, `US_WI_INTRA_PROP_80_8`, `CA_FED_C1_70_7`, `CA_FED_C2_120_14`, `CA_FED_C1_TEAM`, `CA_FED_C2_TEAM`, `CA_FED_NOHOS`, `CA_N60_C1_80_7`, `CA_N60_C2_120_14`, `CA_N60_C1_TEAM`, `CA_N60_C2_TEAM`, `CA_N60_NOHOS`, `CA_N60_OIL`, `CA_N60_OIL_TEAM`, `CA_AB_PROV_PROP_70_7`, `CA_SK_PROV_PROP_70_7`, `CA_SK_PROV_FERT_EX`, `CA_BC_PROV_LOG`, `CA_S60_OIL`, `CA_OIL_TEAM`, `US_INT_OILTR_60_7_BIG`, `US_INT_OILTR_60_7_BIG_SLP`, `US_INT_OILTR_60_7_SLP`, `US_INT_OILTR_70_8_BIG`, `US_INT_OILTR_70_8_BIG_SLP`, `US_INT_OILTR_70_8_SLP`, `US_CA_INTRA_OILTR_80_8`, `US_CA_INTRA_OILTR_PROP`, `US_INT_OILTR_60_7_NOBRK`, `US_INT_OILTR_60_7_NOBRK_BIG`, `US_INT_OILTR_60_7_NOBRK_BIG_SLP`, `US_INT_OILTR_60_7_NOBRK_SLP`, `US_INT_OILTR_70_8_NOBRK`, `US_INT_OILTR_70_8_NOBRK_BIG`, `US_INT_OILTR_70_8_NOBRK_BIG_SLP`, `US_INT_OILTR_70_8_NOBRK_SLP`, `US_INT_OILTR_SH_12H`, `US_INT_OILTR_SH_14H`, `US_INT_OILTR_70_8_SH_12H`, `US_INT_OILTR_70_8_SH_14H`, `US_TX_INTRA_OILTR_70_7`, `US_INT_OILWL_60_7_BIG`, `US_INT_OILWL_60_7_BIG_SLP`, `US_INT_OILWL_60_7_SLP`, `US_INT_OILWL_70_8_BIG`, `US_INT_OILWL_70_8_BIG_SLP`, `US_INT_OILWL_70_8_SLP`, `US_CA_INTRA_OILWL_80_8`, `US_CA_INTRA_OILWL_PROP`, `US_INT_OILWL_60_7_NOBRK`, `US_INT_OILWL_60_7_NOBRK_BIG`, `US_INT_OILWL_60_7_NOBRK_BIG_SLP`, `US_INT_OILWL_60_7_NOBRK_SLP`, `US_INT_OILWL_70_8_NOBRK`, `US_INT_OILWL_70_8_NOBRK_BIG`, `US_INT_OILWL_70_8_NOBRK_BIG_SLP`, `US_INT_OILWL_70_8_NOBRK_SLP`, `US_TX_INTRA_OILWL_70_7`
- `duty_status_code` (enum, optional, nullable) — Normalized duty status: OFF (off-duty), SB (sleeper berth), D (driving), ON (on-duty), YM (yard move), PC (personal conveyance)
  - Allowed values: `OFF`, `SB`, `D`, `ON`, `PC`, `YM`, `INT`, `WT`
- `cycle_started_at` (datetime, optional, nullable) — Start of the current cycle window
- `cycle_ends_at` (datetime, optional, nullable) — End of the current cycle window
- `available_drive_seconds` (integer, optional, nullable) — Integer seconds of driving time remaining in the current shift
- `available_shift_seconds` (integer, optional, nullable) — Integer seconds of on-duty/workday time remaining in the current shift
- `available_cycle_seconds` (integer, optional, nullable) — Integer seconds remaining in the ruleset cycle window
- `available_tomorrow_seconds` (integer, optional, nullable) — Forecasted available integer seconds for the following day
- `available_day2_seconds` (integer, optional, nullable) — Forecasted available integer seconds two days out
- `available_day3_seconds` (integer, optional, nullable) — Forecasted available integer seconds three days out
- `forecast_horizon_days` (integer, optional, nullable) — Maximum forecast horizon included in this snapshot (days)
- `time_until_break_seconds` (integer, optional, nullable) — Integer seconds until the next required break begins (e.g., 900 = 15 minutes). Use 0 if due now; null if not applicable or unknown.
- `rest_remaining_seconds` (integer, optional, nullable) — Integer seconds remaining in the currently required rest window. Null if no rest is required or unknown.
- `cycle_violation_duration_seconds` (integer, optional, nullable) — Integer seconds accrued beyond the ruleset cycle limit (violation duration). Use 0 if not in violation; null if unknown.
- `shift_driving_violation_duration_seconds` (integer, optional, nullable) — Integer seconds accrued beyond the shift driving limit (violation duration). Use 0 if not in violation; null if unknown.
- `shift_ends_at` (datetime, optional, nullable) — Projected end of the current shift/workday
- `next_break_due_at` (datetime, optional, nullable) — Timestamp when the next required break must begin
- `next_10hr_reset_eligible_at` (datetime, optional, nullable) — Earliest timestamp the driver can begin a 10-hour reset
- `next_34hr_reset_eligible_at` (datetime, optional, nullable) — Earliest timestamp the driver can begin a 34-hour reset (US)
- `is_personal_conveyance_applied` (boolean, optional, nullable) — True indicates whether personal conveyance is currently applied
- `is_yard_move_applied` (boolean, optional, nullable) — True indicates whether yard move is currently applied
- `is_adverse_driving_exemption_available` (boolean, optional, nullable) — True indicates whether the adverse driving exemption is available
- `is_adverse_driving_applied` (boolean, optional, nullable) — True indicates whether the adverse driving exemption is currently applied
- `is_meal_break_required` (boolean, optional, nullable) — True indicates whether the ruleset requires a meal break for this shift/day
- `meal_break_due_at` (datetime, optional, nullable) — Timestamp when the required meal break must start
- `meal_break_min_duration_seconds` (integer, optional, nullable) — Minimum required meal/rest break duration (integer seconds)
- `meal_break_time_until_due_seconds` (integer, optional, nullable) — Integer seconds until the required meal break begins
- `is_split_sleep_applied` (boolean, optional, nullable) — True indicates whether a split sleeper-berth period is currently in progress
- `is_sleeper_eligible` (boolean, optional, nullable) — True indicates whether the active ruleset permits sleeper-berth split
- `sleeper_required_remaining_seconds` (integer, optional, nullable) — Integer seconds still required in sleeper to satisfy the split
- `sleeper_split_window_ends_at` (datetime, optional, nullable) — Deadline by which the complementary sleeper-berth period must occur
- `is_cycle_applicable` (boolean, optional, nullable) — True indicates whether cycle limits constrain availability for this ruleset/snapshot
- `exception_codes` (list of string, optional, nullable) — List of active HOS exception codes
- `notes` (string, optional, nullable) — Human-readable notes from TSP about clocks and exceptions