Complete reference for the Zantiq REST API. Authenticate with API keys, manage testers, run tests, and retrieve reports programmatically.
https://api.zantiq.ioThe Zantiq API uses API keys to authenticate requests. You can create and manage API keys in your dashboard. Include your key in the Authorization header of every request.
curl https://api.zantiq.io/v1/testers \
-H "Authorization: Bearer sk_live_your_key_here"All API requests should be made to:
Zantiq uses conventional HTTP status codes. All error responses include an error field and a human-readable message.
| Code | Meaning |
|---|---|
| 200 | OK — Request succeeded |
| 201 | Created — Resource created successfully |
| 400 | Bad Request — Invalid parameters or body |
| 401 | Unauthorized — Invalid or missing API key |
| 404 | Not Found — Resource doesn't exist |
| 429 | Rate Limited — Too many requests |
| 500 | Server Error — Something went wrong |
{
"error": "Validation Error",
"message": "tier: Invalid option: expected \"ghost\"|...|.\"sovereign\""
}/v1/testersReturns a paginated list of your testers. Supports filtering by status, tier, and group.
| Name | Type | Description |
|---|---|---|
| status | string | Filter by status: active, provisioning, suspended, terminated |
| tier | string | Filter by tier: ghost, phantom, specter, sovereign |
| group_id | string | Filter by group ID |
| page | integer | Page number (default: 1) |
| limit | integer | Items per page, max 100 (default: 20) |
curl https://api.zantiq.io/v1/testers?status=active&limit=10 \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": [
{
"id": "tst_01",
"display_name": "Marcus Fieldsworth",
"tier": "phantom",
"status": "active",
"identities": ["email", "phone", "twitter"],
"monthly_cost": 49,
"created_at": "2026-01-15"
}
],
"meta": {
"total": 5,
"page": 1,
"limit": 10,
"pages": 1
}
}/v1/testersHire a new AI tester. The tester will be provisioned with identity components based on the selected tier. Provisioning typically takes 3-5 minutes.
| Name | Type | Description |
|---|---|---|
| tier | string | Tester tier: ghost, phantom, specter, sovereign |
| duration | string | Billing duration: one_time, weekly, monthly, annual |
| region | string | Identity region: us (default), eu |
| custom_persona | object | Custom persona preferences (age_range, location, gender, personality) |
curl -X POST https://api.zantiq.io/v1/testers \
-H "Authorization: Bearer sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"tier": "phantom",
"duration": "monthly",
"region": "us",
"custom_persona": {
"personality": "meticulous"
}
}'{
"data": {
"id": "tst_abc123",
"display_name": "Pending Provisioning",
"tier": "phantom",
"status": "provisioning",
"duration_type": "monthly",
"region": "us",
"monthly_cost": 49,
"created_at": "2026-03-19T14:30:00Z"
}
}/v1/testers/:idRetrieve a single tester with full details including identity components and persona.
curl https://api.zantiq.io/v1/testers/tst_01 \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": {
"id": "tst_01",
"display_name": "Marcus Fieldsworth",
"tier": "phantom",
"status": "active",
"persona": {
"bio": "Detail-oriented software tester...",
"age": 34,
"location": "Austin, TX",
"occupation": "Software QA Engineer",
"personality": {
"browsing": 7,
"techSavvy": 8,
"patience": 9,
"attentionToDetail": 10
}
},
"identity_components": [
{
"type": "email",
"status": "active",
"provider": "Fastmail",
"identifier": "marcus.fieldsworth@zantiq-id.com"
},
{
"type": "phone",
"status": "active",
"provider": "Telnyx",
"identifier": "+1 (512) 555-0147"
}
]
}
}/v1/testers/:idUpdate a tester's group assignment or persona details.
| Name | Type | Description |
|---|---|---|
| group_id | string | null | Assign to a group, or null to unassign |
| persona | object | Update persona fields: bio, location, occupation |
curl -X PATCH https://api.zantiq.io/v1/testers/tst_01 \
-H "Authorization: Bearer sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"group_id": "grp_01"}'{
"data": {
"id": "tst_01",
"display_name": "Marcus Fieldsworth",
"group": "grp_01",
"status": "active"
}
}/v1/testers/:idTerminate a tester. All identity components will be deprovisioned. Test history is preserved for 90 days.
curl -X DELETE https://api.zantiq.io/v1/testers/tst_01 \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": {
"id": "tst_01",
"status": "terminated"
}
}/v1/groupsReturns all tester groups with their tester counts.
curl https://api.zantiq.io/v1/groups \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": [
{
"id": "grp_01",
"name": "QA Team",
"description": "Primary QA testers",
"tester_count": 3,
"created_at": "2026-01-10"
}
]
}/v1/groupsCreate a new tester group for organizing testers.
| Name | Type | Description |
|---|---|---|
| name | string | Group name (1-100 characters) |
| description | string | Group description (max 500 characters) |
curl -X POST https://api.zantiq.io/v1/groups \
-H "Authorization: Bearer sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"name": "Red Team", "description": "Adversarial testing"}'{
"data": {
"id": "grp_abc123",
"name": "Red Team",
"description": "Adversarial testing",
"tester_count": 0,
"created_at": "2026-03-19T14:30:00Z"
}
}/v1/groups/:idGet a group with its list of testers.
curl https://api.zantiq.io/v1/groups/grp_01 \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": {
"id": "grp_01",
"name": "QA Team",
"testers": [
{ "id": "tst_01", "display_name": "Marcus Fieldsworth", "tier": "phantom" },
{ "id": "tst_02", "display_name": "Priya Sandoval", "tier": "specter" }
]
}
}/v1/groups/:idUpdate a group's name or description.
| Name | Type | Description |
|---|---|---|
| name | string | New group name |
| description | string | New description |
curl -X PATCH https://api.zantiq.io/v1/groups/grp_01 \
-H "Authorization: Bearer sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"name": "QA Alpha Team"}'{
"data": {
"id": "grp_01",
"name": "QA Alpha Team"
}
}/v1/groups/:idDelete a group. Testers in the group are unassigned but not deleted.
curl -X DELETE https://api.zantiq.io/v1/groups/grp_01 \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": {
"id": "grp_01",
"deleted": true,
"testers_unassigned": 2
}
}/v1/testsReturns a paginated list of test runs. Supports filtering by status, tester, and date range.
| Name | Type | Description |
|---|---|---|
| status | string | Filter: queued, running, passed, failed, error |
| tester_id | string | Filter by tester ID |
| date_from | string | Start date (YYYY-MM-DD) |
| date_to | string | End date (YYYY-MM-DD) |
| page | integer | Page number |
| limit | integer | Items per page (max 100) |
curl "https://api.zantiq.io/v1/tests?status=failed&limit=5" \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": [
{
"id": "run_02",
"name": "Checkout + Stripe payment",
"tester_id": "tst_02",
"status": "failed",
"severity": "high",
"duration": "4m 12s",
"target_url": "https://app.example.com/checkout",
"date": "2026-03-19"
}
],
"meta": { "total": 1, "page": 1, "limit": 5, "pages": 1 }
}/v1/testsCreate and queue a new test run. The tester must be active. Provide natural language instructions describing what to test.
| Name | Type | Description |
|---|---|---|
| tester_id | string | ID of the tester to run the test |
| target_url | string | URL to test (must be valid URL) |
| instructions | string | Natural language test instructions (10-5000 chars) |
| name | string | Test name (auto-generated from URL if omitted) |
| config.take_screenshots | boolean | Capture screenshots (default: true) |
| config.record_video | boolean | Record session video (default: false) |
| config.max_duration_minutes | integer | Max duration 1-60 min (default: 10) |
curl -X POST https://api.zantiq.io/v1/tests \
-H "Authorization: Bearer sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"tester_id": "tst_01",
"target_url": "https://myapp.com/signup",
"instructions": "Sign up with your email. Verify the email. Complete onboarding. Report any issues.",
"config": {
"take_screenshots": true,
"max_duration_minutes": 15
}
}'{
"data": {
"id": "run_abc123",
"name": "Test myapp.com/signup",
"tester_id": "tst_01",
"status": "queued",
"target_url": "https://myapp.com/signup",
"estimated_cost": 0.12,
"created_at": "2026-03-19T14:30:00Z"
}
}/v1/tests/:idRetrieve a test run with full report, steps, screenshots, and logs. The report is only available after the test completes.
curl https://api.zantiq.io/v1/tests/run_02 \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": {
"id": "run_02",
"name": "Checkout + Stripe payment",
"status": "failed",
"severity": "high",
"duration": "4m 12s",
"report": {
"ai_summary": "Priya encountered 2 issues during checkout...",
"issues": [
{
"title": "Stripe payment form timeout",
"severity": "high",
"description": "The Stripe.js form failed to load..."
}
],
"suggestions": [
{
"title": "Add Stripe.js loading fallback",
"category": "functional"
}
]
},
"steps": [
{ "index": 1, "action": "Navigated to checkout", "status": "success" },
{ "index": 8, "action": "Stripe form TIMEOUT", "status": "failure" }
]
}
}/v1/tests/:idCancel a running or queued test. Only tests with status 'running' or 'queued' can be cancelled.
curl -X POST https://api.zantiq.io/v1/tests/run_03 \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": {
"id": "run_03",
"status": "error",
"cancelled_at": "2026-03-19T14:35:00Z",
"message": "Test cancelled by user"
}
}/v1/analyticsRetrieve analytics data for your account including test stats, costs, and daily breakdowns.
| Name | Type | Description |
|---|---|---|
| period | string | Time period: 7d, 30d (default), 90d |
curl "https://api.zantiq.io/v1/analytics?period=30d" \
-H "Authorization: Bearer sk_live_your_key_here"{
"data": {
"period": "30d",
"tests_total": 481,
"tests_passed": 453,
"tests_failed": 28,
"pass_rate": 94.2,
"avg_duration_seconds": 168,
"cost_this_month": 416,
"testers_active": 4,
"top_issues": [
{ "type": "Element timeout", "frequency": 34 }
],
"daily_stats": [
{ "date": "2026-03-19", "tests_total": 18, "tests_passed": 16 }
]
}
}Zantiq can send webhook events to your server when important events occur — test completions, tester provisioning, billing events, and more. Configure your webhook URL in Settings.
All webhooks are sent as POST requests with a JSON body. Verify the X-Zantiq-Signature header to ensure authenticity.
# Your webhook endpoint receives POST requests:
# POST https://yourapp.com/webhooks/zantiq
# Headers: X-Zantiq-Signature: sha256=...
# Body: { "type": "test.completed", "data": { ... } }| Event | Description |
|---|---|
| test.completed | A test run has finished (passed or failed) |
| test.failed | A test run failed with errors |
| tester.provisioned | A new tester's identity is fully provisioned and ready |
| tester.suspended | A tester has been suspended |
| tester.terminated | A tester has been terminated and identities deprovisioned |
| identity.sms_received | An inbound SMS was received on a tester's phone number |
| identity.email_received | An inbound email was received in a tester's mailbox |
| billing.invoice_paid | Monthly invoice was successfully charged |
| billing.invoice_failed | Payment failed — action required |
{
"id": "evt_abc123",
"type": "test.completed",
"created_at": "2026-03-19T14:36:12Z",
"data": {
"test_id": "run_02",
"tester_id": "tst_02",
"status": "failed",
"severity": "high",
"issues_count": 2,
"duration": "4m 12s"
}
}