Skip to content

Public API Reference

Readable reference for the Dezycro public REST API, generated at build time from the OpenAPI spec. Prefer firing test requests? Use the interactive explorer.

Dezycro Public API 1.0.0

Endpoint index

Method Endpoint
GET /api/v1/pats
POST /api/v1/pats
DELETE /api/v1/pats/{id}
GET /api/v1/workspaces
GET /api/v1/workspaces/{workspaceId}/activity-items
GET /api/v1/workspaces/{workspaceId}/projects
POST /api/v1/workspaces/{workspaceId}/projects
DELETE /api/v1/workspaces/{workspaceId}/projects/{projectId}
GET /api/v1/workspaces/{workspaceId}/projects/{projectId}
PUT /api/v1/workspaces/{workspaceId}/projects/{projectId}
GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-personas
POST /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-personas
DELETE /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-personas/{personaId}
PUT /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-personas/{personaId}
GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-runs
GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-runs/{runId}/results
GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-runs/{runId}/results/{testCaseId}/log
GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/validation-cases
POST /api/v1/workspaces/{workspaceId}/projects/{projectId}/validation-cases/generate
GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/validation-cases/generate/status/{workflowId}
GET /api/v1/workspaces/{workspaceId}/ui-credential-requests
POST /api/v1/workspaces/{workspaceId}/ui-credential-requests/{requestId}
DELETE /api/v1/workspaces/{workspaceId}/ui-serve-sessions/{featureId}
GET /api/v1/workspaces/{workspaceId}/ui-serve-sessions/{featureId}
PUT /api/v1/workspaces/{workspaceId}/ui-serve-sessions/{featureId}
GET /api/v1/workspaces/{workspaceId}/ui-verify/authoring-runs
POST /api/v1/workspaces/{workspaceId}/ui-verify/authoring-runs
GET /api/v1/workspaces/{workspaceId}/ui-verify/authoring-runs/{authoringRunId}
GET /api/v1/workspaces/{workspaceId}/ui-verify/crawls
POST /api/v1/workspaces/{workspaceId}/ui-verify/crawls
GET /api/v1/workspaces/{workspaceId}/ui-verify/crawls/{crawlRunId}
GET /api/v1/workspaces/{workspaceId}/ui-verify/plan-sets

Public


GET /api/v1/pats

List personal access tokens

Description

Returns your personal access tokens, paginated. Only the token prefix is included — the full secret is shown once, at creation.

Input parameters

Parameter In Type Default Nullable Description
name query string | null Yes Filter by token name (partial match, supports * wildcard)
page query integer 1 No Page number (1-indexed)
size query integer 10 No Number of items per page (1-100, default 10)

Responses

