Every change a player makes to the world is an order: queued through the API, carried to its target, and resolved by the tick.
The tick
- The world advances one tick at a time. Only the tick changes the world; the API reads it and queues orders.
- Durations in the data are written in minutes and turned into ticks by
tick_scale, so they keep their real-time length. - Each tick runs its steps in a fixed order: orbits, world rules, arrivals, jobs, packets, orders, mail, fights, relays, reports, standing orders, sightings.
- A ship or facility has one job at a time. A finished job leaves it idle until another order arrives.
GET /v1/statusgives the current tick.
Orders
- Each verb has its own endpoint, such as
POST /v1/fleet/ships/{id}/moveorPOST /v1/fleet/stations/{id}/facilities/{facility_id}/produce. - The response gives the order id,
tick_dueandarrives_tick: when the order resolves if nothing holds it up. Null means no route reaches the ship or station yet. GET /v1/ordersandGET /v1/orders/{id}show each order's state:in_flight, thencompleted,failedorcancelled.- A failed order carries
error_codeanderror_reason. A rule violation fails an order before anything changes. - Orders due in the same tick resolve oldest first.
sourcenames the trigger or schedule that sent an order, such astrigger:unload.sent_bynames the player or company whose key sent it.
Idempotency
- Every order carries an
Idempotency-Keyheader. - Resending a key returns the first order and queues nothing. Resending it with a different order is a 409
idempotency_conflict. - A key belongs to one order while the order is kept: reusing it after that order resolved returns the old order.
- A finished order and its packets are deleted 30 days after it was sent. Its key is then free again.
Dry runs
- Every order endpoint takes
?dry_run=true. The order's rules run against the world as it is now, then everything rolls back. - An order that would pass returns
order: null. One that would fail returns a 409 with its rejection code. - A move or jump also returns
arrival_tickandfuel, and a move the meeting pointat. - The world can change before the real order resolves.
Command latency
- An order to a ship, station or facility travels as a packet through its owner's Infonet. An order to a facility goes to its station.
- Orders to the hull resolve next tick, since the hull is a command post. So do orders to command nodes and companies, which send no packet of their own.
- Orders start at the hull. A packet leaves from a command post the hull's own network reaches; a post cut off from the hull sends nothing.
- An order to a ship, station or facility in a system where its side has a command post linked to the hull is local. It sends no packet and resolves next tick, with no hops and no depth delay. A station that is such a post is local to itself. A ship jumping is in no system.
- A packet crosses one link between relays per hop. Queues at busy relays, detours and waits make it later, and
arrives_tickmoves to match. - Once delivered, an order to a ship waits a further delay set by the ship's depth in its owner's chain of command: none directly under the hull, more for each level of command nodes. Stations are not in the chain of command, so an order to one resolves on delivery.
- A ship or station beyond every relay its side can use, its own and those leased or open to it, receives nothing until it is back in range. Meanwhile it runs only the standing orders it already has, until it is fetched or a relay comes within reach.
GET /v1/infonet/packetslists packets in flight: the relay each is at, the next one, and its state (new,queued,movingorwaiting).
Recalls
DELETE /v1/orders/{id}takes back an order in flight. Only the key that sent it, or a key above it in the chain of control, can (not_your_order).- An order sent this tick, still at its first command post, or waiting with no way on, is cancelled at once.
- An order already travelling to a ship or station gets a recall: a packet of its own, from the linked command post nearest its target, with
recall_arrives_tick. - A recall that takes effect before its order cancels it. One that arrives in the same tick or later is too late, and the order runs.
order.recalledsays which. - An order has at most one recall (
already_recalled). An order no longer in flight cannot be recalled (not_in_flight).
Group orders
POST /v1/fleet/orderssends one verb to every ship in a saved group, a ship query or a command node. See Command.- Each matched ship gets an ordinary order with its own packet, which passes or fails by itself.
GET /v1/orders?batch=lists them. - A group or query fixes its ships when the order is sent. A node reads its members when the order resolves.
POST /v1/fleet/orders/expandreturns the ship orders a group order would make, with a dry run of each, and queues nothing. The list, edited or not, goes toPOST /v1/fleet/ordersas{"orders": [...]}.- One
Idempotency-Keycovers a whole group order.
Errors
- Every error body is
{"detail": {"code": ..., "reason": ...}}. - A 422 without a code is a request that does not match the schema.
- A server fault inside one order fails only that order, with
internal_error. The rest of the tick goes on.