List executions

GET /v1/executions — recent runs of your decisions with answers, action, reason and metrics, filtered by decision and status and paginated with a cursor. Inputs are never returned.

GET https://api.dcision.io/v1/executions

Lists the executions of the API key's workspace, newest first: each run's answers, action and reason, destinations, status and error code, and metrics. Use it to monitor a deployment, export outcomes to your warehouse or calibrate thresholds against what really happened.

Inputs are never returned

The state of a run may contain personal data, so this endpoint never returns it. Workspace members can see stored inputs in the app's Executions screen.

Request

Query parameters

ParameterDescription
limitExecutions per page, 1 to 100. Default 20.
decisionOnly the executions of the decision with this slug.
statussuccess or error.
cursorThe next_cursor of the previous page, to read the next one.

An invalid value fails with 400 INVALID_REQUEST — for example limit=1000 or a malformed cursor.

curl "https://api.dcision.io/v1/executions?decision=lead-qualification&status=error&limit=50" \
  -H "Authorization: Bearer $DCISION_API_KEY"

Response

200 OK
{
  "data": [
    {
      "execution_id": "exec_8HsT2kQw9ZyR4vMn1cXe",
      "decision": "lead-qualification",
      "version": 1,
      "source": "api",
      "status": "success",
      "error_code": null,
      "result": { "purchase_intent": 0.9412, "priority": "high", "route": "sales" },
      "confidence": { "purchase_intent": 0.8824, "priority": 0.69, "route": 0.85 },
      "action": "continue",
      "action_reason": { "type": "default" },
      "destinations": [
        { "key": "sales_crm", "type": "workflow", "status": "queued", "delivery_id": "dlv_8kJx2mQp4LzN7vR1tY6w" }
      ],
      "metrics": { "latency_ms": 412, "engine": "jev", "model": "jev-1.13.0", "estimated_cost_usd": 0.00001575 },
      "created_at": "2026-10-05T14:03:27.512Z"
    },
    {
      "execution_id": "exec_2Lm7Qw4Xz9Tk1Rb6Vn3C",
      "decision": "lead-qualification",
      "version": 1,
      "source": "api",
      "status": "error",
      "error_code": "INVALID_STATE",
      "result": null,
      "confidence": null,
      "action": null,
      "action_reason": null,
      "destinations": null,
      "metrics": { "latency_ms": 2, "engine": "jev", "model": null, "estimated_cost_usd": 0 },
      "created_at": "2026-10-05T14:01:09.880Z"
    }
  ],
  "next_cursor": "exec_2Lm7Qw4Xz9Tk1Rb6Vn3C"
}
FieldTypeDescription
dataarrayThe executions of this page, newest first.
data[].execution_idstringThe run's ID — the execution_id its response returned.
data[].decisionstringThe decision's slug.
data[].versioninteger or nullThe version that ran; null for Playground runs, which use the draft.
data[].sourcestringapi, webhook (a call to the decision's webhook URL) or playground.
data[].statusstringsuccess or error.
data[].error_codestring or nullThe error code of a failed run.
data[].resultobject or nullThe answers, keyed by question. null for failed runs and when the decision's storeOutput is off.
data[].confidenceobject or nullThe confidence of each answer, with the same rules as result.
data[].actionstring or nullThe action returned; null for failed runs.
data[].action_reasonobject or nullWhy that action was chosen.
data[].destinationsarray or nullThe destination entries the run returned — replies, LLM and agent answers, functions, queued deliveries with their delivery_id, skipped destinations. null when none fired. A queued entry keeps the status it had when the run answered: the delivery's progress is in the app.
data[].metricsobjectlatency_ms, engine, model and estimated_cost_usd of the run.
data[].created_atstringWhen the run happened, ISO 8601.
next_cursorstring or nullPass it as cursor to read the next page; null on the last page.

Failed runs are listed too — invalid states, engine errors — so you can see what your integration sends. A run answered with the engine-error fallback appears with status error and the engine's error code, even though the call itself returned 200.

Only executions still within your log retention are listed.

Destination entries can hold personal data

The state itself is never returned, but destinations is kept as the run returned it — whatever the decision's storeInput and storeOutput settings: function params mapped from the state, fixed replies, LLM texts and agent answers included. Map only the values your code needs into params.

Paginate

async function* executions(params = {}) {
  let cursor;
  do {
    const query = new URLSearchParams({ limit: "100", ...params, ...(cursor ? { cursor } : {}) });
    const page = await fetch(`https://api.dcision.io/v1/executions?${query}`, {
      headers: { Authorization: `Bearer ${process.env.DCISION_API_KEY}` },
    }).then((response) => response.json());
    yield* page.data;
    cursor = page.next_cursor;
  } while (cursor);
}

for await (const run of executions({ decision: "voice-banking", status: "success" })) {
  console.log(run.created_at, run.result?.intent, run.confidence?.intent, run.action);
}

Errors

StatusCodeWhen
400INVALID_REQUESTA query parameter is invalid: limit outside 1–100, a malformed decision slug, status or cursor.
401INVALID_API_KEYThe key is missing, malformed, unknown or revoked.
429RATE_LIMITEDToo many read requests in the current minute.

GET /v1/executions shares the read rate-limit window with GET /v1/me, separate from decisions. A key only sees its own workspace's executions.

On this page