Tests
Create and manage tests via the Smoketest API.
This API manages reusable Tests: editable, markdown-backed test descriptions attached to a project. It can create, update, delete, and run them. Attempt-owned generated Tests from Jira or Linear remain immutable and app-managed, so they do not appear in this collection unless someone explicitly saves an independent reusable copy. To inspect execution, see Runs.
The test object
{
"id": "018eaaaa-abcd-7000-8000-abc123456789",
"workspaceId": "018e1234-abcd-7000-8000-abc123456789",
"projectId": "018e5678-abcd-7000-8000-abc123456789",
"name": "User can log in",
"description": "Open the homepage. Click Login. Enter email '[email protected]' and password 'hunter2'. Click Sign In. Verify the dashboard heading is visible.",
"url": "https://acme.com",
"environmentId": null,
"device": "desktop",
"trigger": "on_demand",
"schedule": null,
"scheduleTimezone": null,
"emailInboxEnabled": false,
"httpAuthEnabled": false,
"httpAuthUsername": null,
"httpAuthPasswordConfigured": false,
"tags": [
{
"id": "018e7777-abcd-7000-8000-abc123456789",
"name": "Smoke",
"slug": "smoke"
}
],
"createdAt": "2026-03-10T12:00:00.000Z",
"updatedAt": "2026-05-15T09:45:00.000Z"
}| Field | Type | Description |
|---|---|---|
id | UUID | Unique identifier |
workspaceId | UUID | Workspace this test belongs to |
projectId | UUID | Parent project |
name | string | Short display name |
description | string | Markdown-backed test steps and expected outcome, written in words |
url | string | URL the agent opens to start the run |
environmentId | UUID | null | Attached environment (variables injected at runtime) |
device | "desktop" | "mobile" | "both" | Viewport to run against |
trigger | "on_demand" | "schedule" | "api" | How this test is normally triggered |
schedule | string | null | Cron expression — only set when trigger = "schedule" |
scheduleTimezone | string | null | IANA timezone for scheduled tests |
emailInboxEnabled | boolean | Whether the agent can receive inbound email during a run |
httpAuthEnabled | boolean | Whether HTTP Basic Auth is enabled for this test |
httpAuthUsername | string | null | HTTP auth username — only set when httpAuthEnabled is true |
httpAuthPasswordConfigured | boolean | Whether an HTTP auth password has been stored (the password itself is write-only) |
tags | array | Project-scoped tags assigned to the test |
createdAt | ISO 8601 | Creation timestamp |
updatedAt | ISO 8601 | Last updated timestamp |
Test descriptions can include Shared Step chips inserted by the app. The stored markdown token is a block-level link such as [Log in](smoketest-shared-step:018effff-abcd-7000-8000-abc123456789). Runs expand the latest Shared Step description and return 422 if a token points to a missing or cross-project Shared Step.
List tests
Query parameters
projectIdtagprojectId.# All tests in the workspace
curl "https://api.smoketest.sh/v1/tests" \
-H "Authorization: Bearer $SMOKETEST_API_KEY"
# Filtered by project
curl "https://api.smoketest.sh/v1/tests?projectId=018e5678-abcd-7000-8000-abc123456789" \
-H "Authorization: Bearer $SMOKETEST_API_KEY"
# Filtered by project tag
curl "https://api.smoketest.sh/v1/tests?projectId=018e5678-abcd-7000-8000-abc123456789&tag=Smoke" \
-H "Authorization: Bearer $SMOKETEST_API_KEY"Sample response
[
{
"id": "018eaaaa-abcd-7000-8000-abc123456789",
"workspaceId": "018e1234-abcd-7000-8000-abc123456789",
"projectId": "018e5678-abcd-7000-8000-abc123456789",
"name": "User can log in",
"description": "Open the homepage. Click Login. Enter email '[email protected]' and password 'hunter2'. Click Sign In. Verify the dashboard heading is visible.",
"url": "https://acme.com",
"environmentId": null,
"device": "desktop",
"trigger": "on_demand",
"schedule": null,
"scheduleTimezone": null,
"tags": [{ "id": "018e7777-abcd-7000-8000-abc123456789", "name": "Smoke", "slug": "smoke" }],
"createdAt": "2026-03-10T12:00:00.000Z",
"updatedAt": "2026-05-15T09:45:00.000Z"
}
]Create a test
Body
projectIdnamedescriptionurlenvironmentIddevice"desktop", "mobile", or "both" — default: "both"trigger"on_demand", "schedule", or "api" — default: "on_demand"scheduletrigger = "schedule"scheduleTimezoneemailInboxEnabledhttpAuthEnabledhttpAuthUsernamehttpAuthEnabled is truehttpAuthPasswordcurl -X POST https://api.smoketest.sh/v1/tests \
-H "Authorization: Bearer $SMOKETEST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "018e5678-abcd-7000-8000-abc123456789",
"name": "User can log in",
"description": "Open the homepage. Click Login. Enter email '\''[email protected]'\'' and password '\''hunter2'\''. Click Sign In. Verify the dashboard heading is visible.",
"url": "https://acme.com",
"device": "desktop"
}'Get a test
Path parameters
idcurl https://api.smoketest.sh/v1/tests/018eaaaa-abcd-7000-8000-abc123456789 \
-H "Authorization: Bearer $SMOKETEST_API_KEY"Update a test
All body fields are optional.
Path parameters
idBody
namedescriptionurlenvironmentIddevice"desktop", "mobile", or "both"trigger"on_demand", "schedule", or "api"scheduletrigger = "schedule"scheduleTimezoneemailInboxEnabledhttpAuthEnabledhttpAuthUsernamehttpAuthPasswordcurl -X PATCH https://api.smoketest.sh/v1/tests/018eaaaa-abcd-7000-8000-abc123456789 \
-H "Authorization: Bearer $SMOKETEST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"device": "mobile", "scheduleTimezone": "Europe/Berlin"}'Delete a test
Path parameters
idReturns 204 No Content.
curl -X DELETE https://api.smoketest.sh/v1/tests/018eaaaa-abcd-7000-8000-abc123456789 \
-H "Authorization: Bearer $SMOKETEST_API_KEY"Trigger a run
To start a run for a test, see Trigger a run in the Runs reference — that page also covers polling for the result.
Trigger runs by tag
Use a project tag to start one run for every matching test in that project. The endpoint fails instead of partially starting a group when no tests match or billing/concurrency limits would block the whole group.
Body
projectIdtagstartUrlcurl -X POST https://api.smoketest.sh/v1/tests/run \
-H "Authorization: Bearer $SMOKETEST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "018e5678-abcd-7000-8000-abc123456789",
"tag": "Smoke",
"startUrl": "https://preview-acme.vercel.app"
}'Sample response
{
"projectId": "018e5678-abcd-7000-8000-abc123456789",
"tag": "Smoke",
"count": 2,
"runs": [
{
"id": "018e9999-abcd-7000-8000-abc123456789",
"testId": "018eaaaa-abcd-7000-8000-abc123456789",
"startUrl": "https://preview-acme.vercel.app/",
"status": "pending",
"createdAt": "2026-06-09T12:00:00.000Z",
"test": {
"id": "018eaaaa-abcd-7000-8000-abc123456789",
"projectId": "018e5678-abcd-7000-8000-abc123456789",
"name": "User can log in"
},
"links": {
"dashboardRun": "https://smoketest.sh/runs/018e9999-abcd-7000-8000-abc123456789",
"dashboardTest": "https://smoketest.sh/tests/018eaaaa-abcd-7000-8000-abc123456789"
}
}
]
}