Skip to main content

JobResult

Response shape for GET /jobs/{id} and DELETE /jobs/{id}.

result is populated (from result_body) only when status=completed. error is populated (from error_body) only when status=failed. Both are None for all other statuses.

job_idJob Id (string)required
statusJobStatus (string)required

Async job lifecycle status.

Transitions (enforced in JobStore.update_status()): queued → running queued → cancelled running → completed running → failed running → cancelled completed / failed / cancelled → (terminal — no further transitions)

Possible values: [queued, running, completed, failed, cancelled]

result object
anyOf
value objectrequired
anyOf
number
typeConceptOutputType (string)required

Declared output type of a concept. Matches the ConceptResult.type wire values.

Determines which Python type result.value carries: float → float boolean → bool categorical → str (a label from the declared label set)

Possible values: [float, boolean, categorical]

entityEntity (string)required
versionVersion (string)required
deterministicDeterministic (boolean)required
timestamp object
anyOf
string
explanation object
anyOf
output objectrequired
anyOf
number
contributions object
property name*number
nodes object[]
  • Array [
  • node_idNode Id (string)required
    opOp (string)required
    inputsobjectrequired
    paramsobjectrequired
    output_value objectrequired
    anyOf
    number
    output_typeOutput Type (string)required
  • ]
  • traceobject[]
    error object
    anyOf
    error objectrequired

    The inner error object serialised inside ErrorResponse.

    This is the exact shape the API spec requires: { "type": "...", "message": "...", "location": null, "suggestion": null }

    Callers must branch on type, never on message.

    typeErrorType (string)required

    Canonical error type identifiers. The string value is the wire value.

    Rules (from API spec):

    • Callers must branch on .type, never on .message.
    • Message text is for humans; type is for machines.
    • The enum spelling is the ground truth for YAML, HTTP, and Python alike. In particular: z_score (not zscore), not_found (not 404), conflict (not 409).

    Possible values: [syntax_error, type_error, semantic_error, reference_error, parameter_error, graph_error, execution_error, execution_timeout, auth_error, not_found, conflict, rate_limit_exceeded, bounds_exceeded, action_binding_failed]

    messageMessage (string)required
    location object
    anyOf
    string
    suggestion object
    anyOf
    string
    poll_interval_secondsPoll Interval Seconds (integer)
    Default value: 2
    JobResult
    {
    "job_id": "string",
    "status": "queued",
    "result": {
    "value": 0,
    "type": "float",
    "entity": "string",
    "version": "string",
    "deterministic": true,
    "timestamp": "string",
    "explanation": {
    "output": 0,
    "contributions": {},
    "nodes": [
    {
    "node_id": "string",
    "op": "string",
    "inputs": {},
    "params": {},
    "output_value": 0,
    "output_type": "string"
    }
    ],
    "trace": [
    {}
    ]
    }
    },
    "error": {
    "error": {
    "type": "syntax_error",
    "message": "string",
    "location": "string",
    "suggestion": "string"
    }
    },
    "poll_interval_seconds": 2
    }