Flights (Monitors)
Flights are monitoring endpoints in CrossCheck. They are broken down into two types - Arrivals and Quick Flights.
- Arrivals: Each flight has an API key for check-ins - like a flight number. This endpoint allows optional data via a metadata field and records more information your app may pass in. These flights can also use the start/complete pairing layover feature for tracking long-running jobs from beginning to end.
- Quick Flights: These flights use a shortcode for simple heartbeat URLs. No additional metadata is stored or used for monitoring - perfect for simple "still alive" pings from cron jobs or scheduled tasks.
List and Create
GET /api/flights/ — List flights for current user (and team)
Query parameters:
monitoring_type- Filter by type:PASSIVE,ACTIVE,QUICK_PASSIVE
POST /api/flights/ — Create flight
Create/Update Request Body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name |
description | string | No | Description |
path | string | No | Auto-generated if blank |
expected_interval | integer | No | Seconds between expected check-ins (default 3600) |
grace_period | integer | No | Seconds of grace before "delayed" (default 60) |
max_missed_checkins | integer | No | Missed count before alert (default 3) |
allowed_ips | array of strings | No | IP whitelist; empty = allow all |
monitoring_type | string | No | PASSIVE, ACTIVE, QUICK_PASSIVE (default PASSIVE) |
monitor_url | string | Yes if ACTIVE | URL for active (outbound) checks |
monitor_interval | integer | No | Seconds between active checks (default 60) |
slow_response_threshold | integer | No | Seconds for WARNING (default 5) |
timeout_threshold | integer | No | Seconds for ERROR (default 10) |
consecutive_failure_threshold | integer | No | Failures before downtime alert |
group | UUID or null | No | Flight group ID |
order | integer | No | Display order |
team | UUID or null | No | Team ID for shared flight |
extra_config | object | No | e.g. {"is_paired_arrival": true} for paired arrival |
Response Fields
Read-only fields included in responses:
id- Flight IDapi_key- API key for check-insshortcode- Short code for heartbeat URLshort_check_in_url- Full short URLlast_check_in- Last check-in timestamplast_landing_status- Status of last check-instatus- Current flight statuscreated_at- Creation timestampupdated_at- Last update timestampteam_name- Name of associated teamgroup_name- Name of associated groupuptime_percentage- Uptime percentageuptime_checks_total- Total uptime checksuptime_checks_successful- Successful uptime checksis_deleted- Soft delete statusaudit- Audit log
Detail and Update
GET /api/flights/{id}/ — Flight detail
PUT /api/flights/{id}/ — Full update
PATCH /api/flights/{id}/ — Partial update
DELETE /api/flights/{id}/ — Delete flight (hard delete; use soft-delete for reversible)
Flight Actions
GET /api/flights/{id}/landings/ — List landings (check-ins) for this flight
GET /api/flights/{id}/metrics/ — Metrics
Returns:
summary- 24h, 7d, 30d: uptime %, countsby_day- Metrics grouped by dayby_hour- Metrics grouped by hour
GET /api/flights/{id}/audit/ — Audit log (last 100 entries)
POST /api/flights/{id}/test_now/ — Trigger a test check-in (in-band)
Rate limited at 10 requests per minute per flight. Returns:
{
"status": "ok",
"landing": {...},
"override_seconds": 300
}
POST /api/flights/{id}/soft-delete/ — Soft delete flight
POST /api/flights/{id}/restore/ — Restore soft-deleted flight
POST /api/flights/{id}/purge/ — Permanently delete a soft-deleted flight
Reorder Flights
POST /api/flights/reorder/
Body: list of { "id": "<flight-uuid>", "order": <integer> } or { "items": [ ... ] }.
Flight Groups
GET /api/flights/groups/ — List flight groups for current user (and team)
POST /api/flights/groups/ — Create group
Body: { "name": "Group name", "order": 0 }
GET /api/flights/groups/{id}/ — Group detail
PATCH /api/flights/groups/{id}/ — Update group (e.g. name, order)
DELETE /api/flights/groups/{id}/ — Delete group (flights in group become ungrouped)
POST /api/flights/groups/reorder/ — Reorder groups
Body: list of { "id": "<group-uuid>", "order": <integer> } or { "items": [ ... ] }