/v1/passesList passes#
Passes
The passes not over yet, every pass with all, each with the gateway the reconciler checked for it before the AOS.
Query parameters
targetstring
Only the passes of this target.
allboolean
Passes over too.
Responses
200Passes, by AOS.application/json
passesrequiredarray of PassView
Passes, by AOS.
PassView · 2 fields
passrequiredPass.
Pass · 15 fields
aosrequiredstring
Acquisition of signal (UTC).
feederstring
Feeder that wrote it, set by the MCS.
idrequiredstring
Stable identifier, given by the feeder.
losrequiredstring
Loss of signal (UTC).
max_elevation requiredstring
Maximum elevation (47.3 deg).
protocolstring
Protocol (ccsds, csp, dvb-s2…).
ratesone of PassRates | null
Expected rates.
sourcerequiredSource.
stationrequiredstring
Ground station.
statusrequiredStatus.
targetrequiredstring
Target.
transceiverstring
On-board transceiver (sband, xband…).
updated_at string
Last update, set by the MCS.
uplinkboolean
Whether telecommands can be sent; a receive-only pass refuses any send.
gatewayone of PassGateway | null
503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
Request
curl "http://localhost:8080/v1/passes"import requests
BASE_URL = "http://localhost:8080"
response = requests.get(f"{BASE_URL}/v1/passes")
response.raise_for_status()
print(response.json())let base_url = "http://localhost:8080";
let response = reqwest::Client::new()
.get(format!("{base_url}/v1/passes"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{
"passes": [
{
"pass": {
"aos": "string",
"contributions": [
{}
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": null,
"source": null,
"station": "string",
"status": null,
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": true
},
"gateway": {
"checked_at": "string",
"gateway": "string",
"reason": "string"
}
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}/v1/passesUpsert pass#
Write a pass (feeder)
A pass from a feeder (passes.feeders), new or refined, merged with the pass of the other source: matched by identifier, by the identifier of a contribution, then by target, station and overlapping window. The booking gives the window, the elevation, the status and uplink.
Request body application/jsonrequired
aosrequiredstring
Acquisition of signal (UTC).
contributionsarray of Pass
Contribution of each source to a merged pass, set by the MCS.
Pass · 15 fields
aosrequiredstring
Acquisition of signal (UTC).
feederstring
Feeder that wrote it, set by the MCS.
idrequiredstring
Stable identifier, given by the feeder.
losrequiredstring
Loss of signal (UTC).
max_elevation requiredstring
Maximum elevation (47.3 deg).
protocolstring
Protocol (ccsds, csp, dvb-s2…).
ratesone of PassRates | null
Expected rates.
sourcerequiredSource.
stationrequiredstring
Ground station.
statusrequiredStatus.
targetrequiredstring
Target.
transceiverstring
On-board transceiver (sband, xband…).
updated_at string
Last update, set by the MCS.
uplinkboolean
Whether telecommands can be sent; a receive-only pass refuses any send.
feederstring
Feeder that wrote it, set by the MCS.
idrequiredstring
Stable identifier, given by the feeder.
losrequiredstring
Loss of signal (UTC).
max_elevation requiredstring
Maximum elevation (47.3 deg).
protocolstring
Protocol (ccsds, csp, dvb-s2…).
ratesone of PassRates | null
Expected rates.
sourcerequiredSource.
stationrequiredstring
Ground station.
statusrequiredStatus.
targetrequiredstring
Target.
transceiverstring
On-board transceiver (sband, xband…).
updated_at string
Last update, set by the MCS.
uplinkboolean
Whether telecommands can be sent; a receive-only pass refuses any send.
Responses
200The pass as stored.application/json
passrequiredPass.
Pass · 15 fields
aosrequiredstring
Acquisition of signal (UTC).
feederstring
Feeder that wrote it, set by the MCS.
idrequiredstring
Stable identifier, given by the feeder.
losrequiredstring
Loss of signal (UTC).
max_elevation requiredstring
Maximum elevation (47.3 deg).
protocolstring
Protocol (ccsds, csp, dvb-s2…).
ratesone of PassRates | null
Expected rates.
sourcerequiredSource.
stationrequiredstring
Ground station.
statusrequiredStatus.
targetrequiredstring
Target.
transceiverstring
On-board transceiver (sband, xband…).
updated_at string
Last update, set by the MCS.
uplinkboolean
Whether telecommands can be sent; a receive-only pass refuses any send.
gatewayone of PassGateway | null
401Token refused.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
403Not a feeder (pass::not-a-feeder), or not its source (pass::forbidden-source).application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
422Invalid pass or unknown target: pass::invalid, pass::unknown-target.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
Request
curl -X POST "http://localhost:8080/v1/passes" \
-H "Content-Type: application/json" \
-d '{
"aos": "string",
"contributions": [
{}
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string"
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": true
}'import requests
BASE_URL = "http://localhost:8080"
response = requests.post(
f"{BASE_URL}/v1/passes",
json={
"aos": "string",
"contributions": [
{},
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string",
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": True,
},
)
response.raise_for_status()
print(response.json())let base_url = "http://localhost:8080";
let response = reqwest::Client::new()
.post(format!("{base_url}/v1/passes"))
.json(&serde_json::json!({
"aos": "string",
"contributions": [
{}
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string"
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": true
}))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{
"pass": {
"aos": "string",
"contributions": [
{}
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string"
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": true
},
"gateway": {
"checked_at": "string",
"gateway": "string",
"reason": "string"
}
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}/v1/passes/{target}/{id}Get pass#
A pass
Path parameters
targetrequiredstring
Target, as named in the topology (sim-1).
idrequiredstring
Pass identifier.
Responses
200The pass and its gateway.application/json
passrequiredPass.
Pass · 15 fields
aosrequiredstring
Acquisition of signal (UTC).
feederstring
Feeder that wrote it, set by the MCS.
idrequiredstring
Stable identifier, given by the feeder.
losrequiredstring
Loss of signal (UTC).
max_elevation requiredstring
Maximum elevation (47.3 deg).
protocolstring
Protocol (ccsds, csp, dvb-s2…).
ratesone of PassRates | null
Expected rates.
sourcerequiredSource.
stationrequiredstring
Ground station.
statusrequiredStatus.
targetrequiredstring
Target.
transceiverstring
On-board transceiver (sband, xband…).
updated_at string
Last update, set by the MCS.
uplinkboolean
Whether telecommands can be sent; a receive-only pass refuses any send.
gatewayone of PassGateway | null
404No such pass: pass::unknown.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
Request
curl "http://localhost:8080/v1/passes/<target>/<id>"import requests
BASE_URL = "http://localhost:8080"
target = "<target>" # Target, as named in the topology (`sim-1`).
id = "<id>" # Pass identifier.
response = requests.get(f"{BASE_URL}/v1/passes/{target}/{id}")
response.raise_for_status()
print(response.json())let base_url = "http://localhost:8080";
let target = "<target>"; // Target, as named in the topology (`sim-1`).
let id = "<id>"; // Pass identifier.
let response = reqwest::Client::new()
.get(format!("{base_url}/v1/passes/{target}/{id}"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{
"pass": {
"aos": "string",
"contributions": [
{}
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string"
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": true
},
"gateway": {
"checked_at": "string",
"gateway": "string",
"reason": "string"
}
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}/v1/passes/replace_windowReplace window#
Replace the passes of a window (feeder)
A complete snapshot of a source for a target over an interval: each pass is written, and the contribution of the source to every pass of the interval absent from the snapshot is cancelled.
Request body application/jsonrequired
sourcerequiredSource of the snapshot.
targetrequiredstring
Target.
fromrequiredstring · date-time
Start of the interval.
torequiredstring · date-time
End of the interval.
passesrequiredarray of Pass
Every pass of the source in the interval.
Pass · 15 fields
aosrequiredstring
Acquisition of signal (UTC).
feederstring
Feeder that wrote it, set by the MCS.
idrequiredstring
Stable identifier, given by the feeder.
losrequiredstring
Loss of signal (UTC).
max_elevation requiredstring
Maximum elevation (47.3 deg).
protocolstring
Protocol (ccsds, csp, dvb-s2…).
ratesone of PassRates | null
Expected rates.
sourcerequiredSource.
stationrequiredstring
Ground station.
statusrequiredStatus.
targetrequiredstring
Target.
transceiverstring
On-board transceiver (sband, xband…).
updated_at string
Last update, set by the MCS.
uplinkboolean
Whether telecommands can be sent; a receive-only pass refuses any send.
Responses
200What was written and cancelled.application/json
upsertedrequiredarray of string
Passes written, as stored.
cancelledrequiredarray of string
Passes whose contribution of the source was cancelled, as stored.
401Token refused.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
403Not a feeder, or not its source.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
422Invalid snapshot or unknown target.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
Request
curl -X POST "http://localhost:8080/v1/passes/replace_window" \
-H "Content-Type: application/json" \
-d '{
"source": "fds",
"target": "string",
"from": "2026-09-29T08:30:00Z",
"to": "2026-09-29T08:30:00Z",
"passes": [
{
"aos": "string",
"contributions": [
{}
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string"
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": true
}
]
}'import requests
BASE_URL = "http://localhost:8080"
response = requests.post(
f"{BASE_URL}/v1/passes/replace_window",
json={
"source": "fds",
"target": "string",
"from": "2026-09-29T08:30:00Z",
"to": "2026-09-29T08:30:00Z",
"passes": [
{
"aos": "string",
"contributions": [
{},
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string",
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": True,
},
],
},
)
response.raise_for_status()
print(response.json())let base_url = "http://localhost:8080";
let response = reqwest::Client::new()
.post(format!("{base_url}/v1/passes/replace_window"))
.json(&serde_json::json!({
"source": "fds",
"target": "string",
"from": "2026-09-29T08:30:00Z",
"to": "2026-09-29T08:30:00Z",
"passes": [
{
"aos": "string",
"contributions": [
{}
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string"
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": true
}
]
}))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{
"upserted": [
"string"
],
"cancelled": [
"string"
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}/v1/passes/watchWatch passes#
Watch the passes (WebSocket)
Sends every pass with the check of its gateway, then each pass whose definition or gateway check changes.
Query parameters
targetstring
Only those of this target.
Responses
101WebSocket: one PassView per message.application/json
passrequiredPass.
Pass · 15 fields
aosrequiredstring
Acquisition of signal (UTC).
feederstring
Feeder that wrote it, set by the MCS.
idrequiredstring
Stable identifier, given by the feeder.
losrequiredstring
Loss of signal (UTC).
max_elevation requiredstring
Maximum elevation (47.3 deg).
protocolstring
Protocol (ccsds, csp, dvb-s2…).
ratesone of PassRates | null
Expected rates.
sourcerequiredSource.
stationrequiredstring
Ground station.
statusrequiredStatus.
targetrequiredstring
Target.
transceiverstring
On-board transceiver (sband, xband…).
updated_at string
Last update, set by the MCS.
uplinkboolean
Whether telecommands can be sent; a receive-only pass refuses any send.
gatewayone of PassGateway | null
404Invalid target: api::invalid-target.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequiredarray of ErrorItem
Every error found.
ErrorItem · 3 fields
coderequiredstring
Stable code.
messagerequiredstring
Message for the operator.
helpstring
Suggested fix.
Request
curl "http://localhost:8080/v1/passes/watch"import requests
BASE_URL = "http://localhost:8080"
response = requests.get(f"{BASE_URL}/v1/passes/watch")
response.raise_for_status()let base_url = "http://localhost:8080";
let response = reqwest::Client::new()
.get(format!("{base_url}/v1/passes/watch"))
.send()
.await?
.error_for_status()?;Response
{
"pass": {
"aos": "string",
"contributions": [
{}
],
"feeder": "string",
"id": "string",
"los": "string",
"max_elevation": "string",
"protocol": "string",
"rates": {
"downlink": "string",
"uplink": "string"
},
"source": "fds",
"station": "string",
"status": "predicted",
"target": "string",
"transceiver": "string",
"updated_at": "string",
"uplink": true
},
"gateway": {
"checked_at": "string",
"gateway": "string",
"reason": "string"
}
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}{
"errors": [
{
"code": "string",
"message": "string",
"help": "string"
}
]
}