For Developers

API Documentation

One REST endpoint for everything: send SMS, query delivery reports and check your balance. JSON in, JSON out.

Base URL & Authentication

https://sms.uipapp.com/api/v1/hub/

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:

auth
Authorization: Bearer YOUR_API_KEY

# Alternative: include "api_key": "YOUR_API_KEY" in the JSON body

Security — IP Allowlist

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.

ip-allowlist
# 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" }
Leave the allowlist empty to accept requests from any IP. We recommend enabling it for production servers.

POST Send SMS

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.

ParameterTypeDescription
actionREQUIREDstring"send"
numbersREQUIREDstring[]Recipient numbers in international format, e.g. ["+905301234567", "+4915123456789"].
messageREQUIREDstringMessage text. Long messages are billed by SMS part count per standard operator rules.
originOPTIONALstringSender ID, where the destination country and your account allow it.
send-sms
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"
  }'
response
{
  "status": "success",
  "campaign_id": "17529012345678",
  "message": "Mesaj başarıyla işleme alındı."
}

POST Sending OTP codes

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.

send-otp
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"
OTP mode and your template are configured on your account — contact us once and it works for every send afterwards.

POST Delivery Reports

Returns the current delivery status of a campaign, number by number. Use the campaign_id returned by the send call.

ParameterTypeDescription
actionREQUIREDstring"reports"
campaign_idREQUIREDstringThe campaign ID returned by the send call.
reports
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" }
  ]
}

POST Balance

Returns your current credit balance (domestic credits) and USD balance (international sending).

balance
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.

SMPP v3.4 Connection

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.

ParameterValue
Hostprovided on request
Portprovided on request
System IDissued per account
Passwordissued per account
source_addr_ton / npiAlphanumeric 5 / 0 · Numeric 1 / 1
Data Coding0 (GSM-7) · 8 (UCS-2)
Delivery Reportsset registered_delivery: 1
SMPP is enabled per account after review. Contact us to request access — we'll share your host, port and credentials once your account is approved.

Status values & errors

Per-number statuses in delivery reports:

StatusDescription
BekliyorQueued — waiting to be sent.
Onay BekliyorHeld for manual approval — hit a limit or the word filter.
İşleniyorProcessing — being handed to the operator.
Rapor BekleniyorSent — waiting for the operator's delivery confirmation.
İletildiDelivered 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.
ReddedildiRejected — blacklist, unauthorised route or insufficient balance.
İptal EdildiCancelled and refunded — stopped by you or an admin.

Errors always come back in the same shape, with an explanatory message:

error
{ "status": "error", "message": "Yetersiz kredi …" }
Also available: webhook delivery reports pushed to your system, SMPP connectivity and a Mutlucell-compatible XML endpoint for drop-in migration. Contact us to enable any of these for your account.

Get your API key today

Start sending within minutes. Reach us on WhatsApp or Telegram — real humans answer.