API

Executions API

Create and query TTCN-3 executions over REST: request schema, verdict payloads, websocket log streaming, and pagination.

7 min read

Create an execution

httphttp
POST /v1/executions HTTP/1.1
Host: api.aeon.cloud
Authorization: Bearer aeon_pat_...
Content-Type: application/json

{
  "build":    "rc3",
  "campaign": "smoke",
  "release":  18,
  "lanes":    4,
  "constraints": { "region": "eu-west-1", "sdr": "lime" },
  "labels":   { "ci": "github", "pr": "482" }
}

Response

jsonjson
{
  "id": "4821",
  "state": "queued",
  "created_at": "2026-07-14T09:11:58Z",
  "campaign": "smoke",
  "case_count": 12,
  "links": {
    "self": "/v1/executions/4821",
    "logs": "wss://api.aeon.cloud/v1/executions/4821/logs",
    "report": "/v1/executions/4821/report"
  }
}

Verdict payload

jsonjson
{
  "id": "4821",
  "state": "verdict",
  "verdict": "fail",
  "duration_s": 214.8,
  "cases": [
    { "id": "TC_6_1_1_1", "verdict": "pass", "duration_s": 14.2 },
    { "id": "TC_6_1_1_2", "verdict": "fail", "duration_s": 31.7,
      "reason": "T3510 expiry, no Registration Accept",
      "clause": "24.501:5.5.1.2.4" }
  ]
}

Stream logs

javascriptjavascript
const ws = new WebSocket(
  "wss://api.aeon.cloud/v1/executions/4821/logs?token=" + token,
);
ws.onmessage = (e) => {
  const { ts, layer, level, text } = JSON.parse(e.data);
  console.log(`[${ts}] ${layer}/${level} ${text}`);
};

Run this against a real SDR lane

The tester is a service, not a box. Push a build, reserve a lane, get a verdict.