For the complete documentation index, see llms.txt. This page is also available as Markdown.

Import / Export

Importing and exporting YAML and ZIP files

Export project as ZIP

get

Exports the entire project including all tests, components, suites and profiles as a ZIP archive.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Responses
200

ZIP archive download. Content-Type is application/zip.

No content

get/api/v2/project/export/
GET /api/v2/project/export/ HTTP/1.1
Authorization: YOUR_API_KEY
Accept: */*

No content

Check whether a project ZIP is importable (stateless)

post

Stateless, read-only check: confirms the ZIP is a well-formed project export (has project.yaml, no folder/slug collisions). No DB writes, no draft or upload artifact created unlike import/validate - safe to call repeatedly. Does not check against this organization's existing data, so a 200 here doesn't guarantee import/validate + import/run will succeed. Use for pre-flight checks, including by LLM/agent callers, before committing to import/validate.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Body
filestring · uriRequired

Project ZIP file to check.

Responses
200Success
application/json
validbooleanRequired

Always true when the response is 200.

post/api/v2/project/import/check/
POST /api/v2/project/import/check/ HTTP/1.1
Authorization: YOUR_API_KEY
Content-Type: multipart/form-data
Accept: */*
Content-Length: 30

{
  "file": "https://example.com"
}
{
  "valid": true,
  "summary": {
    "tests": 1,
    "components": 1,
    "suites": 1,
    "profiles": 1
  }
}

Run project import from a previously validated upload

post

Starts the async import process for a previously validated upload. Returns immediately — the import runs in the background. The upload slot expires 30 minutes after import/validate was called.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Body
uploadIdstring · uuidRequired

Upload ID returned by import/validate.

Responses
202Success
application/json
projectIdstring · uuidRequired
statusstring · enumRequired
  • pending - pending
Possible values:
post/api/v2/project/import/run/
POST /api/v2/project/import/run/ HTTP/1.1
Authorization: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 51

"uploadId='123e4567-e89b-12d3-a456-426614174000'"
{
  "projectId": "123e4567-e89b-12d3-a456-426614174000",
  "status": "pending"
}

Validate project ZIP and prepare upload

post

Validates a ZIP file and creates a temporary upload slot (valid for 30 minutes). Returns an uploadId to be passed to the import/run endpoint.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Body
filestring · uriRequired

Project ZIP file to import.

Responses
200Success
application/json
uploadIdstring · uuidRequired

Pass this to import/run to start the import.

post/api/v2/project/import/validate/
POST /api/v2/project/import/validate/ HTTP/1.1
Authorization: YOUR_API_KEY
Content-Type: multipart/form-data
Accept: */*
Content-Length: 30

{
  "file": "https://example.com"
}
{
  "uploadId": "123e4567-e89b-12d3-a456-426614174000",
  "summary": {
    "tests": 1,
    "components": 1,
    "suites": 1,
    "profiles": 1
  }
}

List project backups

get

Returns the backup schedule and unexpired backup archives for the selected project.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Path parameters
project_pkstring · uuidRequired
Responses
200Success
application/json
isActivebooleanRequired
frequencyDaysintegerRequired
retentionDaysinteger · nullableRequired
nextBackupAtstring · nullableRequired
get/api/v2/projects/{project_pk}/backups/
GET /api/v2/projects/{project_pk}/backups/ HTTP/1.1
Authorization: YOUR_API_KEY
Accept: */*
[
  {
    "isActive": true,
    "frequencyDays": 1,
    "retentionDays": null,
    "nextBackupAt": null,
    "backups": [
      {
        "id": "123e4567-e89b-12d3-a456-426614174000",
        "created": "2026-01-01T00:00:00.000Z",
        "expiresAt": "2026-01-01T00:00:00.000Z",
        "testsCount": 1,
        "suitesCount": 1,
        "retentionDays": 1,
        "triggeredBy": "automatic"
      }
    ]
  }
]

Download project backup

get

