The Cryosphere Innovation public API exposes two read-only endpoints. One returns deployment metadata; the other returns raw sensor data for a specific deployment.
All requests are made against a single base URL:
https://api.cryosphereinnovation.com
Every request must include an Authorization: Bearer YOUR_API_KEY header — see Authentication.
Deployments
Metadata about deployments — names, locations, dates, owners, free-form detail fields, and the initial conditions recorded at installation.
GET /public/deployments/
Returns a paginated list of deployments visible to the caller. Public deployments are visible to everyone with a valid key; private deployments are visible only to the owner and collaborators.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number (1-indexed). |
page_size | integer | 100 | Items per page. Maximum 1000. |
status | string | — | Filter by exact status (e.g. deployed, retrieved, planned). |
web_page_enabled | boolean | — | true or false. Filters to deployments that do or do not have a public web page. |
instrument | integer | — | Filter by instrument ID (foreign key). |
q | string | — | Free-text search across name, location, status, data_uuid, slug, instrument name, serial number, instrument type, and owner name/email. |
sort_by | string | last_modified | Field to sort by. |
sort_dir | string | desc | asc or desc. |
<kind>_min, <kind>_max | number | — | Initial-condition range for a numeric kind, inclusive, in the kind's unit (e.g. ice_thickness_min=100, bottom_sounder_distance_max=-200). Lengths also accept a unit: ice_thickness_max=1.5 m. |
<kind> | string | — | Initial-condition match for a text kind, case-insensitive (e.g. ice_type=MYI). |
Initial-condition filters only narrow the deployments you can already see, and only match deployments that recorded that kind. Filters on different kinds combine with AND. An unparseable number returns 400 with a detail message.
curl "https://api.cryosphereinnovation.com/public/deployments/?ice_thickness_min=100&ice_type=MYI" \
-H "Authorization: Bearer YOUR_API_KEY"curl "https://api.cryosphereinnovation.com/public/deployments/?ice_thickness_min=100&ice_type=MYI" \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"count": 142,
"next": "https://api.cryosphereinnovation.com/public/deployments/?page=2&page_size=2",
"previous": null,
"results": [
{
"name": "SIMB3 2023A",
"status": "deployed",
"location": "Beaufort Sea",
"slug": "300434066157890",
"data_uuid": "e11478e8-8bda-4494-a796-08b82334dfa0",
"deployment_description": "Spring deployment from USCGC Healy.",
"deployment_notes": null,
"deployment_start_date": "2023-04-12T00:00:00Z",
"deployment_end_date": null,
"details": { "ice_thickness_at_deployment_cm": 145 },
"initial_conditions": [
{ "kind": "ice_thickness", "label": "Ice thickness", "value": 145.0, "unit": "cm", "text": null, "description": "Auger hole next to the instrument" },
{ "kind": "ice_type", "label": "Ice type", "value": null, "unit": null, "text": "FYI", "description": null }
]
},
{ "…": "…" }
]
}{
"count": 142,
"next": "https://api.cryosphereinnovation.com/public/deployments/?page=2&page_size=2",
"previous": null,
"results": [
{
"name": "SIMB3 2023A",
"status": "deployed",
"location": "Beaufort Sea",
"slug": "300434066157890",
"data_uuid": "e11478e8-8bda-4494-a796-08b82334dfa0",
"deployment_description": "Spring deployment from USCGC Healy.",
"deployment_notes": null,
"deployment_start_date": "2023-04-12T00:00:00Z",
"deployment_end_date": null,
"details": { "ice_thickness_at_deployment_cm": 145 },
"initial_conditions": [
{ "kind": "ice_thickness", "label": "Ice thickness", "value": 145.0, "unit": "cm", "text": null, "description": "Auger hole next to the instrument" },
{ "kind": "ice_type", "label": "Ice type", "value": null, "unit": null, "text": "FYI", "description": null }
]
},
{ "…": "…" }
]
}GET /public/deployments/{slug}
Returns a single deployment. The slug is the canonical identifier. For SIMB3 deployments the slug is the instrument's IMEI (e.g. 300434066157890); for redeployments and other instruments it may be any unique string.
curl "https://api.cryosphereinnovation.com/public/deployments/300434066157890" \
-H "Authorization: Bearer YOUR_API_KEY"curl "https://api.cryosphereinnovation.com/public/deployments/300434066157890" \
-H "Authorization: Bearer YOUR_API_KEY"The response body is a single deployment object with the same fields as a list entry (see schema below).
Deployment schema
| Field | Type | Nullable | Description |
|---|---|---|---|
name | string | no | Human-readable deployment name. |
status | string | no | Current status (e.g. deployed, retrieved, planned). |
location | string | no | Free-form location label (e.g. "Beaufort Sea"). |
slug | string | no | Canonical deployment identifier. For SIMB3 this is the IMEI. |
data_uuid | string (UUID) | no | Identifier used to fetch raw sensor data. |
deployment_description | string | yes | Deployment summary written by the owner. |
deployment_notes | string | yes | Operational notes. |
deployment_start_date | string (ISO-8601) | yes | Start timestamp. |
deployment_end_date | string (ISO-8601) | yes | End timestamp; null while deployed. |
details | object | yes | Instrument- or deployment-specific free-form object. Contents vary. |
initial_conditions | array | no | Conditions recorded when the deployment went in (see below). Empty when none were recorded. |
instrument | object | yes | The instrument that recorded the data: name, type, serial_number, is_legacy (a hosted archive record, e.g. the CRREL/Dartmouth IMBs), is_simb3, and organization (name, short_name). |
fields | array | no | Single-deployment response only. What each data column is: key (the column name in data rows), name, unit, precision, description (sensor and method; derived values say so), and role (time, latitude, longitude or null). |
time_stamp_format | string | yes | Single-deployment response only. How time_stamp is encoded: UNIX (seconds since 1970-01-01 UTC) or Microsoft Excel (serial date). |
Initial conditions
Each entry in initial_conditions has the same shape. Standard kinds come first in a fixed order, custom entries last.
| Field | Type | Nullable | Description |
|---|---|---|---|
kind | string | no | A standard kind from the table below, or custom. |
label | string | no | Display label: the standard one, or the owner's own for custom. |
value | number | yes | The value, in unit. null for text entries. |
unit | string | yes | Unit of value (cm, psu, kg/m3, or anything for custom). null for text entries and unitless numbers. |
text | string | yes | The value of a text entry (e.g. ice_type, or a custom note). null for numeric entries. |
description | string | yes | How it was measured, caveats. |
| Kind | Unit | Meaning |
|---|---|---|
ice_thickness | cm | Total ice thickness at the site. |
snow_depth | cm | Snow depth on the ice. |
freeboard | cm | Height of the ice surface above the water line. |
draft | cm | Depth of the ice bottom below the water line. |
surface_scattering_layer | cm | Thickness of the decayed surface layer (SSL). |
ice_salinity | psu | Bulk ice salinity. |
snow_density | kg/m3 | Bulk snow density. |
ice_type | text | FYI, SYI, MYI, … |
top_thermistor_distance | cm | Top thermistor relative to the ice surface at installation, positive up. |
snow_sounder_distance | cm | Snow/surface rangefinder relative to the ice surface at installation, positive up. |
bottom_sounder_distance | cm | Under-ice rangefinder relative to the ice surface at installation, positive up (so normally negative). |
The three *_distance kinds are signed; every other standard numeric kind is zero or more.
Sensor data
Time-series sensor readings for a specific deployment. One endpoint, one method.
GET /public/deployment/data/{uuid}
Returns an array of raw sensor rows for the deployment identified by data_uuid. Rows are ordered chronologically by time_stamp.
The data_uuid is a UUID, not a slug — find it on the deployment's metadata response or in the Instant Query panel on the deployment's web page.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
field | string (repeatable) | — | Restrict the response to specific fields. Repeat the parameter to include multiple fields (e.g. ?field=air_temp&field=surface_distance). When omitted, every field on each row is returned. Rows that carry none of the requested fields are skipped (a field list that is only time_stamp returns every row). |
Response
Each row is a plain JSON object. The exact keys depend on the deployment's sensor package — SIMB3 deployments return fields like air_temp, surface_distance, latitude, longitude, and a time_stamp, while custom instruments may report different channels.
[
{
"_id": "6512b7a1f2c9a83b5c1e44d1",
"time_stamp": "2024-03-14T06:00:00Z",
"air_temp": -18.4
},
{
"_id": "6512b7a1f2c9a83b5c1e44d2",
"time_stamp": "2024-03-14T07:00:00Z",
"air_temp": -17.9
}
][
{
"_id": "6512b7a1f2c9a83b5c1e44d1",
"time_stamp": "2024-03-14T06:00:00Z",
"air_temp": -18.4
},
{
"_id": "6512b7a1f2c9a83b5c1e44d2",
"time_stamp": "2024-03-14T07:00:00Z",
"air_temp": -17.9
}
]_id is always present and unique per row. Use it if you need to track which rows you've already processed.
A note on payload size
The data endpoint returns every row in the deployment's history. For long-running deployments that can be tens of thousands of rows. Always pass field= to restrict the response to the channels you actually need — it's the single biggest lever for keeping requests fast and your client's memory flat.
Errors
Error responses follow a small, predictable set of shapes and HTTP status codes. See Errors for the full reference.