Developers
This section is for everyone integrating against Skynet programmatically — researchers automating observation submission, alert subscribers wiring up triggers, dashboards consuming live telemetry, third-party tools that need read access to data.
Where to start
New to the API? Begin with Getting started for environments, Auth for OAuth, and Conventions for the wire format rules that apply across endpoints.
Already authenticated? Jump to the REST API reference for the domain you're working in:
- Observation — observations, requests, tasks, targets.
- Observatory — observatories, telescopes, sites, instruments, devices, constraints.
- Organization — organizations, groups, memberships, roles.
- User and Me — user resources.
- OAuth — OAuth flow endpoints.
Realtime? See WebSocket protocol for the subscribe/publish model — snapshots, events, and commands.
Schemas? Schemas auto-generates per-record reference, grouped by domain.
SDKs? TypeScript and Python ship typed bindings.
What you should know up front
- Wire format is camelCase JSON. The Python API runs through
fastapi_camelcase; Python source uses snake_case but the wire-level field names are camelCase. The TS SDK reflects this. - Polymorphic resources carry discriminators.
DevicehasdeviceType,InstrumenthasinstrumentType,ObservationTaskhastaskType, etc. See Conventions. - Pagination uses
Page<T>envelopes. Standarditems,total,page,sizeshape. - Errors are
{detail: "..."}on REST, with a richer{code, message, details, id}envelope on the WebSocket. - No public PyPI / npm packages yet. The SDKs live in-tree and are consumed via repo workspaces; external publication is on the table when external consumers ask for it.
SkyNode gateway — not for external integrations
If you're trying to figure out whether you want public-api or sky-node-gateway, see SkyNode gateway. TL;DR: gateway is the SkyNode-installation surface; almost everyone else should use public-api.