Downloads an unexpired project backup as a ZIP archive.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Path parameters
idstring · uuidRequired

A UUID string identifying this project backup.

project_pkstring · uuidRequired
Responses
200

ZIP archive download. Content-Type is application/zip.

application/json
string · binaryOptional
get/api/v2/projects/{project_pk}/backups/{id}/download/
GET /api/v2/projects/{project_pk}/backups/{id}/download/ HTTP/1.1
Authorization: YOUR_API_KEY
Accept: */*
binary

Get YAML JSON Schema

get

Returns the JSON Schema for YAML import and export files.

Authorizations
Responses
200

JSON Schema document for YAML import/export files.

No content

get/api/v2/schema/yaml/v1/
GET /api/v2/schema/yaml/v1/ HTTP/1.1
Accept: */*

No content

Export test as YAML or ZIP

get

Exports a single test. yaml returns a standalone YAML file. zip returns a ZIP archive that includes the test and all reusable components it depends on.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Path parameters
fmtstring · enumRequired

Export format.

Possible values:
idstring · uuidRequired

A UUID string identifying this test.

Responses
200

File download. Content-Type is text/yaml for yaml, application/zip for zip.

No content

get/api/v2/tests/{id}/export/{fmt}/
GET /api/v2/tests/{id}/export/{fmt}/ HTTP/1.1
Authorization: YOUR_API_KEY
Accept: */*

No content

Import test from YAML or ZIP

post

Imports a test from a YAML or ZIP file. When a test with the same slug already exists, the behaviour depends on conflictMode. If conflictMode is omitted, conflicts are returned in the response body for manual resolution.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Query parameters
conflictModestring · enumOptional

How to handle a slug conflict with an existing test. overwrite replaces the existing test. skip leaves the existing test unchanged. Omit to receive conflict details in the response and resolve manually.

Possible values:
onMissingComponentstring · enumOptional

How to handle component references that are missing in the project. error (default) aborts the import. skip imports the test without the missing component steps.

Default: errorPossible values:
Body
filestring · uriRequired

YAML or ZIP file to import.

Responses
200Success
application/json
statusstring · enumRequired
  • conflict - conflict
Possible values:
post/api/v2/tests/import/
POST /api/v2/tests/import/ HTTP/1.1
Authorization: YOUR_API_KEY
Content-Type: multipart/form-data
Accept: */*
Content-Length: 30

{
  "file": "https://example.com"
}
{
  "status": "conflict",
  "entityIds": {
    "ANY_ADDITIONAL_PROPERTY": [
      "123e4567-e89b-12d3-a456-426614174000"
    ]
  },
  "conflicts": [
    {
      "entityType": "text",
      "slug": "text",
      "name": "text",
      "existingId": "123e4567-e89b-12d3-a456-426614174000",
      "yamlDiff": {
        "currentYaml": "text",
        "incomingYaml": "text"
      }
    }
  ]
}

Check whether a test YAML or ZIP is importable (stateless)

post

Stateless, read-only check: confirms the YAML/ZIP is a well-formed test export (right schema, no folder/slug collisions). No DB writes, unlike import which writes immediately whenever there's no slug conflict - safe to call repeatedly. Does not check against this project's existing tests/components, so a 200 here doesn't guarantee import will succeed. Use for pre-flight checks, including by LLM/agent callers, before committing to import.

Authorizations
AuthorizationstringRequired

Token-based authentication with required prefix "Token"

Body
filestring · uriRequired

YAML or ZIP file to check.

Responses
200Success
application/json
validbooleanRequired

Always true when the response is 200.

post/api/v2/tests/import/check/
POST /api/v2/tests/import/check/ HTTP/1.1
Authorization: YOUR_API_KEY
Content-Type: multipart/form-data
Accept: */*
Content-Length: 30

{
  "file": "https://example.com"
}
{
  "valid": true,
  "summary": {
    "tests": 1,
    "components": 1
  }
}

Last updated

Was this helpful?