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¶
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": "d6f92d45-99cb-4f3c-8bc6-25bc063ae6a2",
"lastUsedAt": "2022-03-10T12:15:50",
"name": "string",
"scope": "TENANT",
"token": "string",
"tokenPrefix": "string",
"workspaceId": "6fd77716-7603-4698-8e7e-6dc5a39d6621"
}
],
"page": 119,
"size": 64,
"totalElements": 108
}
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": "d41f1d94-b8aa-4e3e-abeb-617eb8903154",
"lastUsedAt": "2022-03-10T12:15:50",
"name": "string",
"scope": "TENANT",
"token": "string",
"tokenPrefix": "string",
"workspaceId": "c091af84-0c3d-472d-875c-9d5097cfe793"
}
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": "6a2ead1e-116d-4b9d-a5e3-f62a0e664afa",
"lastUsedAt": "2022-03-10T12:15:50",
"name": "string",
"scope": "TENANT",
"token": "string",
"tokenPrefix": "string",
"workspaceId": "bf2d8f60-40ee-4ed1-a226-7a664caf3b8f"
}
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": "30c38622-4da9-442e-924e-5daa9e6ef3e2",
"name": "string",
"tenantId": "954e6408-81cd-49cc-a297-37ffc6af3a2f"
}
],
"page": 70,
"size": 252,
"totalElements": 205
}
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}/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": "e3e1b55d-cce0-49fc-8eb1-d2d8334cda56",
"name": "string",
"status": "ACTIVE",
"workspaceId": "764cca8d-2fb5-4eec-8b70-ec4a62020fc2"
}
],
"page": 114,
"size": 19,
"totalElements": 106
}
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": "e06d77bd-9e79-459a-a97e-68d3ee31e2b6",
"name": "string",
"status": "ACTIVE",
"workspaceId": "5daae13a-acd3-4e08-8a92-1b4627c38084"
}
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": "8437c4c8-2975-410d-abc7-ed030eed7540",
"name": "string",
"status": "ACTIVE",
"workspaceId": "7d0408ef-a37a-4c8c-af5f-f5c26fdb1d29"
}
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": "f6adefc3-7b93-495e-b810-8283d9116bba",
"name": "string",
"status": "ACTIVE",
"workspaceId": "b9409b83-c2bd-4353-b067-c04292a7f831"
}
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": "94c2d860-7a40-40d5-b917-0bd94b407c26",
"name": "string",
"status": "ACTIVE",
"workspaceId": "19cbfae4-b7be-46dc-94e4-f769fe116802"
}
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": "22f6d6e9-674d-4fdc-8c9b-163d6e8c1b97",
"name": "string",
"status": "ACTIVE",
"workspaceId": "647df63f-e54c-4ced-a312-31b193b928a6"
}
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",
"description": "string",
"envVar": "string",
"id": "0a1433f9-8d76-4c54-b3b7-572d0340591e",
"name": "string",
"projectId": "38f4b940-6ed0-4346-8c31-c369ff8b6ee3",
"scope": "TENANT",
"script": "string"
}
],
"page": 152,
"size": 227,
"totalElements": 35
}
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 (credentials or token) that generated tests and the verifier authenticate as when exercising your API. Credentials are stored encrypted and never returned in responses.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
projectId |
path | string | No | Project ID | |
workspaceId |
path | string | No | Workspace ID |
Request body
{
"authType": "BEARER",
"description": "string",
"envVar": "string",
"id": "ddb70811-ad29-48bf-a0c5-1a600beb6f31",
"name": "string",
"projectId": "9d7666eb-68a9-47a6-9870-b9a8288e0329",
"scope": "TENANT",
"script": "string"
}
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"
},
"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"
]
}
},
"required": [
"name",
"description",
"authType",
"scope"
],
"type": "object"
}
Responses
{
"authType": "BEARER",
"description": "string",
"envVar": "string",
"id": "0181b227-4e8b-4cf7-9d6f-305745178312",
"name": "string",
"projectId": "1e0589fe-92ae-44dc-9d48-03af03f2fb28",
"scope": "TENANT",
"script": "string"
}
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"
},
"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"
]
}
},
"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 credentials. Fields omitted from the body are left unchanged; existing secrets are kept unless replaced.
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",
"description": "string",
"envVar": "string",
"id": "b99c9391-49a9-4d08-bce5-b5bfffa9ed85",
"name": "string",
"projectId": "c3a17cc0-6f4c-4754-aca5-b6489d356e43",
"scope": "TENANT",
"script": "string"
}
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"
},
"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"
]
}
},
"required": [
"name",
"description",
"authType",
"scope"
],
"type": "object"
}
Responses
{
"authType": "BEARER",
"description": "string",
"envVar": "string",
"id": "042a5ee3-8a14-45e8-9ca1-7e6d4b0fb091",
"name": "string",
"projectId": "92876dcf-b6c5-48b1-a3c2-43d7880799b0",
"scope": "TENANT",
"script": "string"
}
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"
},
"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"
]
}
},
"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, ` |
|
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": 128,
"failed": 297,
"imageTag": "string",
"passed": 250,
"projectId": "a83549c2-91e2-465a-bc91-f41ff4d4f227",
"runId": "a3b17299-8a6a-4e80-be51-5e458b79181f",
"skipped": 6,
"startedAt": "2022-03-10T16:15:50Z",
"status": "string",
"tenantId": "f2a3f09b-8a3e-4012-8b09-8186f7f647c2",
"totalTests": 260
}
],
"page": 92,
"size": 116,
"totalElements": 81
}
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": 282,
"endedAt": "2022-03-10T16:15:50Z",
"errorMessage": "string",
"journeyRef": "string",
"logUrl": "string",
"runId": "81eaf82e-0591-4cf2-94cf-806b2e39522c",
"startedAt": "2022-03-10T16:15:50Z",
"status": "string",
"stepTraces": [
{
"durationMs": 142,
"error": "string",
"expectedStatus": 258,
"method": "string",
"passed": true,
"path": "string",
"requestBody": "string",
"requestHeaders": {},
"responseBody": "string",
"responseHeaders": {},
"statusCode": 83,
"stepDescription": "string",
"testCaseStepIndex": 75,
"timestamp": "string"
}
],
"testCaseId": "da6ff744-01fa-449a-af25-34120c486114",
"testName": "string"
}
],
"page": 296,
"size": 281,
"totalElements": 54
}
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
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": "26534457-e8fd-4774-af38-0ccae2dd3f67",
"generatedAt": "2022-03-10T16:15:50Z",
"globalConstraints": [
"string"
],
"id": "24299882-7dc4-401f-860b-aadaf2df11a2",
"name": "string",
"outcomeType": "string",
"pathClass": "string",
"postConditions": [
"string"
],
"preConditions": [
"string"
],
"priority": "string",
"projectId": "bb649d0b-6d53-487d-a922-db748ac376bd",
"riskIndicator": "string",
"roleRequirement": "string",
"sectionRefs": [
{
"prdQuote": "string",
"sectionHeading": "string",
"sectionIndex": 64
}
],
"sourceContentHash": "string",
"sourceDecisionRef": "string",
"sourceJourneyId": "string",
"sourcePrdId": "68050e36-603e-4eba-ac12-fd1434066ecb",
"status": "string",
"stepsFromGraph": [
"string"
],
"type": "string",
"workspaceId": "c608bc78-144b-44c5-a47b-9945045d2b1b"
}
],
"page": 240,
"size": 155,
"totalElements": 286
}
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
Schema of the request body
Responses
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": 219,
"message": "string",
"persistedCases": 59,
"phase": "string",
"status": "string",
"totalSkeletons": 158
}
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"
}
Schemas¶
Assertion¶
| Name | Type | Description |
|---|---|---|
description |
string | |
graphCaptured |
boolean | |
prdQuote |
string | |
type |
string |
GenerationTriggerDto¶
| Name | Type | Description |
|---|---|---|
workflowId |
string |
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) |
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 |
SectionRef¶
| Name | Type | Description |
|---|---|---|
prdQuote |
string | null | |
sectionHeading |
string | |
sectionIndex |
integer(int32) |
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 | |
description |
string | |
envVar |
string | null | |
id |
string(uuid) | null | |
name |
string | |
projectId |
string(uuid) | null | |
scope |
string | |
script |
string | null |
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) |
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 |