SIP Endpoints
Register a softphone or PBX as a SIP endpoint and link it to a Voice Application.
SIP Endpoints
A SIP endpoint represents a registered SIP UA — a softphone, a PBX trunk, or an internal line in your call centre — that can place and receive calls through TryVox using SIP credentials. Each endpoint has its own username/password and an application_id pointer; calls placed by the endpoint are routed through the Application's voice_url.
If you only want to send and receive calls via REST and webhooks (no SIP registration), you don't need endpoints — go straight to Voice Applications attached to phone numbers.
What an endpoint is
| Field | Description |
|---|---|
id | Stable identifier, prefixed with ep_. |
username | SIP auth username. Globally unique within your account. |
password | SIP auth password. Stored hashed — never returned on read. |
alias | Optional human label (e.g. agent-42 or nyc-pbx). |
application_id | The Application whose voice_url is invoked when this endpoint places a call. Optional — without it the endpoint can register but cannot place calls. |
status | active or inactive. |
The endpoint registers with TryVox's SIP registrar at the SIP domain shown in your dashboard (sip.<region>.tryvox.io).
Endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /v1/voice/endpoints | Create an endpoint |
GET | /v1/voice/endpoints | List endpoints |
GET | /v1/voice/endpoints/{id} | Get one endpoint |
PUT | /v1/voice/endpoints/{id} | Update an endpoint (note: PUT, not PATCH) |
DELETE | /v1/voice/endpoints/{id} | Delete an endpoint |
Create
POST https://api.tryvox.io/v1/voice/endpointsRequest body
| Parameter | Type | Required | Description |
|---|---|---|---|
username | string | yes | SIP username. Must be unique within your account. |
password | string | yes | SIP password. Stored bcrypt-hashed; you cannot retrieve it later. |
alias | string | no | Friendly label. |
application_id | string | no | Attach the endpoint to an existing Application. |
Example request
curl -X POST https://api.tryvox.io/v1/voice/endpoints \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
-H "Content-Type: application/json" \
-d '{
"username": "agent-42",
"password": "s3cret-ph0ne-Pa55!",
"alias": "Floor 3 agent line",
"application_id": "app_8f7a4b2e91c24f3d9a1e2c4b6d8f0a1c"
}'Response
201 Created:
{
"id": "ep_3b2c1a0d4e5f60718293a4b5c6d7e8f9",
"account_id": "TJab12cd34",
"username": "agent-42",
"alias": "Floor 3 agent line",
"application_id": "app_8f7a4b2e91c24f3d9a1e2c4b6d8f0a1c",
"status": "active",
"created_at": "2026-04-09T10:30:00Z",
"updated_at": "2026-04-09T10:30:00Z"
}The password field is never returned. If the endpoint loses its credentials, you must update with a new password (see below).
List
GET https://api.tryvox.io/v1/voice/endpointsQuery parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | 1-indexed page number. Default: 1. |
per_page | integer | Items per page. Default: 20, max: 100. |
Example
curl -u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
"https://api.tryvox.io/v1/voice/endpoints?page=1&per_page=50"Response
200 OK:
{
"data": [
{
"id": "ep_3b2c1a0d4e5f60718293a4b5c6d7e8f9",
"account_id": "TJab12cd34",
"username": "agent-42",
"alias": "Floor 3 agent line",
"application_id": "app_8f7a4b2e91c24f3d9a1e2c4b6d8f0a1c",
"status": "active",
"created_at": "2026-04-09T10:30:00Z",
"updated_at": "2026-04-09T10:30:00Z"
}
],
"meta": {"page": 1, "per_page": 50, "total": 1}
}Get
GET https://api.tryvox.io/v1/voice/endpoints/{id}curl -u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/endpoints/ep_3b2c1a0d4e5f60718293a4b5c6d7e8f9Returns the same shape as Create. Returns 404 NOT_FOUND when the endpoint doesn't exist or belongs to another account.
Update
PUT https://api.tryvox.io/v1/voice/endpoints/{id}Request body
| Parameter | Type | Description |
|---|---|---|
username | string | New SIP username. Disconnects existing registrations. |
alias | string | New label. |
application_id | string | Attach to a different Application, or "" to detach. |
Password rotation is not exposed on this endpoint today. Rotate by deleting and recreating the endpoint with the new password.
Example
curl -X PUT https://api.tryvox.io/v1/voice/endpoints/ep_3b2c1a0d4e5f60718293a4b5c6d7e8f9 \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
-H "Content-Type: application/json" \
-d '{"alias": "Floor 3 / desk 12"}'Response
200 OK — the full updated endpoint.
Delete
DELETE https://api.tryvox.io/v1/voice/endpoints/{id}curl -X DELETE \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/endpoints/ep_3b2c1a0d4e5f60718293a4b5c6d7e8f9Response
204 No Content. Existing SIP registrations for the deleted endpoint expire at the next REGISTER refresh and are not re-accepted.
SIP registration
Once an endpoint is created, point your SIP client at:
SIP server: sip.<region>.tryvox.io
Port: 5060 (UDP), 5061 (TLS)
Username: <your endpoint username>
Password: <your endpoint password>The exact SIP domain for your account is shown in the dashboard under Settings → SIP. Endpoints can place outbound calls (which trigger the attached Application's voice_url) and receive inbound calls (when a phone number is configured to ring the endpoint).
Errors
| Status | Code | Reason |
|---|---|---|
| 400 | VALIDATION_FAILED | username or password missing on create; body invalid |
| 401 | INVALID_CREDENTIALS | Auth ID / Auth Token bad |
| 404 | NOT_FOUND | Endpoint doesn't exist or belongs to another account |
| 409 | USERNAME_TAKEN | An endpoint with this username already exists in your account |