For the complete documentation index, see llms.txt.The Maneuver API manages stored spacecraft maneuver records at
https://api.valar.space.
Each record belongs to one spacecraft and contains a name, optional metadata, and burn segments.
Creating a record stores data in VALAR; it does not uplink a command to a spacecraft.
Maneuver contract version 2.0.0
Download the standalone OpenAPI contract to generate a client or pin an integration. The filename remainsmaneuvers-v1.openapi.json
to preserve the artifact URL; contract metadata, not the filename, determines the version.
The standalone document’s info.version is 2.0.0. The complete live customer API at
/api-docs/mintlify identifies the maneuver revision
with x-valar-maneuver-api-version; each maneuver operation carries x-valar-contract-version.
Versioning is in the contract rather than a URL version segment. The seven public operations are:
The separate maneuver planner, approval, and orbit-raise workflows remain
available in the application and are outside this published API.
Authenticate a mission-control integration
Use an API key issued for your organization and granted the Operations environment. SendAuthorization: Bearer $VALAR_API_KEY on every request. The key inherits its
owner’s resource permissions, and requests are recorded in the API-key usage audit log.
Organization and environment are derived from authentication and the route.
These permission identifiers retain their existing spelling; they do not classify records.
Look up the VALAR spacecraft ID before making maneuver requests:
SPACECRAFT_ID below. Names, NORAD IDs, COSPAR IDs, and external keys
are lookup filters, not substitutes for the VALAR spacecraft ID on CRUD requests.
Create a maneuver
POST /operations/maneuvers accepts a maneuvers array. The initial name establishes the
stable maneuverId within its spacecraft and the editable name. Creation names have a maximum
length of 63 characters. Each record requires at least one burn segment with an ISO-8601
referenceEpoch, positive finite duration, nonzero finite thrust, and thrISP between 50
and 10,000 seconds. Record and segment attitudeMode values are required reference frames;
supported examples include TNW, RTN, QSW, and RSW_ROTATING. Supply physically consistent
values for your burn definition.
null when unavailable).
Supply every thrust component explicitly, including zero components; missing physical inputs are not interpreted as zero.
Those fields are ignored on writes; edit the intrinsic burn definition instead. Consult the
generated schema for every field.
Success is 201 with createdCount and message. The JSON batch is atomic: if any record
fails validation or conflicts, none of that batch is created. An existing identity is a
conflict; creation never acts as an update.
Find and read records
List records using comma-separated or repeatedspacecraftIds (1–50 IDs) and ISO-8601 instants.
endDate must be after startDate:
items and totalCount, including an empty list when there are
no matching records. List items contain maneuverId, displayId, editable name, the actual
spacecraftId, derived projection fields, and conflictingManeuverIds.
Read a record’s complete intrinsic burn segments before editing it:
maneuverId, displayId, spacecraftId, name,
purpose, attitudeMode, full composition, and conflictingManeuverIds. displayId is a
separate display identifier. Always address a record by maneuverId plus spacecraftId;
URL-encode path values when necessary.
Update the same record
PUT /operations/maneuvers/{maneuverId} replaces all editable fields, not just fields that
changed. Send name, purpose, attitudeMode, and the complete composition. Include metadata
you want to retain; omitted optional metadata is cleared. The name can be changed to a nonblank
label of up to 255 characters. Identity, display ID, and spacecraft association remain fixed.
For example, use jq to build an update from the detail response, preserving all segments and
metadata while changing the name:
maneuverId is still BURN-001.
To change timing or physical values, edit the corresponding composition fields in the update
body. Start and end derive from the segments; provide the intended complete burn definition.
Resolve conflicts
Creates, imports, and updates must not overlap another stored maneuver on the same spacecraft. The check uses each record’s enclosing start-to-end interval, including gaps between segments. Adjoining intervals may touch: a record ending at 12:01 may be followed by one starting at 12:01. Records on different spacecraft do not conflict with each other. Duplicate identities and overlaps with stored records return 409MANEUVER_CONFLICT.
Read the conflicting records and choose an ordinary edit or delete to resolve them. No other
record is automatically merged, shortened, replaced, or deleted. A conflict may be outside
your current list window.
Pre-existing overlapping records are preserved and marked with conflictingManeuverIds in
list and detail responses. They remain readable, exportable, and deletable. Every update,
including a name-only edit, must leave the updated record non-overlapping. Previously computed
results retain their captured maneuver data; later computations use current records under
their existing selection rules.
Delete a record
Import and export OCM files
Import adds records through one generic CCSDS OCM flow:files part for several files. spacecraftId is optional when file
metadata resolves the target unambiguously. Files require thrust, ISP, and physical wet mass;
see OCM import requirements. MAN_BASIS is optional
format metadata and has no effect on stored-record behavior. Exports omit it. OCM MAN_ID
remains the stable identity, even after the editable name changes.
Each file commits atomically and independently. 200 means every file succeeded; 207
contains per-file successes and failures, including ambiguous targets. Inspect successCount,
failureCount, and results. An all-ambiguous batch also returns 207. If every file fails
without ambiguity, the request returns an error, such as 400 for invalid input or 409 for a
stored-record conflict. A failed file adds none of its records; successful files remain saved.
Reimporting an existing MAN_ID fails: use PUT to edit an existing record.
Optional X-Content-Hash and X-Resolution-Fingerprint headers bind an import to a previously
inspected file. A stale preview returns 409 IMPORT_STALE_PREVIEW. Direct callers may omit
these headers. Submit preview-bound files individually rather than binding a multi-file batch
to one preview.
All exports use GET /operations/maneuvers/export. Export one record by supplying one
spacecraftIds value and one maneuverIds value, for example
/operations/maneuvers/export?spacecraftIds=SC-1&maneuverIds=BURN-001.
For selected IDs, use the collection GET with exactly one spacecraftIds value and 1–100
unique maneuverIds. Repeat the maneuverIds parameter for each identity; commas inside a
value are literal name characters, not separators. One ID produces text/plain OCM;
multiple IDs produce application/zip. No request body or format parameter is needed.
endDate after startDate. One spacecraft produces OCM text; multiple spacecraft
produce a ZIP of OCM files. ID and time-range selection are mutually exclusive: do not send
time bounds with maneuverIds. Missing, empty, or mixed selections return 400. URI size limits
still apply; divide a large selection into smaller GET requests if its encoded URL is too long.
Integration software owns downstream submission and uplink procedures.
Handle errors and retries
Resource, validation, and permission errors use VALAR’s shared error envelope, includingtimestamp, status, error, message, and path, with structured details where available.
Use the machine-readable error token and HTTP status instead of parsing prose messages.
GET requests can be retried with bounded backoff. Creation and import have no idempotency-key
contract: if a connection drops after submission, read existing records before repeating the
write. Do not retry successful files in a 207 batch. After an uncertain PUT or DELETE result,
read the addressed record to establish its current state before issuing another write.
Migration to 2.0.0
This is a coordinated clean replacement of the 1.0.0 stored-maneuver contract, without a temporary compatibility period. Update integration clients together with the API deployment:- Regenerate or update clients using contract 2.0.0. All stored-record requests use
/operations/maneuvers; the former/api/v1/...and/v1/...stored-maneuver routes are retired. - Remove the JSON
basisfield and classification-dependent logic. Lists expose editablenameandconflictingManeuverIds;spacecraftIdis the actual VALAR ID. Persist the stablemaneuverIdseparately from the editable name. - Read complete records with GET detail, then send all editable fields with PUT detail.
The canonical
report-fileand/{maneuverId}/report-epochroutes are retired. Timing changes are explicit segment edits, with no inferred trimming or lifecycle transition. - Use the single
/importroute only to add records. Removeoverwriteand merge-strategy options. Duplicate identities and overlaps are rejected; an existing record requires an explicit PUT. Handle both whole-request conflicts and per-file failures. - Treat incoming
MAN_BASISonly as optional file-format metadata. No uniform value is required across a file, and exported records omit it. - Review preserved historical conflicts through list/detail
conflictingManeuverIds. Existing identities, display IDs, and burn contents are retained. Resolve conflicts by explicit edits or deletion before saving an affected record; a metadata-only edit must also satisfy the non-overlap rule. Historical computation results keep their original captured meaning. - Remove calls to
/operations/maneuvers/projections/refresh. Projection maintenance remains internal application functionality and has no public or private HTTP endpoint. - Replace
POST /operations/maneuvers/exportwith the collection GET shown above. Move the bodyidsto repeatedmaneuverIdsparameters, use pluralspacecraftIds, and omit the JSON body andformat. The removed POST returns 405. Regenerated SDK clients useexportOperationsManeuversfor both selection modes. - Replace the single-record
/{maneuverId}/export?spacecraftId=...shortcut with/export?spacecraftIds=...&maneuverIds=.... The shortcut is removed and returns 404; the same collection endpoint now handles one record, selected records, and time ranges.
info.version when updating a pinned client.