All docsStellar LinkRF bench · by Stellar Systems v0.1.0

API Reference

Reports

Scenario reports (`satlink.report/v1`)

GET/api/v1/reports

List#

Query parameters

limit

integer

Maximum number of rows to return (default 100).

≥ 0

status

string · nullable

Restrict to a specific status (passed, failed, cancelled). Running rows are always filtered out of /reports.

Responses

200OKapplication/json

array of ReportSummaryDRO

run_idrequired

string · uuid

scenario_namerequired

string

profile_ref

string · nullable

Profile referenced by the scenario at the time the run finished, if still known to the daemon's in-memory scenarios map.

statusrequired

string

started_atrequired

string · date-time

ended_at

string · date-time · nullable

duration_ms

integer · int64 · nullable

≥ 0

steps_executed

integer · int32 · nullable

≥ 0

assertions_passed

integer · int32 · nullable

≥ 0

assertions_failed

integer · int32 · nullable

≥ 0

Request

curl "http://192.168.2.1:8080/api/v1/reports"

Response

[
  {
    "run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "scenario_name": "string",
    "profile_ref": "string",
    "status": "string",
    "started_at": "2026-09-29T08:30:00Z",
    "ended_at": "2026-09-29T08:30:00Z",
    "duration_ms": 0,
    "steps_executed": 0,
    "assertions_passed": 0,
    "assertions_failed": 0
  }
]
GET/api/v1/reports/{run_id}

Get one#

Path parameters

run_idrequired

string · uuid

Run identifier

Responses

200OKapplication/json
run_idrequired

string · uuid

scenario_namerequired

string

profile_ref

string · nullable

Profile referenced by the scenario at the time the run finished, if still known to the daemon's in-memory scenarios map.

statusrequired

string

started_atrequired

string · date-time

ended_at

string · date-time · nullable

duration_ms

integer · int64 · nullable

≥ 0

steps_executed

integer · int32 · nullable

≥ 0

assertions_passed

integer · int32 · nullable

≥ 0

assertions_failed

integer · int32 · nullable

≥ 0

has_reportrequired

boolean

true if the run had a persisted report (completed/failed/cancelled).

verifiedrequired

boolean

Whether ANY assertion in this run read the link rather than the scenario's own script. A report that observed nothing is not a pass, and the reader has to be able to tell the two apart.

abortedrequired

boolean

The run did not reach the end of its timeline. Its assertions were written for a whole one, so neither verdict applies.

eventsrequired

array of ExecutionEventDRO

ExecutionEventDRO · 4 fields
elapsed_msrequired

integer · int64

≥ 0

event_id

string · nullable

kindrequired

string

descriptionrequired

string

assertionsrequired

array of AssertionResultDRO

AssertionResultDRO · 4 fields
namerequired

string

passedrequired

boolean

verifiedrequired

boolean

Whether this assertion read the LINK or only the scenario's own timeline.

It was missing from this DTO while scenario_passed required passed && verified on every assertion — so the field that decides the verdict was the one field a caller could not see, and a green run was indistinguishable from a run that had checked the script against itself. That distinction is the entire reason the flag exists.

messagerequired

string

metric_samplesrequired

array of MetricSampleDRO

The board's own trace across the run. EMPTY IS NOT "NOTHING HAPPENED": it means no sampler was attached, which sample_interval_ms == None is how you tell apart.

sample_interval_ms

integer · int64 · nullable

The sampler's nominal tick, beside the samples — a series without its cadence cannot distinguish a slow poll from a stalled board.

≥ 0

source

string

Where this run's numbers came from: "pl", "stub", "mixed", "none".

SERVED, not kept internal. The point of the field is that a report declares its own provenance to whoever reads it — and the reader of a qualification document is usually not the person who ran it.

404Report not foundapplication/json

ApiErrorDRO

Request

curl "http://192.168.2.1:8080/api/v1/reports/3fa85f64-5717-4562-b3fc-2c963f66afa6"

Response

{
  "run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "scenario_name": "string",
  "profile_ref": "string",
  "status": "string",
  "started_at": "2026-09-29T08:30:00Z",
  "ended_at": "2026-09-29T08:30:00Z",
  "duration_ms": 0,
  "steps_executed": 0,
  "assertions_passed": 0,
  "assertions_failed": 0,
  "has_report": true,
  "verified": true,
  "aborted": true,
  "events": [
    {
      "elapsed_ms": 0,
      "event_id": "string",
      "kind": "string",
      "description": "string"
    }
  ],
  "assertions": [
    {
      "name": "string",
      "passed": true,
      "verified": true,
      "message": "string"
    }
  ],
  "metric_samples": [
    {}
  ],
  "sample_interval_ms": 0,
  "source": "string"
}

↑↓ to moveEnter to open