Skip to main content

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:

SettingValue
SIP domain / servervoip.loopmessage.com
TLS port5061
TransportTLS
UsernameThe extension returned by the API
Authentication usernameThe extension returned by the API
PasswordThe 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

  1. Create or open an account in Linphone and choose SIP Account.

  2. Enter the SIP address using the extension returned by the API:

    sip:{extension}@voip.loopmessage.com

  3. Set Password to the password returned by the SIP account endpoint.

  4. Set the transport to TLS and the SIP port to 5061 if Linphone asks for it separately.

  5. Save the account and wait until its status changes to Registered.

Example values for an account with extension 1001:

Linphone fieldValue
Username / SIP addresssip:[email protected]
PasswordThe SIP account password
Domain / Proxyvoip.loopmessage.com
TransportTLS
Port5061

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

  1. Open Zoiper and select Add account.
  2. Choose SIP as the account type.
  3. Enter the extension as the username and the SIP account password returned by the API.
  4. Set the domain or host to voip.loopmessage.com.
  5. Select TLS as the transport and use port 5061.
  6. If Zoiper asks for an authentication username, use the same extension.
  7. Complete the setup and confirm that the account shows Registered.

Example values for Zoiper:

Zoiper fieldValue
Username1001
PasswordThe SIP account password
Host / Domainvoip.loopmessage.com
TransportTLS
Port5061
Authentication user1001

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

NameTypeDescription
nameStringOptional display name, up to 128 characters.
type*StringMust be managed.
inbound_enabledBooleanOptional. Enable calls coming from SIP clients.
outbound_enabledBooleanOptional. 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

NameTypeDescription
extensionStringOptional extension, up to 32 characters. If omitted, a unique six-digit extension is generated.
passwordStringOptional SIP password. Must be 8 to 128 characters. If omitted, a secure password is generated.
enabledBooleanOptional. 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.