All SMS and Billing API resources in one place - exact endpoints, complete Postman descriptions, headers, request bodies, response examples, and ready-to-use code.
1curl --request POST \2 --url api.ubill.dev/v1/sms/send \3 --header 'key: ••••••••'
200 OK{ "statusID": 0, "message": "SMS Sent" }
GETTING STARTED
Working with the uBill API
UBill API - provides programmatic access to our resources. You will be able to integrate our service into your system and communicate with clients easily.
API examples
API implementations in different languages, provided by different sources.
Requests to protected endpoints must include your company’s secret API key. Most endpoints accept it in the key header; several legacy GET/XML endpoints use the key query parameter.
Never expose your API key
Store the key in a server-side environment variable. Never place it in frontend JavaScript, a mobile application, or a public Git repository.
Request headers
key: YOUR_API_KEY
Content-Type: application/json
02
CONVENTIONS
Formats and statuses
The API primarily returns JSON responses. The statusID field identifies the result; a successful request has the value 0. The XML endpoint returns an XML response.
0SMS sent
1Received
2Not delivered
3Awaiting status
4Error
API REFERENCE
All resources and endpoints
The information below is synchronized with the latest version of the public Postman collection.
API GROUP
SMS API
10 endpoint
SMS API / brandName Create
brandName Create
API key · Header
POSThttps://api.ubill.dev/v1/sms/brandNameCreate
Response status
statusID
Description
0
BrandName Created
10
The brandName field is empty
20
The minimum number of characters in the brandName must be 2 and the maximum number 11
30
Unauthorized markings are used in the brandName
40
brandName has already been added
50
Wait for the last added brandName to be authenticated
Secret API key used to authenticate requests. The key can be viewed and managed in the company settings.
brandID
Unique brand identifier within the system.
numbers
Comma-separated list of mobile phone numbers. Numbers must be in international format without00 or +.
text
SMS message content. Any Unicode characters are supported.
Optional Parameters
Parameter
Description
stopList
stopList=false - disables stop list validation. The message will be sent even if the recipient number exists in the stop list.
otp
otp=true - marks the message as an OTP (one-time password / verification code). OTP messages are processed with the highest priority. ⚠️ Must be used only for authentication codes.
sendTime
Scheduled SMS delivery time. Format: Y-m-d H:i (example: 2026-02-01 23:30). The specified time must be in the future. If omitted, the message is sent immediately.
callbackUrl
Individual callback URL for this SMS request. Works only if a default callback URL is configured globally in the API application settings.
Notes
OTP messages are intended strictly for authentication flows (login, verification, password reset).
Misuse of the otp parameter may result in delivery restrictions or account limitations.
Response Status
statusID
Description
0
SMS Sent
10
brandID not found
20
Numbers not found
30
Empty message text
40
Not enough SMS
50
Valid numbers not found
60
Invalid sendTime format. Use Y-m-d H:i
90
JSON Error
99
General error
⚠️ GET Method Limitations
The API does not enforce a strict limit on the number of recipient numbers.
Actual limits are imposed by URL and HTTP header size constraints (Cloudflare, proxies, browsers).
Practical Limits
✅ Up to ~1500 numbers per request works reliably.
⚠️ Around 2000+ numbers may result in Header overflow errors.
These errors occur before the request reaches the API, at the HTTP / proxy level.
Recommendation
Use GET only for small to medium requests.
For large recipient lists, always use POST.
URL parameters 5
keyqueryYOUR_API_KEY
brandIDquery1
numbersquery9955XXXXXXXX,9955XXXXXXXX
textquerymessage
stopListqueryfalse
Code examples
cURL · PHP · JavaScript
cURL
curl --request GET \
--url 'https://api.ubill.dev/v1/sms/send?key=YOUR_API_KEY&brandID=1&numbers=9955XXXXXXXX,9955XXXXXXXX&text=message&stopList=false'
Array of mobile phone numbers. Numbers must be in international format without00 or +. Example: ["9955XXXXXXXX","9955XXXXXXXX"]
text
SMS message content. Any Unicode characters are supported.
Optional Parameters (JSON Body)
Parameter
Description
stopList
false - disables stop list validation. The message will be sent even if the recipient number exists in the stop list.
otp
true - marks the message as an OTP (one-time password / verification code). OTP messages are processed with the highest priority. ⚠️ Must be used only for authentication codes.
sendTime
Scheduled SMS delivery time. Format: Y-m-d H:i (example: "2026-02-01 23:30"). Must be in the future. If omitted, the message is sent immediately.
callbackUrl
Individual callback URL for this SMS request. Works only if a default callback URL is configured globally in the API application settings.
Notes
OTP messages are intended strictly for authentication flows (login, verification, password reset).
Misuse of the otp parameter may result in delivery restrictions or account limitations.
Response Status
statusID
Description
0
SMS Sent
10
brandID not found
20
Numbers not found
30
Empty message text
40
Not enough SMS
50
Valid numbers not found
60
Invalid sendTime format. Use Y-m-d H:i
90
JSON Error
99
General error
⚠️ Limits & Notes
Max request body size: 100 MB → Requests exceeding this size will be rejected.
For large SMS batches, split requests into smaller chunks to avoid timeouts or memory issues.
Use stopList to avoid sending messages to blocked numbers.
Practical Observation from Testing:
In our tests, SMS messages were successfully sent to up to 500,000 numbers in a single request. Sending requests above this number may lead to memory, timeout, or request size issues. Actual limits may vary depending on text length, encoding, and server load.
Recommendation:
For safe and reliable operation, it is recommended to limit requests to around 100,000 numbers per batch.
Request headers 2
Key
Value
Source
key
YOUR_API_KEY
Authentication
Content-Type
application/json
Header
Request body JSON
Request body
{
"brandID": 1,
"numbers": [
9955XXXXXXXX,
9955XXXXXXXX
],
"text": "Message",
"stopList": false, // Enable/disable checking numbers in the stop list
"sendTime": "2026-02-01 23:01" // sendTime (optional)
}
Array of mobile phone numbers. Numbers must be in international format without00 or +. Example: ["9955XXXXXXXX","9955XXXXXXXX"]
text
SMS message content. Any Unicode characters are supported.
Optional Parameters (JSON Body)
Parameter
Description
stopList
false - disables stop list validation. The message will be sent even if the recipient number exists in the stop list.
otp
true - marks the message as an OTP (one-time password / verification code). OTP messages are processed with the highest priority. ⚠️ Must be used only for authentication codes.
sendTime
Scheduled SMS delivery time. Format: Y-m-d H:i (example: "2026-02-01 23:30"). Must be in the future. If omitted, the message is sent immediately.
callbackUrl
Individual callback URL for this SMS request. Works only if a default callback URL is configured globally in the API application settings.
Notes
OTP messages are intended strictly for authentication flows (login, verification, password reset).
Misuse of the otp parameter may result in delivery restrictions or account limitations.
Response Status
statusID
Description
0
SMS Sent
10
brandID not found
20
Numbers not found
30
Empty message text
40
Not enough SMS
50
Valid numbers not found
60
Invalid sendTime format. Use Y-m-d H:i
90
JSON Error
99
General error
⚠️ Limits & Notes
Max request body size: 100 MB → Requests exceeding this size will be rejected.
For large SMS batches, split requests into smaller chunks to avoid timeouts or memory issues.
Use stopList to avoid sending messages to blocked numbers.
Practical Observation from Testing:
SMS per recipient
Maximum numbers per request
1
400,000
2
200,000
3
150,000
4
120,000
5
100,000
6
50,000
Actual limits may vary depending on text length, encoding, and server load.
Recommendation:
For safe and reliable operation, it is recommended to limit requests to the numbers listed above per batch, according to the number of concatenated SMS messages being sent.