Voice API
Voice over SIP
Provision managed SIP credentials and connect a softphone such as Linphone or Zoiper.
These features are experimental. If you face any issues, please contact support.
The managed SIP option lets a user connect a desktop or mobile SIP application to the LoopMessage voice service. The API provisions the account, creates SIP extensions, and returns the credentials needed by the SIP client.
All requests in this document use:
https://a.loopmessage.com/api/v1/voice/
The API key must be sent in the Authorization header. Store all returned SIP passwords securely. Passwords are returned by the API because they are needed to configure the SIP client.
SIP client settings
Use the following settings for every managed SIP extension:
| Setting | Value |
|---|---|
| SIP domain / server | voip.loopmessage.com |
| TLS port | 5061 |
| Transport | TLS |
| Username | The extension returned by the API |
| Authentication username | The extension returned by the API |
| Password | The password returned by the API |
Use the TLS transport whenever the client supports it. The SIP server does not require the organization API key in the SIP application.
Configure Linphone
-
Create or open an account in Linphone and choose SIP Account.
-
Enter the SIP address using the extension returned by the API:
sip:{extension}@voip.loopmessage.com -
Set Password to the
passwordreturned by the SIP account endpoint. -
Set the transport to TLS and the SIP port to
5061if Linphone asks for it separately. -
Save the account and wait until its status changes to Registered.
Example values for an account with extension 1001:
| Linphone field | Value |
|---|---|
| Username / SIP address | sip:[email protected] |
| Password | The SIP account password |
| Domain / Proxy | voip.loopmessage.com |
| Transport | TLS |
| Port | 5061 |
Depending on the Linphone version, the domain and transport may be configured under Advanced or Proxy settings. Do not paste the organization API key into the SIP password field.
Configure Zoiper
- Open Zoiper and select Add account.
- Choose SIP as the account type.
- Enter the extension as the username and the SIP account password returned by the API.
- Set the domain or host to
voip.loopmessage.com. - Select TLS as the transport and use port
5061. - If Zoiper asks for an authentication username, use the same extension.
- Complete the setup and confirm that the account shows Registered.
Example values for Zoiper:
| Zoiper field | Value |
|---|---|
| Username | 1001 |
| Password | The SIP account password |
| Host / Domain | voip.loopmessage.com |
| Transport | TLS |
| Port | 5061 |
| Authentication user | 1001 |
If the client does not register, verify that the SIP credential is active, the extension is enabled, and that the client is using TLS rather than UDP or TCP.
Create managed SIP credentials
Create one managed credential set for an organization. Only one managed credential set is allowed per organization.
POST https://a.loopmessage.com/api/v1/voice/voip/credentials/
Request body
| Name | Type | Description |
|---|---|---|
| name | String | Optional display name, up to 128 characters. |
| type* | String | Must be managed. |
| inbound_enabled | Boolean | Optional. Enable calls coming from SIP clients. |
| outbound_enabled | Boolean | Optional. Enable calls delivered to SIP clients. |
{
"name": "Support phones",
"type": "managed",
"inbound_enabled": true,
"outbound_enabled": true
}
The managed SIP setup is created disabled. Activate it after confirming that the provisioning request completed successfully.
Response
Response {.tabset .tabset-fade}
tab 200: Credentials created
{
"success": true,
"id": "credential-uuid",
"name": "Support phones",
"type": "managed",
"enabled": false,
"inbound_enabled": true,
"outbound_enabled": true,
"inbound": {
"trunk_id": "inbound-trunk-id",
"username": "inbound_username",
"password": "inbound_password",
"numbers": [],
"allowed_addresses": []
},
"outbound": {
"trunk_id": "outbound-trunk-id",
"username": "outbound_username",
"password": "outbound_password",
"address": "voip.loopmessage.com:5061",
"transport": "SIP_TRANSPORT_TLS",
"numbers": ["*"]
},
"custom_destination": "",
"pbx": {
"inbound_trunk_id": "pbx-inbound-trunk-id",
"outbound_trunk_id": "pbx-outbound-trunk-id",
"outbound_route_id": "pbx-route-id",
"ring_group_number": "ring-group-number",
"inbound_route_did": "inbound-did",
"outbound_dial_prefix": "outbound-prefix"
},
"create_date": "2026-01-01T12:00:00Z"
}
tab 400: Invalid request
{
"success": false,
"code": 125,
"message": "One or more parameters in the request are invalid"
}
List credentials
GET https://a.loopmessage.com/api/v1/voice/voip/credentials/
The response contains the credential sets belonging to the organization.
{
"success": true,
"items": [],
"count": 0
}
Get credential details
GET https://a.loopmessage.com/api/v1/voice/voip/credentials/{credential_id}/
Replace credential_id with the id returned when the credentials were created.
Activate or deactivate credentials
POST https://a.loopmessage.com/api/v1/voice/voip/credentials/{credential_id}/activate/
POST https://a.loopmessage.com/api/v1/voice/voip/credentials/{credential_id}/deactivate/
Only one credential set can be active for an organization at a time. Activating one set automatically disables another active set.
The response uses the same credential object shape as the create response, with enabled set to the new value.
Create a SIP account
Create an extension for a managed credential set. The extension is provisioned on the managed PBX and can then be used by Linphone, Zoiper, or another SIP application.
POST https://a.loopmessage.com/api/v1/voice/voip/credentials/{credential_id}/sip-accounts/
Request body
| Name | Type | Description |
|---|---|---|
| extension | String | Optional extension, up to 32 characters. If omitted, a unique six-digit extension is generated. |
| password | String | Optional SIP password. Must be 8 to 128 characters. If omitted, a secure password is generated. |
| enabled | Boolean | Optional. Defaults to true. |
{
"extension": "1001",
"password": "replace-with-a-strong-password",
"enabled": true
}
Response
{
"success": true,
"id": "sip-account-uuid",
"voip_credentials_id": "credential-uuid",
"extension": "1001",
"password": "replace-with-a-strong-password",
"enabled": true,
"create_date": "2026-01-01T12:00:00Z"
}
Configure the SIP client with voip.loopmessage.com, port 5061, TLS, username 1001, and the returned password.
The extension and password values in this response are the only SIP login credentials needed by Linphone or Zoiper. The organization API key is used only for API requests and must not be entered in the softphone.
List SIP accounts
GET https://a.loopmessage.com/api/v1/voice/voip/credentials/{credential_id}/sip-accounts/
{
"success": true,
"items": [],
"count": 0
}
Get a SIP account
GET https://a.loopmessage.com/api/v1/voice/voip/credentials/{credential_id}/sip-accounts/{extension}/
Enable or disable a SIP account
PATCH https://a.loopmessage.com/api/v1/voice/voip/credentials/{credential_id}/sip-accounts/{extension}/
Only the enabled field can be changed.
{
"enabled": false
}
Delete a SIP account
DELETE https://a.loopmessage.com/api/v1/voice/voip/credentials/{credential_id}/sip-accounts/{extension}/
{
"success": true,
"deleted": true
}
Dialing format
From the SIP application, dial the recipient in international format, for example +13235550123. To select a specific sender for the call, use:
*{sender_number}*{recipient_number}
Example:
*+13235550100*+13235550123
The sender must belong to your organization and must be allowed to call the recipient.