Before you start
Ask your GovWorx administrator to confirm:- Your tenant has the intended SIPY subscriber and Assist test position configured.
- The station ID you will send identifies that test position.
- You have a tenant-wide Coach API Bearer Token with Invoke Test Calls permission.
ADMINis also accepted, but a least-privilege role is preferred. Agency-restricted keys cannot use this tenant-wide API. See creating an API key. - Optional location delivery is configured if you intend to send coordinates.
stationId must be nonblank, already trimmed, XML-valid and free of control characters. It is
limited to 128 UTF-16 code units, not 128 Unicode code points: an emoji uses two units, so
64 emoji fit the length bound while 70 do not. The schema’s maxLength counts code points and
is only an approximation of that runtime limit; it does not replace server XML validation.
With location delivery, use a printable ASCII station ID.
Examples use 2025550100 from NANPA’s reserved fictional number range.
This is mock caller ANI, not a destination to dial.
1. Select the environment
Use the same environment for the Coach key, token exchange and all call requests.
The examples use shell variables. Load secrets from your approved secret manager; do not paste
them into shared scripts, screenshots, command history or logs. Do not enable shell tracing.
2. Exchange your Coach key for an access token
Send an empty POST with the Coach key. There is no JSON body,grant_type, scope, client ID or
client-secret field.
access_token, token_type (Bearer) and expires_in (3600 seconds).
Reuse this token for calls in that environment for up to one hour, then exchange the Coach key
again. Token expiry does not disconnect an already admitted call. Refresh it before polling or
cancelling after expiry. Never send the Coach key in SIP signaling or share the service signing key.
3. Start a call
This is the smallest one-off manual request, without automatic retry protection. It defaults to no audio, no location and a 60-second maximum. Replace the station with your configured test station. For automation or retries, generate and retainrequestId before the first POST,
as explained below.
"needAudio": true. Use
audio scenarios for other bundled scripts,
custom transcripts and mixed-language turns.
An accepted request returns 202, a status URL in the Location response header and a body like:
202 and Completed describe the simulator—not confirmed delivery to Assist or another
integration. Verify that the intended position, ANI, recording and downstream records appear.4. Check status or cancel
SetRUN_ID to the actual runId from your response, not recordingCallId or requestId.
Cancelled confirms simulator cleanup. A still-running or uncertain result does not.
Cancelling an already completed call returns its completed receipt without changing history.
New calls versus retries
- New intentional call: omit
requestId(the server generates it), or supply a new unique ID. - Retry after a timeout: supply the same ID and identical payload to avoid duplicate calls. For automated retries, generate and save an ID before the first POST.
- A retained ID with the same payload returns the original result, even if
Completed. - Reusing a retained ID with different fields returns
409 request_id_conflict.
requestId is not returned, and runId is not
a substitute for it. If a request without an explicit ID loses its response, sending it again
can create another call. Receipts normally last 24 hours, but terminal history can be
evicted earlier; replay protection is not permanent. See
lifecycle and errors.
