One REST endpoint for everything: send SMS, query delivery reports and check your balance. JSON in, JSON out.
All operations go to this single endpoint as an HTTP POST with a JSON body. The operation is selected with the action field. Authentication uses the API key from your panel (Settings → API), sent as a Bearer token:
Authorization: Bearer YOUR_API_KEY # Alternative: include "api_key": "YOUR_API_KEY" in the JSON body
For server-to-server integrations you can lock API access to a fixed set of IP addresses. Add your server IPs to the allowlist in your panel (Settings → API); any request from an address that is not on the list is rejected before it is processed — even if the API key is valid.
# Panel → Settings → API → Allowed IPs 203.0.113.10 203.0.113.11 # A request from any other IP is rejected: { "status": "error", "message": "Yetkisiz IP adresi" }
Sends the same message to one or more numbers. Numbers should be in international format (with country code). The response returns a campaign_id you use to query the delivery report.
| Parameter | Type | Description |
|---|---|---|
| actionREQUIRED | string | "send" |
| numbersREQUIRED | string[] | Recipient numbers in international format, e.g. ["+905301234567", "+4915123456789"]. |
| messageREQUIRED | string | Message text. Long messages are billed by SMS part count per standard operator rules. |
| originOPTIONAL | string | Sender ID, where the destination country and your account allow it. |
curl -X POST https://sms.uipapp.com/api/v1/hub/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "action": "send", "numbers": ["+905301234567"], "message": "Hello from UIPAPP!", "origin": "UIPAPP" }'
{
"status": "success",
"campaign_id": "17529012345678",
"message": "Mesaj başarıyla işleme alındı."
}
No separate endpoint is needed. When OTP mode is enabled on your account, a message consisting only of digits, sent to a small number of recipients, is automatically treated as an OTP: your account's OTP template is applied around the code and the message is processed on the priority lane.
curl -X POST https://sms.uipapp.com/api/v1/hub/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "action": "send", "numbers": ["+905301234567"], "message": "482913" }' # Template on your account, e.g. "Your verification code: {{CODE}}" # → user receives: "Your verification code: 482913"
Returns the current delivery status of a campaign, number by number. Use the campaign_id returned by the send call.
| Parameter | Type | Description |
|---|---|---|
| actionREQUIRED | string | "reports" |
| campaign_idREQUIRED | string | The campaign ID returned by the send call. |
curl -X POST https://sms.uipapp.com/api/v1/hub/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "action": "reports", "campaign_id": "17529012345678" }' → 200 OK { "status": "success", "campaign_id": "17529012345678", "date": "17-07-2026 14:05", "general_status": "completed", "details": [ { "number": "905301234567", "status": "İletildi" } ] }
Returns your current credit balance (domestic credits) and USD balance (international sending).
curl -X POST https://sms.uipapp.com/api/v1/hub/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "action": "balance" }' → 200 OK { "status": "success", "balance": 15200, "balance_usd": 248.75, "billing_mode": "adet" }
billing_mode shows how your account is billed — "adet" (per-SMS credits) or USD.For high-throughput sending, SMPP is available on request and provisioned per account. Once you request access and are approved, we provide the connection endpoint (host & port) and your credentials for a dedicated binding. The protocol settings below apply to all SMPP connections.
| Parameter | Value |
|---|---|
| Host | provided on request |
| Port | provided on request |
| System ID | issued per account |
| Password | issued per account |
| source_addr_ton / npi | Alphanumeric 5 / 0 · Numeric 1 / 1 |
| Data Coding | 0 (GSM-7) · 8 (UCS-2) |
| Delivery Reports | set registered_delivery: 1 |
Per-number statuses in delivery reports:
| Status | Description |
|---|---|
| Bekliyor | Queued — waiting to be sent. |
| Onay Bekliyor | Held for manual approval — hit a limit or the word filter. |
| İşleniyor | Processing — being handed to the operator. |
| Rapor Bekleniyor | Sent — waiting for the operator's delivery confirmation. |
| İletildi | Delivered to the handset. |
| Zaman Aşımı | Timed out — accepted as delivered after 48h with no operator report. |
| Hatalı | Failed — number off, invalid or returned by the operator. |
| Reddedildi | Rejected — blacklist, unauthorised route or insufficient balance. |
| İptal Edildi | Cancelled and refunded — stopped by you or an admin. |
Errors always come back in the same shape, with an explanatory message:
{ "status": "error", "message": "Yetersiz kredi …" }
Start sending within minutes. Reach us on WhatsApp or Telegram — real humans answer.