IXICA APIEndpoint Reference

IXICA Telecom API Documentation

Integrate Canadian telecom services into your platform with IXICA’s APIs. Provision SIP trunks and phone numbers, manage E911 and number-porting requests, send messages and retrieve call records. Explore endpoint parameters, request examples and response formats for the sipcontrol and mysms platforms.

Before your first API request

Getting started with the IXICA API

Bring IXICA telecom services into your application or business workflow. Before you begin your integration, you must have a live account with IXICA. To get set up for API access, contact your account manager or the IXICA sales team.

  1. Start with a live IXICA account

    A live IXICA account is required to use the API. If you are not yet an IXICA customer, contact the sales team to discuss opening an account and your API integration needs.

  2. Arrange your API setup

    Already have an account? Contact your IXICA account manager or the sales team to get set up. Explain which services you want to connect and what you would like your integration to do.

  3. Explore the endpoint reference

    Choose a service from the navigation to review its endpoints, request parameters, examples, and response fields. Read the notes for each endpoint as you plan your integration.

Ready to get started? Your account manager or the IXICA sales team is your starting point for API setup. You can explore the documentation below while planning your integration.

Explore API services →

Direct Inward Dialing (DID) sipcontrol

Search for a new DID 2:5 #

POST https://api.sipcontrol.cloud/account_number/did/search
DID Search fields are Multi-Field dependent. As a minimum at least one of the following are required: NPA, Ratecenter, Exchange, LIR (for Canadian Numbers), LATA (for US Numbers).

If ratecenter is populated, region is mandatory.

Field XXXX alone is not sufficient. It must be accompanied by at least npa,rc,exchange_code,lata,lir_name.

System will return a maximum of 99 numbers or the maximum number available, whichever is smaller, with a ref number and expiry time. The numbers are held in seach-lock until expiry time, after which a new search must be performed.

The ref number must be used to complete the order, prior to the expiry time, using function "Assign a DID".

Parameters

