zantiq.
FeaturesPricingDocs
LoginStart Free
zantiq.

AI-powered testers with real online identities. Test like your users do.

Product

  • Features
  • Pricing
  • API Reference
  • Changelog

Company

  • About
  • Blog
  • Careers
  • Contact

Legal

  • Privacy
  • Terms
  • Security
© 2026 Zantiq. All rights reserved.

API Reference

Complete reference for the Zantiq REST API. Authenticate with API keys, manage testers, run tests, and retrieve reports programmatically.

Base URLhttps://api.zantiq.io

Getting Started

  • Authentication
  • Base URL
  • Errors

Testers

  • List Testers
  • Create Tester
  • Get Tester
  • Update Tester
  • Delete Tester

Groups

  • List Groups
  • Create Group
  • Get Group
  • Update Group
  • Delete Group

Tests

  • List Tests
  • Create Test
  • Get Test
  • Cancel Test

Analytics

  • Get Usage

Webhooks

  • Overview
  • Events

Authentication

The 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"

Base URL

All API requests should be made to:

https://api.zantiq.io

Errors

Zantiq uses conventional HTTP status codes. All error responses include an error field and a human-readable message.

CodeMeaning
200OK — Request succeeded
201Created — Resource created successfully
400Bad Request — Invalid parameters or body
401Unauthorized — Invalid or missing API key
404Not Found — Resource doesn't exist
429Rate Limited — Too many requests
500Server Error — Something went wrong
Response
{
  "error": "Validation Error",
  "message": "tier: Invalid option: expected \"ghost\"|...|.\"sovereign\""
}
GET/v1/testers

List Testers

Returns a paginated list of your testers. Supports filtering by status, tier, and group.

Query Parameters

NameTypeRequiredDescription
statusstringNoFilter by status: active, provisioning, suspended, terminated
tierstringNoFilter by tier: ghost, phantom, specter, sovereign
group_idstringNoFilter by group ID
pageintegerNoPage number (default: 1)
limitintegerNoItems 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"
Response
{
  "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
  }
}
POST/v1/testers

Create Tester

Hire a new AI tester. The tester will be provisioned with identity components based on the selected tier. Provisioning typically takes 3-5 minutes.

Body Parameters

NameTypeRequiredDescription
tierstringYesTester tier: ghost, phantom, specter, sovereign
durationstringYesBilling duration: one_time, weekly, monthly, annual
regionstringNoIdentity region: us (default), eu
custom_personaobjectNoCustom 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"
    }
  }'
Response
{
  "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"
  }
}
GET/v1/testers/:id

Get Tester

Retrieve 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"
Response
{
  "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"
      }
    ]
  }
}
PATCH/v1/testers/:id

Update Tester

Update a tester's group assignment or persona details.

Body Parameters

NameTypeRequiredDescription
group_idstring | nullNoAssign to a group, or null to unassign
personaobjectNoUpdate 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"}'
Response
{
  "data": {
    "id": "tst_01",
    "display_name": "Marcus Fieldsworth",
    "group": "grp_01",
    "status": "active"
  }
}
DELETE/v1/testers/:id

Delete Tester

Terminate 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"
Response
{
  "data": {
    "id": "tst_01",
    "status": "terminated"
  }
}
GET/v1/groups

List Groups

Returns all tester groups with their tester counts.

curl https://api.zantiq.io/v1/groups \
  -H "Authorization: Bearer sk_live_your_key_here"
Response
{
  "data": [
    {
      "id": "grp_01",
      "name": "QA Team",
      "description": "Primary QA testers",
      "tester_count": 3,
      "created_at": "2026-01-10"
    }
  ]
}
POST/v1/groups

Create Group

Create a new tester group for organizing testers.

Body Parameters

NameTypeRequiredDescription
namestringYesGroup name (1-100 characters)
descriptionstringNoGroup 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"}'
Response
{
  "data": {
    "id": "grp_abc123",
    "name": "Red Team",
    "description": "Adversarial testing",
    "tester_count": 0,
    "created_at": "2026-03-19T14:30:00Z"
  }
}
GET/v1/groups/:id

Get Group

Get a group with its list of testers.

curl https://api.zantiq.io/v1/groups/grp_01 \
  -H "Authorization: Bearer sk_live_your_key_here"
Response
{
  "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" }
    ]
  }
}
PATCH/v1/groups/:id

Update Group

Update a group's name or description.

Body Parameters

NameTypeRequiredDescription
namestringNoNew group name
descriptionstringNoNew 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"}'
Response
{
  "data": {
    "id": "grp_01",
    "name": "QA Alpha Team"
  }
}
DELETE/v1/groups/:id

Delete Group

Delete 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"
Response
{
  "data": {
    "id": "grp_01",
    "deleted": true,
    "testers_unassigned": 2
  }
}
GET/v1/tests

List Tests

Returns a paginated list of test runs. Supports filtering by status, tester, and date range.

Query Parameters

NameTypeRequiredDescription
statusstringNoFilter: queued, running, passed, failed, error
tester_idstringNoFilter by tester ID
date_fromstringNoStart date (YYYY-MM-DD)
date_tostringNoEnd date (YYYY-MM-DD)
pageintegerNoPage number
limitintegerNoItems per page (max 100)
curl "https://api.zantiq.io/v1/tests?status=failed&limit=5" \
  -H "Authorization: Bearer sk_live_your_key_here"
Response
{
  "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 }
}
POST/v1/tests

Create Test

Create and queue a new test run. The tester must be active. Provide natural language instructions describing what to test.

Body Parameters

NameTypeRequiredDescription
tester_idstringYesID of the tester to run the test
target_urlstringYesURL to test (must be valid URL)
instructionsstringYesNatural language test instructions (10-5000 chars)
namestringNoTest name (auto-generated from URL if omitted)
config.take_screenshotsbooleanNoCapture screenshots (default: true)
config.record_videobooleanNoRecord session video (default: false)
config.max_duration_minutesintegerNoMax 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
    }
  }'
Response
{
  "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"
  }
}
GET/v1/tests/:id

Get Test

Retrieve 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"
Response
{
  "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" }
    ]
  }
}
POST/v1/tests/:id

Cancel Test

Cancel 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"
Response
{
  "data": {
    "id": "run_03",
    "status": "error",
    "cancelled_at": "2026-03-19T14:35:00Z",
    "message": "Test cancelled by user"
  }
}
GET/v1/analytics

Get Usage Analytics

Retrieve analytics data for your account including test stats, costs, and daily breakdowns.

Query Parameters

NameTypeRequiredDescription
periodstringNoTime period: 7d, 30d (default), 90d
curl "https://api.zantiq.io/v1/analytics?period=30d" \
  -H "Authorization: Bearer sk_live_your_key_here"
Response
{
  "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 }
    ]
  }
}

Webhooks

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 Types

EventDescription
test.completedA test run has finished (passed or failed)
test.failedA test run failed with errors
tester.provisionedA new tester's identity is fully provisioned and ready
tester.suspendedA tester has been suspended
tester.terminatedA tester has been terminated and identities deprovisioned
identity.sms_receivedAn inbound SMS was received on a tester's phone number
identity.email_receivedAn inbound email was received in a tester's mailbox
billing.invoice_paidMonthly invoice was successfully charged
billing.invoice_failedPayment failed — action required
Response
{
  "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"
  }
}