Automation
List action revisions
List revisions newest first with rollback eligibility.
List revisions newest first with rollback eligibility. Results include the current marker and compatibility issues. Lists omit source by default; only expand=source includes full source, and other values return 400. Detail endpoints retain full source.
GET /automation/v1/actions/{ns}/{name}/revisions
Authentication
Authorization: Bearer $PRAXIS_API_KEY
Request fields
| Parameter | Type | Description |
|---|---|---|
| path: ns | string | required; Namespace, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}. praxis is read-only. |
| path: name | string | required; Name, folded to lowercase; matches [a-z0-9][a-z0-9._-]{0,63}. |
| query: limit | integer | optional; Page size: integer 1–100, default 20. minimum: 1; maximum: 100 |
| query: cursor | string | optional; Opaque next_cursor from the previous page; keep the original filters when paging. |
| query: expand | "source" | optional; Only source is accepted; source is omitted by default and other values return 400. |
Examples
Set these environment variables to your own resources:
| Variable | Source |
|---|---|
| ACTION_NAME | name returned by creating an action |
: "${ACTION_NAME:?Set ACTION_NAME}"
curl --fail-with-body -X GET "https://api.deepraxis.ai/automation/v1/actions/docs-samples/${ACTION_NAME}/revisions" \
-H "Authorization: Bearer $PRAXIS_API_KEY"import { createAutomationClient } from '@deepraxis/sdk/automation';
function env(name: string): string {
const value = process.env[name];
if (!value) throw new Error(`Set ${name}`);
return value;
}
const automation = createAutomationClient({
apiKey: env('PRAXIS_API_KEY'),
baseUrl: 'https://api.deepraxis.ai',
maxRetries: 0,
timeoutMs: 90_000,
});
const result = await automation.actions.revisions.list({
"path": {
"ns": "docs-samples",
"name": env("ACTION_NAME")
}
});
console.log(result);Response
HTTP 200
Success
application/json
| Field | Type | Description |
|---|---|---|
| data | object[] | required; Action revisions (implementation source only with expand=source) on this page, ordered by created_at descending, then id descending. |
| data[].current | boolean | required; true when this is the action's current revision. |
| data[].rollback | object | required; Whether rolling back to this revision is possible, judged by the server against the current revision. no additional fields. |
| data[].rollback.allowed | boolean | required; true when rolling back to this revision is allowed; when false, issues explains why. |
| data[].rollback.issues | object[] | required; Incompatibilities a rollback would cause, each with pointer and reason; empty when allowed is true. |
| data[].rollback.issues[].pointer | string | required; JSON Pointer (RFC 6901) to the incompatible location, relative to the action's input_schema or output_schema. |
| data[].rollback.issues[].reason | string | required; Why this location is incompatible with earlier revisions (inputs may only widen, outputs may only narrow). |
| data[].id | string | required; Revision id, prefixed actr_; used for display and as the revision of a rollback, and cannot be referenced directly by scripts. |
| data[].digest | string | required; Content digest of the contract and implementation; an update with identical content does not create a new revision. |
| data[].input_schema | object | required; Any JSON object whose keys are strings and whose values are any JSON value. |
| data[].input_schema.* (variant 5) | object | Recursive JSON value. |
| data[].input_schema.* (variant 6)[] | null / string / number / boolean / object / JSON[] | Recursive JSON value. |
| data[].output_schema | object | required; Any JSON object whose keys are strings and whose values are any JSON value. |
| data[].output_schema.* (variant 5) | object | Recursive JSON value. |
| data[].output_schema.* (variant 6)[] | null / string / number / boolean / object / JSON[] | Recursive JSON value. |
| data[].errors | object[] | required; Errors the action declares it may raise, each with type, code and description. |
| data[].errors[].type | string | required; Error type: a stable URI or a standard Open Workflow type such as validation, timeout, communication or runtime. |
| data[].errors[].code | string | optional; Optional stable error code callers can branch on. |
| data[].errors[].description | string | required; What this error means and when it occurs, written for callers. |
| data[].annotations | object | required; Declared action behaviour {read_only, idempotent}; keys not supplied at creation default to false. no additional fields. |
| data[].annotations.read_only | boolean | required; true declares that the action does not change external state and only reads data. |
| data[].annotations.idempotent | boolean | required; true declares that repeating a call with the same input has the same effect as calling once; retries of such a action reuse one idempotency key (run_id plus step path, without the attempt number). |
| data[].timeout_ms | number | required; Timeout of one execution in milliseconds; when not supplied it defaults to 30000 for code and 600000 for container or shell implementations. |
| data[].implementation | object / object / object / object | required; Implementation information: the full implementation or only its kind; lists omit source, so use expand=source or read a single revision. |
| data[].implementation (variant 1) (variant 1).kind | "code" | required; Always code: implemented by source code. |
| data[].implementation (variant 1) (variant 1).language | "ts" | required; Source language; only ts (TypeScript) is supported now. |
| data[].implementation (variant 1) (variant 1).source | string | required; Complete TypeScript source of the action; empty for built-in actions. |
| data[].implementation (variant 1) (variant 2).kind | "container" | required; Always container: implemented as a container image (not yet available). |
| data[].implementation (variant 1) (variant 2).image | string | required; Container image reference. |
| data[].implementation (variant 1) (variant 2).command | string[] | required; Command and arguments to execute in the container. |
| data[].implementation (variant 1) (variant 3).kind | "shell" | required; Always shell: implemented as a shell script (not yet available). |
| data[].implementation (variant 1) (variant 3).script | string | required; Full text of the shell script to run. |
| data[].implementation (variant 2).kind | "code" / "container" / "shell" | required; How an action is implemented. code is a source-code implementation (only language=ts is available now); container is an image plus command and is not yet available; shell is a shell script and is not yet available. |
| data[].host | "builtin" / "isolate" / "sandbox" | required; Where an action runs, computed at publication. builtin is a platform-provided action; isolate runs user code in an isolated Worker isolate; sandbox runs in a sandbox (container and shell implementations). |
| data[].platform_apis | string[] | required; Platform APIs derived from the code; also the scopes of the action's run token (least privilege). |
| data[].created_by | object | required; Principal {type, id} injected by the gateway that says who initiated or acted. This service does not resolve names; the console resolves them in batches. no additional fields. |
| data[].created_by.type | "user" / "api_key" / "agent" / "run" / "trigger" | required; Principal type. user is a signed-in user; api_key is a platform API key; agent is an agent; run is an action performed by a run itself (for example a parent run); trigger is a trigger. |
| data[].created_by.id | string | required; Principal identifier whose meaning follows type: a user, API key, agent, run or trigger id. Treat it as an opaque string. |
| data[].message | null / string | required; Note supplied when this revision was created, or null. |
| data[].created_at | string | required; Time this revision was created (RFC 3339 UTC). |
| next_cursor | null / string | required; Cursor for the next page: pass it unchanged as cursor with the same filters; null when there are no more pages. No total is returned. |
Measured response
HTTP 200
{
"data": [
{
"id": "actr_00mv67lrt1370820a9daaa4fd3882332e4899a4c9e",
"digest": "e35c209873c60486ca8da455878062cb7ea572a6147ce3ca03e0693b4769fa45",
"input_schema": {
"type": "object",
"properties": {
"n": {
"type": "number"
}
},
"required": [
"n"
],
"additionalProperties": false
},
"output_schema": {
"type": "object",
"properties": {
"answer": {
"type": "number"
}
},
"required": [
"answer"
],
"additionalProperties": false
},
"errors": [],
"annotations": {
"read_only": false,
"idempotent": false
},
"timeout_ms": 30000,
"host": "isolate",
"platform_apis": [],
"created_by": {
"type": "api_key",
"id": "key_3e00b8984967"
},
"message": "Sample revision",
"created_at": "2026-10-13T04:57:12.709Z",
"current": true,
"rollback": {
"allowed": true,
"issues": []
},
"implementation": {
"kind": "code"
}
},
{
"id": "actr_00mv67loz3e46938b8ecf54e57b8f31297df016a1c",
"digest": "e35c209873c60486ca8da455878062cb7ea572a6147ce3ca03e0693b4769fa45",
"input_schema": {
"type": "object",
"properties": {
"n": {
"type": "number"
}
},
"required": [
"n"
],
"additionalProperties": false
},
"output_schema": {
"type": "object",
"properties": {
"answer": {
"type": "number"
}
},
"required": [
"answer"
],
"additionalProperties": false
},
"errors": [],
"annotations": {
"read_only": false,
"idempotent": false
},
"timeout_ms": 30000,
"host": "isolate",
"platform_apis": [],
"created_by": {
"type": "api_key",
"id": "key_3e00b8984967"
},
"message": null,
"created_at": "2026-10-13T04:57:09.039Z",
"current": false,
"rollback": {
"allowed": true,
"issues": []
},
"implementation": {
"kind": "code"
}
}
],
"next_cursor": null
}Errors
| HTTP | Codes and description |
|---|---|
| 400 | INVALID_PARAMS: Invalid request parameters, path, cursor, or body format. |
| 404 | ACTION_NOT_FOUND: The action does not exist or is not visible to this tenant; a same-name script/workflow adds a hint pointing to its endpoint. |
| default | RFC 9457 automation problem. 429 includes Retry-After. |
Authentication and common errors · Retain the X-Request-Id response header for troubleshooting.