{
    "data": [
        {
            "createdAt": "2022-03-10T12:15:50",
            "id": "82be570a-f4c0-49bd-890c-cc584bb82b7c",
            "lastUsedAt": "2022-03-10T12:15:50",
            "name": "string",
            "scope": "TENANT",
            "token": "string",
            "tokenPrefix": "string",
            "workspaceId": "c0d91cd9-6b27-4b54-9e93-b6bbefd1cfb2"
        }
    ],
    "page": 267,
    "size": 276,
    "totalElements": 129
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/PatDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

POST /api/v1/pats

Create personal access token

Description

Creates a tenant-scoped PAT for API and MCP access. The response includes the full dzy_... secret exactly once — store it now, it cannot be retrieved again. The token inherits your workspace roles on every call.

Request body

{
    "createdAt": "2022-03-10T12:15:50",
    "id": "ca480b75-9e67-46aa-90f5-70a055749a99",
    "lastUsedAt": "2022-03-10T12:15:50",
    "name": "string",
    "scope": "TENANT",
    "token": "string",
    "tokenPrefix": "string",
    "workspaceId": "ef3ff444-9a58-4ade-b9cd-ec026ce7d2c6"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "description": "Personal Access Token",
    "properties": {
        "createdAt": {
            "examples": [
                "2022-03-10T12:15:50"
            ],
            "format": "date-time",
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "lastUsedAt": {
            "examples": [
                "2022-03-10T12:15:50"
            ],
            "format": "date-time",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "scope": {
            "enum": [
                "TENANT",
                "WORKSPACE"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "token": {
            "type": [
                "string",
                "null"
            ]
        },
        "tokenPrefix": {
            "type": [
                "string",
                "null"
            ]
        },
        "workspaceId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "name"
    ],
    "type": "object"
}

Responses

{
    "createdAt": "2022-03-10T12:15:50",
    "id": "8fbba843-1146-404d-bdf3-28c3c9f19783",
    "lastUsedAt": "2022-03-10T12:15:50",
    "name": "string",
    "scope": "TENANT",
    "token": "string",
    "tokenPrefix": "string",
    "workspaceId": "27c3ee1a-5300-4e97-aeb5-9948c8dadcfb"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Personal Access Token",
    "properties": {
        "createdAt": {
            "examples": [
                "2022-03-10T12:15:50"
            ],
            "format": "date-time",
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "lastUsedAt": {
            "examples": [
                "2022-03-10T12:15:50"
            ],
            "format": "date-time",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "scope": {
            "enum": [
                "TENANT",
                "WORKSPACE"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "token": {
            "type": [
                "string",
                "null"
            ]
        },
        "tokenPrefix": {
            "type": [
                "string",
                "null"
            ]
        },
        "workspaceId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "name"
    ],
    "type": "object"
}

DELETE /api/v1/pats/{id}

Revoke personal access token

Description

Permanently revokes a token. Requests using it fail immediately; this cannot be undone.

Input parameters

Parameter In Type Default Nullable Description
id path string No Token ID to revoke

Responses


GET /api/v1/workspaces

List workspaces

Description

Returns all workspaces the current user has access to within the tenant.

Input parameters

Parameter In Type Default Nullable Description
name query string | null Yes Filter workspaces by name (partial match)
page query integer 1 No Page number (1-indexed)
size query integer 10 No Number of items per page (1-100, default 10)

Responses

{
    "data": [
        {
            "id": "d9c13272-f056-48b9-999a-2e9516f78ca5",
            "name": "string",
            "tenantId": "e77f0c72-fc13-4748-9611-8302f43a365c"
        }
    ],
    "page": 184,
    "size": 142,
    "totalElements": 136
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/WorkspaceDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/activity-items

List activity

Description

Long-running operations of the workspace (generations, builds, imports, checks), running first, then newest first. scope=SELF (default) lists the ones the token's user started or joined; scope=WORKSPACE lists everyone's, with who started each. Page size defaults to 10 and is capped at 20; only the newest 1000 items can be paged to, so totalElements saturates at 1000 and pages past them are empty. The response carries an ETag; a request whose If-None-Match matches it gets 304 Not Modified with no body.

Input parameters

Parameter In Type Default Nullable Description
page query integer 1 No Page number (1-indexed)
scope query No Which items to list: SELF (the token's user's own, default) or WORKSPACE (everyone's in the workspace)
size query integer 10 No Number of items per page (1-100, default 10)
workspaceId path string No Workspace ID

Responses

{
    "data": [
        {
            "counts": [
                {
                    "count": "PASSED",
                    "value": 172
                }
            ],
            "dismissible": true,
            "endedAt": "2022-03-10T16:15:50Z",
            "failureCode": "string",
            "featureId": "9857db4a-32c3-4c80-9a92-4149c6df32df",
            "id": "7013f92b-0d70-4dc4-95bb-cc92653bd2f3",
            "kind": "UI_AUTHORING",
            "ownerName": "string",
            "ownerUserId": "296a96bc-108e-4e3f-aa68-f3a8cc9a626f",
            "progress": null,
            "projectId": "788ac261-0356-4f60-b2ae-83fd261379e3",
            "projectName": "string",
            "startedAt": "2022-03-10T16:15:50Z",
            "state": "RUNNING",
            "subjectId": "c2f6377b-1b2c-4017-af7b-d1516f02de14",
            "subjectName": "string",
            "updatedAt": "2022-03-10T16:15:50Z",
            "workspaceId": "8fe542e3-d125-47b4-a6b4-220eea75eff6"
        }
    ],
    "page": 222,
    "size": 203,
    "totalElements": 208
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/ActivityItemDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/projects

List projects

Description

Returns the projects in a workspace, paginated. Use nameWildcard to filter by name (* matches any characters). Archived projects are excluded unless includeArchived is set.

Input parameters

Parameter In Type Default Nullable Description
includeArchived query boolean False No Include archived projects in the results
nameWildcard query string No Filter projects by name; `*` matches any characters (e.g. `pay*`)
page query integer 1 No Page number (1-indexed)
size query integer 10 No Number of items per page (1-100, default 10)
workspaceId path string No Workspace ID

Responses

{
    "data": [
        {
            "description": "string",
            "id": "7043ed4c-feb8-4965-bed5-6882b8af712c",
            "name": "string",
            "status": "ACTIVE",
            "workspaceId": "dec2e453-4256-4f87-9800-25f41e8f0518"
        }
    ],
    "page": 269,
    "size": 63,
    "totalElements": 80
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/ProjectDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

POST /api/v1/workspaces/{workspaceId}/projects

Create project

Description

Creates a new project in the workspace. A project groups features, documents, test personas, and test runs; only name is required.

Input parameters

Parameter In Type Default Nullable Description
workspaceId path string No Workspace ID

Request body

{
    "description": "string",
    "id": "d7557657-1ae6-4a8d-a641-ef0849392f3f",
    "name": "string",
    "status": "ACTIVE",
    "workspaceId": "32308d2a-f02e-4ab1-9691-4f4216daaa32"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "description": "A software project within a workspace — the main organizational unit for test cases and documentation",
    "properties": {
        "description": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "status": {
            "description": "Project lifecycle status",
            "enum": [
                "ACTIVE",
                "ARCHIVED"
            ],
            "type": "string"
        },
        "workspaceId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "name"
    ],
    "type": "object"
}

Responses

{
    "description": "string",
    "id": "a7523767-e535-4a0d-8d29-74eb1eeb2fd6",
    "name": "string",
    "status": "ACTIVE",
    "workspaceId": "2774b332-39a3-4878-ac2c-a4530e537762"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "A software project within a workspace — the main organizational unit for test cases and documentation",
    "properties": {
        "description": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "status": {
            "description": "Project lifecycle status",
            "enum": [
                "ACTIVE",
                "ARCHIVED"
            ],
            "type": "string"
        },
        "workspaceId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "name"
    ],
    "type": "object"
}

DELETE /api/v1/workspaces/{workspaceId}/projects/{projectId}

Delete project

Description

Deletes a project and everything in it — features, documents, and generated test cases. This cannot be undone.

Input parameters

Parameter In Type Default Nullable Description
projectId path string No Project ID
workspaceId path string No Workspace ID

Responses


GET /api/v1/workspaces/{workspaceId}/projects/{projectId}

Get project

Description

Returns a single project by ID.

Input parameters

Parameter In Type Default Nullable Description
projectId path string No Project ID
workspaceId path string No Workspace ID

Responses

{
    "description": "string",
    "id": "2b4f6ef6-9095-4c4a-8191-4181484074c5",
    "name": "string",
    "status": "ACTIVE",
    "workspaceId": "987ba4ea-526f-4aac-9b5c-92f75c063320"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "A software project within a workspace — the main organizational unit for test cases and documentation",
    "properties": {
        "description": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "status": {
            "description": "Project lifecycle status",
            "enum": [
                "ACTIVE",
                "ARCHIVED"
            ],
            "type": "string"
        },
        "workspaceId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "name"
    ],
    "type": "object"
}

PUT /api/v1/workspaces/{workspaceId}/projects/{projectId}

Update project

Description

Updates a project's name, description, or archived state. Fields omitted from the body are left unchanged.

Input parameters

Parameter In Type Default Nullable Description
projectId path string No Project ID
workspaceId path string No Workspace ID

Request body

{
    "description": "string",
    "id": "7c12d580-addb-416d-ae99-9c1acf022b8f",
    "name": "string",
    "status": "ACTIVE",
    "workspaceId": "6b5f2f8a-2abc-4eb9-b89d-c963fe5372a1"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "description": "A software project within a workspace — the main organizational unit for test cases and documentation",
    "properties": {
        "description": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "status": {
            "description": "Project lifecycle status",
            "enum": [
                "ACTIVE",
                "ARCHIVED"
            ],
            "type": "string"
        },
        "workspaceId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "name"
    ],
    "type": "object"
}

Responses

{
    "description": "string",
    "id": "659e7d4f-1e81-4a3c-9a99-3e0de5959678",
    "name": "string",
    "status": "ACTIVE",
    "workspaceId": "c2dac378-3572-40e8-b9c4-933fabf4b9d0"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "A software project within a workspace — the main organizational unit for test cases and documentation",
    "properties": {
        "description": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "status": {
            "description": "Project lifecycle status",
            "enum": [
                "ACTIVE",
                "ARCHIVED"
            ],
            "type": "string"
        },
        "workspaceId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "name"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-personas

List test personas

Description

Returns the test personas visible to a project, paginated — including personas inherited from the workspace and tenant scopes.

Input parameters

Parameter In Type Default Nullable Description
name query string | null Yes Filter by persona name (partial match)
page query integer 1 No Page number (1-indexed)
projectId path string No Project ID
scope query string | null Yes Persona scope filter (TENANT, WORKSPACE, or PROJECT)
size query integer 10 No Number of items per page (1-100, default 10)
workspaceId path string No Workspace ID

Responses

{
    "data": [
        {
            "authType": "BEARER",
            "credentialSource": "ENV",
            "description": "string",
            "envVar": "string",
            "id": "3a4f5f97-5aae-46a0-a118-d6ed82e7eb60",
            "name": "string",
            "projectId": "a5374b8f-2ff8-4191-bf7d-22d79a0c12f3",
            "scope": "TENANT",
            "script": "string",
            "uiAuth": null
        }
    ],
    "page": 41,
    "size": 244,
    "totalElements": 256
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/TestPersonaDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

POST /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-personas

Create test persona

Description

Creates a test persona: a named identity that generated tests and the verifier authenticate as when exercising your API. The persona names where its credentials come from (an environment variable, or a script your CLI runs); Dezycro stores no credential.

Input parameters

Parameter In Type Default Nullable Description
projectId path string No Project ID
workspaceId path string No Workspace ID

Request body

{
    "authType": "BEARER",
    "credentialSource": "ENV",
    "description": "string",
    "envVar": "string",
    "id": "5cd02593-7e92-45d9-b124-798ca896f214",
    "name": "string",
    "projectId": "98500dfd-daf2-4dbe-96c8-4adeee881c9b",
    "scope": "TENANT",
    "script": "string",
    "uiAuth": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "description": "Test persona for authentication in generated tests",
    "properties": {
        "authType": {
            "enum": [
                "BEARER",
                "BASIC",
                "HEADER",
                "HTTP_ENDPOINT",
                "JS",
                "NONE"
            ],
            "type": "string"
        },
        "credentialSource": {
            "enum": [
                "ENV",
                "SCRIPT"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "description": {
            "type": "string"
        },
        "envVar": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "projectId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "scope": {
            "enum": [
                "TENANT",
                "WORKSPACE",
                "PROJECT"
            ],
            "type": "string"
        },
        "script": {
            "type": [
                "string",
                "null"
            ]
        },
        "uiAuth": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiAuthRecipeDto"
                },
                {
                    "type": "null"
                }
            ]
        }
    },
    "required": [
        "name",
        "description",
        "authType",
        "scope"
    ],
    "type": "object"
}

Responses

{
    "authType": "BEARER",
    "credentialSource": "ENV",
    "description": "string",
    "envVar": "string",
    "id": "32a7499e-f08a-422e-bf86-2f3e61a2e4e4",
    "name": "string",
    "projectId": "22dd71a5-ed4e-4c0b-bb2f-41be741af883",
    "scope": "TENANT",
    "script": "string",
    "uiAuth": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Test persona for authentication in generated tests",
    "properties": {
        "authType": {
            "enum": [
                "BEARER",
                "BASIC",
                "HEADER",
                "HTTP_ENDPOINT",
                "JS",
                "NONE"
            ],
            "type": "string"
        },
        "credentialSource": {
            "enum": [
                "ENV",
                "SCRIPT"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "description": {
            "type": "string"
        },
        "envVar": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "projectId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "scope": {
            "enum": [
                "TENANT",
                "WORKSPACE",
                "PROJECT"
            ],
            "type": "string"
        },
        "script": {
            "type": [
                "string",
                "null"
            ]
        },
        "uiAuth": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiAuthRecipeDto"
                },
                {
                    "type": "null"
                }
            ]
        }
    },
    "required": [
        "name",
        "description",
        "authType",
        "scope"
    ],
    "type": "object"
}

DELETE /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-personas/{personaId}

Delete test persona

Description

Deletes a persona. Test plans that referenced it fall back to the project's remaining personas on the next generation or run.

Input parameters

Parameter In Type Default Nullable Description
personaId path string No Persona ID
projectId path string No Project ID
workspaceId path string No Workspace ID

Responses


PUT /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-personas/{personaId}

Update test persona

Description

Updates a persona's name, role, or the place its credentials come from (an environment variable, or a script your CLI runs). Fields omitted from the body are left unchanged. Dezycro stores no credential.

Input parameters

Parameter In Type Default Nullable Description
personaId path string No Persona ID
projectId path string No Project ID
workspaceId path string No Workspace ID

Request body

{
    "authType": "BEARER",
    "credentialSource": "ENV",
    "description": "string",
    "envVar": "string",
    "id": "edd0fcaf-58d8-4497-8ad9-2d01bbefa23f",
    "name": "string",
    "projectId": "15f83312-89a4-4c8c-b2b4-9bcbbdce02a8",
    "scope": "TENANT",
    "script": "string",
    "uiAuth": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "description": "Test persona for authentication in generated tests",
    "properties": {
        "authType": {
            "enum": [
                "BEARER",
                "BASIC",
                "HEADER",
                "HTTP_ENDPOINT",
                "JS",
                "NONE"
            ],
            "type": "string"
        },
        "credentialSource": {
            "enum": [
                "ENV",
                "SCRIPT"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "description": {
            "type": "string"
        },
        "envVar": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "projectId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "scope": {
            "enum": [
                "TENANT",
                "WORKSPACE",
                "PROJECT"
            ],
            "type": "string"
        },
        "script": {
            "type": [
                "string",
                "null"
            ]
        },
        "uiAuth": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiAuthRecipeDto"
                },
                {
                    "type": "null"
                }
            ]
        }
    },
    "required": [
        "name",
        "description",
        "authType",
        "scope"
    ],
    "type": "object"
}

Responses

{
    "authType": "BEARER",
    "credentialSource": "ENV",
    "description": "string",
    "envVar": "string",
    "id": "b33d2e22-db74-44a6-aea7-cb9193b52914",
    "name": "string",
    "projectId": "ec1000d5-92df-4939-abd7-d89f81f7b558",
    "scope": "TENANT",
    "script": "string",
    "uiAuth": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Test persona for authentication in generated tests",
    "properties": {
        "authType": {
            "enum": [
                "BEARER",
                "BASIC",
                "HEADER",
                "HTTP_ENDPOINT",
                "JS",
                "NONE"
            ],
            "type": "string"
        },
        "credentialSource": {
            "enum": [
                "ENV",
                "SCRIPT"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "description": {
            "type": "string"
        },
        "envVar": {
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "name": {
            "type": "string"
        },
        "projectId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "scope": {
            "enum": [
                "TENANT",
                "WORKSPACE",
                "PROJECT"
            ],
            "type": "string"
        },
        "script": {
            "type": [
                "string",
                "null"
            ]
        },
        "uiAuth": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiAuthRecipeDto"
                },
                {
                    "type": "null"
                }
            ]
        }
    },
    "required": [
        "name",
        "description",
        "authType",
        "scope"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-runs

List test runs

Description

Returns the project's verifier and regression test runs, newest first, paginated. Each run includes its status and pass/fail counts; fetch per-test detail with the run's results endpoint.

Input parameters

Parameter In Type Default Nullable Description
page query integer 1 No Page number (1-indexed)
projectId path string No Project ID
size query integer 10 No Number of items per page (1-100, default 10)
sort query string | null Yes Sort order, `:` (default: start time, newest first)
startedAfter query string | null Yes Only runs started after this ISO-8601 instant
startedBefore query string | null Yes Only runs started before this ISO-8601 instant
status query string | null Yes Filter by run status (e.g. RUNNING, COMPLETED, FAILED)
workspaceId path string No Workspace ID

Responses

{
    "data": [
        {
            "branch": "string",
            "commitId": "string",
            "completedAt": "2022-03-10T16:15:50Z",
            "durationMs": 228,
            "failed": 31,
            "imageTag": "string",
            "passed": 44,
            "projectId": "2b01f466-393b-4f54-b72d-74be55c985ac",
            "runId": "ff8bba02-92a3-41c7-8f55-39c10652d96f",
            "skipped": 47,
            "startedAt": "2022-03-10T16:15:50Z",
            "status": "string",
            "tenantId": "a90549ae-6051-43a4-8aff-7ff532b04800",
            "totalTests": 172
        }
    ],
    "page": 198,
    "size": 155,
    "totalElements": 177
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/TestRunDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-runs/{runId}/results

List test results for a run

Description

Returns the per-test-case results of one run, paginated: verdict, duration, and failure details for each executed test case.

Input parameters

Parameter In Type Default Nullable Description
page query integer 1 No Page number (1-indexed)
projectId path string No Project ID
runId path string No Test run ID
size query integer 10 No Number of items per page (1-100, default 10)
status query string | null Yes Filter by result status (e.g. PASSED, FAILED, SKIPPED)
testCaseName query string | null Yes Filter by test case name (partial match)
workspaceId path string No Workspace ID

Responses

{
    "data": [
        {
            "durationMs": 54,
            "endedAt": "2022-03-10T16:15:50Z",
            "errorMessage": "string",
            "journeyRef": "string",
            "logUrl": "string",
            "runId": "8ea982a6-a4ed-40c0-8b3c-ff2cc15216fa",
            "startedAt": "2022-03-10T16:15:50Z",
            "status": "string",
            "stepTraces": [
                {
                    "durationMs": 191,
                    "error": "string",
                    "expectedStatus": 8,
                    "method": "string",
                    "passed": true,
                    "path": "string",
                    "requestBody": "string",
                    "requestHeaders": {},
                    "responseBody": "string",
                    "responseHeaders": {},
                    "statusCode": 36,
                    "stepDescription": "string",
                    "testCaseStepIndex": 232,
                    "timestamp": "string"
                }
            ],
            "testCaseId": "ec208727-ac87-4c00-ae83-71e3da0b546e",
            "testName": "string"
        }
    ],
    "page": 179,
    "size": 31,
    "totalElements": 91
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/TestCaseResultDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/test-runs/{runId}/results/{testCaseId}/log

Get test case log download URL

Description

Returns a short-lived signed URL for downloading the full execution log of one test case in a run. Fetch the URL promptly — it expires.

Input parameters

Parameter In Type Default Nullable Description
projectId path string No Project ID
runId path string No Test run ID
testCaseId path string No Test case ID
workspaceId path string No Workspace ID

Responses

Schema of the response body
{
    "additionalProperties": {
        "type": "string"
    },
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/validation-cases

List validation cases

Description

Returns the AI-generated validation (test) cases for a project, paginated. Filter by feature to see the cases derived from one feature's requirements.

Input parameters

Parameter In Type Default Nullable Description
featureId query string | null Yes Filter by feature ID
page query integer 1 No Page number (1-indexed)
projectId path string No Project ID
size query integer 10 No Number of items per page (1-100, default 10)
status query string | null Yes Filter by status
workspaceId path string No Workspace ID

Responses

{
    "data": [
        {
            "assertionsFromPrd": [
                {
                    "description": "string",
                    "graphCaptured": true,
                    "prdQuote": "string",
                    "type": "string"
                }
            ],
            "coverageFlags": [
                "string"
            ],
            "dataExpectations": [
                "string"
            ],
            "description": "string",
            "edgeCasesFromPrd": [
                "string"
            ],
            "enrichmentModelVersion": "string",
            "featureId": "900775b8-4c6a-4d61-9d31-d136c9f462e7",
            "generatedAt": "2022-03-10T16:15:50Z",
            "globalConstraints": [
                "string"
            ],
            "id": "246966c7-3a0f-495a-bd2c-b93d20d13fcf",
            "name": "string",
            "outcomeType": "string",
            "pathClass": "string",
            "postConditions": [
                "string"
            ],
            "preConditions": [
                "string"
            ],
            "priority": "string",
            "projectId": "aa684c30-86a1-4776-bfcd-4ba6ef9881bc",
            "riskIndicator": "string",
            "roleRequirement": "string",
            "sectionRefs": [
                {
                    "prdQuote": "string",
                    "sectionHeading": "string",
                    "sectionIndex": 20
                }
            ],
            "sourceContentHash": "string",
            "sourceDecisionRef": "string",
            "sourceJourneyId": "string",
            "sourcePrdId": "7fcd4977-f1aa-4f5a-873d-c01a85b2ce66",
            "status": "string",
            "stepsFromGraph": [
                "string"
            ],
            "type": "string",
            "workspaceId": "05d8de47-47d9-491c-b766-4bdff2ed3d99"
        }
    ],
    "page": 134,
    "size": 1,
    "totalElements": 101
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/ValidationCaseDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

POST /api/v1/workspaces/{workspaceId}/projects/{projectId}/validation-cases/generate

Trigger validation case generation

Description

Starts asynchronous generation of validation cases from a feature's requirements. Returns a workflowId immediately — poll the status endpoint to track progress, then list validation cases to see the results. The feature should have completed PRD/TRD documents first.

Input parameters

Parameter In Type Default Nullable Description
projectId path string No Project ID
workspaceId path string No Workspace ID

Request body

{
    "featureId": "f4e2fde3-231d-4d93-8028-6aac42169554"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "description": "Request body for triggering validation case generation",
    "properties": {
        "featureId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": "string"
        }
    },
    "required": [
        "featureId"
    ],
    "type": "object"
}

Responses

{
    "workflowId": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "workflowId": {
            "type": "string"
        }
    },
    "required": [
        "workflowId"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/projects/{projectId}/validation-cases/generate/status/{workflowId}

Get validation case generation status

Description

Returns the progress of a generation started via the generate endpoint: current phase and whether it is still running, completed, or failed.

Input parameters

Parameter In Type Default Nullable Description
projectId path string No Project ID
workflowId path string No Workflow ID returned by the generate endpoint
workspaceId path string No Workspace ID

Responses

{
    "enrichedCases": 51,
    "message": "string",
    "persistedCases": 0,
    "phase": "string",
    "status": "string",
    "totalSkeletons": 230
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Status of a validation case generation workflow",
    "properties": {
        "enrichedCases": {
            "format": "int32",
            "type": "integer"
        },
        "message": {
            "type": "string"
        },
        "persistedCases": {
            "format": "int32",
            "type": "integer"
        },
        "phase": {
            "type": [
                "string",
                "null"
            ]
        },
        "status": {
            "type": "string"
        },
        "totalSkeletons": {
            "format": "int32",
            "type": "integer"
        }
    },
    "required": [
        "status",
        "message"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/ui-credential-requests

List pending UI credential requests

Description

Returns the open just-in-time credential requests of the UI runs and crawls filed under the feature or app that the caller started (optionally one run). Each entry asks for ONE login field of one persona: its key and label, where its value comes from (an environment variable or a command your CLI resolves), the run and the app it targets, and the ephemeral public key to encrypt against. Requests of runs and crawls someone else started are never listed.

Input parameters

Parameter In Type Default Nullable Description
featureId query string No Feature or app whose UI runs and crawls to list requests of
runId query string | null Yes Only the requests of this run (its workflow id)
workspaceId path string No Workspace ID

Responses

[
    {
        "appUrl": "string",
        "expiresAt": "2022-03-10T16:15:50Z",
        "fieldKey": "string",
        "fieldLabel": "string",
        "personaId": "string",
        "personaName": "string",
        "publicKey": "string",
        "registeredAppOrigin": "string",
        "requestId": "1c39a943-39e8-4fc6-9c43-9391f316822c",
        "runId": "string",
        "source": null
    }
]
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "items": {
        "$ref": "#/components/schemas/UiCredentialRequestViewDto"
    },
    "type": "array"
}

POST /api/v1/workspaces/{workspaceId}/ui-credential-requests/{requestId}

Deliver a credential for a pending request

Description

Body {"jwe": ""}: RSA-OAEP-256 + A256GCM over {"schema":"dezycro.persona-credentials/2","fields":{"":""}} with exactly the requested field, encrypted against the request's public key (kid, when set, is the requestId; no zip; at most 16 KiB). 404 when the request is unknown, expired or not started by the caller, 409 when already fulfilled, 422 when the envelope is not a valid delivery. Only the private key of the worker that asked (a run worker, or the crawl's explorer) can open it.

Input parameters

Parameter In Type Default Nullable Description
requestId path string No Credential request ID
workspaceId path string No Workspace ID

Request body

{
    "jwe": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "jwe": {
            "type": "string"
        }
    },
    "required": [
        "jwe"
    ],
    "type": "object"
}

Responses


DELETE /api/v1/workspaces/{workspaceId}/ui-serve-sessions/{featureId}

End this machine's serve session

Description

Deletes the caller's session of the feature, and the override when it is the caller's. 404 when the caller has none.

Input parameters

Parameter In Type Default Nullable Description
featureId path string No Feature the session serves
workspaceId path string No Workspace ID

Responses


GET /api/v1/workspaces/{workspaceId}/ui-serve-sessions/{featureId}

The feature's live override and the caller's own session

Description

override drives the target badge (null: runs go to the project's test app); mine is the caller's own session (credential-only or the override), null when none.

Input parameters

Parameter In Type Default Nullable Description
featureId path string No Feature whose sessions to read
workspaceId path string No Workspace ID

Responses

{
    "mine": null,
    "override": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "mine": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiServeSessionDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "override": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiServeSessionDto"
                },
                {
                    "type": "null"
                }
            ]
        }
    },
    "type": "object"
}

PUT /api/v1/workspaces/{workspaceId}/ui-serve-sessions/{featureId}

Announce or refresh this machine's serve session

Description

Upserts the caller's serve session of the feature for 30 s (the client heartbeats every 10 s). With appUrl it is the feature's override: browser runs started while it lives go to appUrl. 400 APP_URL_INVALID when appUrl is not an absolute http(s) URL, or carries userinfo, a query or a fragment; 400 APP_URL_UNREACHABLE when its host is one Dezycro's browsers cannot be sent to; 404 FEATURE_NOT_IN_WORKSPACE; 409 FEATURE_ALREADY_SERVED when another user's override is live (only with appUrl; the body names who and from where). A credential-only session (no appUrl) is never refused for another user's. Each refusal's body is {problem, message}.

Input parameters

Parameter In Type Default Nullable Description
featureId path string No Feature the session serves
workspaceId path string No Workspace ID

Request body

{
    "appUrl": "string",
    "clientVersion": "string",
    "machine": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "description": "A serve client announcing itself",
    "properties": {
        "appUrl": {
            "maxLength": 2048,
            "type": [
                "string",
                "null"
            ]
        },
        "clientVersion": {
            "type": "string"
        },
        "machine": {
            "type": "string"
        }
    },
    "required": [
        "machine",
        "clientVersion"
    ],
    "type": "object"
}

Responses

{
    "appUrl": "string",
    "expiresAt": "2022-03-10T16:15:50Z",
    "featureId": "79cf8d4b-026e-4231-88d7-ae5cd8c95479",
    "machine": "string",
    "servedBy": "string",
    "startedAt": "2022-03-10T16:15:50Z"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "appUrl": {
            "type": [
                "string",
                "null"
            ]
        },
        "expiresAt": {
            "examples": [
                "2022-03-10T16:15:50Z"
            ],
            "format": "date-time",
            "type": "string"
        },
        "featureId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": "string"
        },
        "machine": {
            "type": "string"
        },
        "servedBy": {
            "type": "string"
        },
        "startedAt": {
            "examples": [
                "2022-03-10T16:15:50Z"
            ],
            "format": "date-time",
            "type": "string"
        }
    },
    "required": [
        "featureId",
        "servedBy",
        "machine",
        "startedAt",
        "expiresAt"
    ],
    "type": "object"
}

{
    "appUrl": "string",
    "machine": "string",
    "message": "string",
    "problem": "APP_URL_INVALID",
    "servedBy": "string",
    "startedAt": "2022-03-10T16:15:50Z"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "appUrl": {
            "type": [
                "string",
                "null"
            ]
        },
        "machine": {
            "type": [
                "string",
                "null"
            ]
        },
        "message": {
            "type": "string"
        },
        "problem": {
            "enum": [
                "APP_URL_INVALID",
                "APP_URL_UNREACHABLE",
                "FEATURE_NOT_IN_WORKSPACE",
                "FEATURE_ALREADY_SERVED"
            ],
            "type": "string"
        },
        "servedBy": {
            "type": [
                "string",
                "null"
            ]
        },
        "startedAt": {
            "examples": [
                "2022-03-10T16:15:50Z"
            ],
            "format": "date-time",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "problem",
        "message"
    ],
    "type": "object"
}

{
    "appUrl": "string",
    "machine": "string",
    "message": "string",
    "problem": "APP_URL_INVALID",
    "servedBy": "string",
    "startedAt": "2022-03-10T16:15:50Z"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "appUrl": {
            "type": [
                "string",
                "null"
            ]
        },
        "machine": {
            "type": [
                "string",
                "null"
            ]
        },
        "message": {
            "type": "string"
        },
        "problem": {
            "enum": [
                "APP_URL_INVALID",
                "APP_URL_UNREACHABLE",
                "FEATURE_NOT_IN_WORKSPACE",
                "FEATURE_ALREADY_SERVED"
            ],
            "type": "string"
        },
        "servedBy": {
            "type": [
                "string",
                "null"
            ]
        },
        "startedAt": {
            "examples": [
                "2022-03-10T16:15:50Z"
            ],
            "format": "date-time",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "problem",
        "message"
    ],
    "type": "object"
}

{
    "appUrl": "string",
    "machine": "string",
    "message": "string",
    "problem": "APP_URL_INVALID",
    "servedBy": "string",
    "startedAt": "2022-03-10T16:15:50Z"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "appUrl": {
            "type": [
                "string",
                "null"
            ]
        },
        "machine": {
            "type": [
                "string",
                "null"
            ]
        },
        "message": {
            "type": "string"
        },
        "problem": {
            "enum": [
                "APP_URL_INVALID",
                "APP_URL_UNREACHABLE",
                "FEATURE_NOT_IN_WORKSPACE",
                "FEATURE_ALREADY_SERVED"
            ],
            "type": "string"
        },
        "servedBy": {
            "type": [
                "string",
                "null"
            ]
        },
        "startedAt": {
            "examples": [
                "2022-03-10T16:15:50Z"
            ],
            "format": "date-time",
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "problem",
        "message"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/ui-verify/authoring-runs

List the feature's authoring runs

Description

Newest first: each with its status, how many cells are in each state, its tokens and where its whole batch stands (batchStatus). With batchId, only the runs of that batch, in chunk order.

Input parameters

Parameter In Type Default Nullable Description
batchId query string | null Yes Only the runs of this batch
featureId query string No Feature whose runs to list
page query integer 1 No Page number (1-indexed)
size query integer 10 No Number of items per page (1-100, default 10)
workspaceId path string No Workspace ID

Responses

{
    "data": [
        {
            "batchId": "5ceeed13-60bf-4fdf-a613-7a037eeda1fc",
            "batchStatus": "RUNNING",
            "cells": {
                "authored": 240,
                "awaitingCredentials": 186,
                "awaitingProducer": 223,
                "awaitingTwin": 76,
                "derived": 80,
                "failed": 184,
                "imported": 290,
                "notImported": 89,
                "pending": 153,
                "running": 245,
                "stopped": 69,
                "total": 105
            },
            "chunkCount": 175,
            "chunkIndex": 100,
            "createdAt": "2022-03-10T16:15:50Z",
            "endedAt": "2022-03-10T16:15:50Z",
            "id": "be9a37de-a881-47f4-a4a3-33512d8f805b",
            "servedAppUrl": "string",
            "servedBy": "string",
            "servedMachine": "string",
            "status": "QUEUED",
            "tokens": {
                "intake": {
                    "calls": 53,
                    "completionTokens": 168,
                    "promptTokens": 11
                },
                "proposals": null,
                "repairs": null,
                "total": null
            }
        }
    ],
    "page": 293,
    "size": 120,
    "totalElements": 233
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "description": "Paginated list response wrapper",
    "properties": {
        "data": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringRunSummaryDto"
            },
            "type": "array"
        },
        "page": {
            "format": "int32",
            "type": "integer"
        },
        "size": {
            "format": "int32",
            "type": "integer"
        },
        "totalElements": {
            "format": "int64",
            "type": "integer"
        }
    },
    "required": [
        "data",
        "page",
        "size",
        "totalElements"
    ],
    "type": "object"
}

POST /api/v1/workspaces/{workspaceId}/ui-verify/authoring-runs

Author the feature's UI tests

Description

Starts an authoring run over the feature's journeys and personas (inferred cells), or only previews it with dryRun. appId may be left out when the project has exactly one TEST app. 202 with the run and its workflow (a dry run included: nothing is started, authoringRunId is null); each login field's source (never a value) is listed in credentialSources, so the customer's client can be made ready. 409 while a run of the feature is in progress. 422 with the closed problem when the request is not one (APP_AMBIGUOUS lists the apps to choose between).

Input parameters

Parameter In Type Default Nullable Description
featureId query string No Feature whose journeys to author
workspaceId path string No Workspace ID

Request body

{
    "appId": "2c77ba43-e907-4ef7-9c92-122d2ecc829f",
    "cells": [
        {
            "expectation": "ALLOWED",
            "journeyId": "string",
            "personaId": "string"
        }
    ],
    "dryRun": true,
    "projectId": "4956b2ea-1620-4f9b-9d32-e800b4d7d443"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "appId": {
            "format": "uuid",
            "type": "string"
        },
        "cells": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringCellRequestDto"
            },
            "type": "array"
        },
        "dryRun": {
            "type": "boolean"
        },
        "projectId": {
            "format": "uuid",
            "type": "string"
        }
    },
    "required": [
        "dryRun",
        "projectId"
    ],
    "type": "object"
}

Responses

{
    "apps": [
        {
            "appId": "da59ae07-7275-462e-8e3e-d24b9d6d3200",
            "appUrl": "string",
            "name": "string"
        }
    ],
    "authoringRunId": "017e366f-22c4-4a04-b9fb-3803ab6b467d",
    "cells": [
        {
            "evidence": "string",
            "expectation": "ALLOWED",
            "journeyId": "string",
            "personaId": "string",
            "reason": "LOGIN_UNSUPPORTED",
            "source": "JOURNEY_TEXT"
        }
    ],
    "chunks": 219,
    "credentialSources": [
        {
            "configured": true,
            "envVar": "string",
            "fieldKey": "string",
            "label": "string",
            "personaId": "string",
            "source": "ENV"
        }
    ],
    "problem": "APP_NOT_FOUND",
    "unsupportedLogins": [
        {
            "loginKind": "SUPPORTED",
            "personaId": "string"
        }
    ],
    "workflowId": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "apps": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringAppChoiceDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "authoringRunId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "cells": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringInferredCellDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "chunks": {
            "format": "int32",
            "type": [
                "integer",
                "null"
            ]
        },
        "credentialSources": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringCredentialSourceDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "problem": {
            "enum": [
                "APP_NOT_FOUND",
                "APP_NOT_TEST",
                "APP_URL_REFUSED",
                "NO_CELLS",
                "TOO_MANY_CELLS",
                "DUPLICATE_CELL",
                "JOURNEY_UNKNOWN",
                "PERSONA_UNKNOWN",
                "PERSONA_NO_BROWSER_LOGIN",
                "DENIED_WITHOUT_ALLOWED",
                "NOTHING_TO_TEST",
                "NO_LOGIN_PERSONA",
                "APP_AMBIGUOUS"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "unsupportedLogins": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringUnsupportedLoginDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "workflowId": {
            "type": [
                "string",
                "null"
            ]
        }
    },
    "type": "object"
}

{
    "apps": [
        {
            "appId": "e0925356-0964-4d17-8b7d-2640c007ae66",
            "appUrl": "string",
            "name": "string"
        }
    ],
    "authoringRunId": "558791e0-3029-4d77-b944-8c3865519c08",
    "cells": [
        {
            "evidence": "string",
            "expectation": "ALLOWED",
            "journeyId": "string",
            "personaId": "string",
            "reason": "LOGIN_UNSUPPORTED",
            "source": "JOURNEY_TEXT"
        }
    ],
    "chunks": 26,
    "credentialSources": [
        {
            "configured": true,
            "envVar": "string",
            "fieldKey": "string",
            "label": "string",
            "personaId": "string",
            "source": "ENV"
        }
    ],
    "problem": "APP_NOT_FOUND",
    "unsupportedLogins": [
        {
            "loginKind": "SUPPORTED",
            "personaId": "string"
        }
    ],
    "workflowId": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "apps": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringAppChoiceDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "authoringRunId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "cells": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringInferredCellDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "chunks": {
            "format": "int32",
            "type": [
                "integer",
                "null"
            ]
        },
        "credentialSources": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringCredentialSourceDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "problem": {
            "enum": [
                "APP_NOT_FOUND",
                "APP_NOT_TEST",
                "APP_URL_REFUSED",
                "NO_CELLS",
                "TOO_MANY_CELLS",
                "DUPLICATE_CELL",
                "JOURNEY_UNKNOWN",
                "PERSONA_UNKNOWN",
                "PERSONA_NO_BROWSER_LOGIN",
                "DENIED_WITHOUT_ALLOWED",
                "NOTHING_TO_TEST",
                "NO_LOGIN_PERSONA",
                "APP_AMBIGUOUS"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "unsupportedLogins": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringUnsupportedLoginDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "workflowId": {
            "type": [
                "string",
                "null"
            ]
        }
    },
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/ui-verify/authoring-runs/{authoringRunId}

Get one authoring run

Description

The run's journeys with their intake and cells (state, closed stop code, imported run and verdict), what each journey and the whole run cost in tokens, the per-journey token budget and where its whole batch stands (batchStatus).

Input parameters

Parameter In Type Default Nullable Description
authoringRunId path string No Authoring run ID
featureId query string No Feature the run belongs to
workspaceId path string No Workspace ID

Responses

{
    "appId": "355089c8-e53d-4ccc-b744-893db739e8cc",
    "batchId": "d4ca2a38-26a1-42fd-b2b5-eacbd7ed0ab3",
    "batchStatus": "RUNNING",
    "chunkCount": 266,
    "chunkIndex": 149,
    "createdAt": "2022-03-10T16:15:50Z",
    "endedAt": "2022-03-10T16:15:50Z",
    "failure": "PREPARE_FAILED",
    "id": "ca24b4b4-196e-4cd1-9033-dab06e2660b9",
    "journeys": [
        {
            "cells": [
                {
                    "causeJobId": "971bb473-d08a-405b-86bb-e933ecaa399b",
                    "causeJudgement": "JOURNEY",
                    "credentialSource": "ENV",
                    "expectation": "ALLOWED",
                    "fixOwner": "APP_DECLARATIONS",
                    "jobId": "e508ef69-10af-4fc2-927c-e583bd8678af",
                    "judgement": "JOURNEY",
                    "kind": "INTAKE",
                    "personaId": "string",
                    "planId": "string",
                    "readsFrom": [
                        {
                            "jobId": "e5bc97c6-e4bf-42e3-9b22-354f1ce93809",
                            "journeyId": "string",
                            "journeyTitle": "string",
                            "planId": "string"
                        }
                    ],
                    "repairs": 272,
                    "runRowId": "e75051c9-55c1-46f0-a698-7d923ed47463",
                    "state": "PENDING",
                    "stopCode": "LEDGER_INVALID",
                    "stopDetail": "string",
                    "stopKind": "UNDECLARED_WRITE",
                    "stopStep": null,
                    "tokens": null,
                    "undeclaredRequests": [
                        {
                            "method": "POST",
                            "path": "string"
                        }
                    ],
                    "verdictKind": "PASS",
                    "verdictReason": "EVIDENCE_INTEGRITY"
                }
            ],
            "intake": null,
            "journeyId": "string",
            "title": "string",
            "tokens": {
                "intake": {
                    "calls": 127,
                    "completionTokens": 165,
                    "promptTokens": 173
                },
                "proposals": null,
                "repairs": null,
                "total": null
            }
        }
    ],
    "servedAppUrl": "string",
    "servedBy": "string",
    "servedMachine": "string",
    "status": "QUEUED",
    "tokenBudgetPerJourney": 228,
    "tokens": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "appId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": "string"
        },
        "batchId": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": [
                "string",
                "null"
            ]
        },
        "batchStatus": {
            "enum": [
                "RUNNING",
                "DONE",
                "FAILED"
            ],
            "type": "string"
        },
        "chunkCount": {
            "format": "int32",
            "type": [
                "integer",
                "null"
            ]
        },
        "chunkIndex": {
            "format": "int32",
            "type": [
                "integer",
                "null"
            ]
        },
        "createdAt": {
            "examples": [
                "2022-03-10T16:15:50Z"
            ],
            "format": "date-time",
            "type": "string"
        },
        "endedAt": {
            "examples": [
                "2022-03-10T16:15:50Z"
            ],
            "format": "date-time",
            "type": [
                "string",
                "null"
            ]
        },
        "failure": {
            "enum": [
                "PREPARE_FAILED",
                "WORKFLOW_NOT_STARTED",
                "LEDGER_INVALID",
                "FLAG_OFF",
                "APP_NOT_TEST"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "id": {
            "format": "uuid",
            "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
            "type": "string"
        },
        "journeys": {
            "items": {
                "$ref": "#/components/schemas/UiAuthoringJourneyDto"
            },
            "type": "array"
        },
        "servedAppUrl": {
            "type": [
                "string",
                "null"
            ]
        },
        "servedBy": {
            "type": [
                "string",
                "null"
            ]
        },
        "servedMachine": {
            "type": [
                "string",
                "null"
            ]
        },
        "status": {
            "enum": [
                "QUEUED",
                "RUNNING",
                "DONE",
                "FAILED"
            ],
            "type": "string"
        },
        "tokenBudgetPerJourney": {
            "format": "int32",
            "type": "integer"
        },
        "tokens": {
            "$ref": "#/components/schemas/UiAuthoringTokensDto"
        }
    },
    "required": [
        "id",
        "status",
        "appId",
        "createdAt",
        "tokens",
        "tokenBudgetPerJourney",
        "journeys",
        "batchStatus"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/ui-verify/crawls

Get the newest crawl of the feature's test app

Description

The newest crawl of the feature's test app, of any status. 200 with the closed problem (NO_TEST_APP, NO_CRAWL) and no crawl when there is none to report.

Input parameters

Parameter In Type Default Nullable Description
featureId query string No Feature whose test app to read
projectId query string | null Yes Project of the feature; defaults to the feature's own
workspaceId path string No Workspace ID

Responses

{
    "app": null,
    "crawl": null,
    "problem": "NO_TEST_APP"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "app": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlAppDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "crawl": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlRunDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "problem": {
            "enum": [
                "NO_TEST_APP",
                "NO_CRAWL"
            ],
            "type": [
                "string",
                "null"
            ]
        }
    },
    "type": "object"
}

POST /api/v1/workspaces/{workspaceId}/ui-verify/crawls

Crawl the feature's test app

Description

Starts the background crawl of the feature's test app (the app of the feature's newest crawl, else of its newest authoring run, else the project's newest TEST app), or only previews it with dryRun: the app, its budgets, how many feature crawls follow and what the app has had so far. The crawl is anonymous: the persona is the label its map is filed under, and must be one of the project's personas (or default). Name one persona with personaRef (202 with crawl and workflowId; 409 while the app is already crawling for it), or several with personaRefs (1 to 20, distinct): each starts its own crawl, and a persona already crawling, refused by the plan's concurrent-crawl limit or failing does not stop the others; 202 with crawls, one entry per persona (STARTED, ALREADY_RUNNING, SKIPPED or FAILED, with the reason) and no 409. A dry run of several previews the cost of all of them (preview.personaRefs). A row is SKIPPED, with its reason, when the start was refused. 422 with the closed problem when the project has no test app.

Input parameters

Parameter In Type Default Nullable Description
featureId query string No Feature the crawl is for
workspaceId path string No Workspace ID

Request body

{
    "credentialDelivery": true,
    "dryRun": true,
    "personaRef": "string",
    "personaRefs": [
        "string"
    ],
    "projectId": "89ae666f-bbea-4c8c-bb47-872d7199e42a"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "credentialDelivery": {
            "type": "boolean"
        },
        "dryRun": {
            "type": "boolean"
        },
        "personaRef": {
            "type": "string"
        },
        "personaRefs": {
            "items": {
                "type": "string"
            },
            "type": "array"
        },
        "projectId": {
            "format": "uuid",
            "type": "string"
        }
    },
    "required": [
        "dryRun"
    ],
    "type": "object"
}

Responses

{
    "app": null,
    "crawl": null,
    "crawls": [
        {
            "outcome": "STARTED",
            "personaRef": "string",
            "reason": "string",
            "run": null,
            "workflowId": "string"
        }
    ],
    "dryRun": true,
    "personaRef": "string",
    "preview": null,
    "problem": "NO_TEST_APP",
    "workflowId": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "app": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlAppDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "crawl": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlRunDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "crawls": {
            "items": {
                "$ref": "#/components/schemas/UiCrawlPersonaStartDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "dryRun": {
            "type": "boolean"
        },
        "personaRef": {
            "type": [
                "string",
                "null"
            ]
        },
        "preview": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlPreviewDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "problem": {
            "enum": [
                "NO_TEST_APP",
                "NO_CRAWL"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "workflowId": {
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "dryRun"
    ],
    "type": "object"
}

{
    "app": null,
    "crawl": null,
    "crawls": [
        {
            "outcome": "STARTED",
            "personaRef": "string",
            "reason": "string",
            "run": null,
            "workflowId": "string"
        }
    ],
    "dryRun": true,
    "personaRef": "string",
    "preview": null,
    "problem": "NO_TEST_APP",
    "workflowId": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "app": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlAppDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "crawl": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlRunDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "crawls": {
            "items": {
                "$ref": "#/components/schemas/UiCrawlPersonaStartDto"
            },
            "type": [
                "array",
                "null"
            ]
        },
        "dryRun": {
            "type": "boolean"
        },
        "personaRef": {
            "type": [
                "string",
                "null"
            ]
        },
        "preview": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlPreviewDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "problem": {
            "enum": [
                "NO_TEST_APP",
                "NO_CRAWL"
            ],
            "type": [
                "string",
                "null"
            ]
        },
        "workflowId": {
            "type": [
                "string",
                "null"
            ]
        }
    },
    "required": [
        "dryRun"
    ],
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/ui-verify/crawls/{crawlRunId}

Get one crawl

Description

One crawl of an app of the feature's project, with its status, counts, progress and why it stopped. 404 for a crawl that is not one of the project's.

Input parameters

Parameter In Type Default Nullable Description
crawlRunId path string No Crawl run ID
featureId query string No Feature the crawl was asked for
projectId query string | null Yes Project of the feature; defaults to the feature's own
workspaceId path string No Workspace ID

Responses

{
    "app": null,
    "crawl": null,
    "problem": "NO_TEST_APP"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "app": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlAppDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "crawl": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/UiCrawlRunDto"
                },
                {
                    "type": "null"
                }
            ]
        },
        "problem": {
            "enum": [
                "NO_TEST_APP",
                "NO_CRAWL"
            ],
            "type": [
                "string",
                "null"
            ]
        }
    },
    "type": "object"
}

GET /api/v1/workspaces/{workspaceId}/ui-verify/plan-sets

Fetch a feature's current plan set

Description

Returns a zip with the layout the Dezycro UI runner reads from a plans bundle: plan-set.json (the head, the personas by reference, the features and the cells with each plan's id and hash), effect-floors.json (the app's per-control effect floors, outside every plan's bytes), and under features// the batch.json and, for each cell, plan.json (the stored canonical bytes that hash to the cell's plan hash), run.json and matrix.json. A persona is named by reference and never carries a login value. 404 when the feature is not one of the workspace, when no authored plan of it cleared the gate (NO_CURRENT_PLAN_SET) or when no TEST app is tied to its project (NO_TEST_APP); 409 when a plan reads a plan which is not a current cell of the set, the body naming the cell to re-author (PLAN_SET_DEPENDENCY_MISSING); 413 when the set is over the bundle limits (PLAN_SET_TOO_LARGE); 500 when the stored state is corrupt (a plan is missing, is not the plan its row names, or a DENIED plan names no parent). Requires a PAT with TEST_CASES_MANAGE.

Input parameters

Parameter In Type Default Nullable Description
featureId query string No Feature whose current plan set to fetch
workspaceId path string No Workspace ID

Responses

"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQ="
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "format": "binary",
    "type": "string"
}

Schemas

ActivityItemCountDto

Name Type Description
count string What a finished operation counted
value integer(int32) How many

ActivityItemDto

Name Type Description
counts Array<ActivityItemCountDto> What a finished operation counted, in a fixed order; only the counts the emitter reported
dismissible boolean Whether the caller may dismiss this item: only the caller's own items. Always true in scope SELF
endedAt string(date-time) | null When the operation ended, if it has
failureCode string | null Why a failed operation failed: an enum constant's name for the client to humanize
featureId string(uuid) | null Feature the operation belongs to
id string(uuid) Item ID; pass it to dismiss
kind string What the operation is
ownerName string | null Display name of that user, never an email; null when it could not be resolved (the client shows a generic label)
ownerUserId string(uuid) | null The user who started the current attempt (a user who only joined it is not it); null when unknown
progress
projectId string(uuid) | null Project the operation belongs to
projectName string | null Name of that project
startedAt string(date-time) When the operation started
state string Where the operation stands. STALE: still running by the record but quiet for longer than the kind allows, so no end was seen
subjectId string(uuid) The operation's subject, per kind: the feature for most kinds, the document for conflict detection and document ingestion, the skill for a skill import, the import job for a knowledge import
subjectName string | null Display name of the subject (feature, document, skill or import job, per kind) as given by the emitter; null when it gave none
updatedAt string(date-time) When the operation last changed
workspaceId string(uuid) Workspace the operation was started in

ActivityItemProgressDto

Name Type Description
done integer(int32) Units done
total integer(int32) Units in all

Assertion

Name Type Description
description string
graphCaptured boolean
prdQuote string
type string

FulfillUiCredentialRequestDto

Name Type Description
jwe string

GenerationTriggerDto

Name Type Description
workflowId string

PaginatedResponseActivityItemDto

Name Type Description
data Array<ActivityItemDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PaginatedResponsePatDto

Name Type Description
data Array<PatDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PaginatedResponseProjectDto

Name Type Description
data Array<ProjectDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PaginatedResponseTestCaseResultDto

Name Type Description
data Array<TestCaseResultDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PaginatedResponseTestPersonaDto

Name Type Description
data Array<TestPersonaDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PaginatedResponseTestRunDto

Name Type Description
data Array<TestRunDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PaginatedResponseUiAuthoringRunSummaryDto

Name Type Description
data Array<UiAuthoringRunSummaryDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PaginatedResponseValidationCaseDto

Name Type Description
data Array<ValidationCaseDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PaginatedResponseWorkspaceDto

Name Type Description
data Array<WorkspaceDto>
page integer(int32)
size integer(int32)
totalElements integer(int64)

PatDto

Name Type Description
createdAt string(date-time) | null
id string(uuid) | null
lastUsedAt string(date-time) | null
name string
scope string | null
token string | null
tokenPrefix string | null
workspaceId string(uuid) | null

ProjectDto

Name Type Description
description string | null
id string(uuid) | null
name string
status string Project lifecycle status
workspaceId string(uuid) | null

PutUiServeSessionRequestDto

Name Type Description
appUrl string | null
clientVersion string
machine string

SectionRef

Name Type Description
prdQuote string | null
sectionHeading string
sectionIndex integer(int32)

StartUiCrawlPublicRequestDto

Name Type Description
credentialDelivery boolean
dryRun boolean
personaRef string
personaRefs Array<string>
projectId string(uuid)

StartUiVerifyAuthoringRequestDto

Name Type Description
appId string(uuid)
cells Array<UiAuthoringCellRequestDto>
dryRun boolean
projectId string(uuid)

StartUiVerifyAuthoringResponseDto

Name Type Description
apps Array<UiAuthoringAppChoiceDto>
authoringRunId string(uuid) | null
cells Array<UiAuthoringInferredCellDto>
chunks integer(int32) | null
credentialSources Array<UiAuthoringCredentialSourceDto>
problem string | null
unsupportedLogins Array<UiAuthoringUnsupportedLoginDto>
workflowId string | null

StepTraceDto

Name Type Description
durationMs integer(int64)
error string
expectedStatus integer(int32) | null
method string
passed boolean | null
path string
requestBody string
requestHeaders
responseBody string
responseHeaders
statusCode integer(int32)
stepDescription string
testCaseStepIndex integer(int32)
timestamp string

TestCaseResultDto

Name Type Description
durationMs integer(int64)
endedAt string(date-time)
errorMessage string
journeyRef string | null
logUrl string
runId string(uuid)
startedAt string(date-time)
status string
stepTraces Array<StepTraceDto>
testCaseId string(uuid)
testName string

TestPersonaDto

Name Type Description
authType string
credentialSource string | null
description string
envVar string | null
id string(uuid) | null
name string
projectId string(uuid) | null
scope string
script string | null
uiAuth

TestRunDto

Name Type Description
branch string | null
commitId string | null
completedAt string(date-time) | null
durationMs integer(int64) | null
failed integer(int32)
imageTag string | null
passed integer(int32)
projectId string(uuid)
runId string(uuid)
skipped integer(int32)
startedAt string(date-time)
status string
tenantId string(uuid)
totalTests integer(int32)

UiAuthFieldDto

Name Type Description
command string | null
envVar string | null
key string
label string
source string
value string | null

UiAuthoringAppChoiceDto

Name Type Description
appId string(uuid)
appUrl string
name string

UiAuthoringCellCountsDto

Name Type Description
authored integer(int32)
awaitingCredentials integer(int32)
awaitingProducer integer(int32)
awaitingTwin integer(int32)
derived integer(int32)
failed integer(int32)
imported integer(int32)
notImported integer(int32)
pending integer(int32)
running integer(int32)
stopped integer(int32)
total integer(int32)

UiAuthoringCellDto

Name Type Description
causeJobId string(uuid) | null
causeJudgement string | null
credentialSource string | null
expectation string
fixOwner string | null
jobId string(uuid)
judgement string | null
kind string
personaId string
planId string | null
readsFrom Array<UiAuthoringProducerRefDto>
repairs integer(int32)
runRowId string(uuid) | null
state string
stopCode string | null
stopDetail string | null
stopKind string | null
stopStep
tokens
undeclaredRequests Array<UiAuthoringRequestDto>
verdictKind string | null
verdictReason string | null

UiAuthoringCellRequestDto

Name Type Description
expectation string
journeyId string
personaId string

UiAuthoringCredentialSourceDto

Name Type Description
configured boolean
envVar string | null
fieldKey string
label string
personaId string
source string

UiAuthoringInferredCellDto

Name Type Description
evidence string | null
expectation string
journeyId string
personaId string
reason string
source string | null

UiAuthoringIntakeDto

Name Type Description
jobId string(uuid)
repairs integer(int32)
state string
stopCode string | null
stopDetail string | null
tokens UiAuthoringTokensDto

UiAuthoringJourneyDto

Name Type Description
cells Array<UiAuthoringCellDto>
intake
journeyId string
title string
tokens UiAuthoringTokensDto

UiAuthoringProducerRefDto

Name Type Description
jobId string(uuid)
journeyId string
journeyTitle string
planId string

UiAuthoringRequestDto

Name Type Description
method string
path string

UiAuthoringRunDto

Name Type Description
appId string(uuid)
batchId string(uuid) | null
batchStatus string
chunkCount integer(int32) | null
chunkIndex integer(int32) | null
createdAt string(date-time)
endedAt string(date-time) | null
failure string | null
id string(uuid)
journeys Array<UiAuthoringJourneyDto>
servedAppUrl string | null
servedBy string | null
servedMachine string | null
status string
tokenBudgetPerJourney integer(int32)
tokens UiAuthoringTokensDto

UiAuthoringRunSummaryDto

Name Type Description
batchId string(uuid) | null
batchStatus string
cells UiAuthoringCellCountsDto
chunkCount integer(int32) | null
chunkIndex integer(int32) | null
createdAt string(date-time)
endedAt string(date-time) | null
id string(uuid)
servedAppUrl string | null
servedBy string | null
servedMachine string | null
status string
tokens UiAuthoringTokensDto

UiAuthoringStopStepDto

Name Type Description
number integer(int32)
text string

UiAuthoringTokensDto

Name Type Description
intake UiTokenUsageDto
proposals UiTokenUsageDto
repairs UiTokenUsageDto
total UiTokenUsageDto

UiAuthoringUnsupportedLoginDto

Name Type Description
loginKind string
personaId string

UiAuthRecipeDto

Name Type Description
fields Array<UiAuthFieldDto>
landingUrl string | null
loginUrl string
sessionTtl string | null
submitControl string

UiCrawlAppDto

Name Type Description
appId string(uuid)
appUrl string
name string

UiCrawlPersonaLoginDto

Name Type Description
credentialSources Array<UiAuthoringCredentialSourceDto>
hasLoginRecipe boolean
personaRef string

UiCrawlPersonaStartDto

Name Type Description
outcome string
personaRef string
reason string | null Why the persona was not started, for any outcome but STARTED
run
workflowId string | null

UiCrawlPreviewDto

Name Type Description
actionBudget integer(int32)
featureCrawls integer(int32) Features whose newest contract came from this app: one feature crawl each follows the app's own crawl
lastCompleted The newest crawl of the first persona that finished and wrote the app's map
latestCrawl The app's newest crawl of any status and persona
logins Array<UiCrawlPersonaLoginDto> Set only when the request asks for credentialDelivery: per persona, whether it has a browser login recipe and where each login field comes from. A persona without one is refused at a start
personaRefs Array<string> Every persona a start with this request would crawl, one crawl each, in order; each crawl spends the budgets above and is followed by its own feature crawls
running The first persona's crawl in flight right now
screenBudget integer(int32)

UiCrawlRunDto

Name Type Description
actionBudget integer(int32)
actionsSpent integer(int32) | null
appId string(uuid)
awaitingCredentials boolean | null True while a RUNNING crawl waits for the customer's client to deliver a persona's login field (`dezycro verification serve` must be running as the member who started it), false otherwise; absent from a server that predates it
browserSource string | null HOSTED_JOB | SHARED_SERVER | GATEWAY:; null until a browser was leased
contractId string(uuid) | null
controlsFound integer(int32) | null
credentialSource string | null Where the awaited field comes from while awaitingCredentials: ENV or SCRIPT; null otherwise
endedAt string | null
featureId string | null The feature a per-feature crawl was for; null for an app-scoped background crawl
id string(uuid)
personaRef string
progress number(double) | null Share of the budget spent so far, 0..1; null before the explorer reports
reason string | null Why the run was SKIPPED, FAILED or STOPPED
screensFound integer(int32) | null
startedAt string
status string
stopCause string | null Who ended a STOPPED run; set only on a STOPPED row
stoppedByEmail string | null The member who stopped the run; set only on a USER_STOPPED row
stopReason string | null Why the explorer stopped; null when nothing was crawled or not recorded
trigger string

UiCrawlStartPublicResponseDto

Name Type Description
app
crawl
crawls Array<UiCrawlPersonaStartDto>
dryRun boolean
personaRef string | null
preview
problem string | null
workflowId string | null

UiCrawlStatusPublicDto

Name Type Description
app
crawl
problem string | null

UiCredentialFieldSourceDto

Name Type Description
command string | null
envVar string | null
kind string

UiCredentialRequestViewDto

Name Type Description
appUrl string
expiresAt string(date-time)
fieldKey string
fieldLabel string
personaId string
personaName string
publicKey string
registeredAppOrigin string | null
requestId string(uuid)
runId string
source

UiServeSessionDto

Name Type Description
appUrl string | null
expiresAt string(date-time)
featureId string(uuid)
machine string
servedBy string
startedAt string(date-time)

UiServeSessionProblemDto

Name Type Description
appUrl string | null
machine string | null
message string
problem string
servedBy string | null
startedAt string(date-time) | null

UiServeSessionsDto

Name Type Description
mine
override

UiTokenUsageDto

Name Type Description
calls integer(int32)
completionTokens integer(int64)
promptTokens integer(int64)

ValidationCaseDto

Name Type Description
assertionsFromPrd Array<Assertion>
coverageFlags Array<string>
dataExpectations Array<string>
description string | null
edgeCasesFromPrd Array<string>
enrichmentModelVersion string | null
featureId string(uuid) | null
generatedAt string(date-time) | null
globalConstraints Array<string>
id string(uuid)
name string
outcomeType string
pathClass string
postConditions Array<string>
preConditions Array<string>
priority string
projectId string(uuid)
riskIndicator string | null
roleRequirement string | null
sectionRefs Array<SectionRef>
sourceContentHash string | null
sourceDecisionRef string | null
sourceJourneyId string | null
sourcePrdId string(uuid)
status string
stepsFromGraph Array<string>
type string
workspaceId string(uuid)

ValidationCaseGenerationStatusDto

Name Type Description
enrichedCases integer(int32)
message string
persistedCases integer(int32)
phase string | null
status string
totalSkeletons integer(int32)

ValidationCaseGenerationTriggerDto

Name Type Description
featureId string(uuid)

WorkspaceDto

Name Type Description
id string(uuid) | null
name string
tenantId string(uuid) | null