Ingest, decode, validate and retain spacecraft telemetry. Frames arrive at your station, leave at 8.4 Mbps over a single TLS stream, and land in your own object storage as CDF, CSV or Parquet — with the untouched frame kept alongside every decoded value.
Five stages between the antenna and your object storage. Each one is separately observable, and each one fails in a way the next one can absorb.
A regional collector terminates mutual TLS from the station and buffers the stream on local disk before acknowledging. The acknowledgement means the frame is on durable storage at the edge, not that it has been committed downstream. A station that loses uplink mid-pass retransmits from its own queue; the edge deduplicates on spacecraft, APID and sequence counter.
Primary header checks run first: version, spacecraft identifier, virtual channel, frame count and the frame length against the declared size. The secondary header follows, then the CRC where the frame carries one. Each rejection carries a reason code and lands in the rejection ledger, visible in the API and exportable as a CSV.
Valid frames are split into space packets on the packet length field in the primary header. Packets are routed by APID to the spacecraft's mission dictionary. An APID with no mapping is written to an unmapped bucket with its bytes intact, which turns an incomplete dictionary into a visible queue instead of a silent loss.
The secondary header is interpreted according to the spacecraft's declared header type: a packed time code, a coarse-fine time pair, or a raw counter to be scaled. Payload fields are scaled and offset into engineering units, and the scale factors are recorded with the value so a later change to the dictionary does not rewrite history.
Decoded parameters are committed to a columnar store keyed by spacecraft, APID, parameter and spacecraft time. The raw frame is written to your object storage bucket under a deterministic path. The write is idempotent: the same frame submitted twice produces one record and one object.
The API exposes parameter history over HTTP, filtered by spacecraft, APID, parameter and time range. Scheduled exports write CDF, CSV or Parquet to your bucket on a cron expression you define, and the API can trigger an on-demand export of a single pass.
Helion speaks the framing your flight team already uses. Where a standard leaves room, the choice is yours and it is recorded in the spacecraft registry.
Frames are accepted per CCSDS 133.0-B, including the Orbit Data Messages, and are validated on the fields that matter operationally: the frame count sequence, the virtual channel identifier and the declared length. A station may send the primary header with the secondary header flag unset for telecommand or engineering data that does not need one.
Virtual channels are carried through to the archive. If your spacecraft separates telemetry into four virtual channels, you can query them separately or together without unpacking anything at the storage layer.
Within a frame, packets follow the Space Packet Protocol: a six-byte primary header carrying the version, the type, the spacecraft identifier, the APID, the sequence flags and the packet length. Helion uses the sequence flags to detect loss and duplication within a virtual channel, and the APID to route the payload.
Where a spacecraft uses a non-standard packet length convention, the registry records that convention per virtual channel, and the decoder is driven by the registry rather than by a hard-coded assumption.
Telemetry, telecommand and engineering secondary headers are supported in their packed forms. Time code interpretation covers the CCSDS packed time code with an explicit epoch per spacecraft, so a spacecraft that counts from a mission epoch rather than a calendar epoch decodes to the right instant.
Space Link Extension is accepted over TCP and UDP for stations that already speak it, covering the service of telemetry, telecommand and file service delivery. CFDP is terminated for bulk transfer scenarios, with the file delivery checkpoints used to confirm receipt before the file is processed.
Three output formats, one schema. The choice is a delivery preference, not a commitment: a parameter means the same thing in all three.
CDF, as used across the planetary science community. Each parameter becomes a variable inside a CDF file with its own metadata: units, valid minimum and maximum, fill values and the offset used at decode time. CDF is the right choice when the next consumer of the data is a tool that already speaks it.
Long-format CSV, one row per sample: spacecraft, apid, parameter, value, unit, spacecraft time, receive time, quality flag. It is unglamorous and it opens in anything, which is exactly why it survives contact with a spreadsheet at eleven in the evening during an anomaly review.
Columnar Parquet with Snappy compression, partitioned by spacecraft and day and written with statistics that let a query engine prune files before opening them. This is the format to pick when the destination is a warehouse and the questions are aggregations rather than single samples.
Every sample carries a quality flag that says how it was obtained. A sample decoded from a valid frame is GOOD. A sample recovered from a frame that failed CRC is RECOVERED. A sample interpolated across a gap is INTERPOLATED and is never written without that flag. A value that failed a range check against the declared limits is OUT_OF_RANGE, and it is stored rather than discarded.
A missing sequence counter produces a gap record rather than a quiet absence. The gap carries the spacecraft, the virtual channel, the expected counter, the last counter seen and the duration. Querying a range returns the gap alongside the samples so a plot shows the hole and a table shows the hole.
Your data lands in a bucket you control. Helion holds the credentials it needs and nothing more, and the connection is encrypted in transit and at rest.
Exports write to a bucket in any supported region through an IAM role or an access key pair scoped to a single prefix. Objects are written with server-side encryption using your key or an AWS-managed key. Lifecycle rules on the destination bucket are respected by Helion as the source of truth for object expiry.
For operators already using S3 as the archive of record, the raw frame prefix and the derived prefix can be separated so that access policy on the raw archive can be stricter than on the derived data.
Exports use a service account with the roles needed for object creation on a single bucket. Customer-managed encryption keys are supported, so an operator with a key-management policy applies it to the archive rather than trusting a platform default.
BigQuery external tables can be pointed at the Parquet prefix directly, which removes the copy step between an export and an analytics query.
Any endpoint that speaks the S3 API is accepted: Ceph RADOS Gateway, MinIO, Wasabi, Cloudflare R2 and comparable private storage. Helion is tested against Ceph and MinIO in the integration suite, so the behaviour is not inferred from API compatibility alone.
Where a policy forbids a public endpoint, a dedicated egress IP can be allow-listed, or a private link can be established into your region. The ingest edge supports both, and the station stream terminates on the same endpoint regardless of which path is used.
The numbers below are contractual on annual agreements and measured on the ingest path, not on the dashboard.
| Commitment | Target | Measurement | Credit |
|---|---|---|---|
| Ingest availability | 99.98% monthly | Minute-weighted, from edge acknowledgement | 10% of monthly fee |
| Median ingest latency | ≤ 250 ms | Edge acknowledgement to queryable | — |
| 99th percentile latency | ≤ 2 s | Edge acknowledgement to queryable | — |
| Raw frame availability | 99.9% monthly | Object store read success | 5% of monthly fee |
| Scheduled export delivery | Within 30 min of window | Export job completion | — |
| Support response | 4 h, 24/5 | First human response | Service credit table |
A station that loses connectivity retransmits from its own buffer. Helion deduplicates on the spacecraft identifier, the virtual channel, the APID and the sequence counter, so a retransmitted packet does not create a duplicate sample. Where a counter never arrives, the gap is recorded with its duration and exported alongside the data.
When the ingest rate exceeds the committed write rate, the edge buffers rather than discarding. The buffer is bounded; if it fills, the stream is back-pressured and the station is told explicitly through the acknowledgement sequence. Frames are never dropped silently under load.
Give us a station and a spacecraft and we will run a real ingest against your APID map, then hand back the decoded telemetry and the raw frames.