Cryosphere Innovation

Endpoints

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

ParameterTypeDefaultDescription
pageinteger1Page number (1-indexed).
page_sizeinteger100Items per page. Maximum 1000.
statusstring—Filter by exact status (e.g. deployed, retrieved, planned).
web_page_enabledboolean—true or false. Filters to deployments that do or do not have a public web page.
instrumentinteger—Filter by instrument ID (foreign key).
qstring—Free-text search across name, location, status, data_uuid, slug, instrument name, serial number, instrument type, and owner name/email.
sort_bystringlast_modifiedField to sort by.
sort_dirstringdescasc or desc.
<kind>_min, <kind>_maxnumber—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
curl "https://api.cryosphereinnovation.com/public/deployments/?ice_thickness_min=100&ice_type=MYI" \
  -H "Authorization: Bearer YOUR_API_KEY"
curl
curl "https://api.cryosphereinnovation.com/public/deployments/?ice_thickness_min=100&ice_type=MYI" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

GET /public/deployments/?page_size=2
{
  "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/?page_size=2
{
  "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
curl "https://api.cryosphereinnovation.com/public/deployments/300434066157890" \
  -H "Authorization: Bearer YOUR_API_KEY"
curl
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

FieldTypeNullableDescription
namestringnoHuman-readable deployment name.
statusstringnoCurrent status (e.g. deployed, retrieved, planned).
locationstringnoFree-form location label (e.g. "Beaufort Sea").
slugstringnoCanonical deployment identifier. For SIMB3 this is the IMEI.
data_uuidstring (UUID)noIdentifier used to fetch raw sensor data.
deployment_descriptionstringyesDeployment summary written by the owner.
deployment_notesstringyesOperational notes.
deployment_start_datestring (ISO-8601)yesStart timestamp.
deployment_end_datestring (ISO-8601)yesEnd timestamp; null while deployed.
detailsobjectyesInstrument- or deployment-specific free-form object. Contents vary.
initial_conditionsarraynoConditions recorded when the deployment went in (see below). Empty when none were recorded.
instrumentobjectyesThe 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).
fieldsarraynoSingle-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_formatstringyesSingle-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.

FieldTypeNullableDescription
kindstringnoA standard kind from the table below, or custom.
labelstringnoDisplay label: the standard one, or the owner's own for custom.
valuenumberyesThe value, in unit. null for text entries.
unitstringyesUnit of value (cm, psu, kg/m3, or anything for custom). null for text entries and unitless numbers.
textstringyesThe value of a text entry (e.g. ice_type, or a custom note). null for numeric entries.
descriptionstringyesHow it was measured, caveats.
KindUnitMeaning
ice_thicknesscmTotal ice thickness at the site.
snow_depthcmSnow depth on the ice.
freeboardcmHeight of the ice surface above the water line.
draftcmDepth of the ice bottom below the water line.
surface_scattering_layercmThickness of the decayed surface layer (SSL).
ice_salinitypsuBulk ice salinity.
snow_densitykg/m3Bulk snow density.
ice_typetextFYI, SYI, MYI, …
top_thermistor_distancecmTop thermistor relative to the ice surface at installation, positive up.
snow_sounder_distancecmSnow/surface rangefinder relative to the ice surface at installation, positive up.
bottom_sounder_distancecmUnder-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

ParameterTypeDefaultDescription
fieldstring (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.

GET /public/deployment/data/e11478e8-…?field=time_stamp&field=air_temp
[
  {
    "_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
  }
]
GET /public/deployment/data/e11478e8-…?field=time_stamp&field=air_temp
[
  {
    "_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.