Picogrid Legion Platform API: response documents into the canonical model
Picogrid Legion is a third-party platform for integrating sensors and uncrewed systems, and its Platform API version 3 is the first upstream in the open integration layer that is a web interface rather than a wire format. SynapseCommand publishes an ingest adapter for its response documents. Picogrid is named here as the owner of that API and nothing more: no partnership, endorsement or joint deployment is claimed or implied.
What Picogrid Legion is
The API exposes entities, their locations, events and tasking. The adapter reads the first three, and dispatches on the shape of the document rather than on a caller-supplied type tag, because a tag would be a second source of truth about what is being held.
The implementation is pinned to an exact retrieved specification document, recorded with its host, size, retrieval date and hash, because a vendor API can change between one deployment and the next in a way a ratified standard cannot.
The specification's declared version string is not a usable change signal, since it stays constant while paths beneath it change. The document hash is the signal, and the published pin records it so a later reader can re-fetch and compare.
Why this matters to a commander
A deployment that already runs a sensor integration platform has an existing inventory of entities and observations, and reading it directly avoids re-instrumenting sensors that are already reporting.
Because the adapter translates documents a caller fetched rather than owning a client, an operator's own authentication, network policy and rate limits stay in the operator's code where they are visible.
The result is that third-party sensor observations arrive in the same canonical objects as radar, imagery metadata and cooperative broadcasts, and are correlated in the audited fusion layer rather than upstream of it.
The exact behaviour, not a capability claim
The adapter takes one already fetched JSON document. It does not own, and must not acquire, an HTTP client, an access token, a retry policy, a page cursor or a base address. Transport is where state lives, and an adapter holding state is an unaudited fusion layer.
Four document shapes are in scope. An entity document becomes an Entity, and an Event too when a latest location is embedded. A location document becomes an Event, and the Entity too when the entity block is embedded. An event document becomes an Event. A list of locations becomes an Entity and a Track whose samples are in payload order, with completeness recorded.
The coordinate handling is the sharpest detail in the adapter. The position object is shaped like a common geographic format but its default reference system is geocentric metres from the centre of the Earth, so reading the coordinates as longitude and latitude would place every contact somewhere nonsensical while producing perfectly well formed output. The source coordinates are therefore re-emitted verbatim with their reference system name, and the geodetic position is computed beside them rather than instead of them. One reference system in the enumeration is defined in no document and is refused by name, because guessing its axis order would yield a plausible wrong position rather than an error.
Pagination is treated as framing, not as history. One page is one payload and becomes one Track labelled as partial. The adapter does not follow the next link and does not stitch pages together, and it declines the four joins the API offers, because each is a second request and a correlation.
Absence is read in three ways because the API expresses three different facts: a key that is not there is nobody having said anything, a key present and null is the source stating it has no value, and a key present and empty is ambiguous and parked verbatim. Fields missing because an embedded block is a structural subset are recorded as such and never counted as statements of ignorance.
An unparseable observation time refuses the whole document with a written reason and never falls back to the receipt clock, because a document stamped with the wrong minute is a track that drifts for reasons nobody can find, whereas a refused document is visible in the caller's error handling.
- 01Direction inEntity, location, event and location list response documents to canonical Entity, Event and Track objects.
- 02Direction outNone. No API request body of any kind is produced.
- 03TaskingOut of scope. Tasking is an imperative with no geometry, there is no canonical object for it, and an adapter that could emit one would be an adapter that can act.
- 04CoordinatesSource coordinates kept verbatim with their reference system; the geodetic position computed beside them. One undefined reference system is refused by name.
- 05PinningImplemented against one retrieved specification document recorded with host, size, retrieval date and hash.
Which way the data actually moves
Into the canonical model
- Legion response documentOne already fetched body, dispatched on its own shape.
- Entity, Event or TrackObjects per document, with the source coordinates and absence semantics preserved.
Out of the canonical model
Not implemented, and not claimed.
Where this data is used
Reading an existing sensor estate
Entities and their locations arrive as canonical objects, so a deployment can bring an installed sensor integration platform into the common picture without re-instrumenting anything.
Partial history without invented continuity
A page of locations becomes a Track that states it is one page. Nothing is stitched across pages, so no history is asserted that a single payload did not contain.
Keeping transport in the operator's code
Because the adapter never fetches, the authentication, retries and paging remain in the caller's own code, where a security review can see them.
Every claim above has a file behind it
These paths are in the public repository, published under Apache 2.0. The adapter module for this page is legion.
Source and fixtures
- Adapter sourcepackages/cdm/synapse_cdm/adapters/legion.py
Ingest only, with the document dispatch, coordinate ruling and refusal conditions argued in place.
- Fixturespackages/cdm/synapse_cdm/fixtures/legion/
Response documents of each shape in scope with their expected canonical output.
- Field by field coveragepackages/cdm/synapse_cdm/FORMAT_COVERAGE.md
The Legion row set, the pinned specification record and the declines table.
Test evidence
- Harness testtests/test_cdm_legion_adapter.py
Replayed by the validation harness shipped in the same package, which runs six checks per fixture including a never-drop lossless check.
- Lossless checktests/test_cdm_lossless.py
Confirms the verbatim source coordinates and unmapped fields survive translation.
Manifest-backed assurance
Maturity is declared in each generated adapter manifest and checked against suite eligibility. VERIFIED is a separate claim-status axis. Neither means external certification or integration with a named system.
legionMaturity L3Claim VERIFIED
What these maturity levels mean
L3 means required provenance survives translation. L4 adds applicable roundtrip evidence. L5 would require every applicable public conformance gate to pass. L6 requires an independent real implementation or system and cannot be awarded from this repository's synthetic fixtures.
What is claimed, and what is not
The published adapter translates the format into the canonical data model. No egress path is implemented, and none is claimed.
Last reviewed against the published implementation on 2026-09-06.
Limitations
- Ingest only. No tasking, command or write path exists.
- This is a vendor API pinned to one retrieved document. A change on the vendor's side is a change to the coverage rows, not something the adapter absorbs silently.
- No pages are followed and no joins are performed, so a complete history requires the caller to fetch it.
- One coordinate reference system in the API enumeration is refused rather than interpreted.
- Picogrid is named as the owner of the API. No relationship, endorsement or joint offering is claimed.
Security boundary
- No credentials, tokens, tenant identifiers or endpoints appear in the repository or on this page.
- The adapter is a pure function of one document, so nothing persists between calls.
Public sources
Statements about what SynapseCommand® implements are drawn from the published repository rather than from these external sources.
Frequently asked
- Does SynapseCommand have a partnership with Picogrid?
- No. The open integration layer publishes an adapter that reads documents produced by the Picogrid Legion Platform API. Nothing on this site claims a partnership, an endorsement or a joint deployment.
- Can SynapseCommand task devices through Legion?
- No. The adapter is ingest only. Tasking has no geometry and no canonical object corresponds to it, and an adapter able to emit a command would be an adapter able to act.
- How are Legion coordinates handled?
- The API's default reference system is geocentric metres rather than longitude and latitude, so the source coordinates are kept verbatim with their reference system name and a geodetic position is computed beside them. One reference system that the API enumerates but does not define is refused by name.