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
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
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
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
Back to reference overview ↑
List all DID
2:41
#
POST
https://api.sipcontrol.cloud/account_number/did/list
Parameters
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
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
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
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
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
Back to reference overview ↑
List all TFN
3:42
#
POST
https://api.sipcontrol.cloud/account_number/tfn/list
Parameters
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
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
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
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
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
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
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
Back to reference overview ↑
E911 sipcontrol
Adding a new Listing
1:2
#
POST
https://api.sipcontrol.cloud/account_number/e911/new
Parameters
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
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
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
Back to reference overview ↑
Deleting an existing Listing
1:4
#
POST
https://api.sipcontrol.cloud/account_number/e911/delete
Parameters
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
Back to reference overview ↑
Search for an existing Listing
1:20
#
POST
https://api.sipcontrol.cloud/account_number/e911/get
Parameters
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Back to reference overview ↑
Update an existing SIP Account
10:34
#
POST
https://api.sipcontrol.cloud/account_number/sip_account/update
Parameters
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
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
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
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
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
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
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
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
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
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
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
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
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
Back to reference overview ↑
Remove SMS from a TN
5:18
#
POST
https://api.sipcontrol.cloud/account_number/sms/delete
Parameters
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
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
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
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
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
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
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
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
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
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
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
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
Back to reference overview ↑
Status of Webhook
5:66
#
POST
https://api.sipcontrol.cloud/account_number/sms/webhookstatus
Parameters
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
Back to reference overview ↑
Set Webhook Values
5:67
#
POST
https://api.sipcontrol.cloud/account_number/sms/webhookset
Parameters
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
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
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
Back to reference overview ↑
Network Status & Outage Information
12:45
#
POST
https://api.sipcontrol.cloud/account_number/tool/networkstatus
Parameters
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
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
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
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
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
Back to reference overview ↑
Get Ticket Status
12:69
#
POST
https://api.sipcontrol.cloud/account_number/tool/ticketget
Parameters
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
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
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
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
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
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
Back to reference overview ↑
Long Distance (International Calling) Rates
12:80
#
POST
https://api.sipcontrol.cloud/account_number/tool/ldrates
Parameters
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
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
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
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
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
Back to reference overview ↑
SMS CDR
13:56
#
POST
https://api.sipcontrol.cloud/account_number/cdr/smsget
Parameters
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
Back to reference overview ↑
VFAX CDR
13:58
#
POST
https://api.sipcontrol.cloud/account_number/cdr/vfaxget
Parameters
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Back to reference overview ↑
IXICA Communications Inc. · API developer reference