Param Field Name Type Required Notes
qtyQuantityintOptionalNumber of DIDs to return per search request. Defaults to 99 if omitted. Hard-capped at 99.
npaNPA (Area Code)intMulti-Field Dependent3-digit North American area code (e.g., 604, 416). Non-digit characters are stripped before validation.
nxxNXX (Central Office Code)intMulti-Field Dependent3-digit central office code. Non-digit characters are stripped before validation.
xxxxXXXX (Line Number Ends-In)textOptionalTrailing digits of the DID (up to 4). Used as an "ends-in" filter both against local inventory and the upstream carrier search.
exchange_codeExchange CodetextMulti-Field DependentLERG exchange code identifying the switching entity.
lataLATAintMulti-Field Dependent3-digit Local Access and Transport Area code. LATA 888 restricts the search to local DB inventory only (no upstream carrier fallback).
lir_codeLIR CodetextMulti-Field DependentLocal Interconnection Region code.
lir_nameLIR NametextMulti-Field DependentLocal Interconnection Region name (matches "lir" column in inventory).
rcRate CentertextMulti-Field DependentRate center name. Required together with "region" when used as the primary search dimension.
regionRegion (Province / State)textMulti-Field DependentTwo-letter province or state code (e.g., BC, ON, NY, CA). Required together with "rc" when used as the primary search dimension.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer for whom you are searching DIDs. If omitted, the reseller's own account_number is used (legacy behaviour). Rate lookups, per-DID surcharges, and the 10-minute reservation timer (access_timer_account) are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/did/search';
$data = [
    'qty' => '<Quantity>',
    'npa' => '<NPA (Area Code)>',
    'nxx' => '<NXX (Central Office Code)>',
    'xxxx' => '<XXXX (Line Number Ends-In)>',
    'exchange_code' => '<Exchange Code>',
    'lata' => '<LATA>',
    'lir_code' => '<LIR Code>',
    'lir_name' => '<LIR Name>',
    'rc' => '<Rate Center>',
    'region' => '<Region (Province / State)>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "ref": 482913,
            "result": "4165551212",
            "nrc": "4.50",
            "rc": "Toronto",
            "region": "ON",
            "exchange_code": "808401",
            "lir_code": "123456",
            "lir_name": "TORONTO",
            "lata": "888",
            "expires": "2026-08-20 14:35:22"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
refint482913
resulttext4165551212
nrctext4.50
rctextToronto
regiontextON
exchange_codetext808401
lir_codetext123456
lir_nametextTORONTO
latatext888
expiresdatetime2026-08-20 14:35:22
Back to reference overview ↑

Assign a DID 2:6 #

POST https://api.sipcontrol.cloud/account_number/did/assign
Note: The response is a JSON array at the top level (no wrapper key). Each element corresponds to one entry from the input assign array. Successful assignments carry the fields shown under results below; failed entries contain only error and ref (with optional debug fields on server-side issues). When at least one assignment succeeds, all successful entries include order_number and ticket_number for the single order/ticket created for the batch.
If customer is empty, account is required. If account is empty, customer is required.

Parameters

Param Field Name Type Required Notes
your_refYour ReferencetextOptionalFree-form reference string echoed back on every result row. Useful for correlating results to your own order/PO/ticket ID.
assignAssignmentsarrayRequiredArray of DID assignment objects. Each entry provisions one DID onto a customer/account/trunk destination in a single batch call.
refReferencetextRequiredEither the numeric inventory ID (from did_search on local DB inventory) OR a 10-digit TN (from did_search upstream carrier fallback). The function auto-detects which path to use.
customerSIP Customer IDtextMulti-Field DependentIdentifier of the SIP Customer to attach the DID to. Either "customer" or "account" (or both) must be provided; a "trunk" without an "account" is rejected.
accountSIP Account IDtextMulti-Field DependentIdentifier of the SIP Account to attach the DID to. Either "customer" or "account" (or both) must be provided.
trunkSIP Trunk IDtextOptionalIdentifier of the SIP Trunk to attach the DID to. Requires "account" to also be provided.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose SIP topology owns these assignments and who will be billed. If omitted, the reseller's own account_number is used (legacy behaviour). SIP Customer/Account/Trunk validation, inventory reservation timer, aaa_did_assignments ownership, ticket, and sales quote lines are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/did/assign';
$data = [
    'your_ref' => '<Your Reference>',
    'assign' => [
        [
            'ref' => '<Reference>',
            'customer' => '<SIP Customer ID>',
            'account' => '<SIP Account ID>',
            'trunk' => '<SIP Trunk ID>'
        ]
    ],
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "message": "Do not publish TN until you have tested inbound calls",
            "response": "ok",
            "ref": 482913,
            "your_ref": "REF123",
            "did": "4165551212",
            "customer": "CUST-001",
            "account": "ACCT-500",
            "trunk": "TRK-1234",
            "order_number": "OA202608201234",
            "ticket_number": "180999"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
messagetextDo not publish TN until you have tested inbound calls
responsetextok
refint482913
your_reftextREF123
didtext4165551212
customertextCUST-001
accounttextACCT-500
trunktextTRK-1234
order_numbertextOA202608201234
ticket_numbertext180999
Back to reference overview ↑

List all DID 2:41 #

POST https://api.sipcontrol.cloud/account_number/did/list

Parameters

Param Field Name Type Required Notes
pagePageintOptionalPage number to retrieve (1-9999). Defaults to 1 if omitted. 100 DIDs per page.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose assigned DIDs you want to list. If omitted, the reseller's own account_number is used (legacy behaviour).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/did/list';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "total_pages": 12,
    "total_items": 1173,
    "page_returned": 1,
    "dids": [
        {
            "did": "4165551212",
            "rc": "Toronto",
            "region": "ON",
            "lir": "IXICA Communications Inc.",
            "lata": "888",
            "exchange": "808401"
        }
    ]
}

Response Fields

Field Type Example Notes
total_pagesint12
total_itemsint1173
page_returnedint1
didsarray
didtext4165551212
rctextToronto
regiontextON
lirtextIXICA Communications Inc.
latatext888
exchangetext808401
Back to reference overview ↑

Toll Free Number (TFN) sipcontrol

Search for a new TFN 3:9 #

POST https://api.sipcontrol.cloud/account_number/tfn/search
All fields are optional. Maximum of 25 results will be returned.

Parameters

Param Field Name Type Required Notes
npaNPA (Toll-Free Prefix)intOptional3-digit toll-free prefix (e.g., 800, 833, 844, 855, 866, 877, 888). Non-digit characters are stripped before validation.
nxxNXXintOptional3-digit central office code. Non-digit characters are stripped before validation.
xxxxXXXX (Line Number)intOptional4-digit line number. Non-digit characters are stripped before validation.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer for whom you are searching TFNs. If omitted, the reseller's own account_number is used (legacy behaviour). Rate lookups, per-TFN surcharges, and the 10-minute reservation timer (access_timer_account) are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tfn/search';
$data = [
    'npa' => '<NPA (Toll-Free Prefix)>',
    'nxx' => '<NXX>',
    'xxxx' => '<XXXX (Line Number)>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "ref": 812304,
            "result": "8005551212",
            "nrc": "5.00",
            "expires": "2026-08-20 14:35:22"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
refint812304
resulttext8005551212
nrctext5.00
expiresdatetime2026-08-20 14:35:22
Back to reference overview ↑

Assign a TFN 3:10 #

POST https://api.sipcontrol.cloud/account_number/tfn/assign
Note: The response is a JSON array at the top level (no wrapper key). Each element corresponds to one entry from the input assign array. Successful assignments carry the fields shown under results below; failed entries contain only error and ref (with optional debug fields on server-side issues). When at least one assignment succeeds, all successful entries include order_number and ticket_number for the single order/ticket created for the batch.
If customer is empty, account is required. If account is empty, customer is required.

Parameters

Param Field Name Type Required Notes
your_refYour ReferencetextOptionalFree-form reference string echoed back on every result row. Useful for correlating results to your own order/PO/ticket ID.
assignAssignmentsarrayRequiredArray of TFN assignment objects. Each entry provisions one Toll-Free Number onto a customer/account/trunk destination in a single batch call.
refReferenceintRequiredNumeric inventory ID returned from tfn_search. Must match a TFN currently reserved for the resolved customer_account_number within the 10-minute access-timer window.
customerSIP Customer IDtextMulti-Field DependentIdentifier of the SIP Customer to attach the TFN to. Either "customer" or "account" (or both) must be provided; a "trunk" without an "account" is rejected.
accountSIP Account IDtextMulti-Field DependentIdentifier of the SIP Account to attach the TFN to. Either "customer" or "account" (or both) must be provided.
trunkSIP Trunk IDtextOptionalIdentifier of the SIP Trunk to attach the TFN to. Requires "account" to also be provided.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose SIP topology owns these assignments and who will be billed. If omitted, the reseller's own account_number is used (legacy behaviour). SIP Customer/Account/Trunk validation, inventory reservation timer, aaa_did_assignments ownership, ticket, and sales quote lines are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tfn/assign';
$data = [
    'your_ref' => '<Your Reference>',
    'assign' => [
        [
            'ref' => '<Reference>',
            'customer' => '<SIP Customer ID>',
            'account' => '<SIP Account ID>',
            'trunk' => '<SIP Trunk ID>'
        ]
    ],
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "message": "Do not publish TN until you have tested inbound calls",
            "response": "ok",
            "ref": 812304,
            "your_ref": "REF123",
            "did": "8005551212",
            "customer": "CUST-001",
            "account": "ACCT-500",
            "trunk": "TRK-1234",
            "order_number": "OA202608211234",
            "ticket_number": "180999"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
messagetextDo not publish TN until you have tested inbound calls
responsetextok
refint812304
your_reftextREF123
didtext8005551212
customertextCUST-001
accounttextACCT-500
trunktextTRK-1234
order_numbertextOA202608211234
ticket_numbertext180999
Back to reference overview ↑

List all TFN 3:42 #

POST https://api.sipcontrol.cloud/account_number/tfn/list

Parameters

Param Field Name Type Required Notes
pagePageintOptionalPage number to retrieve (1-9999). Defaults to 1 if omitted. 100 TFNs per page.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose assigned TFNs you want to list. If omitted, the reseller's own account_number is used (legacy behaviour).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tfn/list';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "total_pages": 12,
    "total_items": 1173,
    "page_returned": 1,
    "tfns": [
        {
            "tfn": "8005551212",
            "rc": "",
            "region": "",
            "lir": "",
            "lata": "",
            "exchange": ""
        }
    ]
}

Response Fields

Field Type Example Notes
total_pagesint12
total_itemsint1173
page_returnedint1
tfnsarray
tfntext8005551212
rctext
regiontext
lirtext
latatext
exchangetext
Back to reference overview ↑

TN Operations sipcontrol

Change the routing of an existing TN 8:7 #

POST https://api.sipcontrol.cloud/account_number/tn/reroute
Note: The response is a JSON array at the top level (no wrapper key). Each element corresponds to one entry from the input reroute array. Successful reroutes carry the fields shown under results below; failed entries contain only error (with a ref field when a ref was supplied). When at least one reroute succeeds, all successful entries include the same order_number and ticket_number for the single change request/ticket created for the batch.

Parameters

Param Field Name Type Required Notes
your_refYour ReferencetextOptionalFree-form reference string echoed back on every successful result row. Useful for correlating results to your own change/PO/ticket ID.
rerouteReroutesarrayRequiredArray of TN reroute objects. Each entry queues one routing change for a currently-assigned DID or TFN in a single batch call.
tnTelephone NumbertextRequired10-digit North American telephone number (DID or Toll-Free) whose routing you want to change. Non-digit characters are stripped before validation.
customerNew SIP Customer IDtextMulti-Field DependentIdentifier of the new SIP Customer destination. Either "customer" or "account" (or both) must be provided; a "trunk" without an "account" is rejected.
accountNew SIP Account IDtextMulti-Field DependentIdentifier of the new SIP Account destination. Either "customer" or "account" (or both) must be provided.
trunkNew SIP Trunk IDtextOptionalIdentifier of the new SIP Trunk destination. Requires "account" to also be provided.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose TN routing is being changed. If omitted, the reseller's own account_number is used (legacy behaviour). SIP Customer/Account/Trunk validation, assignment ownership check, change request ownership, and ticket are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tn/reroute';
$data = [
    'your_ref' => '<Your Reference>',
    'reroute' => [
        [
            'tn' => '<Telephone Number>',
            'customer' => '<New SIP Customer ID>',
            'account' => '<New SIP Account ID>',
            'trunk' => '<New SIP Trunk ID>'
        ]
    ],
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "response": "ok",
            "your_ref": "REF123",
            "tn": "4165551212",
            "customer": "CUST-001",
            "account": "ACCT-500",
            "trunk": "TRK-1234",
            "order_number": 48291,
            "ticket_number": "180999"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
responsetextok
your_reftextREF123
tntext4165551212
customertextCUST-001
accounttextACCT-500
trunktextTRK-1234
order_numberint48291
ticket_numbertext180999
Back to reference overview ↑

Delete an existing TN 8:8 #

POST https://api.sipcontrol.cloud/account_number/tn/delete
Note: The response is a JSON array at the top level (no wrapper key). Each element corresponds to one entry from the input delete_array. Successful deletes carry the fields shown under results below; failed entries contain only error. When at least one delete succeeds, all successful entries include the same order_number and ticket_number for the single change request/ticket created for the batch.

Parameters

Param Field Name Type Required Notes
your_refYour ReferencetextOptionalFree-form reference string echoed back on every successful result row. Useful for correlating results to your own change/PO/ticket ID.
delete_arrayTNs to DisconnectarrayRequiredArray of TN disconnect objects. Each entry queues one disconnect for a currently-assigned DID or TFN in a single batch call.
tnTelephone NumbertextRequired10-digit North American telephone number (DID or Toll-Free) to be disconnected. Non-digit characters are stripped before validation.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose TN is being disconnected. If omitted, the reseller's own account_number is used (legacy behaviour). Assignment ownership check, change request ownership, and ticket are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tn/delete';
$data = [
    'your_ref' => '<Your Reference>',
    'delete_array' => [
        [
            'tn' => '<Telephone Number>'
        ]
    ],
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "response": "ok",
            "your_ref": "REF123",
            "tn": "4165551212",
            "order_number": 48292,
            "ticket_number": "181000"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
responsetextok
your_reftextREF123
tntext4165551212
order_numberint48292
ticket_numbertext181000
Back to reference overview ↑

Check status of a TN 8:27 #

POST https://api.sipcontrol.cloud/account_number/tn/get
Note: The response is a JSON array at the top level (no wrapper key). Each element corresponds to one entry from the input get array. Successful lookups carry the fields shown under results below; failed entries contain only error. For toll-free numbers (TFNs), the geo fields (rc, region, exchange_code, lir_code, lir_name, lata) return as empty strings.

Parameters

Param Field Name Type Required Notes
getTNs to RetrievearrayRequiredArray of TN objects to look up in a single batch call.
tnTelephone NumbertextRequired10-digit North American telephone number (DID or Toll-Free). Non-digit characters are stripped before validation.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose TN assignments you want to query. If omitted, the reseller's own account_number is used (legacy behaviour). TNs not assigned to the resolved account return "TN not assigned to your account".

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tn/get';
$data = [
    'get' => [
        [
            'tn' => '<Telephone Number>'
        ]
    ],
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "tn": "6045551234",
    "customer": "Acme Corp",
    "account": "000123456",
    "trunk": "trunk_main",
    "rc": "VNCVRBC01",
    "region": "BC",
    "exchange_code": "604555",
    "lir_code": "BCTL",
    "lir_name": "TELUS",
    "lata": "888",
    "error": "TN not assigned to your account"
}

Response Fields

Field Type Example Notes
tntext6045551234
customertextAcme Corp
accounttext000123456
trunktexttrunk_main
rctextVNCVRBC01
regiontextBC
exchange_codetext604555
lir_codetextBCTL
lir_nametextTELUS
latatext888
errortextTN not assigned to your account
Back to reference overview ↑

E911 sipcontrol

Adding a new Listing 1:2 #

POST https://api.sipcontrol.cloud/account_number/e911/new

Parameters

Param Field Name Type Required Notes
cidCaller IDtextRequiredThe 10-digit Caller ID (DID) to register an E911 listing for.
nameNametextRequiredFull name of the primary contact at the registered address.
street_numberStreet NumbertextRequiredCivic street number of the physical address.
street_nameStreet NametextRequiredStreet name of the physical address.
suiteSuite / UnittextOptionalSuite, unit, or apartment number, if applicable.
additionalAdditional InfotextOptionalAdditional address details (buzzer code, floor, building name, etc.).
cityCitytextRequiredCity of the physical address.
province_stateProvince / StatetextRequiredTwo-letter province or state code (e.g., BC, ON, NY).
postal_codePostal / ZIP CodetextRequiredPostal code (Canada) or ZIP code (US).
languageLanguagetextRequiredPreferred language for emergency responder communication (EN or FR).
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose E911 listing is being registered. If omitted, the reseller's own account_number is used (legacy behaviour).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/e911/new';
$data = [
    'cid' => '<Caller ID>',
    'name' => '<Name>',
    'street_number' => '<Street Number>',
    'street_name' => '<Street Name>',
    'suite' => '<Suite / Unit>',
    'additional' => '<Additional Info>',
    'city' => '<City>',
    'province_state' => '<Province / State>',
    'postal_code' => '<Postal / ZIP Code>',
    'language' => '<Language>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "message": "This is an existing listing. Listing details have been updated",
    "ref": 12345
}

Response Fields

Field Type Example Notes
resulttextok
messagetextThis is an existing listing. Listing details have been updated
refint12345
Back to reference overview ↑

Updating an existing Listing 1:3 #

POST https://api.sipcontrol.cloud/account_number/e911/update
The update function will revert to a new function if no listing exists for caller ID

Parameters

Param Field Name Type Required Notes
cidCaller IDtextRequiredThe 10-digit Caller ID (DID) whose E911 listing you want to update.
nameNametextRequiredFull name of the primary contact at the registered address.
street_numberStreet NumbertextRequiredCivic street number of the physical address.
street_nameStreet NametextRequiredStreet name of the physical address.
suiteSuite / UnittextOptionalSuite, unit, or apartment number, if applicable.
additionalAdditional InfotextOptionalAdditional address details (buzzer code, floor, building name, etc.).
cityCitytextRequiredCity of the physical address.
province_stateProvince / StatetextRequiredTwo-letter province or state code (e.g., BC, ON, NY).
postal_codePostal / ZIP CodetextRequiredPostal code (Canada) or ZIP code (US).
languageLanguagetextRequiredPreferred language for emergency responder communication (EN or FR).
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose E911 listing is being updated. If omitted, the reseller's own account_number is used (legacy behaviour). If no active listing is found, the request is processed as a new listing.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/e911/update';
$data = [
    'cid' => '<Caller ID>',
    'name' => '<Name>',
    'street_number' => '<Street Number>',
    'street_name' => '<Street Name>',
    'suite' => '<Suite / Unit>',
    'additional' => '<Additional Info>',
    'city' => '<City>',
    'province_state' => '<Province / State>',
    'postal_code' => '<Postal / ZIP Code>',
    'language' => '<Language>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "message": "Listing was not found. Hence we have processed this as a new listing",
    "ref": 12345
}

Response Fields

Field Type Example Notes
resulttextok
messagetextListing was not found. Hence we have processed this as a new listing
refint12345
Back to reference overview ↑

Deleting an existing Listing 1:4 #

POST https://api.sipcontrol.cloud/account_number/e911/delete

Parameters

Param Field Name Type Required Notes
cidCaller IDtextRequiredThe 10-digit Caller ID (DID) whose E911 listing you want to delete.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose E911 listing is being deleted. If omitted, the reseller's own account_number is used (legacy behaviour).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/e911/delete';
$data = [
    'cid' => '<Caller ID>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "message": "Listing removed from this account only. Another active listing exists under a different account.",
    "ref": 12345
}

Response Fields

Field Type Example Notes
resulttextok
messagetextListing removed from this account only. Another active listing exists under a different account.
refint12345
Back to reference overview ↑

Search for an existing Listing 1:20 #

POST https://api.sipcontrol.cloud/account_number/e911/get

Parameters

Param Field Name Type Required Notes
cidCaller IDtextRequiredThe 10-digit Caller ID (DID) to look up an active E911 registration for.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose E911 record you want to retrieve. If omitted, the reseller's own account_number is used (legacy behaviour).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/e911/get';
$data = [
    'cid' => '<Caller ID>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "found": "Y",
    "ref": 12345,
    "status": "Active",
    "message": "-",
    "name": "John Doe",
    "street_number": "123",
    "street_name": "Main Street",
    "suite": "4B",
    "additional": "Buzzer 12",
    "city": "Vancouver",
    "province": "BC",
    "postal_code": "V6B1A1",
    "language": "EN"
}

Response Fields

Field Type Example Notes
foundtextY
refint12345
statustextActive
messagetext-
nametextJohn Doe
street_numbertext123
street_nametextMain Street
suitetext4B
additionaltextBuzzer 12
citytextVancouver
provincetextBC
postal_codetextV6B1A1
languagetextEN
Back to reference overview ↑

Local Number Portability (LNP: DID & TFN) sipcontrol

Submit a new LNP 4:13 #

POST https://api.sipcontrol.cloud/account_number/lnp/new
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the master PON (pon) identifying the port order, the order_number, the ticket_number for tracking progress, and a port array listing each TN that was submitted along with its resolved rate center and region. TN type mixing: All TNs in a single request must be the same type — either all DIDs or all toll-free numbers (TFNs). Mixed submissions are rejected. Submit separate requests for DID and TFN ports. PORT required: At least one TN in the port array must have disposition = PORT. Requests containing only DISCONNECT, LEAVE ACTIVE, or ASSIGN AS NEW BTN entries are rejected. Duplicate check: Any TN currently on an open LNP record (status not Completed or Deleted) for this account will cause the request to be rejected — the existing order must complete or be canceled first. Supporting documents: Files listed in the files array are downloaded server-to-server by IXICA. URLs must be publicly reachable at time of submission, must end in .pdf, must return a valid PDF (magic number %PDF verified), and each file is capped at 10 MB. Typical documents: signed LOA (Letter of Authorization) and a recent bill copy from the losing carrier. On error (missing fields, invalid disposition, mixed TN types, duplicate TN on existing order, invalid destination, document download failure, DB failure), returns an array containing a single object with an error field and optionally missing_fields, tn, url, or detail for diagnostics.
If porting local numbers, a bill copy with ALL PAGES must be attached. If porting Toll Free Numbers, an LOA is required. Please refer to the FAQ on porting and required documents.

Parameters

Param Field Name Type Required Notes
your_refYour ReferencetextOptionalFree-form reference string echoed back on the response. Useful for correlating results to your own order/PO/ticket ID.
due_dateDue DatedateRequiredCustomer-requested port completion date. Any parseable date string; YYYY-MM-DD recommended.
expediteExpeditetextOptionalSet to "yes" to request an expedited port. Case-insensitive; blank/omitted = standard timeline.
customerSIP Customer IDtextMulti-Field DependentIdentifier of the SIP Customer destination for ported TNs. Either "customer" or "account" must be provided.
accountSIP Account IDtextMulti-Field DependentIdentifier of the SIP Account destination for ported TNs. Either "customer" or "account" must be provided.
trunkSIP Trunk IDtextOptionalIdentifier of the SIP Trunk destination for ported TNs.
eu_nameEnd User NametextOptionalEnd-user name at the service address (person or business).
eu_street_numberEnd User Street NumbertextOptionalCivic street number of the end-user service address.
eu_street_nameEnd User Street NametextOptionalStreet name of the end-user service address.
eu_street_suffixEnd User Street SuffixtextOptionalStreet suffix (St, Ave, Blvd, etc.) of the end-user service address.
eu_suiteEnd User Suite / UnittextOptionalSuite or unit number, if applicable.
eu_cityEnd User CitytextOptionalCity of the end-user service address.
eu_provinceEnd User Province / StatetextOptionalTwo-letter province or state code of the end-user service address.
eu_pcEnd User Postal / ZIPtextOptionalPostal code (Canada) or ZIP code (US) of the end-user service address.
current_providerCurrent ProvidertextOptionalName of the losing carrier currently serving the TNs.
current_provider_accountCurrent Provider AccounttextOptionalAccount number at the losing carrier.
current_provider_pinCurrent Provider PINtextOptionalPort-out PIN or account passcode at the losing carrier.
current_provider_circuit_idCurrent Provider Circuit IDtextOptionalCircuit ID at the losing carrier, if applicable.
portTNs to PortarrayRequiredArray of TN port objects. All TNs in one request must be the same class (DID or TFN, not mixed). At least one entry must have disposition PORT.
tnTelephone NumbertextRequired10-digit North American telephone number. Non-digit characters are stripped before validation.
dispositionDispositiontextRequiredAction for this TN. Must be one of: PORT, LEAVE ACTIVE, DISCONNECT, ASSIGN AS NEW BTN.
filesSupporting FilesarrayOptionalArray of file objects to attach as supporting documents (e.g., Letter of Authorization, current-provider bill copy).
urlFile URLtextRequiredHTTPS URL to a PDF file. Must have a .pdf extension, must return a valid PDF magic header, capped at 10MB. Downloaded to the customer's document library.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer under whom this port order is being submitted. If omitted, the reseller's own account_number is used (legacy behaviour). SIP Customer/Account/Trunk validation, document library, aaa_lnp_records ownership, duplicate-port check, ticket, and sales quote lines are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/lnp/new';
$data = [
    'your_ref' => '<Your Reference>',
    'due_date' => '<Due Date>',
    'expedite' => '<Expedite>',
    'customer' => '<SIP Customer ID>',
    'account' => '<SIP Account ID>',
    'trunk' => '<SIP Trunk ID>',
    'eu_name' => '<End User Name>',
    'eu_street_number' => '<End User Street Number>',
    'eu_street_name' => '<End User Street Name>',
    'eu_street_suffix' => '<End User Street Suffix>',
    'eu_suite' => '<End User Suite / Unit>',
    'eu_city' => '<End User City>',
    'eu_province' => '<End User Province / State>',
    'eu_pc' => '<End User Postal / ZIP>',
    'current_provider' => '<Current Provider>',
    'current_provider_account' => '<Current Provider Account>',
    'current_provider_pin' => '<Current Provider PIN>',
    'current_provider_circuit_id' => '<Current Provider Circuit ID>',
    'port' => [
        [
            'tn' => '<Telephone Number>',
            'disposition' => '<Disposition>'
        ]
    ],
    'files' => [
        [
            'url' => '<File URL>'
        ]
    ],
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "your_ref": "REF123",
            "pon": "IX2608211234567890",
            "version": "01",
            "order_number": "OA202608211234",
            "ticket_number": "181070",
            "port": [
                {
                    "tn": "4165551212",
                    "type": "DID",
                    "did_type": "DID",
                    "disposition": "PORT",
                    "rc": "Toronto",
                    "region": "ON"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
your_reftextREF123
pontextIX2608211234567890
versiontext01
order_numbertextOA202608211234
ticket_numbertext181070
portarray
tntext4165551212
typetextDID
did_typetextDID
dispositiontextPORT
rctextToronto
regiontextON
Back to reference overview ↑

Update an existing LNP 4:14 #

POST https://api.sipcontrol.cloud/account_number/lnp/update
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object echoing the pon, the associated ticket_number, the message you sent, and a files array with the resolved public URL of each uploaded document. The files array is a flat list of URL strings — each element is the reachable URL of a document that was successfully attached. If a specific file failed to insert into IXICA's document store, its entry in the array is prefixed with ERROR: for diagnostics. PON ownership: The pon must be a master PON from an existing LNP record on this account. Requests referencing PONs from other accounts or non-existent PONs are rejected with Invalid PON provided. Supporting documents: Files listed in the files array are downloaded server-to-server by IXICA. URLs must be publicly reachable at time of submission, must end in .pdf, must return a valid PDF (magic number %PDF verified), and each file is capped at 10 MB. Documents are attached both to the LNP record and as a private note on the existing ticket. Message-only updates: You may omit the files array to post a message-only update — useful for supplying additional information the porting team has requested. On error (missing PON, invalid PON, document download failure, DB failure), returns an array containing a single object with an error field and optionally missing_fields, url, or detail for diagnostics.

Parameters

Param Field Name Type Required Notes
ponMaster PONtextRequiredThe IXICA master PON (e.g., IX26082187654321) returned when the port order was originally submitted via lnp_new. Must belong to the resolved customer_account_number.
messageMessage / NotetextOptionalFree-form message to attach as a private note on the port order's ticket. Visible to the LNP provisioning team.
filesSupporting FilesarrayOptionalArray of additional supporting document objects to attach to the existing port order.
urlFile URLtextRequiredHTTPS URL to a PDF file. Must have a .pdf extension, must return a valid PDF magic header, capped at 10MB. Downloaded to the customer's document library and attached to the port order's ticket.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose port order you are updating. If omitted, the reseller's own account_number is used (legacy behaviour). Master PON ownership check and document library are scoped to the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/lnp/update';
$data = [
    'pon' => '<Master PON>',
    'message' => '<Message / Note>',
    'files' => [
        [
            'url' => '<File URL>'
        ]
    ],
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "pon": "IX2608211234567890",
            "ticket_number": "181070",
            "message": "Updated LOA attached with corrected end user name.",
            "files": [
                {
                    "file_url": "https://www.example.com/documents/274111111/12345678901234.pdf"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
pontextIX2608211234567890
ticket_numbertext181070
messagetextUpdated LOA attached with corrected end user name.
filesarray
file_urltexthttps://www.example.com/documents/274111111/12345678901234.pdf
Back to reference overview ↑

Get status of an LNP 4:15 #

POST https://api.sipcontrol.cloud/account_number/lnp/get
Note: The response is a JSON array at the top level (no wrapper key). Each element of the array is an object with a single dynamic key — the sub-PON string — whose value is an array of TN status objects for that sub-PON at its latest version. Example response: [ { "IX2608211234567890": [ { "version": "01", "tn": "4165551212", "status": "Confirmed", "date_received": "2026-08-15 09:22:14", "date_requested": "2026-08-25", "date_actual_requested": "2026-08-26", "date_confirmed": "2026-08-18 14:05:33", "date_completed": null }, { "version": "01", "tn": "4165551213", "status": "Confirmed", "date_received": "2026-08-15 09:22:14", "date_requested": "2026-08-25", "date_actual_requested": "2026-08-26", "date_confirmed": "2026-08-18 14:05:33", "date_completed": null } ]}, { "IX2608211234567891": [ ... ] } ] Sub-PONs: A single master PON may be split into multiple sub-PONs by IXICA or the losing carrier when TNs need to be processed in separate groups (different rate centers, different disposition batches, etc.). Each sub-PON has its own status lifecycle. This endpoint returns the current state of every sub-PON under the specified master PON. Version: Only the latest version of each sub-PON is returned. If a sub-PON has been resubmitted or updated by the porting team, its version reflects that history. TN-level fields: tn — the 10-digit telephone number status — current porting status (e.g. In Progress, Submitted, Confirmed, Completed, Rejected, Cancelled) date_received — timestamp when IXICA received the port request date_requested — customer's originally requested FOC date (from lnp_new's due_date) date_actual_requested — actual FOC date submitted to the losing carrier date_confirmed — timestamp when the FOC was confirmed by the losing carrier date_completed — timestamp when the TN was activated on IXICA's network (null until port completes) On error (missing PON, PON not on your account, DB failure), returns an array containing a single object with an error field and optionally missing_fields or detail for diagnostics.

Parameters

Param Field Name Type Required Notes
ponMaster PONtextRequiredThe IXICA master PON (e.g., IX26082187654321) returned when the port order was originally submitted via lnp_new. Look-up returns all sub-PONs, their latest versions, and per-TN port status.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose port order status you want to retrieve. If omitted, the reseller's own account_number is used (legacy behaviour). Master PONs not belonging to the resolved account return "Invalid PON".

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/lnp/get';
$data = [
    'pon' => '<Master PON>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "sub_pon": [
                {
                    "version": "01",
                    "tn": "4165551212",
                    "status": "Confirmed",
                    "date_received": "2026-08-15 09:22:14",
                    "date_requested": "2026-08-25",
                    "date_actual_requested": "2026-08-26",
                    "date_confirmed": "2026-08-18 14:05:33",
                    "date_completed": ""
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
sub_ponarray
versiontext01
tntext4165551212
statustextConfirmed
date_receiveddatetime2026-08-15 09:22:14
date_requesteddate2026-08-25
date_actual_requesteddate2026-08-26
date_confirmeddatetime2026-08-18 14:05:33
date_completeddatetime
Back to reference overview ↑

Customer Operations sipcontrol

Customer operations can only be performed on a Reseller Account. An error will be returned if you attempt these requests from a Wholesale or Business Account.

Customer Information Get 11:30 #

POST https://api.sipcontrol.cloud/account_number/customer/get
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the customer's account summary and an addresses array listing every active address on file (may contain multiple entries — one Main address plus zero or more Branch addresses). Each address carries a location_id you can reference in the customer update / delete location endpoints. Reseller-only: This endpoint is available only to accounts of type Reseller Account. Non-reseller accounts receive Your account class does not allow customer account queries. Ownership: The customer_account_number must be a customer under your reseller account (i.e. the customer's reseller_account_number must match your calling account_number). Requests for accounts owned by another reseller are rejected with Unauthorized for customer account number provided. On error (invalid format, customer not found, unauthorized, account class mismatch), the array contains a single object with only an error field.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer to look up. Must be a customer under your reseller account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/customer/get';
$data = [
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "customer_account_number": "274525054",
            "business_name": "Solatech Inc.",
            "status": "Active",
            "currency": "CAD",
            "main_telephone": "4165551212",
            "start_date": "2026-03-15 10:22:04",
            "account_type": "Reseller Sub Account",
            "addresses": [
                {
                    "location_id": 4589,
                    "type": "Main",
                    "name": "Solatech Inc.",
                    "street_number": "200",
                    "street_name": "Main Street",
                    "unit": "Suite 5",
                    "additional": "Back entrance for deliveries",
                    "city": "Ottawa",
                    "province": "ON",
                    "postal_code": "K1P 5G4",
                    "country": "Canada",
                    "language": "E",
                    "date_created": "2026-03-15 10:22:04"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
customer_account_numbertext274525054
business_nametextSolatech Inc.
statustextActive
currencytextCAD
main_telephonetext4165551212
start_datedatetime2026-03-15 10:22:04
account_typetextReseller Sub Account
addressesarray
location_idint4589
typetextMain
nametextSolatech Inc.
street_numbertext200
street_nametextMain Street
unittextSuite 5
additionaltextBack entrance for deliveries
citytextOttawa
provincetextON
postal_codetextK1P 5G4
countrytextCanada
languagetextE
date_createddatetime2026-03-15 10:22:04
Back to reference overview ↑

Create a New Customer 11:31 #

POST https://api.sipcontrol.cloud/account_number/customer/new
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the new customer_account_number (9-digit IXICA account number to be used for all subsequent API calls for this customer) and the billing_id. The address provided is registered as the customer's Main location — additional Branch locations can be added later via the Customer Add Location endpoint. Reseller-only: This endpoint is available only to accounts of type Reseller Account. Non-reseller accounts receive Your account class does not allow customer account creation. Invoicing contact: The invoices billing contact email is pulled from your reseller account's contacts (the contact flagged as invoices with a primary marker; otherwise the first available invoices contact with an email). This email is registered as the billing recipient. If no invoices contact with a valid email exists on your reseller account, the request is rejected — configure at least one invoices contact via the portal before calling this endpoint. Currency & telephone: The new customer inherits the reseller's currency and main_telephone at creation time. Province & language normalization: Province accepts either the full name (Ontario, Quebec) or the 2-letter code (ON, QC) — stored as 2-letter code. language accepts E, F, English, French, EN, FR — stored as single-letter code (E or F). Defaults to E. Atomicity: The customer and its Main address are inserted together in a database transaction. If either insert fails, both are rolled back.
Billing currency and applicable sales taxes are determined based on customer address. Any address outside of Canada is billed in USD.

Parameters

Param Field Name Type Required Notes
your_refYour Reference NumbertextOptionalA reference number you may need when receiving responses from us.
business_nameBusiness NametextRequiredLegal business name of the new customer account.
street_numberStreet NumbertextRequiredStreet number of the main business address.
street_nameStreet NametextRequiredStreet name of the main business address.
suiteSuite / UnittextOptionalSuite, unit, or floor number.
additionalAdditional Address InfotextOptionalExtra address detail (e.g. Back Entrance) — helpful for emergency services guidance.
cityCitytextRequiredCity of the main business address.
provinceProvince / StatetextRequiredProvince or state. Full name (Ontario) or 2-letter code (ON) both accepted.
postal_codePostal / ZIP CodetextRequiredPostal or ZIP code of the main business address.
countryCountrytextRequiredCountry of the main business address (full name, e.g. Canada).
languagePreferred LanguageenumOptionalCustomer's preferred language. Defaults to English if omitted.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/customer/new';
$data = [
    'your_ref' => '<Your Reference Number>',
    'business_name' => '<Business Name>',
    'street_number' => '<Street Number>',
    'street_name' => '<Street Name>',
    'suite' => '<Suite / Unit>',
    'additional' => '<Additional Address Info>',
    'city' => '<City>',
    'province' => '<Province / State>',
    'postal_code' => '<Postal / ZIP Code>',
    'country' => '<Country>',
    'language' => '<Preferred Language>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "your_ref": "REF123",
            "customer_account_number": 274525054,
            "billing_id": "993711",
            "currency": "CAD",
            "business_name": "Solatech Inc.",
            "street_number": "200",
            "street_name": "Main Street",
            "suite": "Suite 5",
            "additional": "Back entrance for deliveries",
            "city": "Ottawa",
            "province": "ON",
            "postal_code": "K1P 5G4",
            "country": "Canada",
            "language": "E"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
your_reftextREF123
customer_account_numberint274525054
billing_idtext993711
currencytextCAD
business_nametextSolatech Inc.
street_numbertext200
street_nametextMain Street
suitetextSuite 5
additionaltextBack entrance for deliveries
citytextOttawa
provincetextON
postal_codetextK1P 5G4
countrytextCanada
languagetextE
Back to reference overview ↑

Update Customer Name 11:64 #

POST https://api.sipcontrol.cloud/account_number/customer/update
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the customer account number, the previous business name (for audit reference), the new business name now in effect, and the timestamp of the change. Reseller-only: This endpoint is available only to accounts of type Reseller Account. Non-reseller accounts receive Your account class does not allow customer account updates. Ownership: The customer_account_number must be a customer under your reseller account. Requests for accounts owned by another reseller are rejected with Unauthorized for customer account number provided. No-op protection: If new_business_name equals the current business name, the request is rejected with New business name is the same as the current business name. — nothing is logged or updated. Audit trail: Every accepted change writes a full pre-update snapshot to aaa_as_clients_changelog with changed_field = 'business_name', changed_by = , and request_type = 'api' before the update is applied. Snapshot insert and update are wrapped in a single transaction and rolled back together on failure. On error (invalid format, customer not found, unauthorized, no-op, DB failure), the array contains a single object with an error field and optionally a debug field for diagnostics.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer to update. Must be a customer under your reseller account.
new_business_nameNew Business NametextRequiredThe new legal business name to assign to this customer account. Must differ from the current name.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/customer/update';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'new_business_name' => '<New Business Name>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "customer_account_number": "274525054",
            "previous_business_name": "Solatech",
            "new_business_name": "Solatech Inc.",
            "changed_at": "2026-08-21 14:35:22"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
customer_account_numbertext274525054
previous_business_nametextSolatech
new_business_nametextSolatech Inc.
changed_atdatetime2026-08-21 14:35:22
Back to reference overview ↑

Add a Customer Location 11:62 #

POST https://api.sipcontrol.cloud/account_number/customer/addlocation
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the newly-created location_id (referenced when updating or deleting this location later), plus the full address as stored. The type is always Branch (the customer's Main location is created at customer creation time and cannot be added again through this endpoint). The name field on the new location is auto-populated from the customer's business name. Reseller-only: This endpoint is available only to accounts of type Reseller Account. Non-reseller accounts receive Your account class does not allow customer account updates. Ownership: The customer_account_number must be a customer under your reseller account. Requests for accounts owned by another reseller are rejected with Unauthorized for customer account number provided. Province format: Must be a 2-letter abbreviation (e.g. ON, QC, NY, TX). Full names are not accepted here — use the abbreviation. Language: Accepts E, F, English, French, EN, FR — stored as single-letter code (E or F). E911 note: Adding a location does not create or update any E911 records. If this location will host telephone numbers that need emergency-services routing, submit E911 add/update requests separately using the E911 endpoints. On error (invalid format, missing required fields, invalid province/language, customer not found, unauthorized, DB failure), the array contains a single object with an error field and optionally a debug field for diagnostics.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer to add a location to. Must be a customer under your reseller account.
street_numberStreet NumbertextRequiredStreet number of the new location.
street_nameStreet NametextRequiredStreet name of the new location.
suiteSuite / UnittextOptionalSuite, unit, or floor number.
additionalAdditional Address InfotextOptionalExtra address detail (e.g. Back Entrance) — helpful for emergency services guidance.
cityCitytextRequiredCity of the new location.
provinceProvince / StatetextRequiredTwo-letter abbreviation of Province or State (e.g. ON, QC, TX, DC).
postal_codePostal / ZIP CodetextRequiredPostal or ZIP code of the new location.
countryCountrytextRequiredFull country name (e.g. Canada, United States).
languagePreferred LanguageenumRequiredPreferred language for this location. Stored as single-letter code (E or F).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/customer/addlocation';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'street_number' => '<Street Number>',
    'street_name' => '<Street Name>',
    'suite' => '<Suite / Unit>',
    'additional' => '<Additional Address Info>',
    'city' => '<City>',
    'province' => '<Province / State>',
    'postal_code' => '<Postal / ZIP Code>',
    'country' => '<Country>',
    'language' => '<Preferred Language>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "customer_account_number": "274525054",
            "location_id": 4592,
            "type": "Branch",
            "name": "Solatech Inc.",
            "street_number": "200",
            "street_name": "Main Street",
            "suite": "Suite 5",
            "additional": "Back entrance for deliveries",
            "city": "Ottawa",
            "province": "ON",
            "postal_code": "K1P 5G4",
            "country": "Canada",
            "language": "E",
            "date_created": "2026-08-21 14:35:22",
            "note": "This transaction has no effect on any E911 listings. Perform those requests using E911 functions"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
customer_account_numbertext274525054
location_idint4592
typetextBranch
nametextSolatech Inc.
street_numbertext200
street_nametextMain Street
suitetextSuite 5
additionaltextBack entrance for deliveries
citytextOttawa
provincetextON
postal_codetextK1P 5G4
countrytextCanada
languagetextE
date_createddatetime2026-08-21 14:35:22
notetextThis transaction has no effect on any E911 listings. Perform those requests using E911 functions
Back to reference overview ↑

Update Customer Location 11:32 #

POST https://api.sipcontrol.cloud/account_number/customer/updatelocation
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object showing both the previous and updated versions of the location — useful for audit trails or displaying "before / after" summaries to end users. The type and name are preserved (they are not modifiable through this endpoint). Reseller-only: This endpoint is available only to accounts of type Reseller Account. Non-reseller accounts receive Your account class does not allow customer account updates. Ownership: Both the customer_account_number (must be a customer under your reseller account) and the location_id (must belong to that customer and not be removed) are verified before any update. Province format: Must be a 2-letter abbreviation (e.g. ON, QC, NY, TX). Language: Accepts E, F, English, French, EN, FR — stored as single-letter code (E or F). Audit trail: Every accepted change writes a full pre-update snapshot of the location to aaa_as_client_address_changelog with changed_by = and request_type = 'api' before the update is applied. Snapshot insert and update are wrapped in a single transaction and rolled back together on failure. E911 note: Updating a location does not create or update any E911 records. If this location hosts telephone numbers that need emergency-services routing, submit E911 update requests separately using the E911 endpoints. On error (invalid format, missing fields, invalid province/language, customer not found, unauthorized, location not found, DB failure), the array contains a single object with an error field and optionally a debug field for diagnostics.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumbertextRequiredThe IXICA 9-digit account number of the customer that owns the location. Must be a customer under your reseller account.
location_idLocation IDintRequiredThe unique location identifier. Use service=customer
street_numberNew Street NumbertextRequiredNew street number for the location.
street_nameNew Street NametextRequiredNew street name for the location.
suiteNew Suite / UnittextOptionalNew suite, unit, or floor number.
additionalAdditional Address InfotextOptionalExtra address detail (e.g. Back Entrance) — helpful for emergency services guidance.
cityNew CitytextRequiredNew city for the location.
provinceNew Province / StatetextRequiredTwo-letter abbreviation of Province or State (e.g. ON, QC, TX, DC).
postal_codeNew Postal / ZIP CodetextRequiredNew postal or ZIP code for the location.
countryNew CountrytextRequiredFull country name (e.g. Canada, United States).
languageLanguageenumRequiredPreferred language for this location. Stored as single-letter code (E or F).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/customer/updatelocation';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'location_id' => '<Location ID>',
    'street_number' => '<New Street Number>',
    'street_name' => '<New Street Name>',
    'suite' => '<New Suite / Unit>',
    'additional' => '<Additional Address Info>',
    'city' => '<New City>',
    'province' => '<New Province / State>',
    'postal_code' => '<New Postal / ZIP Code>',
    'country' => '<New Country>',
    'language' => '<Language>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "customer_account_number": "274525054",
            "location_id": 4592,
            "type": "Branch",
            "name": "Solatech Inc.",
            "previous": [
                {
                    "street_number": "100",
                    "street_name": "Old Street",
                    "suite": "Unit 3",
                    "additional": "",
                    "city": "Ottawa",
                    "province": "ON",
                    "postal_code": "K1P 5G1",
                    "country": "Canada",
                    "language": "E"
                }
            ],
            "updated": [
                {
                    "street_number": "200",
                    "street_name": "Main Street",
                    "suite": "Suite 5",
                    "additional": "Back entrance for deliveries",
                    "city": "Ottawa",
                    "province": "ON",
                    "postal_code": "K1P 5G4",
                    "country": "Canada",
                    "language": "E"
                }
            ],
            "note": "This transaction has no effect on any E911 listings. Perform those requests using E911 functions",
            "changed_at": "2026-08-21 14:35:22"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
customer_account_numbertext274525054
location_idint4592
typetextBranch
nametextSolatech Inc.
previousarray
street_numbertext100
street_nametextOld Street
suitetextUnit 3
additionaltext
citytextOttawa
provincetextON
postal_codetextK1P 5G1
countrytextCanada
languagetextE
updatedarray
street_numbertext200
street_nametextMain Street
suitetextSuite 5
additionaltextBack entrance for deliveries
citytextOttawa
provincetextON
postal_codetextK1P 5G4
countrytextCanada
languagetextE
notetextThis transaction has no effect on any E911 listings. Perform those requests using E911 functions
changed_atdatetime2026-08-21 14:35:22
Back to reference overview ↑

Delete a Customer Location 11:63 #

POST https://api.sipcontrol.cloud/account_number/customer/deletelocation
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the location's full details as they existed at time of removal (useful for confirmation, audit trails, or displaying "you just deleted" summaries to end users), plus the date_removed timestamp. Reseller-only: This endpoint is available only to accounts of type Reseller Account. Non-reseller accounts receive Your account class does not allow customer account updates. Ownership: Both the customer_account_number (must be a customer under your reseller account) and the location_id (must belong to that customer and not already be removed) are verified before deletion. Branch-only: Only locations of type Branch can be deleted through this endpoint. Attempting to delete the customer's Main location returns Only locations of type 'Branch' can be deleted. 'Main' locations are protected. The Main location is protected because it is the primary contact/service address for the account. Soft delete: Deletion sets date_removed on the record — the row is not physically removed. This preserves history and permits internal audit / reactivation by IXICA support if needed. Once soft-deleted, the location no longer appears in customer_get results and cannot be updated. Audit trail: Every accepted deletion writes a full snapshot of the location to aaa_as_client_address_changelog with changed_by = and request_type = 'api-delete' before the soft-delete is applied. Snapshot insert and soft-delete are wrapped in a single transaction and rolled back together on failure. E911 note: Deleting a location does not remove or update any E911 records. If this location previously hosted telephone numbers with E911 routing, submit E911 delete requests separately using the E911 endpoints before or alongside the location deletion. On error (invalid format, customer not found, unauthorized, location not found, attempt to delete Main location, DB failure), the array contains a single object with an error field and optionally a debug field for diagnostics.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumbertextRequiredThe IXICA 9-digit account number of the customer that owns the location. Must be a customer under your reseller account.
location_idLocation IDintRequiredThe unique location identifier to delete. Must be a Branch location — Main locations cannot be deleted. Use service=customer

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/customer/deletelocation';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'location_id' => '<Location ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "customer_account_number": "274525054",
            "location_id": 4592,
            "type": "Branch",
            "name": "Solatech Inc.",
            "removed_location": [
                {
                    "street_number": "200",
                    "street_name": "Main Street",
                    "suite": "Suite 5",
                    "additional": "Back entrance for deliveries",
                    "city": "Ottawa",
                    "province": "ON",
                    "postal_code": "K1P 5G4",
                    "country": "Canada",
                    "language": "E"
                }
            ],
            "note": "This transaction has no effect on any E911 listings. Perform those requests using E911 functions",
            "date_removed": "2026-08-21 16:12:44"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
customer_account_numbertext274525054
location_idint4592
typetextBranch
nametextSolatech Inc.
removed_locationarray
street_numbertext200
street_nametextMain Street
suitetextSuite 5
additionaltextBack entrance for deliveries
citytextOttawa
provincetextON
postal_codetextK1P 5G4
countrytextCanada
languagetextE
notetextThis transaction has no effect on any E911 listings. Perform those requests using E911 functions
date_removeddatetime2026-08-21 16:12:44
Back to reference overview ↑

List Sub Accounts 11:47 #

POST https://api.sipcontrol.cloud/account_number/customer/list
This request is valid for Reseller Accounts only.

Parameters

Param Field Name Type Required Notes
pagePaginationintRequiredPagination is required. Min 1, Max 999. Each page returns 100 results.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/customer/list';
$data = [
    'page' => '<Pagination>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "page": 1,
    "per_page": 100,
    "total_records": 54,
    "total_pages": 6,
    "returned": 54,
    "accounts": [
        {
            "account_number": "2741111111",
            "business_name": "ABC Sample Company",
            "status": "Active"
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
pageint01Requested page
per_pageint100Limit per page
total_recordsint54Total number of rows available
total_pagesint6Total pages available
returnedint54Number of records returned
accountsarray[]List of accounts
account_numbertext2741111111IXICA Account Number
business_nametextABC Sample CompanyBusiness Name of Customer account
statustextActiveWhether Active or Inactive
Back to reference overview ↑

SIP Account Operations sipcontrol

Get Available Callplans 10:36 #

POST https://api.sipcontrol.cloud/account_number/sip_account/callplans
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains one object per available call plan — currently 10 plans: Code Platform Description SSNAMT01 Standard SIP North America Standard, Metered SENAMT01 Standard SIP North America Enhanced, Metered SSCAUL01 Standard SIP Canada Standard, Unlimited SECAUL01 Standard SIP Canada Enhanced, Unlimited SSUSUL01 Standard SIP US Standard, Unlimited SEUSUL01 Standard SIP US Enhanced, Unlimited SSNAUL01 Standard SIP North America Standard, Unlimited SENAUL01 Standard SIP North America Enhanced, Unlimited SSNAULYE Yeastar Hosted Platform (YE) North America Standard, Unlimited — for use on IXICA's Yeastar hosted PBX SENAUL3E 3CX Hosted Platform (3E) North America Enhanced, Unlimited — for use on IXICA's 3CX hosted PBX Each entry returns: code — the unique call plan identifier (use this when creating or updating a SIP Account) callplan_name — human-readable name of the plan callplan_description — full description of what the plan includes Platform-specific plans: The YE and 3E suffixed plans (SSNAULYE, SENAUL3E) are exclusive to IXICA's hosted PBX platforms: YE — Yeastar Hosted Platform. Only assignable to SIP Accounts provisioned on the Yeastar PBX service. 3E — 3CX Hosted Platform. Only assignable to SIP Accounts provisioned on the 3CX PBX service. Standard SIP Accounts (bring-your-own-PBX / customer-owned equipment) should use one of the first 8 plans. Reseller-only: This endpoint is available only to accounts of type Reseller Account. Non-reseller accounts receive an array containing a single object with only an error field: Your account class does not allow this query. Please contact support. Use case: Call this endpoint before creating or updating a SIP Account to present the current list of valid call plan codes to your end user. Descriptions may be updated by IXICA over time — cache sparingly if you display them in your UI.

Parameters

Param Field Name Type Required Notes
callplansCallplanstextRequiredAlways state: ALL

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sip_account/callplans';
$data = [
    'callplans' => '<Callplans>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "code": "SSNAMT01",
            "callplan_name": "North America Metered",
            "callplan_description": "Pay-per-minute calling to Canada and continental US",
            "error": "Your account class does not allow this query. Please contact support."
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
codetextSSNAMT01
callplan_nametextNorth America Metered
callplan_descriptiontextPay-per-minute calling to Canada and continental US
errortextYour account class does not allow this query. Please contact support.
Back to reference overview ↑

Create SIP Account 10:33 #

POST https://api.sipcontrol.cloud/account_number/sip_account/new
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the customer_account_number the transaction was booked under, the ticket_number for tracking provisioning progress, the order_number, and the quote_id. Reseller-only: This endpoint is available only to accounts of type Reseller Account. Non-reseller accounts receive Your account class does not allow this query. Please contact support. Customer account: New usage (recommended): Provide customer_account_number — the SIP Account is provisioned under that customer's account (must be a Reseller Sub Account under your reseller). Ticket, quote, and billing all land on the customer. Legacy usage: Omit customer_account_number — the SIP Account is provisioned under your own reseller account. This preserves existing integrations that never sent the field. Metered vs unlimited billing: Metered plans (SSNAMT01, SENAMT01) always bill as 1 channel regardless of the qty value submitted. Unlimited plans bill for the exact number of channels requested. Platform-specific plans: SSNAULYE (Yeastar Hosted Platform) and SENAUL3E (3CX Hosted Platform) are only valid for SIP Accounts running on IXICA's respective hosted PBX platforms. On error (non-reseller caller, invalid customer account, unauthorized, invalid callplan, invalid qty, ticket creation failure), the array contains a single object with only an error field.

Parameters

Param Field Name Type Required Notes
your_refYour Reference NumbertextOptionalA reference number you may need when receiving responses from us.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer to provision this SIP Account for. Must be a Reseller Sub Account under your reseller. If omitted, the SIP Account is provisioned on your own reseller account (legacy behavior).
callplanCall Plan CodeenumRequiredCall plan code to apply. Use service=sip_account
qtyChannels / QuantityintRequiredNumber of concurrent channels to provision (must be >= 1). Metered plans (SSNAMT01, SENAMT01) always bill as 1 regardless of value.
usernameDesired UsernametextOptionalPreferred username for the new SIP Account (subject to availability). Included on the ticket for the provisioning team.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sip_account/new';
$data = [
    'your_ref' => '<Your Reference Number>',
    'customer_account_number' => '<Customer Account Number>',
    'callplan' => '<Call Plan Code>',
    'qty' => '<Channels / Quantity>',
    'username' => '<Desired Username>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "your_ref": "REF123",
            "customer_account_number": "274525054",
            "ticket_number": "181080",
            "order_number": "OA202608211234",
            "quote_id": "20260821123456"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
your_reftextREF123
customer_account_numbertext274525054
ticket_numbertext181080
order_numbertextOA202608211234
quote_idtext20260821123456
Back to reference overview ↑

Update an existing SIP Account 10:34 #

POST https://api.sipcontrol.cloud/account_number/sip_account/update

Parameters

Param Field Name Type Required Notes
accountSIP Account IDtextRequiredThe SIP Account ID of the sip account being updated.
callplanNew SIP CallplantextRequiredSpecify callplan required. This must be an 8 string value, like SSNAMT01, SSCAUL01, SSNAUL01 etc. For list of codes, contact support.

Code used must be valid for your account type.
qtyNew Concurrent callstextRequiredThe number of concurrent calls required.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sip_account/update';
$data = [
    'account' => '<SIP Account ID>',
    'callplan' => '<New SIP Callplan>',
    'qty' => '<New Concurrent calls>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

[]
Back to reference overview ↑

Delete an existing SIP Account 10:35 #

POST https://api.sipcontrol.cloud/account_number/sip_account/delete

Parameters

Param Field Name Type Required Notes
accountSIP Account IDtextRequiredThe SIP Account ID of the sip account being deleted.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sip_account/delete';
$data = [
    'account' => '<SIP Account ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

[]
Back to reference overview ↑

SIP Trunk Operations sipcontrol

Create IP Trunk 9:22 #

POST https://api.sipcontrol.cloud/account_number/sip_trunk/new
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the fields shown under results below, including the newly-created order_number and ticket_number. On error (invalid SIP account, invalid IP, duplicate IP, etc.), the array contains a single object with only an error field.

Parameters

Param Field Name Type Required Notes
your_refYour ReferencetextOptionalFree-form reference string echoed back on the success result row. Useful for correlating results to your own order/PO/ticket ID.
nameTrunk NametextRequiredHuman-readable name for the new SIP trunk.
primary_ipPrimary IPtextRequiredPrimary IP address (IPv4 or IPv6) that this SIP trunk will accept traffic from. Must be a valid IP.
backup_ipBackup IPtextOptionalOptional secondary IP address (IPv4 or IPv6) for failover. If provided, must be a valid IP.
accountSIP Account IDtextRequiredIdentifier of the SIP Account under which this trunk will be provisioned. Must belong to the resolved customer_account_number.
inbound_channelsInbound ChannelsintOptionalNumber of concurrent inbound call channels to provision on this trunk.
outbound_channelsOutbound ChannelsintOptionalNumber of concurrent outbound call channels to provision on this trunk.
ld_channelsLong-Distance ChannelsintOptionalNumber of concurrent long-distance-enabled channels to provision on this trunk.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer under whom this SIP trunk is being provisioned. If omitted, the reseller's own account_number is used (legacy behaviour). SIP Account validation, duplicate-IP guard, ticket, and sales quote lines are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sip_trunk/new';
$data = [
    'your_ref' => '<Your Reference>',
    'name' => '<Trunk Name>',
    'primary_ip' => '<Primary IP>',
    'backup_ip' => '<Backup IP>',
    'account' => '<SIP Account ID>',
    'inbound_channels' => '<Inbound Channels>',
    'outbound_channels' => '<Outbound Channels>',
    'ld_channels' => '<Long-Distance Channels>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "your_ref": "REF123",
            "name": "Main Trunk",
            "primary_ip": "203.0.113.10",
            "backup_ip": "203.0.113.11",
            "account": "ACCT-500",
            "inbound_channels": "10",
            "outbound_channels": "10",
            "ld_channels": "5",
            "order_number": "OA202608211234",
            "ticket_number": "181001"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
your_reftextREF123
nametextMain Trunk
primary_iptext203.0.113.10
backup_iptext203.0.113.11
accounttextACCT-500
inbound_channelstext10
outbound_channelstext10
ld_channelstext5
order_numbertextOA202608211234
ticket_numbertext181001
Back to reference overview ↑

Update IP Trunk 9:23 #

POST https://api.sipcontrol.cloud/account_number/sip_trunk/update
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the fields shown under results below. On error (invalid trunk/account, invalid IP, duplicate IP, no changes detected, DB failure), the array contains a single object with only an error field.

Parameters

Param Field Name Type Required Notes
your_refYour ReferencetextOptionalFree-form reference string echoed back on the success result row. Useful for correlating results to your own change/PO/ticket ID.
trunkSIP Trunk IDtextRequiredIdentifier of the SIP trunk to update. Must belong to the specified SIP Account and to the resolved customer_account_number.
accountSIP Account IDtextRequiredIdentifier of the SIP Account that owns this trunk.
nameTrunk NametextOptionalNew human-readable name for the SIP trunk. If omitted or unchanged, the current name is preserved.
primary_ipPrimary IPtextRequiredPrimary IP address (IPv4 or IPv6) for this trunk. Must be a valid IP. If changed, must not already be in use by another trunk on this SIP Account.
backup_ipBackup IPtextOptionalOptional secondary IP address (IPv4 or IPv6) for failover. If provided, must be a valid IP.
inbound_channelsInbound ChannelsintOptionalNumber of concurrent inbound call channels. Minimum 1.
outbound_channelsOutbound ChannelsintOptionalNumber of concurrent outbound call channels. Minimum 1.
ld_channelsLong-Distance ChannelsintOptionalNumber of concurrent long-distance-enabled channels. Minimum 0.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose SIP trunk is being updated. If omitted, the reseller's own account_number is used (legacy behaviour). Trunk existence check, duplicate-IP guard, ticket, and change_siptrunk row are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sip_trunk/update';
$data = [
    'your_ref' => '<Your Reference>',
    'trunk' => '<SIP Trunk ID>',
    'account' => '<SIP Account ID>',
    'name' => '<Trunk Name>',
    'primary_ip' => '<Primary IP>',
    'backup_ip' => '<Backup IP>',
    'inbound_channels' => '<Inbound Channels>',
    'outbound_channels' => '<Outbound Channels>',
    'ld_channels' => '<Long-Distance Channels>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "your_ref": "REF123",
            "ticket_number": "181002",
            "trunk": "TRK-1234",
            "name": "Main Trunk Updated",
            "primary_ip": "203.0.113.10",
            "backup_ip": "203.0.113.11",
            "account": "ACCT-500",
            "inbound_channels": "20",
            "outbound_channels": "20",
            "ld_channels": "10"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
your_reftextREF123
ticket_numbertext181002
trunktextTRK-1234
nametextMain Trunk Updated
primary_iptext203.0.113.10
backup_iptext203.0.113.11
accounttextACCT-500
inbound_channelstext20
outbound_channelstext20
ld_channelstext10
Back to reference overview ↑

Delete IP Trunk 9:24 #

POST https://api.sipcontrol.cloud/account_number/sip_trunk/delete
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the current trunk configuration as it was at time of deletion (the values shown are what is being removed). On error (invalid trunk/account, DB failure), the array contains a single object with only an error field. The deletion is queued as a change request — actual removal happens on the effective date.

Parameters

Param Field Name Type Required Notes
your_refYour ReferencetextOptionalFree-form reference string echoed back on the success result row. Useful for correlating results to your own change/PO/ticket ID.
trunkSIP Trunk IDtextRequiredIdentifier of the SIP trunk to disconnect. Must belong to the specified SIP Account and to the resolved customer_account_number.
accountSIP Account IDtextRequiredIdentifier of the SIP Account that owns this trunk.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose SIP trunk is being disconnected. If omitted, the reseller's own account_number is used (legacy behaviour). Trunk existence check, ticket, and change_siptrunk row are all recorded against the resolved customer account.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sip_trunk/delete';
$data = [
    'your_ref' => '<Your Reference>',
    'trunk' => '<SIP Trunk ID>',
    'account' => '<SIP Account ID>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "your_ref": "REF123",
            "ticket_number": "181003",
            "trunk": "TRK-1234",
            "name": "Main Trunk",
            "primary_ip": "203.0.113.10",
            "backup_ip": "203.0.113.11",
            "account": "ACCT-500",
            "inbound_channels": "10",
            "outbound_channels": "10",
            "ld_channels": "5"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
your_reftextREF123
ticket_numbertext181003
trunktextTRK-1234
nametextMain Trunk
primary_iptext203.0.113.10
backup_iptext203.0.113.11
accounttextACCT-500
inbound_channelstext10
outbound_channelstext10
ld_channelstext5
Back to reference overview ↑

Get Destinations (Endpoints) 9:21 #

POST https://api.sipcontrol.cloud/account_number/sip_trunk/routes
$data fields are not required for this function. return will be an array of all active customer ids, account ids and trunk ids.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose SIP routing topology (customers, accounts, and trunks) you want to retrieve. If omitted, the reseller's own account_number is used (legacy behaviour).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sip_trunk/routes';
$data = [
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "customers": [
        {
            "customer_id": "CUST-001",
            "customer_name": "ACME Corporation"
        }
    ],
    "accounts": [
        {
            "customer_id": "CUST-001",
            "customer_name": "ACME Corporation",
            "account_id": "ACCT-500",
            "account_name": "ACME Main Office"
        }
    ],
    "trunks": [
        {
            "customer_id": "CUST-001",
            "customer_name": "ACME Corporation",
            "account_id": "ACCT-500",
            "account_name": "ACME Main Office",
            "trunk_id": "TRK-1234",
            "trunk_name": "ACME Main Trunk"
        }
    ]
}

Response Fields

Field Type Example Notes
customersarray
customer_idtextCUST-001
customer_nametextACME Corporation
accountsarray
customer_idtextCUST-001
customer_nametextACME Corporation
account_idtextACCT-500
account_nametextACME Main Office
trunksarray
customer_idtextCUST-001
customer_nametextACME Corporation
account_idtextACCT-500
account_nametextACME Main Office
trunk_idtextTRK-1234
trunk_nametextACME Main Trunk
Back to reference overview ↑

SMS / MMS Services sipcontrol

Enable SMS on a TN 5:16 #

POST https://api.sipcontrol.cloud/account_number/sms/new
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the fields shown above, including a ticket_number for tracking activation progress with our operations team. User identification: Provide either user_id (preferred) or username. If username is provided, IXICA resolves it to the corresponding MySMS user ID before proceeding. Regardless of which you provide, the resolved user must belong to the same customer account. US vs Canadian TNs: The system automatically determines whether the TN is US or Canadian based on its LATA (LATA 888 = Canadian, all others = US). For US TNs, brand_id and campaign_id are mandatory — both must reference Active TCR-approved records under this customer. For Canadian TNs, brand_id and campaign_id are ignored (may be omitted). TN state: The TN must already be assigned to the customer account (via DID or TFN Assign) before it can be enabled for SMS. If the TN is already enabled and assigned to a MySMS user, the request is rejected — use the SMS Change User endpoint to reassign, or SMS Remove first.

Parameters

Param Field Name Type Required Notes
your_refYour Reference NumbertextOptionalA reference number you may need when receiving responses from us.
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit customer account number that owns this TN.
tnTNtextRequired10-digit DID or TFN (e.g. 4165551212), or 11 digits starting with 1 (e.g. 14165551212). Must already be assigned to the customer account.
user_idUser IDintMulti-Field DependentMySMS user ID to assign this TN to. Either user_id or username is required.
usernameUsernametextMulti-Field DependentMySMS username to assign this TN to. Either user_id or username is required. If both are provided, user_id takes precedence.
brand_idBrand IDtextMulti-Field DependentTCR Brand ID (must be an Active brand under this customer). Required for US TNs; ignored for Canadian TNs.
campaign_idCampaign IDtextMulti-Field DependentTCR Campaign ID linked to the specified brand (must be Active under this customer). Required for US TNs; ignored for Canadian TNs.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/new';
$data = [
    'your_ref' => '<Your Reference Number>',
    'customer_account_number' => '<Customer Account Number>',
    'tn' => '<TN>',
    'user_id' => '<User ID>',
    'username' => '<Username>',
    'brand_id' => '<Brand ID>',
    'campaign_id' => '<Campaign ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "your_ref": "REF123",
            "customer_account_number": "274518702",
            "user_id": 4521,
            "username": "johnsmith",
            "tn": "4165551212",
            "brand_id": "BEDE5CA",
            "campaign_id": "CCJBTAX",
            "ticket_number": "181060"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
your_reftextREF123
customer_account_numbertext274518702
user_idint4521
usernametextjohnsmith
tntext4165551212
brand_idtextBEDE5CA
campaign_idtextCCJBTAX
ticket_numbertext181060
Back to reference overview ↑

Check status of SMS on a TN 5:17 #

POST https://api.sipcontrol.cloud/account_number/sms/get
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with a variable field set depending on the TN's MySMS state: Not enabled: {result:"ok", tn, sms_enabled:"N", message:"TN not enabled for SMS"} Enabled, no user assigned: {result:"ok", tn, sms_enabled:"Y", assigned:"N", did_id} Enabled and assigned, user lookup failed: {result:"ok", tn, sms_enabled:"Y", assigned:"Y", did_id, assigned_user_id, message:"SMS is enabled/assigned, but user lookup failed"} Enabled and assigned (fully populated): {result:"ok", tn, sms_enabled:"Y", assigned:"Y", did_id, assigned_user_id, username, status} On error (missing/invalid TN, TN not on your account, DB failure), the array contains a single object with only an error field.

Parameters

Param Field Name Type Required Notes
tnTelephone NumbertextRequiredTelephone number to look up SMS enablement for. Accepts either 10 digits (e.g., 6045551234) or 11 digits starting with 1 (e.g., 16045551234). Non-digit characters are stripped before validation.
customer_account_numberCustomer Account NumberintOptionalThe IXICA 9-digit account number of the customer whose TN's SMS status you want to query. If omitted, the reseller's own account_number is used (legacy behaviour). TNs not assigned to the resolved account return "TN not assigned to your account".

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/get';
$data = [
    'tn' => '<Telephone Number>',
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "results": [
        {
            "result": "ok",
            "tn": "4165551212",
            "sms_enabled": "Y",
            "assigned": "Y",
            "did_id": 8823,
            "assigned_user_id": 4521,
            "username": "johnsmith",
            "status": "Active",
            "message": "TN not enabled for SMS"
        }
    ]
}

Response Fields

Field Type Example Notes
resultsarray
resulttextok
tntext4165551212
sms_enabledtextY
assignedtextY
did_idint8823
assigned_user_idint4521
usernametextjohnsmith
statustextActive
messagetextTN not enabled for SMS
Back to reference overview ↑

Remove SMS from a TN 5:18 #

POST https://api.sipcontrol.cloud/account_number/sms/delete

Parameters

Param Field Name Type Required Notes
tnTNtextRequiredTN on which SMS should be removed. Please note that this does not have any effect on voice services.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/delete';
$data = [
    'tn' => '<TN>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

[]
Back to reference overview ↑

Get list of existing users 5:60 #

POST https://api.sipcontrol.cloud/account_number/sms/userlist
Note: Returns all MySMS users registered under the specified customer account. count reflects the number of users returned (may be 0 if the account has no MySMS users configured). The tn field is the user's associated telephone number if one is set at the user level in MySMS. On error (missing customer account number, customer not found, MySMS unavailable), returns {result:"error", error:"..."} — for MySMS-level errors an additional http field carries the underlying HTTP status code.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit customer account number to list MySMS users for.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/userlist';
$data = [
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "customer_account_number": "274518702",
            "count": 3,
            "users": [
                {
                    "username": "johnsmith",
                    "user_id": 4521,
                    "email": "[email protected]",
                    "first_name": "John",
                    "last_name": "Smith",
                    "status": "Active",
                    "tn": "4165551212",
                    "created": "2026-05-14 10:22:04"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
customer_account_numbertext274518702
countint3
usersarray
usernametextjohnsmith
user_idint4521
emailtext[email protected]
first_nametextJohn
last_nametextSmith
statustextActive
tntext4165551212
createddatetime2026-05-14 10:22:04
Back to reference overview ↑

Create a new User 5:61 #

POST https://api.sipcontrol.cloud/account_number/sms/usercreate
Note: Creates a new MySMS user under the specified customer account. IXICA generates a secure 10-character random password server-side and returns it in the response — this is the only time the password is exposed in plaintext. Store it securely; it cannot be retrieved later. Username collisions: If the requested username is already taken in MySMS, the service may append characters to make it unique. Always use the username value returned in the response, not the one you submitted, for future references (e.g. SMS enable, TN assignments). On error (missing fields, invalid email, customer not found, MySMS unavailable, or a MySMS-level conflict such as duplicate email), returns {result:"error", error:"..."} — for MySMS-level errors an additional http field carries the underlying HTTP status code (e.g. 409 for conflicts, 422 for validation).

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit customer account number this MySMS user will belong to.
display_nameDisplay NametextRequiredThe user's full display name (e.g. "John Smith") shown in the MySMS portal.
usernameUsernametextRequiredDesired MySMS username. If already taken, MySMS may append characters — check the returned username.
user_emailEmail AddressemailRequiredValid email address for the user. Used for MySMS login and notifications.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/usercreate';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'display_name' => '<Display Name>',
    'username' => '<Username>',
    'user_email' => '<Email Address>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "customer_account_number": "274518702",
            "user_id": 4521,
            "username": "johnsmith",
            "name": "John Smith",
            "email": "[email protected]",
            "password": "K7xR9$mPqL",
            "message": "User created successfully"
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
customer_account_numbertext274518702
user_idint4521
usernametextjohnsmith
nametextJohn Smith
emailtext[email protected]
passwordtextK7xR9$mPqL
messagetextUser created successfully
Back to reference overview ↑

Change the user on a TN for SMS 5:29 #

POST https://api.sipcontrol.cloud/account_number/sms/userchange
Note: Reassigns an SMS-enabled TN from its current MySMS user to a different MySMS user under the same customer account. Both users must belong to the same customer_account_number — IXICA verifies this on both sides before invoking MySMS. TN format: The tn may be sent as 10 digits (4165551212) or with the leading 1 (14165551212). Any non-digit characters are stripped. The last 10 digits are used. No-op protection: If the TN is already assigned to new_userid, the request is rejected with an explanatory error rather than making a redundant MySMS call. On error (missing fields, invalid customer, TN not registered with MySMS, current or new user not on this account, no-op, MySMS call failure), returns {result:"error", error:"..."} — for MySMS-level errors an additional http field carries the underlying HTTP status code.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit customer account number that owns the TN.
tnTNtextRequired10-digit DID or TFN (e.g. 4165551212) currently enabled for SMS and assigned to a MySMS user under this customer account.
new_useridNew User IDintRequiredThe MySMS user ID to reassign this TN to. Must be an existing user under the same customer account. Use the SMS User List endpoint to retrieve valid IDs.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/userchange';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'tn' => '<TN>',
    'new_userid' => '<New User ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "customer_account_number": "274518702",
            "tn": "4165551212",
            "did_id": 8823,
            "previous_user": [
                {
                    "user_id": 4521,
                    "username": "johnsmith"
                }
            ],
            "new_user": [
                {
                    "user_id": 4522,
                    "username": "janedoe"
                }
            ],
            "message": "SMS TN user switched successfully"
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
customer_account_numbertext274518702
tntext4165551212
did_idint8823
previous_userarray
user_idint4521
usernametextjohnsmith
new_userarray
user_idint4522
usernametextjanedoe
messagetextSMS TN user switched successfully
Back to reference overview ↑

Create a new Brand 5:37 #

POST https://api.sipcontrol.cloud/account_number/sms/brandcreate
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the fields shown above, including a brand_application_id you can reference in future support requests and a ticket_number for tracking the vetting progress. Approval is subject to TCR (The Campaign Registry) vetting — expect a status update from the IXICA account team. PUBLIC_PROFIT special case: If org_type is PUBLIC_PROFIT, both stock_ticket_symbol and stock_exchange become required. For any other org_type, these fields may be omitted. Supporting document: If file_location is provided, IXICA fetches the file server-to-server and stores it privately. The URL must be publicly reachable at time of submission; the file itself is not stored publicly. Maximum size is 25 MB. Attachments included: The attachments_included field indicates how many supporting documents were successfully attached to the internal ticket (currently 0 or 1).

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit customer account number this brand belongs to.
brand_nameLegal Company / Brand NametextRequiredFull legal name of the company or brand as registered.
org_typeLegal FormenumRequiredLegal entity form. If PUBLIC_PROFIT, stock_ticket_symbol and stock_exchange are also required.
org_categoryOrganization CategorytextRequiredBusiness category / vertical classification (free text).
tax_idTax ID / EINtextRequiredBusiness tax identification number (EIN for US, BN for CA, etc.).
tax_id_countryTax ID CountrytextRequiredCountry that issued the tax ID (ISO country code recommended, e.g. US, CA).
stock_ticket_symbolStock SymboltextMulti-Field DependentPublicly traded stock symbol. Required when org_type = PUBLIC_PROFIT.
stock_exchangeStock ExchangeenumMulti-Field DependentStock exchange where the symbol is listed. Required when org_type = PUBLIC_PROFIT.
business_verticalBusiness VerticaltextRequiredIndustry vertical (e.g. TECHNOLOGY, FINANCIAL, HEALTHCARE, RETAIL).
sub_industrySub-IndustrytextOptionalSub-industry classification within the business vertical.
company_website_urlCompany Website URLurlRequiredPublic website of the company (must include https://).
alternate_business_id_typeAlternate Business ID TypeenumOptionalType of secondary business identifier if provided. Defaults to NONE.
alternate_business_id_numberAlternate Business ID NumbertextOptionalValue of the alternate business identifier.
brand_relationshipBrand RelationshipenumRequiredAccount tier / relationship classification.
primary_contact_first_namePrimary Contact First NametextRequiredFirst name of the primary contact for the brand.
primary_contact_last_namePrimary Contact Last NametextRequiredLast name of the primary contact for the brand.
contact_emailContact EmailemailRequiredEmail address of the primary contact (must be a valid email).
business_telephoneBusiness TelephonephoneRequiredBusiness phone number in international format (e.g. +14165551212).
street_addressStreet AddresstextRequiredRegistered business street address (single line).
cityCitytextRequiredBusiness city.
stateState / ProvincetextRequiredBusiness state or province (2-letter code recommended).
postal_codeZIP / Postal CodetextRequiredBusiness ZIP or postal code.
countryCountrytextRequiredBusiness country (ISO code recommended, e.g. US, CA).
file_locationSupporting Document URLurlOptionalPublicly reachable HTTPS URL to a supporting document (max 25 MB). Fetched by IXICA and attached to the internal ticket as a private note.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/brandcreate';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'brand_name' => '<Legal Company / Brand Name>',
    'org_type' => '<Legal Form>',
    'org_category' => '<Organization Category>',
    'tax_id' => '<Tax ID / EIN>',
    'tax_id_country' => '<Tax ID Country>',
    'stock_ticket_symbol' => '<Stock Symbol>',
    'stock_exchange' => '<Stock Exchange>',
    'business_vertical' => '<Business Vertical>',
    'sub_industry' => '<Sub-Industry>',
    'company_website_url' => '<Company Website URL>',
    'alternate_business_id_type' => '<Alternate Business ID Type>',
    'alternate_business_id_number' => '<Alternate Business ID Number>',
    'brand_relationship' => '<Brand Relationship>',
    'primary_contact_first_name' => '<Primary Contact First Name>',
    'primary_contact_last_name' => '<Primary Contact Last Name>',
    'contact_email' => '<Contact Email>',
    'business_telephone' => '<Business Telephone>',
    'street_address' => '<Street Address>',
    'city' => '<City>',
    'state' => '<State / Province>',
    'postal_code' => '<ZIP / Postal Code>',
    'country' => '<Country>',
    'file_location' => '<Supporting Document URL>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "customer_account_number": "274518702",
    "brand_application_id": 4821,
    "ticket_number": "181042",
    "status": "Submitted",
    "brand_name": "Prodigi",
    "org_type": "PRIVATE_PROFIT",
    "tax_id": "12-3456789",
    "contact_email": "[email protected]",
    "attachments_included": 1,
    "message": "Brand application submitted. It is now being processed with TCR. You will be notified once vetting is complete."
}

Response Fields

Field Type Example Notes
resulttextok
customer_account_numbertext274518702
brand_application_idint4821
ticket_numbertext181042
statustextSubmitted
brand_nametextProdigi
org_typetextPRIVATE_PROFIT
tax_idtext12-3456789
contact_emailtext[email protected]
attachments_includedint1
messagetextBrand application submitted. It is now being processed with TCR. You will be notified once vetting is complete.
Back to reference overview ↑

Create a new Campaign 5:38 #

POST https://api.sipcontrol.cloud/account_number/sms/campaigncreate
Note: The response is a JSON array at the top level (no wrapper key). On success, the array contains a single object with the fields shown above, including a campaign_application_id you can reference in future support requests and a ticket_number for tracking the vetting progress. Approval is subject to TCR (The Campaign Registry) vetting — expect a status update from the IXICA account team. Brand requirement: The brand_id must reference an existing brand under the same customer_account_number with status Active (i.e. already approved by TCR). You can accept either the TCR brand ID (e.g. BEDE5CA) or the internal numeric brand row ID. Mandatory attestations for 10DLC: consumer_optout_supported, help_keyword_supported, and all four attestation_* fields must be Yes — these are non-negotiable TCR/CTIA requirements. The submission is rejected up front if any of them is No. Number pooling: number_pooling_requested = Yes is only valid when more_than_50_tns = Yes. MIXED use case: When primary_usecase = MIXED, additional_use_cases must contain a comma-separated list of other use cases from the same enum. Supporting document: If file_location is provided, IXICA fetches the file server-to-server and stores it privately. The URL must be publicly reachable at time of submission. Maximum size is 25 MB. Attachments included: The attachments_included field indicates how many supporting documents were successfully attached to the internal ticket (currently 0 or 1).

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit customer account number this campaign belongs to.
brand_idBrand IDtextRequiredThe Active brand this campaign will register under. Accepts either the TCR brand_id (e.g. BEDE5CA) or the internal numeric brand row id.
primary_usecasePrimary Use CaseenumRequiredPrimary campaign use case. If MIXED, additional_use_cases becomes required.
additional_use_casesAdditional Use CasestextMulti-Field DependentComma-separated additional use cases (from the same enum as primary_usecase). Required when primary_usecase = MIXED.
standard_campaign_typeStandard Campaign TypetextRequiredFree-text standard campaign type descriptor.
campaign_descriptionCampaign DescriptiontextRequiredDetailed campaign description. Must be between 40 and 4096 characters.
message_flowMessage Flow / Call to ActiontextRequiredDescribe how consumers discover the campaign and how they opt in.
sample_1Sample Message 1textRequiredAn example message the campaign will send. Must include brand name and STOP instruction.
sample_2Sample Message 2textOptionalAdditional sample message.
sample_3Sample Message 3textOptionalAdditional sample message.
sample_4Sample Message 4textOptionalAdditional sample message.
sample_5Sample Message 5textOptionalAdditional sample message.
consumer_optin_collectedConsumer Opt-In CollectedenumRequiredWhether consumer opt-in is collected before messages are sent.
optin_methodOpt-In MethodenumRequiredHow consumers opt in to the campaign.
optin_keywordOpt-In KeywordtextOptionalKeyword consumers text to opt in (if applicable).
optin_confirmation_messageOpt-In Confirmation MessagetextRequiredMessage sent to confirm opt-in. Must include brand name, STOP, and HELP instructions.
consumer_optout_supportedConsumer Opt-Out SupportedenumRequiredWhether STOP handling is implemented. Must be Yes (mandatory for 10DLC).
optout_keywordOpt-Out Keyword(s)textRequiredKeyword(s) consumers text to opt out (e.g. STOP,END,QUIT,UNSUBSCRIBE).
optout_confirmation_messageOpt-Out Confirmation MessagetextRequiredMessage sent to confirm opt-out.
help_keyword_supportedHELP Keyword SupportedenumRequiredWhether HELP responses are implemented. Must be Yes (mandatory for 10DLC).
help_keywordHELP Keyword(s)textRequiredKeyword(s) that trigger a help response (e.g. HELP,INFO).
help_response_messageHELP Response MessagetextRequiredThe message sent when a consumer texts HELP. Must include brand name and support contact.
privacy_policy_urlPrivacy Policy URLurlRequiredPublicly reachable URL to the privacy policy.
terms_and_conditions_urlTerms & Conditions URLurlRequiredPublicly reachable URL to the SMS terms & conditions.
more_than_50_tnsMore Than 50 TNsenumRequiredWhether the campaign will use more than 50 phone numbers.
number_pooling_requestedNumber Pooling RequestedenumRequiredWhether number pooling is requested. Can only be Yes when more_than_50_tns is also Yes.
lending_or_loanLending or Loan ContentenumRequiredWhether the campaign involves loan or lending content.
direct_lending_arrangementDirect Lending ArrangementenumRequiredWhether the sender is a direct lender.
affiliate_marketingAffiliate MarketingenumRequiredWhether the campaign involves affiliate marketing.
embedded_linkEmbedded LinkenumRequiredWhether messages will contain embedded links.
embedded_telephoneEmbedded TelephoneenumRequiredWhether messages will contain embedded phone numbers.
ctia_age_related_contentCTIA Age-Related (SHAFT) ContentenumRequiredWhether the campaign involves Sex, Hate, Alcohol, Firearms, or Tobacco content.
attestation_optin_records_retainedAttestation: Opt-In Records RetainedenumRequiredAttest that opt-in records are retained. Must be Yes.
attestation_optout_honoredAttestation: Opt-Out HonoredenumRequiredAttest that opt-out requests are honored. Must be Yes.
attestation_help_response_implementedAttestation: HELP Response ImplementedenumRequiredAttest that HELP responses are implemented. Must be Yes.
attestation_tc_privacypolicy_publishedAttestation: T&C / Privacy Policy PublishedenumRequiredAttest that T&Cs and Privacy Policy are published and reachable. Must be Yes.
file_locationSupporting Document URLurlOptionalPublicly reachable HTTPS URL to a supporting document (max 25 MB). Fetched by IXICA and attached to the internal ticket as a private note.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/campaigncreate';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'brand_id' => '<Brand ID>',
    'primary_usecase' => '<Primary Use Case>',
    'additional_use_cases' => '<Additional Use Cases>',
    'standard_campaign_type' => '<Standard Campaign Type>',
    'campaign_description' => '<Campaign Description>',
    'message_flow' => '<Message Flow / Call to Action>',
    'sample_1' => '<Sample Message 1>',
    'sample_2' => '<Sample Message 2>',
    'sample_3' => '<Sample Message 3>',
    'sample_4' => '<Sample Message 4>',
    'sample_5' => '<Sample Message 5>',
    'consumer_optin_collected' => '<Consumer Opt-In Collected>',
    'optin_method' => '<Opt-In Method>',
    'optin_keyword' => '<Opt-In Keyword>',
    'optin_confirmation_message' => '<Opt-In Confirmation Message>',
    'consumer_optout_supported' => '<Consumer Opt-Out Supported>',
    'optout_keyword' => '<Opt-Out Keyword(s)>',
    'optout_confirmation_message' => '<Opt-Out Confirmation Message>',
    'help_keyword_supported' => '<HELP Keyword Supported>',
    'help_keyword' => '<HELP Keyword(s)>',
    'help_response_message' => '<HELP Response Message>',
    'privacy_policy_url' => '<Privacy Policy URL>',
    'terms_and_conditions_url' => '<Terms & Conditions URL>',
    'more_than_50_tns' => '<More Than 50 TNs>',
    'number_pooling_requested' => '<Number Pooling Requested>',
    'lending_or_loan' => '<Lending or Loan Content>',
    'direct_lending_arrangement' => '<Direct Lending Arrangement>',
    'affiliate_marketing' => '<Affiliate Marketing>',
    'embedded_link' => '<Embedded Link>',
    'embedded_telephone' => '<Embedded Telephone>',
    'ctia_age_related_content' => '<CTIA Age-Related (SHAFT) Content>',
    'attestation_optin_records_retained' => '<Attestation: Opt-In Records Retained>',
    'attestation_optout_honored' => '<Attestation: Opt-Out Honored>',
    'attestation_help_response_implemented' => '<Attestation: HELP Response Implemented>',
    'attestation_tc_privacypolicy_published' => '<Attestation: T&C / Privacy Policy Published>',
    'file_location' => '<Supporting Document URL>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "customer_account_number": "274518702",
    "campaign_application_id": 5721,
    "ticket_number": "181055",
    "status": "Submitted",
    "brand_id": "BEDE5CA",
    "brand_name": "Prodigi",
    "primary_usecase": "ACCOUNT_NOTIFICATION",
    "standard_campaign_type": "Account Notifications",
    "attachments_included": 1,
    "message": "Campaign application submitted. It is now being processed with TCR. You will be notified once vetting is complete."
}

Response Fields

Field Type Example Notes
resulttextok
customer_account_numbertext274518702
campaign_application_idint5721
ticket_numbertext181055
statustextSubmitted
brand_idtextBEDE5CA
brand_nametextProdigi
primary_usecasetextACCOUNT_NOTIFICATION
standard_campaign_typetextAccount Notifications
attachments_includedint1
messagetextCampaign application submitted. It is now being processed with TCR. You will be notified once vetting is complete.
Back to reference overview ↑

Get list of Brands and Campaigns 5:39 #

POST https://api.sipcontrol.cloud/account_number/sms/bandcget
Note: Returns all active SMS brands registered for the specified customer account, and for each brand, its active campaigns. brand_count reflects the number of brands returned; campaign_count on each brand reflects the number of campaigns nested under it. Both may be 0 if the customer has no active brands or if a brand has no active campaigns. Only brands and campaigns without an end_date (or with a future end_date) are returned.

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit customer account number to look up brands and campaigns for.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/bandcget';
$data = [
    'customer_account_number' => '<Customer Account Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "customer_account_number": "274518702",
            "brand_count": 2,
            "brands": [
                {
                    "brand_id": "BEDE5CA",
                    "code": "BRND0001",
                    "brand_name": "Prodigi",
                    "org_type": "PRIVATE_PROFIT",
                    "tax_id": "12-3456789",
                    "telephone": "4165551212",
                    "email": "[email protected]",
                    "street_address": "123 King Street West",
                    "city": "Toronto",
                    "state": "ON",
                    "country": "CA",
                    "zip": "M5V 1J5",
                    "industry": "TECHNOLOGY",
                    "website": "https://www.prodigi.example",
                    "start_date": "2026-03-15 10:22:04",
                    "status": "Approved",
                    "campaign_count": 1,
                    "campaigns": [
                        {
                            "campaign_id": "CCJBTAX",
                            "code": "CAMP0001",
                            "standard_campaign_type": "Account Notifications",
                            "message_flow": "Users opt in via web form at signup.",
                            "sample_1": "Welcome to Prodigi! Reply STOP to opt out.",
                            "sample_2": "Your account balance is $42.50. Reply STOP to opt out.",
                            "consumer_optin": "Web form",
                            "optin_keyword": "START",
                            "optin_message": "You are now opted in to Prodigi alerts.",
                            "consumer_optout": "Yes",
                            "optout_keyword": "STOP",
                            "optout_message": "You have been opted out. Reply START to re-subscribe.",
                            "help_implemented": "Yes",
                            "help_keyword": "HELP",
                            "help_message": "For help contact [email protected]",
                            "more_than_50_tns": "No",
                            "lending_or_loan": "No",
                            "embedded_link": "No",
                            "embedded_telephone": "No",
                            "ctia_age_related_content": "No",
                            "start_date": "2026-04-02 09:11:33",
                            "status": "Approved"
                        }
                    ]
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
customer_account_numbertext274518702
brand_countint2
brandsarray
brand_idtextBEDE5CA
codetextBRND0001
brand_nametextProdigi
org_typetextPRIVATE_PROFIT
tax_idtext12-3456789
telephonetext4165551212
emailtext[email protected]
street_addresstext123 King Street West
citytextToronto
statetextON
countrytextCA
ziptextM5V 1J5
industrytextTECHNOLOGY
websitetexthttps://www.prodigi.example
start_datedatetime2026-03-15 10:22:04
statustextApproved
campaign_countint1
campaignsarray
campaign_idtextCCJBTAX
codetextCAMP0001
standard_campaign_typetextAccount Notifications
message_flowtextUsers opt in via web form at signup.
sample_1textWelcome to Prodigi! Reply STOP to opt out.
sample_2textYour account balance is $42.50. Reply STOP to opt out.
consumer_optintextWeb form
optin_keywordtextSTART
optin_messagetextYou are now opted in to Prodigi alerts.
consumer_optouttextYes
optout_keywordtextSTOP
optout_messagetextYou have been opted out. Reply START to re-subscribe.
help_implementedtextYes
help_keywordtextHELP
help_messagetextFor help contact [email protected]
more_than_50_tnstextNo
lending_or_loantextNo
embedded_linktextNo
embedded_telephonetextNo
ctia_age_related_contenttextNo
start_datedatetime2026-04-02 09:11:33
statustextApproved
Back to reference overview ↑

Status of Webhook 5:66 #

POST https://api.sipcontrol.cloud/account_number/sms/webhookstatus

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequired
user_idUser IDintMulti-Field DependentUser ID of SMS User. Either user_id or user_name is required
user_nameUser NametextMulti-Field DependentUser Name of SMS User. Either user_id or user_name is required

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/webhookstatus';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'user_id' => '<User ID>',
    'user_name' => '<User Name>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "customer_account_number": "274518665",
            "user_id": 4,
            "username": "sampleuser",
            "name": "IXICA Communications Inc",
            "email": "[email protected]",
            "status": 1,
            "status_label": "Enabled",
            "webhook": "https://webhookurl.com",
            "wh_type": "1",
            "wh_type_label": "3CX",
            "api_key": "a1s2d3f4g5h6",
            "secret_key": "",
            "timezones": "America/Toronto",
            "created_at": "2025-01-10T20:46:41.000000Z",
            "updated_at": "2025-09-01T21:02:51.000000Z"
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextokOverall call result ("ok" or "error")
dataarrayPayload wrapper
customer_account_numbertext274518665customer account number that was queried
user_idint4MySMS user id for the resolved user
usernametextsampleuserMySMS username
nametextIXICA Communications IncDisplay name on the MySMS user
emailtext[email protected]Email on the MySMS user
statusint1User enable flag (0 = disabled, 1 = enabled)
status_labeltextEnabledHuman-readable status ("Enabled" or "Disabled")
webhooktexthttps://webhookurl.comInbound-SMS webhook URL configured on this user
wh_typetext1Webhook type code (0=Generic, 1=3CX, 2=Yeastar, 3=UCX, 4=text.io)
wh_type_labeltext3CXHuman-readable webhook type
api_keytexta1s2d3f4g5h6Public API key for this user
secret_keytextSecret key for this user (may be empty)
timezonestextAmerica/TorontoUser's timezone
created_attext2025-01-10T20:46:41.000000ZISO 8601 timestamp the user was created
updated_attext2025-09-01T21:02:51.000000ZISO 8601 timestamp the user was last modified
Back to reference overview ↑

Set Webhook Values 5:67 #

POST https://api.sipcontrol.cloud/account_number/sms/webhookset

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequired
user_idUser IDintMulti-Field DependentUser ID of SMS User. Either user_id or user_name is required
user_nameUser NametextMulti-Field DependentUser ID of SMS User. Either user_id or user_name is required
api_typeAPI TypetextRequiredSelect the endpoint used. Options are Generic, 3CX or Yeastar. Accepted either value or name 'generic' => '0', '3cx' => '1', 'yeastar' => '2',
webhook_urlWebhook URLurlRequiredYour webhook URL for message delivery

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/sms/webhookset';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'user_id' => '<User ID>',
    'user_name' => '<User Name>',
    'api_type' => '<API Type>',
    'webhook_url' => '<Webhook URL>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

[]
Back to reference overview ↑

Support, Tools & Information sipcontrol

Check Number Portability 12:43 #

POST https://api.sipcontrol.cloud/account_number/tool/portability

Parameters

Param Field Name Type Required Notes
tnTelephone NumberintRequiredThe number being checked for portability. The number must be in 10D format (ex: 4165551212)

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/portability';
$data = [
    'tn' => '<Telephone Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

[]
Back to reference overview ↑

Search FAQ 12:44 #

POST https://api.sipcontrol.cloud/account_number/tool/faq

Parameters

Param Field Name Type Required Notes
pagePaginationintRequiredPagination is required. Min 1, Max 999. Each page returns 100 results.
search_termSearch TermtextOptionalThe search term if any. If none provided, all FAQ's will be returned.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/faq';
$data = [
    'page' => '<Pagination>',
    'search_term' => '<Search Term>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "message": "",
    "data": [
        {
            "page": 1,
            "total_pages": 5,
            "total_rows": 37,
            "per_page": 10,
            "results": [
                {
                    "category": "BILLING",
                    "title": "How do I read my invoice?",
                    "body_content": "......",
                    "date_created": "2026-09-15 11:25:52"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
messagetext
dataarray
pageint1
total_pagesint5
total_rowsint37
per_pageint10Always 10
resultsarray
categorytextBILLING
titletextHow do I read my invoice?
body_contenttext......html formatted
date_createddatetime2026-09-15 11:25:52
Back to reference overview ↑

Network Status & Outage Information 12:45 #

POST https://api.sipcontrol.cloud/account_number/tool/networkstatus

Parameters

Param Field Name Type Required Notes
typeNetwork Status TypetextRequiredType of Network Status requested. Acceptable types are ALL, OUTAGE, MAINTENANCE.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/networkstatus';
$data = [
    'type' => '<Network Status Type>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

[]
Back to reference overview ↑

News & Information 12:46 #

POST https://api.sipcontrol.cloud/account_number/tool/news

Parameters

Param Field Name Type Required Notes
pagePaginationintRequiredPagination is required. Min 1, Max 999. Each page returns 100 results.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/news';
$data = [
    'page' => '<Pagination>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

[]
Back to reference overview ↑

Your Webhooks 12:65 #

POST https://api.sipcontrol.cloud/account_number/tool/webhooks

Parameters

Param Field Name Type Required Notes
actionActiontextOptionalEither "get" (retrieve current webhook configuration) or "set" (update webhook configuration). Defaults to "get" if omitted.
webhook_lnpLNP Webhook URLtextOptionalHTTPS URL that receives LNP (port order) status updates. Send an empty string ("") to clear this hook. Omit the field to leave the current value unchanged.
webhook_lnp_passLNP Webhook SecrettextOptionalShared secret sent as a header/signature with LNP webhook deliveries. Never returned in "get" responses (presence indicated by webhook_lnp_pass_configured flag).
webhook_didDID Webhook URLtextOptionalHTTPS URL that receives DID lifecycle status updates. Send an empty string to clear.
webhook_did_passDID Webhook SecrettextOptionalShared secret for DID webhook deliveries. Never returned in "get" responses.
webhook_tfnTFN Webhook URLtextOptionalHTTPS URL that receives Toll-Free Number lifecycle status updates. Send an empty string to clear.
webhook_tfn_passTFN Webhook SecrettextOptionalShared secret for TFN webhook deliveries. Never returned in "get" responses.
webhook_smsSMS Webhook URLtextOptionalHTTPS URL that receives SMS enablement / brand / campaign status updates. Send an empty string to clear.
webhook_sms_passSMS Webhook SecrettextOptionalShared secret for SMS webhook deliveries. Never returned in "get" responses.
webhook_tnTN Change Webhook URLtextOptionalHTTPS URL that receives TN change (reroute/disconnect) status updates. Send an empty string to clear.
webhook_tn_passTN Change Webhook SecrettextOptionalShared secret for TN webhook deliveries. Never returned in "get" responses.
webhook_sipSIP Trunk Webhook URLtextOptionalHTTPS URL that receives SIP trunk change/provisioning status updates. Send an empty string to clear.
webhook_sip_passSIP Trunk Webhook SecrettextOptionalShared secret for SIP trunk webhook deliveries. Never returned in "get" responses.
webhook_supportTicket Webhook URLtextOptionalHTTPS URL that receives ticket updates. Send an empty string to clear.
webhook_support_passSupport Webhook SecrettextOptionalShared secret for ticket webhook deliveries. Never returned in "get" responses.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/webhooks';
$data = [
    'action' => '<Action>',
    'webhook_lnp' => '<LNP Webhook URL>',
    'webhook_lnp_pass' => '<LNP Webhook Secret>',
    'webhook_did' => '<DID Webhook URL>',
    'webhook_did_pass' => '<DID Webhook Secret>',
    'webhook_tfn' => '<TFN Webhook URL>',
    'webhook_tfn_pass' => '<TFN Webhook Secret>',
    'webhook_sms' => '<SMS Webhook URL>',
    'webhook_sms_pass' => '<SMS Webhook Secret>',
    'webhook_tn' => '<TN Change Webhook URL>',
    'webhook_tn_pass' => '<TN Change Webhook Secret>',
    'webhook_sip' => '<SIP Trunk Webhook URL>',
    'webhook_sip_pass' => '<SIP Trunk Webhook Secret>',
    'webhook_support' => '<Ticket Webhook URL>',
    'webhook_support_pass' => '<Support Webhook Secret>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "action": "set",
    "changed": true,
    "message": "Webhook configuration updated. New active row created.",
    "configured": true,
    "date_start": "2026-08-21 14:32:17",
    "webhook_lnp": "https://portal.example.com/webhooks/lnp",
    "webhook_lnp_pass_configured": true,
    "webhook_did": "https://portal.example.com/webhooks/did",
    "webhook_did_pass_configured": true,
    "webhook_tfn": "https://portal.example.com/webhooks/tfn",
    "webhook_tfn_pass_configured": true,
    "webhook_sms": "https://portal.example.com/webhooks/sms",
    "webhook_sms_pass_configured": true,
    "webhook_tn": "https://portal.example.com/webhooks/tn",
    "webhook_tn_pass_configured": true,
    "webhook_sip": "https://portal.example.com/webhooks/sip",
    "webhook_sip_pass_configured": true,
    "error": "webhook_did must be a valid URL or empty string"
}

Response Fields

Field Type Example Notes
resulttextok
actiontextset
changedbooltrue
messagetextWebhook configuration updated. New active row created.
configuredbooltrue
date_startdatetime2026-08-21 14:32:17
webhook_lnptexthttps://portal.example.com/webhooks/lnp
webhook_lnp_pass_configuredbooltrue
webhook_didtexthttps://portal.example.com/webhooks/did
webhook_did_pass_configuredbooltrue
webhook_tfntexthttps://portal.example.com/webhooks/tfn
webhook_tfn_pass_configuredbooltrue
webhook_smstexthttps://portal.example.com/webhooks/sms
webhook_sms_pass_configuredbooltrue
webhook_tntexthttps://portal.example.com/webhooks/tn
webhook_tn_pass_configuredbooltrue
webhook_siptexthttps://portal.example.com/webhooks/sip
webhook_sip_pass_configuredbooltrue
errortextwebhook_did must be a valid URL or empty string
Back to reference overview ↑

Support Ticket Create 12:68 #

POST https://api.sipcontrol.cloud/account_number/tool/ticketcreate
Ensure you have set webhook URL for ticket reply delivery!

Parameters

Param Field Name Type Required Notes
customer_account_numbercustomer_account_numberintRequiredCustomer account this ticket belongs to
subjectsubjecttextRequiredTicket subject line
bodybodytextMulti-Field DependentPlain-text body — HTML-escaped and line-broken. Use this OR body_html — one is required
body_htmlbody_htmltextMulti-Field DependentHTML body — scrubbed of
contact_emailcontact_emailtextOptionalRequester email. Defaults to the authenticated contact's email if omitted
your_refyour_reftextOptionalCaller's internal reference number, echoed on every response about this ticket
categorycategorytextOptionalTicket category label (defaults to "API Request")
typetypetextOptionalTicket type label (defaults to "General")
sub_typesub_typetextOptionalTicket sub-type label
prioritypriorityintOptional1=Low (default), 2=Medium, 3=High, 4=Urgent
tagstagsarrayOptionalOptional list of tag strings — "API" is always added
tagtagtextOptionalA single tag string
filesfilesarrayOptionalOptional attachments (max 10 files / 15MB each / 25MB total)
urlurltextOptionalPublic URL to download the file from (http/https)
filenamefilenametextOptionalDisplay filename; required if using content_base64
content_typecontent_typetextOptionalMIME type; auto-detected if omitted
content_base64content_base64textOptionalBase64-encoded file bytes (alternative to url)

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/ticketcreate';
$data = [
    'customer_account_number' => '<customer_account_number>',
    'subject' => '<subject>',
    'body' => '<body>',
    'body_html' => '<body_html>',
    'contact_email' => '<contact_email>',
    'your_ref' => '<your_ref>',
    'category' => '<category>',
    'type' => '<type>',
    'sub_type' => '<sub_type>',
    'priority' => '<priority>',
    'tags' => [
        [
            'tag' => '<tag>'
        ]
    ],
    'files' => [
        [
            'url' => '<url>',
            'filename' => '<filename>',
            'content_type' => '<content_type>',
            'content_base64' => '<content_base64>'
        ]
    ]
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "customer_account_number": "274518665",
            "ticket_number": 294483,
            "your_ref": "ORD-12345",
            "subject": "Port request for 4165551212",
            "category": "API Request",
            "type": "General",
            "sub_type": "",
            "priority": 1,
            "status": 2,
            "contact_email": "[email protected]",
            "attachments_uploaded": 2,
            "date_opened": "2026-09-01 14:00:00",
            "source": "api"
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextokOverall call result ("ok" or "error")
dataarrayPayload wrapper
customer_account_numbertext274518665Echo of the customer account number
ticket_numberint294483Freshdesk ticket id assigned to this ticket
your_reftextORD-12345Caller's internal reference (echoed as sent)
subjecttextPort request for 4165551212Ticket subject
categorytextAPI RequestTicket category
typetextGeneralTicket type
sub_typetextTicket sub-type
priorityint1Priority (1=Low, 2=Medium, 3=High, 4=Urgent)
statusint2Freshdesk status (2=Open)
contact_emailtext[email protected]Requester email attached to the ticket
attachments_uploadedint2Number of attachments successfully uploaded
date_openedtext2026-09-01 14:00:00Server timestamp the ticket was opened
sourcetextapiOrigin of the ticket (always "api" here)
Back to reference overview ↑

Get Ticket Status 12:69 #

POST https://api.sipcontrol.cloud/account_number/tool/ticketget

Parameters

Param Field Name Type Required Notes
customer_account_numbercustomer_account_numbertextRequiredCustomer account this ticket belongs to
ticket_numberticket_numberintRequiredFreshdesk ticket id to fetch

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/ticketget';
$data = [
    'customer_account_number' => '<customer_account_number>',
    'ticket_number' => '<ticket_number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "customer_account_number": "274518665",
            "ticket_number": 294483,
            "your_ref": "ORD-12345",
            "source": "api",
            "subject": "Port request for 4165551212",
            "category": "API Request",
            "type": "General",
            "sub_type": "",
            "status": 2,
            "status_label": "Open",
            "priority": 1,
            "priority_label": "Low",
            "requester_email": "[email protected]",
            "created_at": "2026-09-01T17:00:12Z",
            "updated_at": "2026-09-01T18:00:00Z",
            "tags": [
                {
                    "tag": "API"
                }
            ],
            "description": [
                {
                    "body_text": "Please port 4165551212...",
                    "body_html": "<p>Please port 4165551212...</p>",
                    "attachments": [
                        {
                            "id": 12345,
                            "name": "quote.pdf",
                            "content_type": "application/pdf",
                            "size": 214523,
                            "attachment_url": "https://cdn.freshdesk.com/..."
                        }
                    ]
                }
            ],
            "replies_count": 2,
            "replies": [
                {
                    "id": 987654,
                    "from_email": "[email protected]",
                    "incoming": "false",
                    "body_text": "We received your request...",
                    "body_html": "<div>We received your request...</div>",
                    "created_at": "2026-09-01T17:30:00Z",
                    "updated_at": "2026-09-01T17:30:00Z",
                    "attachments": [
                        {
                            "id": 12346,
                            "name": "screenshot.png",
                            "content_type": "image/png",
                            "size": 45312,
                            "attachment_url": "https://cdn.freshdesk.com/..."
                        }
                    ]
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextokOverall call result ("ok" or "error")
dataarrayPayload wrapper
customer_account_numbertext274518665Echo of the customer account number
ticket_numberint294483Freshdesk ticket id
your_reftextORD-12345Caller's internal reference stored at creation
sourcetextapiHow the ticket was created (api/ui/system/workflow/alert)
subjecttextPort request for 4165551212Ticket subject
categorytextAPI RequestTicket category
typetextGeneralTicket type
sub_typetextTicket sub-type
statusint2Freshdesk status code
status_labeltextOpenHuman-readable status
priorityint1Priority code
priority_labeltextLowHuman-readable priority
requester_emailtext[email protected]Email of the ticket requester
created_attext2026-09-01T17:00:12ZISO 8601 timestamp the ticket was created
updated_attext2026-09-01T18:00:00ZISO 8601 timestamp of last update
tagsarrayTags on the ticket
tagtextAPIA single tag
descriptionarrayOriginal ticket body (opening message)
body_texttextPlease port 4165551212...Plaintext version of the opening body
body_htmltext<p>Please port 4165551212...</p>HTML version of the opening body
attachmentsarrayFiles attached at ticket creation
idint12345Freshdesk attachment id
nametextquote.pdfFile name
content_typetextapplication/pdfMIME type
sizeint214523File size in bytes
attachment_urltexthttps://cdn.freshdesk.com/...Time-limited download URL from Freshdesk
replies_countint2Number of public replies returned (excludes ALL notes)
repliesarrayPublic replies ONLY — private notes and public notes are always excluded
idint987654Reply id
from_emailtext[email protected]Email of the sender
incomingtextfalsetrue = customer -> agent; false = agent -> customer
body_texttextWe received your request...Plaintext version of the reply
body_htmltext<div>We received your request...</div>HTML version of the reply
created_attext2026-09-01T17:30:00ZISO 8601 timestamp the reply was posted
updated_attext2026-09-01T17:30:00ZISO 8601 timestamp of last edit
attachmentsarrayFiles attached to this reply
idint12346Freshdesk attachment id
nametextscreenshot.pngFile name
content_typetextimage/pngMIME type
sizeint45312File size in bytes
attachment_urltexthttps://cdn.freshdesk.com/...Time-limited download URL from Freshdesk
Back to reference overview ↑

Update Existing Ticket 12:70 #

POST https://api.sipcontrol.cloud/account_number/tool/ticketupdate
Ensure you have set webhook URL for ticket reply delivery!

Parameters

Param Field Name Type Required Notes
customer_account_numbercustomer_account_numbertextRequiredCustomer account this ticket belongs to
ticket_numberticket_numberintRequiredFreshdesk ticket id to reply on
bodybodytextMulti-Field DependentPlain-text reply body — HTML-escaped and line-broken. Use this OR body_html — one is required
body_htmlbody_htmltextMulti-Field DependentHTML reply body — scrubbed of
contact_emailcontact_emailtextOptionalReply-as email. Defaults to the ticket's stored requester_email
filesfilesarrayOptionalOptional attachments (max 10 files / 15MB each / 25MB total)
urlurltextOptionalPublic URL to download the file from (http/https)
filenamefilenametextOptionalDisplay filename; required if using content_base64
content_typecontent_typetextOptionalMIME type; auto-detected if omitted
content_base64content_base64textOptionalBase64-encoded file bytes (alternative to url)

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/ticketupdate';
$data = [
    'customer_account_number' => '<customer_account_number>',
    'ticket_number' => '<ticket_number>',
    'body' => '<body>',
    'body_html' => '<body_html>',
    'contact_email' => '<contact_email>',
    'files' => [
        [
            'url' => '<url>',
            'filename' => '<filename>',
            'content_type' => '<content_type>',
            'content_base64' => '<content_base64>'
        ]
    ]
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "customer_account_number": "274518665",
            "ticket_number": 294483,
            "your_ref": "ORD-12345",
            "reply_id": 987654,
            "contact_email": "[email protected]",
            "attachments_uploaded": 1,
            "created_at": "2026-09-01T18:00:00Z",
            "message": "Public reply posted as customer"
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextokOverall call result ("ok" or "error")
dataarrayPayload wrapper
customer_account_numbertext274518665Echo of the customer account number
ticket_numberint294483Freshdesk ticket id
your_reftextORD-12345Caller's internal reference stored at creation
reply_idint987654Freshdesk id of the new reply
contact_emailtext[email protected]Email the reply was posted as
attachments_uploadedint1Number of attachments successfully uploaded
created_attext2026-09-01T18:00:00ZISO 8601 timestamp the reply was posted
messagetextPublic reply posted as customerStatic confirmation message
Back to reference overview ↑

International DID & TFN Availability List 12:78 #

POST https://api.sipcontrol.cloud/account_number/tool/internationalcoverage

Parameters

No parameters required.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/internationalcoverage';
$data = [

];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "data": [
        {
            "country_name": "",
            "country_code": "",
            "type": "Local"
        }
    ]
}

Response Fields

Field Type Example Notes
dataarray
country_nametext
country_codetext
typetextLocal
Back to reference overview ↑

NPA NXX Rates (Wholesale) 12:79 #

POST https://api.sipcontrol.cloud/account_number/tool/npanxxrates
This function is available to wholesale accounts only.

Parameters

Param Field Name Type Required Notes
customer_account_numberintRequired
pageintRequiredPagination is required. Response will include 100 rows per page.
npatextOptional
nxxtextOptional

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/npanxxrates';
$data = [
    'customer_account_number' => '<customer_account_number>',
    'page' => '<page>',
    'npa' => '<npa>',
    'nxx' => '<nxx>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "page": 1,
    "per_page": 100,
    "total_rows": 250000,
    "nxx": "200",
    "total_pages": 2500,
    "rates": [
        {
            "prefix": "1201200",
            "npa": "201",
            "interval_1": "6",
            "interval_n": "6",
            "rate_1": "0.0053",
            "rate_n": "0.0053",
            "grace_period": "0",
            "date_effective": "2017-04-03"
        }
    ]
}

Response Fields

Field Type Example Notes
pageint1
per_pageint100
total_rowsint250000
nxxtext200
total_pagesint2500
ratesarray
prefixtext1201200
npatext201
interval_1text6
interval_ntext6
rate_1text0.0053
rate_ntext0.0053
grace_periodtext0
date_effectivedate2017-04-03
Back to reference overview ↑

Long Distance (International Calling) Rates 12:80 #

POST https://api.sipcontrol.cloud/account_number/tool/ldrates

Parameters

Param Field Name Type Required Notes
customer_account_numberintRequired
pageintRequired
prefixtextOptionalAn example for Mongolia would be 976
destinationtextOptionalAn example would be Bahrain

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/tool/ldrates';
$data = [
    'customer_account_number' => '<customer_account_number>',
    'page' => '<page>',
    'prefix' => '<prefix>',
    'destination' => '<destination>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "page": 1,
    "per_page": 100,
    "total_rows": "",
    "total_pages": 1,
    "rates": [
        {
            "prefix": "1284",
            "destination": "VIRGIN ISLANDS (BRITISH), Proper",
            "rate_1": "0.35",
            "increment_1": "60",
            "rate_n": "0.35",
            "increment_n": "60",
            "date_effective": "2018-01-18"
        }
    ]
}

Response Fields

Field Type Example Notes
pageint1
per_pageint100
total_rowsint
total_pagesint1
ratesarray
prefixtext1284
destinationtextVIRGIN ISLANDS (BRITISH), Proper
rate_1text0.35
increment_1text60
rate_ntext0.35
increment_ntext60
date_effectivedate2018-01-18
Back to reference overview ↑

CDR sipcontrol

Search for a specific voice call 13:48 #

POST https://api.sipcontrol.cloud/account_number/cdr/sipsearch
Note: Returns a paginated list of specific voice calls matching the from/to number pair on the given date. Use this endpoint when searching for a specific call or a small set of calls between two known numbers. For a broader daily search, use the CDR SIP Get endpoint instead. Each page returns up to 100 records. Date scoping: CDR is stored in daily tables (cdr_YYYYMMDD). Each request queries exactly one day. If the day-table does not exist yet (e.g. no calls have been recorded for that day), the endpoint returns a valid empty result rather than an error. Phone number matching: Both from_number and to_number accept any format — the endpoint strips non-digits and matches the last 10 digits against cli_in (from) and cld_in (to). This means +1 (416) 555-1212, 14165551212, and 4165551212 all match the same call. Time fields: connect_time and disconnect_time are returned as UTC datetime strings (YYYY-MM-DD HH:MM:SS) converted from Unix timestamps. Pagination: has_more is true when additional records exist beyond the current page. Increment page and re-query to retrieve the next batch. The endpoint uses a fetch-one-extra pattern for accurate has_more detection without requiring a separate count query. Record fields: result — SIP result code (e.g. 200 = completed, 486 = busy, 487 = cancelled) delay — post-dial delay in seconds billed_duration — billed call duration in seconds connect_time — call connect timestamp (UTC) disconnect_time — call disconnect timestamp (UTC) cld_in — called number as received cli_in — calling number as received country — destination country description — human-readable disposition remote_ip — remote endpoint IP user_agent — remote endpoint User-Agent header On error (missing fields, invalid page/date, customer not resolvable, no SIP accounts found, CDR database unavailable), returns {result:"error", error:"..."} — a plain object at the top level (not wrapped in an array).

Parameters

Param Field Name Type Required Notes
pagePageintRequiredPage number (1-999). 100 records per page.
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer whose CDR you want to search.
from_numberFrom NumbertextRequiredCalling party number (any format). The last 10 digits are matched against cli_in.
to_numberTo NumbertextRequiredCalled party number (any format). The last 10 digits are matched against cld_in.
dateDatedateRequiredDate to search in YYYY-MM-DD format. Only one calendar day per request (CDR is stored in daily tables).
sip_accountSIP Account IDintOptionalOptional MySQL internal ID of a specific SIP account. When provided, only calls for that SIP account are returned. When omitted, all SIP accounts belonging to the customer are searched.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/cdr/sipsearch';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>',
    'from_number' => '<From Number>',
    'to_number' => '<To Number>',
    'date' => '<Date>',
    'sip_account' => '<SIP Account ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "page": 1,
            "count": 42,
            "has_more": true,
            "records": [
                {
                    "result": 200,
                    "delay": 0.42,
                    "billed_duration": 185,
                    "connect_time": "2026-08-21 14:35:22",
                    "disconnect_time": "2026-08-21 14:38:27",
                    "cld_in": "14165551212",
                    "cli_in": "16045551234",
                    "country": "Canada",
                    "description": "Completed",
                    "remote_ip": "203.0.113.10",
                    "user_agent": "PBX-User-Agent/1.0"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
pageint1
countint42
has_morebooltrue
recordsarray
resultint200
delayfloat0.42
billed_durationint185
connect_timedatetime2026-08-21 14:35:22
disconnect_timedatetime2026-08-21 14:38:27
cld_intext14165551212
cli_intext16045551234
countrytextCanada
descriptiontextCompleted
remote_iptext203.0.113.10
user_agenttextPBX-User-Agent/1.0
Back to reference overview ↑

Get Voice CDR by Date Range 13:49 #

POST https://api.sipcontrol.cloud/account_number/cdr/sipget
Note: Returns a paginated list of all voice calls for the specified customer on the given date, sorted newest first. Use this endpoint for daily reports, bulk exports, or when you need every call for the day. For a targeted search matching a specific from/to number pair, use the CDR SIP Search endpoint instead. Each page returns up to 100 records. Date scoping: CDR is stored in daily tables (cdr_YYYYMMDD). Each request queries exactly one day. If the day-table does not exist yet (e.g. no calls have been recorded for that day, or the date is in the future), the endpoint returns a valid empty result rather than an error. Time fields: connect_time and disconnect_time are returned as UTC datetime strings (YYYY-MM-DD HH:MM:SS) converted from Unix timestamps. Pagination: has_more is true when additional records exist beyond the current page. Increment page and re-query to retrieve the next batch. The endpoint uses a fetch-one-extra pattern for accurate has_more detection without requiring a separate count query. Record fields: result — SIP result code (e.g. 200 = completed, 486 = busy, 487 = cancelled) delay — post-dial delay in seconds billed_duration — billed call duration in seconds connect_time — call connect timestamp (UTC) disconnect_time — call disconnect timestamp (UTC) cld_in — called number as received cli_in — calling number as received country — destination country description — human-readable disposition remote_ip — remote endpoint IP user_agent — remote endpoint User-Agent header On error (missing fields, invalid page/date, customer not resolvable, no SIP accounts found, CDR database unavailable), returns {result:"error", error:"..."} — a plain object at the top level (not wrapped in an array).

Parameters

Param Field Name Type Required Notes
pagePageintRequiredPage number (1-999). 100 records per page.
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer whose CDR you want to retrieve.
dateDatedateRequiredDate to retrieve in YYYY-MM-DD format. Only one calendar day per request (CDR is stored in daily tables).
sip_accountSIP Account IDintOptionalOptional MySQL internal ID of a specific SIP account. When provided, only calls for that SIP account are returned. When omitted, all SIP accounts belonging to the customer are returned.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/cdr/sipget';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>',
    'date' => '<Date>',
    'sip_account' => '<SIP Account ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "page": 1,
            "count": 100,
            "has_more": true,
            "records": [
                {
                    "result": 200,
                    "delay": 0.42,
                    "billed_duration": 185,
                    "connect_time": "2026-08-21 14:35:22",
                    "disconnect_time": "2026-08-21 14:38:27",
                    "cld_in": "14165551212",
                    "cli_in": "16045551234",
                    "country": "Canada",
                    "description": "Completed",
                    "remote_ip": "203.0.113.10",
                    "user_agent": "PBX-User-Agent/1.0"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
pageint1
countint100
has_morebooltrue
recordsarray
resultint200
delayfloat0.42
billed_durationint185
connect_timedatetime2026-08-21 14:35:22
disconnect_timedatetime2026-08-21 14:38:27
cld_intext14165551212
cli_intext16045551234
countrytextCanada
descriptiontextCompleted
remote_iptext203.0.113.10
user_agenttextPBX-User-Agent/1.0
Back to reference overview ↑

SMS CDR 13:56 #

POST https://api.sipcontrol.cloud/account_number/cdr/smsget

Parameters

Param Field Name Type Required Notes
pagePageintRequiredPage number (1-999). 100 records per page.
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer whose SMS CDR you want to retrieve.
dateDatedateRequiredDate to retrieve in YYYY-MM-DD format. Only one calendar day per request (CDR is stored in daily/monthly tables).
from_numberFrom NumbertextOptionalOptional filter by sender number. Must contain at least 10 digits; the last 10 digits are used for matching.
to_numberTo NumbertextOptionalOptional filter by recipient number. Must contain at least 10 digits; the last 10 digits are used for matching.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/cdr/smsget';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>',
    'date' => '<Date>',
    'from_number' => '<From Number>',
    'to_number' => '<To Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "page": 1,
            "count": 100,
            "has_more": true,
            "records": [
                {
                    "datetime": "2026-08-21 14:32:17",
                    "type": "SMS",
                    "sender": "6045551234",
                    "receiver": "4165550987",
                    "direction": "outbound",
                    "billing_qty": 1,
                    "did": "6045551234"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
pageint1
countint100
has_morebooltrue
recordsarray
datetimedatetime2026-08-21 14:32:17
typetextSMS
sendertext6045551234
receivertext4165550987
directiontextoutbound
billing_qtyint1
didtext6045551234
Back to reference overview ↑

VFAX CDR 13:58 #

POST https://api.sipcontrol.cloud/account_number/cdr/vfaxget

Parameters

Param Field Name Type Required Notes
pagePageintRequiredPage number (1-999). 100 records per page.
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer whose VFAX CDR you want to retrieve.
dateDatedateRequiredDate to retrieve in YYYY-MM-DD format. Only one calendar day per request (CDR is stored in daily/monthly tables).
from_numberFrom NumbertextOptionalOptional filter by sender fax number. Must contain at least 10 digits; the last 10 digits are used for matching.
to_numberTo NumbertextOptionalOptional filter by recipient fax number. Must contain at least 10 digits; the last 10 digits are used for matching.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/cdr/vfaxget';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>',
    'date' => '<Date>',
    'from_number' => '<From Number>',
    'to_number' => '<To Number>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "page": 1,
            "count": 100,
            "has_more": true,
            "records": [
                {
                    "source": "db",
                    "product": "VFAXC",
                    "product_code": "V0FX0C01",
                    "datetime": "2026-08-21 14:32:17",
                    "direction": "IN",
                    "from_number": "6045551234",
                    "to_number": "4165550987",
                    "duration": 45,
                    "pages": 3,
                    "status": "delivered",
                    "fax_file_size": 184320,
                    "did": "4165550987"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
pageint1
countint100
has_morebooltrue
recordsarray
sourcetextdb
producttextVFAXC
product_codetextV0FX0C01
datetimedatetime2026-08-21 14:32:17
directiontextIN
from_numbertext6045551234
to_numbertext4165550987
durationint45
pagesint3
statustextdelivered
fax_file_sizeint184320
didtext4165550987
Back to reference overview ↑

Billing & Payments sipcontrol

List of Invoice Numbers 14:50 #

POST https://api.sipcontrol.cloud/account_number/billing/invoiceslist
Note: Returns a paginated list of invoices for the specified customer within the given date range, sorted by invoice date. Each page returns up to 100 records. Use the pages value in the response to iterate through all pages. Date range: Both from_date and to_date are inclusive and use the billing provider's create-date field. Maximum allowed range is enforced by the underlying date validator — very large ranges may be rejected with an explanatory error. Fields: invoice_id — unique invoice identifier (use with billing_invoiceget for full details) invoice_number — customer-facing invoice number date — invoice creation date due_date — payment due date status — current status (e.g. paid, unpaid, partial, overdue, draft) currency — currency code (e.g. CAD, USD) amount — total invoice amount outstanding — amount still owed paid — amount already paid On error (missing fields, invalid page range, invalid date range, customer not resolvable to a billing client, billing provider unavailable), returns {result:"error", error:"..."} — a plain object at the top level (not wrapped in an array).

Parameters

Param Field Name Type Required Notes
pagePageintRequiredPage number (1-999). 100 records per page.
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer whose invoices you want to list.
from_dateFrom DatedateRequiredStart of the date range in YYYY-MM-DD format (inclusive).
to_dateTo DatedateRequiredEnd of the date range in YYYY-MM-DD format (inclusive).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/billing/invoiceslist';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>',
    'from_date' => '<From Date>',
    'to_date' => '<To Date>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "page": 1,
            "pages": 3,
            "per_page": 100,
            "total": 247,
            "count": 100,
            "records": [
                {
                    "invoice_id": 128049,
                    "invoice_number": "0228728",
                    "date": "2026-05-11",
                    "due_date": "2026-06-10",
                    "status": "paid",
                    "currency": "CAD",
                    "amount": 741.58,
                    "outstanding": 0,
                    "paid": 741.58
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
pageint1
pagesint3
per_pageint100
totalint247
countint100
recordsarray
invoice_idint128049
invoice_numbertext0228728
datedate2026-05-11
due_datedate2026-06-10
statustextpaid
currencytextCAD
amountfloat741.58
outstandingfloat0.00
paidfloat741.58
Back to reference overview ↑

List of Payments Made 14:51 #

POST https://api.sipcontrol.cloud/account_number/billing/paymentslist
Note: Returns a paginated list of payments received from the specified customer within the given date range, sorted by payment date. Each page returns up to 100 records. Use the pages value in the response to iterate through all pages. Date range: Both from_date and to_date are inclusive and use the billing provider's payment-date field. Maximum allowed range is enforced by the underlying date validator — very large ranges may be rejected with an explanatory error. Fields: payment_id — unique payment identifier (use with billing_paymentget for full details) date — payment date amount — payment amount currency — currency code (e.g. CAD, USD) type — payment method (e.g. INTERAC e-Transfer, Credit Card, Cheque, Wire) invoiceid — the invoice this payment was applied to (null if the payment is unapplied or an overpayment credit) note — free-text note recorded with the payment Unapplied payments: Overpayments and prepayments have invoiceid = null and typically appear in the customer's credit balance. Use billing_creditslist to see current credit notes generated from overpayments. On error (missing fields, invalid page range, invalid date range, customer not resolvable to a billing client, billing provider unavailable), returns {result:"error", error:"..."} — a plain object at the top level (not wrapped in an array).

Parameters

Param Field Name Type Required Notes
pagePageintRequiredPage number (1-999). 100 records per page.
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer whose payments you want to list.
from_dateFrom DatedateRequiredStart of the date range in YYYY-MM-DD format (inclusive).
to_dateTo DatedateRequiredEnd of the date range in YYYY-MM-DD format (inclusive).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/billing/paymentslist';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>',
    'from_date' => '<From Date>',
    'to_date' => '<To Date>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "page": 1,
            "pages": 2,
            "per_page": 100,
            "total": 143,
            "count": 100,
            "records": [
                {
                    "payment_id": 84521,
                    "date": "2026-05-11",
                    "amount": 741.58,
                    "currency": "CAD",
                    "type": "INTERAC e-Transfer",
                    "invoiceid": 128049,
                    "note": "Payment received via bank transfer, ref CAE4TCeg"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
pageint1
pagesint2
per_pageint100
totalint143
countint100
recordsarray
payment_idint84521
datedate2026-05-11
amountfloat741.58
currencytextCAD
typetextINTERAC e-Transfer
invoiceidint128049
notetextPayment received via bank transfer, ref CAE4TCeg
Back to reference overview ↑

List of Credits Received 14:52 #

POST https://api.sipcontrol.cloud/account_number/billing/creditslist
Note: Returns a paginated list of credit notes issued to the specified customer within the given date range, sorted by credit note date. Each page returns up to 100 records. Use the pages value in the response to iterate through all pages. Date range: Both from_date and to_date are inclusive and use the billing provider's create-date field. Maximum allowed range is enforced by the underlying date validator — very large ranges may be rejected with an explanatory error. Fields: credit_id — unique credit note identifier (use with billing_creditget for full details) date — credit note creation date amount — credit amount currency — currency code (e.g. CAD, USD) status — current status (e.g. created, sent, applied) notes — free-text notes recorded with the credit (typically includes the source of the credit, such as an overpayment reference) Credit sources: Credit notes are typically generated from overpayments (where a customer paid more than an invoice's balance) or manual credits issued by IXICA operations. The notes field usually references the original transaction that led to the credit. On error (missing fields, invalid page range, invalid date range, customer not resolvable to a billing client, billing provider unavailable), returns {result:"error", error:"..."} — a plain object at the top level (not wrapped in an array).

Parameters

Param Field Name Type Required Notes
pagePageintRequiredPage number (1-999). 100 records per page.
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer whose credit notes you want to list.
from_dateFrom DatedateRequiredStart of the date range in YYYY-MM-DD format (inclusive).
to_dateTo DatedateRequiredEnd of the date range in YYYY-MM-DD format (inclusive).

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/billing/creditslist';
$data = [
    'page' => '<Page>',
    'customer_account_number' => '<Customer Account Number>',
    'from_date' => '<From Date>',
    'to_date' => '<To Date>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "page": 1,
            "pages": 1,
            "per_page": 100,
            "total": 3,
            "count": 3,
            "records": [
                {
                    "credit_id": 128049,
                    "date": "2026-05-11",
                    "amount": 741.58,
                    "currency": "CAD",
                    "status": "created",
                    "notes": "Overpayment: invoice #0228728, INTERAC e-Transfer CAE4TCeg"
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
pageint1
pagesint1
per_pageint100
totalint3
countint3
recordsarray
credit_idint128049
datedate2026-05-11
amountfloat741.58
currencytextCAD
statustextcreated
notestextOverpayment: invoice #0228728, INTERAC e-Transfer CAE4TCeg
Back to reference overview ↑

Get an Invoice 14:53 #

POST https://api.sipcontrol.cloud/account_number/billing/invoiceget
Note: Returns full details for a single invoice, including all line items with per-line tax breakdown. This is the endpoint to call when displaying an invoice detail view to end users or reconciling billing data. Top-level fields: invoice_id — unique invoice identifier invoice_number — customer-facing invoice number date — invoice creation date due_date — payment due date status — current status (e.g. paid, unpaid, partial, overdue, draft) currency — currency code (e.g. CAD, USD) amount — total invoice amount outstanding — amount still owed paid — amount already paid discount — discount amount applied terms — payment terms shown on the invoice notes — free-text notes shown on the invoice po_number — customer PO number if recorded Line item fields: name — service / product name description — line item description qty — quantity billed unit_cost — per-unit price amount — line total (before taxes) taxName1 / taxAmount1 — primary tax name and amount for the line taxName2 / taxAmount2 — secondary tax name and amount (for jurisdictions with two-tier tax, e.g. GST + PST) On error (missing fields, customer not resolvable to a billing client, billing provider unavailable, invoice not found, invoice belongs to a different customer), returns {result:"error", error:"..."} — a plain object at the top level (not wrapped in an array).

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer that owns the invoice.
invoice_idInvoice IDintRequiredThe unique invoice identifier. Obtained from billing_invoiceslist.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/billing/invoiceget';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'invoice_id' => '<Invoice ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "invoice_id": 128049,
            "invoice_number": "0228728",
            "date": "2026-05-11",
            "due_date": "2026-06-10",
            "status": "paid",
            "currency": "CAD",
            "amount": 741.58,
            "outstanding": 0,
            "paid": 741.58,
            "discount": 0,
            "terms": "Net 30",
            "notes": "Thank you for your business.",
            "po_number": "PO-2026-4821",
            "lines": [
                {
                    "name": "SIP Trunk",
                    "description": "Main Trunk - 10 channels",
                    "qty": 1,
                    "unit_cost": 65,
                    "amount": 65,
                    "taxName1": "HST",
                    "taxAmount1": 13,
                    "taxName2": "",
                    "taxAmount2": 0
                }
            ]
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
invoice_idint128049
invoice_numbertext0228728
datedate2026-05-11
due_datedate2026-06-10
statustextpaid
currencytextCAD
amountfloat741.58
outstandingfloat0.00
paidfloat741.58
discountfloat0.00
termstextNet 30
notestextThank you for your business.
po_numbertextPO-2026-4821
linesarray
nametextSIP Trunk
descriptiontextMain Trunk - 10 channels
qtyfloat1
unit_costfloat65.00
amountfloat65.00
taxName1textHST
taxAmount1float13.00
taxName2text
taxAmount2float0.00
Back to reference overview ↑

Get a Payment 14:54 #

POST https://api.sipcontrol.cloud/account_number/billing/paymentget
Note: Returns full details for a single payment, including gateway and transaction identifiers when the payment was collected through an online payment processor. This is the endpoint to call when displaying a payment detail view to end users, reconciling billing data, or auditing a specific transaction. Fields: payment_id — unique payment identifier date — payment date amount — payment amount currency — currency code (e.g. CAD, USD) type — payment method (e.g. INTERAC e-Transfer, Credit Card, Cheque, Wire) invoiceid — the invoice this payment was applied to (null if the payment is unapplied or an overpayment credit) note — free-text note recorded with the payment from_credit — true when the payment was applied from an existing credit note (rather than a new inbound payment) send_client_notification — whether a payment confirmation email was sent to the customer orderkey — internal order key linked to the payment (if any) transactionid — payment gateway transaction ID (present when collected through a processor) gateway — payment gateway identifier (e.g. interac, stripe, paypal) Unapplied payments: Overpayments and prepayments have invoiceid = null and typically appear as a credit note. Use billing_creditslist to see credit notes generated from overpayments. On error (missing fields, customer not resolvable to a billing client, billing provider unavailable, payment not found, payment belongs to a different customer), returns {result:"error", error:"..."} — a plain object at the top level (not wrapped in an array).

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer that owns the payment.
payment_idPayment IDintRequiredThe unique payment identifier. Obtained from billing_paymentslist.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/billing/paymentget';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'payment_id' => '<Payment ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "payment_id": 84521,
            "date": "2026-05-11",
            "amount": 741.58,
            "currency": "CAD",
            "type": "INTERAC e-Transfer",
            "invoiceid": 128049,
            "note": "Payment received via bank transfer, ref CAE4TCeg",
            "from_credit": false,
            "send_client_notification": true,
            "orderkey": "ORD-4821-2026",
            "transactionid": "txn_5a9b3c8f21d0e",
            "gateway": "interac"
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
payment_idint84521
datedate2026-05-11
amountfloat741.58
currencytextCAD
typetextINTERAC e-Transfer
invoiceidint128049
notetextPayment received via bank transfer, ref CAE4TCeg
from_creditboolfalse
send_client_notificationbooltrue
orderkeytextORD-4821-2026
transactionidtexttxn_5a9b3c8f21d0e
gatewaytextinterac
Back to reference overview ↑

Get a Credit Note 14:55 #

POST https://api.sipcontrol.cloud/account_number/billing/creditget
Note: Returns full details for a single credit note, including its current balance, terms, and originating notes. This is the endpoint to call when displaying a credit note detail view to end users or reconciling credit balances. Fields: credit_id — unique credit note identifier credit_number — customer-facing credit note number date — credit note creation date amount — total credit amount currency — currency code (e.g. CAD, USD) status — current status (e.g. created, sent, applied) notes — free-text notes recorded with the credit (typically references the source, such as an overpayment reference) terms — payment / application terms paid — amount of the credit that has already been applied against invoices (0.00 if fully available) accounting_systemid — internal accounting-system identifier for cross-referencing Credit sources: Credit notes are typically generated from overpayments (where a customer paid more than an invoice's balance) or manual credits issued by IXICA operations. The notes field usually references the original transaction that led to the credit. On error (missing fields, customer not resolvable to a billing client, billing provider unavailable, credit not found, credit belongs to a different customer), returns {result:"error", error:"..."} — a plain object at the top level (not wrapped in an array).

Parameters

Param Field Name Type Required Notes
customer_account_numberCustomer Account NumberintRequiredThe IXICA 9-digit account number of the customer that owns the credit note.
credit_idCredit IDintRequiredThe unique credit note identifier. Obtained from billing_creditslist.

Request Example

$url = 'https://api.sipcontrol.cloud/account_number/billing/creditget';
$data = [
    'customer_account_number' => '<Customer Account Number>',
    'credit_id' => '<Credit ID>'
];
$apiKey = 'YOUR_VALID_SIPCONTROL_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "result": "ok",
    "data": [
        {
            "credit_id": 128049,
            "credit_number": "CN-2026-0084",
            "date": "2026-05-11",
            "amount": 741.58,
            "currency": "CAD",
            "status": "created",
            "notes": "Overpayment: invoice #0228728, INTERAC e-Transfer CAE4TCeg",
            "terms": "Applied against next invoice",
            "paid": 0,
            "accounting_systemid": "acct-7f3a9c"
        }
    ]
}

Response Fields

Field Type Example Notes
resulttextok
dataarray
credit_idint128049
credit_numbertextCN-2026-0084
datedate2026-05-11
amountfloat741.58
currencytextCAD
statustextcreated
notestextOverpayment: invoice #0228728, INTERAC e-Transfer CAE4TCeg
termstextApplied against next invoice
paidfloat0.00
accounting_systemidtextacct-7f3a9c
Back to reference overview ↑

SMS Messaging Platform mysms

SMS Send (per recipient) 17:71 #

POST https://api.mysms.ca/send
For messaging platform transactions, use API key from mysms portal
from (string, required): Your assigned SMS DID in E.164 format (e.g., +15145551212). to (string, required): Destination phone number in E.164 format (e.g., +15145550000). text (string, required): Message text.

Parameters

Param Field Name Type Required Notes
fromFrom NumbertextRequiredE164 format From Number (ex: +15145551212)
toTo NumbertextRequiredE164 format To Number (ex: +14165551212)
textMessagetextRequiredThe message being sent

Request Example

$url = 'https://api.mysms.ca/send';
$data = [
    'from' => '<From Number>',
    'to' => '<To Number>',
    'text' => '<Message>'
];
$apiKey = 'YOUR_VALID_MYSMS_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "success": true,
    "code": 200,
    "message": "SMS SENT",
    "message_id": "123456"
}

Response Fields

Field Type Example Notes
successbooltrue
codeint200
messagetextSMS SENT
message_idtext123456
Back to reference overview ↑

SMS Send (bulk) 17:72 #

POST https://api.mysms.ca/send
For messaging platform transactions, use API key from mysms portal
Send the same message (and optional media) to multiple recipients in one request by passing to as a JSON array of E.164 numbers instead of a single string. Use the same fields as a single send, but set to to an array:

Parameters

Param Field Name Type Required Notes
fromFrom NumbertextRequiredex: +15145551212
toTo NumbersarrayRequired"+12025550100", "+12025550101", "+12025550102"
testMessage being senttextRequiredSame text to every recipient

Request Example

$url = 'https://api.mysms.ca/send';
$data = [
    'from' => '<From Number>',
    'to' => [
        [

        ]
    ],
    'test' => '<Message being sent>'
];
$apiKey = 'YOUR_VALID_MYSMS_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "success": true,
    "code": 200,
    "message": "BATCH SMS QUEUED",
    "batch_id": "batch-uuid",
    "queued_recipients": 2
}

Response Fields

Field Type Example Notes
successbooltrue
codeint200
messagetextBATCH SMS QUEUED
batch_idintbatch-uuid
queued_recipientsint2
Back to reference overview ↑

MMS Send 17:73 #

POST https://api.mysms.ca/send
For messaging platform transactions, use API key from mysms portal
Supported content types: image/jpeg, image/jpg, image/png, image/gif, video/mp4, audio/mp3, audio/mpeg, application/pdf, text/plain.
Files should be accessible via HTTPS and within supported size/type limits.

Parameters

Param Field Name Type Required Notes
fromFrom NumbertextRequiredex: +15145551212
toTo NumbertextRequiredex: +15145550000
attachmentsMedia AttachmentsarrayRequired"https://example.com/image1.jpg","https://example.com/image2.png"

Request Example

$url = 'https://api.mysms.ca/send';
$data = [
    'from' => '<From Number>',
    'to' => '<To Number>',
    'attachments' => [
        [

        ]
    ]
];
$apiKey = 'YOUR_VALID_MYSMS_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

[]
Back to reference overview ↑

VFAX Platform mysms

Virtual fax Send 18:75 #

POST https://api.mysms.ca/fax/send
For vfax platform transactions, use API key from mysms portal
from (required): 10-digit North American number, no +1 (e.g., 5145551212). to (required): 10-digit North American number, no +1 (e.g., 5145550000). subject (optional): Up to 255 characters. file or file_url (required): PDF only; ~10 MB max (configurable).

Parameters

Param Field Name Type Required Notes
fromFrom NumbertextRequiredYour number (ex: 5145551212)
toTo NumbertextRequiredRecipient fax Number (ex: 4165551212)
file_urlFile URLurlRequiredhttps://example.com/sample.pdf

Request Example

$url = 'https://api.mysms.ca/fax/send';
$data = [
    'from' => '<From Number>',
    'to' => '<To Number>',
    'file_url' => '<File URL>'
];
$apiKey = 'YOUR_VALID_MYSMS_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "success": true,
    "code": 200,
    "message": "FAX QUEUED",
    "data": [
        {
            "fax_id": 12345,
            "from": "5145551212",
            "to": "5145550000",
            "pages": 1,
            "status": "pending"
        }
    ]
}

Response Fields

Field Type Example Notes
successbooltrue
codeint200
messagetextFAX QUEUED
dataarray
fax_idint12345
fromtext5145551212
totext5145550000
pagesint1
statustextpending
Back to reference overview ↑

Get Delivery Status 18:76 #

POST https://api.mysms.ca/fax/{fax_id}
For vfax platform transactions, use API key from mysms portal
Poll delivery state for a fax returned from Send Fax (data.fax_id). Only outbound jobs are returned; inbound history IDs respond with 404.

Parameters

No parameters required.

Request Example

$url = 'https://api.mysms.ca/fax/{fax_id}';
$data = [

];
$apiKey = 'YOUR_VALID_MYSMS_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "success": true,
    "code": 200,
    "message": "OK",
    "data": [
        {
            "fax_id": 12345,
            "direction": "outbound",
            "status": "pending",
            "from": "5145551212",
            "to": "5145550000",
            "subject": "Test fax",
            "pages": 1,
            "created_at": "2026-05-08T12:00:00+00:00",
            "updated_at": "2026-05-08T12:00:05+00:00",
            "completed_at": "null"
        }
    ]
}

Response Fields

Field Type Example Notes
successbooltrue
codeint200
messagetextOK
dataarray
fax_idint12345
directiontextoutbound
statustextpending
fromtext5145551212
totext5145550000
subjecttextTest fax
pagesint1
created_atdatetime2026-05-08T12:00:00+00:00
updated_atdatetime2026-05-08T12:00:05+00:00
completed_atdatetimenull
Back to reference overview ↑

Inbound Fax Delivery 18:77 #

POST https://api.mysms.ca/fax
If a DID has a customer_fax_webhook_url configured, we forward an event upon successful receipt.
The media_url is a temporary signed AWS S3 URL that expires after 24 hours. Download or process the fax file promptly after receiving the webhook.
Delivery failures are logged; upstream webhook acknowledgement is not blocked.

Parameters

No parameters required.

Request Example

$url = 'https://api.mysms.ca/fax';
$data = [

];
$apiKey = 'YOUR_VALID_MYSMS_API_KEY';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 20,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Response Example

{
    "type": "fax.received",
    "fax_id": 12345,
    "from": "5145550000",
    "to": "5145551212",
    "pages": 2,
    "status": "received",
    "received_at": "2025-08-22T12:34:56Z",
    "media_url": "https://s3.amazonaws.com/bucket/faxes/2025/08/22/fax_12345.pdf?X-Amz-Signature=..."
}

Response Fields

Field Type Example Notes
typetextfax.received
fax_idint12345
fromtext5145550000
totext5145551212
pagesint2
statustextreceived
received_atdatetime2025-08-22T12:34:56Z
media_urlurlhttps://s3.amazonaws.com/bucket/faxes/2025/08/22/fax_12345.pdf?X-Amz-Signature=...
Back to reference overview ↑
IXICA Communications Inc. · API developer reference

Ready to build?

Talk to our team about API access, pricing, and the fastest path to onboarding.