Testing
Create test configurations, run test jobs against IVR systems, and retrieve results. Ideal for CI/CD integration.
14 endpoints
/testing/configsCreate a new test configuration.
Body Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Display name for the test config |
| phoneNumber | string | required | Phone number to test in E.164 format |
| steps | TestStep[] | required | Array of test steps defining the call flow |
| └ name | string | required | Display name for this step |
| └ type | 'dtmf' | 'audio' | 'listen' | required | Step type: send DTMF tones, play audio, or listen for a response |
| └ expected | string | required | Expected transcript to match against the IVR response |
| └ threshold | number | required | Similarity percentage required for a match (0-100, default 90) |
| └ timeout | number | required | Max seconds to wait for a match before failing the step |
| └ delay | number | optional | Send DTMF after N seconds even if threshold not met |
| └ dtmf | string | optional | DTMF digit(s) to send (e.g. "1", "123") |
| └ audioUrl | string | optional | URL of audio file to play (for type: audio) |
| └ profileItemId | string | optional | Reference to a profile item for data or voice |
Request
curl -X POST -H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Sales Flow Test","phoneNumber":"+441234567890","steps":[{"action":"dtmf","value":"1"}]}' \
https://api.nopaque.co.uk/testing/configsResponse
{
"id": "cfg_abc123",
"name": "Sales Flow Test",
"phoneNumber": "+441234567890",
"steps": [
{
"action": "dtmf",
"value": "1"
}
],
"createdAt": "2026-04-10T12: 00: 00Z"
}/testing/configsList all test configurations in the workspace.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| limit | number | optional | Maximum items to return (default 50) |
| nextToken | string | optional | Pagination token from previous response |
Request
curl -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/configsResponse
{
"items": [
{
"id": "cfg_abc123",
"name": "Sales Flow Test",
"phoneNumber": "+441234567890",
"createdAt": "2026-04-10T12: 00: 00Z"
}
],
"nextToken": null
}/testing/configs/{id}Get a specific test configuration by ID.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Test configuration ID |
Request
curl -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/configs/cfg_abc123Response
{
"id": "cfg_abc123",
"name": "Sales Flow Test",
"phoneNumber": "+441234567890",
"steps": [
{
"action": "dtmf",
"value": "1"
}
],
"createdAt": "2026-04-10T12: 00: 00Z"
}/testing/configs/{id}Update a test configuration.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Test configuration ID |
Body Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | optional | Updated display name |
| phoneNumber | string | optional | Updated phone number |
| steps | TestStep[] | optional | Updated test steps |
| └ name | string | required | Display name for this step |
| └ type | 'dtmf' | 'audio' | 'listen' | required | Step type: send DTMF tones, play audio, or listen for a response |
| └ expected | string | required | Expected transcript to match against the IVR response |
| └ threshold | number | required | Similarity percentage required for a match (0-100, default 90) |
| └ timeout | number | required | Max seconds to wait for a match before failing the step |
| └ delay | number | optional | Send DTMF after N seconds even if threshold not met |
| └ dtmf | string | optional | DTMF digit(s) to send (e.g. "1", "123") |
| └ audioUrl | string | optional | URL of audio file to play (for type: audio) |
| └ profileItemId | string | optional | Reference to a profile item for data or voice |
Request
curl -X PUT -H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Updated Sales Flow"}' \
https://api.nopaque.co.uk/testing/configs/cfg_abc123Response
{
"id": "cfg_abc123",
"name": "Updated Sales Flow",
"updatedAt": "2026-04-10T12: 10: 00Z"
}/testing/configs/{id}Delete a test configuration.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Test configuration ID |
Request
curl -X DELETE -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/configs/cfg_abc123Response
{
"message": "Test configuration deleted successfully"
}/testing/jobsCreate a new test job from a configuration.
Body Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| configId | string | required | Test configuration ID to use |
| name | string | optional | Optional name override for this job |
Request
curl -X POST -H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"configId":"cfg_abc123"}' \
https://api.nopaque.co.uk/testing/jobsResponse
{
"id": "job_abc123",
"configId": "cfg_abc123",
"status": "created",
"createdAt": "2026-04-10T12: 00: 00Z"
}/testing/jobsList all test jobs in the workspace.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| limit | number | optional | Maximum items to return (default 50) |
| nextToken | string | optional | Pagination token from previous response |
Request
curl -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/jobsResponse
{
"items": [
{
"id": "job_abc123",
"configId": "cfg_abc123",
"status": "completed",
"createdAt": "2026-04-10T12: 00: 00Z"
}
],
"nextToken": null
}/testing/jobs/{id}Get a specific test job by ID.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Test job ID |
Request
curl -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/jobs/job_abc123Response
{
"id": "job_abc123",
"configId": "cfg_abc123",
"status": "completed",
"createdAt": "2026-04-10T12: 00: 00Z",
"completedAt": "2026-04-10T12: 05: 00Z"
}/testing/jobs/{id}Delete a test job and its results.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Test job ID |
Request
curl -X DELETE -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/jobs/job_abc123Response
{
"message": "Test job deleted successfully"
}/testing/runsStart a test run. Pass exactly one of jobId (run an existing scheduled test job) or testConfigId (ad-hoc run directly from a test config).
Body Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| jobId | string | optional | Test job ID to run. Pass this OR testConfigId (exactly one required). |
| testConfigId | string | optional | Test config ID for an ad-hoc run (no saved job needed). Pass this OR jobId (exactly one required). |
Request
curl -X POST -H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"testConfigId":"cfg_abc123"}' \
https://api.nopaque.co.uk/testing/runsResponse
{
"message": "Test run started",
"run": {
"id": "run_def456",
"jobId": "job_abc123",
"testConfigId": "cfg_abc123",
"status": "pending",
"startedAt": "2026-04-10T12: 15: 00Z"
}
}/testing/runsList test runs in the workspace. Filter by run type, outcome, phone number, config, or catalogue test, bound by start time, sort, and page with an opaque cursor. Items are slim run summaries.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| runType | string | optional | Filter by run type: mission, compliance, standard, or param |
| outcome | string | optional | Filter by outcome: PASS, FAIL, ERROR, INCONCLUSIVE, or pending |
| phoneNumber | string | optional | Filter by phone number in E.164 format |
| configId | string | optional | Filter by test config id |
| catalogueTestId | string | optional | Filter by compliance catalogue test id |
| jobId | string | optional | Filter by test job id (legacy back-compat) |
| startedAfter | string | optional | Only return runs started at or after this ISO8601 datetime |
| startedBefore | string | optional | Only return runs started at or before this ISO8601 datetime |
| sortBy | string | optional | Sort field: startedAt (default) or completedAt |
| sortDir | string | optional | Sort direction: asc or desc (default desc) |
| limit | number | optional | Maximum items to return, 1-200 (default 50) |
| cursor | string | optional | Opaque pagination cursor from the previous response |
Request
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.nopaque.co.uk/testing/runs?runType=mission&outcome=PASS&limit=10"Response
{
"runs": [
{
"id": "run_def456",
"workspaceId": "ws_abc123",
"runType": "mission",
"configId": "mtc_abc123",
"status": "completed",
"outcome": "PASS",
"phoneNumber": "+441234567890",
"mission": "Reset my online banking password",
"passedSteps": 4,
"failedSteps": 0,
"callDurationSecs": 182,
"startedAt": "2026-04-10T12: 15: 00Z",
"completedAt": "2026-04-10T12: 18: 00Z"
}
],
"nextCursor": null
}/testing/runs/aggregateAggregate test runs into counts grouped by a dimension, with the same filters as the list endpoint. Supply an optional timeBucket to break the counts down by day, week, or month. Without a timeBucket the response returns groups; with one it returns buckets.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| groupBy | string | required | Dimension to group by: outcome, runType, configId, catalogueTestId, or phoneNumber |
| timeBucket | string | optional | Break counts down over time: day, week, or month |
| runType | string | optional | Filter by run type: mission, compliance, standard, or param |
| outcome | string | optional | Filter by outcome: PASS, FAIL, ERROR, INCONCLUSIVE, or pending |
| phoneNumber | string | optional | Filter by phone number in E.164 format |
| configId | string | optional | Filter by test config id |
| catalogueTestId | string | optional | Filter by compliance catalogue test id |
| startedAfter | string | optional | Only include runs started at or after this ISO8601 datetime |
| startedBefore | string | optional | Only include runs started at or before this ISO8601 datetime |
Request
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.nopaque.co.uk/testing/runs/aggregate?groupBy=outcome&runType=mission"Response
{
"groups": [
{
"key": "PASS",
"count": 42
},
{
"key": "FAIL",
"count": 7
},
{
"key": "INCONCLUSIVE",
"count": 3
}
],
"truncated": false,
"totalGroups": 3
}/testing/runs/{id}Get a specific test run by ID with full results. Completed runs may carry an optional callTelemetry object (schemaVersion 1) with telephony, quality, audio, cost, timing, and per-turn detail, and each step result may carry turnTelemetry. All telemetry fields are optional.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Test run ID |
Request
curl -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/runs/run_def456Response
{
"id": "run_def456",
"jobId": "job_abc123",
"status": "completed",
"result": "pass",
"startedAt": "2026-04-10T12: 15: 00Z",
"completedAt": "2026-04-10T12: 18: 00Z",
"callTelemetry": {
"schemaVersion": 1,
"timing": {
"totalCallSecs": 182
},
"cost": {
"currency": "GBP",
"totalMinorUnits": 14
}
}
}/testing/mission-test-runs/{id}Get a single mission test run by id with its verdict and evidence. Mission tests have no step results, so the response carries verdict, judge reasoning, transcript, and compliance evidence rather than steps.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Mission test run id |
Request
curl -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/mission-test-runs/mtr_abc123Response
{
"id": "mtr_abc123",
"workspaceId": "ws_abc123",
"configId": "mtc_abc123",
"status": "completed",
"outcome": "PASS",
"sector": "banking",
"mission": "Reset my online banking password",
"acceptance": "Agent verifies identity and resets password",
"passed": true,
"verdict": "pass",
"passReasoning": "The agent verified identity and completed the reset.",
"judgeReasoning": "All acceptance criteria met with no compliance breaches.",
"phoneNumber": "+441234567890",
"startedAt": "2026-05-06T12: 00: 00Z",
"completedAt": "2026-05-06T12: 05: 00Z"
}