Dokumentace API
Odesílání SMS a ověřování telefonních čísel jedním voláním. Základní adresa je https://sms.wopro.cz/api/v1.
Začínáme
Všechna volání jsou JSON, odpověď má vždy pole ok. Při chybě je ok:false, kód v error a lidská věta česky v message.
- Přihlas se účtem Wopro a ověř totožnost (KYC), bez toho se neodesílá.
- Dobij kredit (od 50 Kč, kartou přes GoPay).
- V části API klíče vytvoř klíč. Zobrazí se celý jen jednou.
# uložit klíč na server do proměnné prostředí export WOPRO_SMS_KEY=sk_live_... # ověřit, že klíč funguje (nic neúčtuje) curl https://sms.wopro.cz/api/v1/ping -H "Authorization: Bearer $WOPRO_SMS_KEY" # poslat zprávu (účtuje se z kreditu) curl https://sms.wopro.cz/api/v1/sms \ -H "Authorization: Bearer $WOPRO_SMS_KEY" \ -H "Content-Type: application/json" \ -d '{"to":"+420777123456","text":"Dobrý den, objednávka je na cestě."}'
Ověření klíčem
Pošli klíč v hlavičce Authorization: Bearer sk_live_… (nebo X-API-Key). Každá zpráva odeslaná klíčem se účtuje z kreditu tvé organizace. Klíč uvidíš celý jen při vytvoření, uchovej ho na serveru, nikdy v aplikaci v telefonu ani na webu. Když unikne, zruš ho v části API klíče a vytvoř nový.
Odeslat SMS POST /v1/sms
| Pole | Popis |
|---|---|
to * | Telefonní číslo s předvolbou (+420 777 123 456) nebo devítimístné české číslo. Posílá se jen na mobilní čísla v povolených zemích. |
text * | Text zprávy. Nejvýš 6 částí (viz ceník). |
sender | Odesílatel (jméno na telefonu). Bez něj se použije výchozí. Vlastní jméno musí být schválené. |
encoding | auto (výchozí, diakritika se zachová), gsm (diakritika se odstraní, zpráva je kratší a levnější), unicode. |
reference | Tvoje označení (číslo objednávky). Vrátí se v odpovědi i ve webhooku. |
idempotency_key | Stejný klíč = stejná zpráva. Opakování po chybě sítě nikdy nepošle dvě SMS (nebo hlavička Idempotency-Key). |
callback_url | https adresa pro doručenku jen k této zprávě. Jinak se použije webhook z nastavení. |
// odpověď 200
{
"ok": true,
"message": {
"id": "msg_9f2c4a7d51e08b3a6c1d4e7f",
"to": "+420777123456",
"sender": "SMSpro",
"status": "sent",
"parts": 1,
"encoding": "ucs2",
"price_czk": 1.4,
"reference": null,
"created_at": "2026-10-14T09:20:11+00:00",
"error": null
}
}
Stavy: queued čeká, sent předáno operátorovi, delivered doručeno, undelivered nedoručeno (telefon vypnutý), failed a rejected odmítnuto (cena se vrací).
Odhad ceny POST /v1/sms/estimate
Tělo {"text":"…","to":"+420…","encoding":"auto"}. Vrací parts, chars, encoding a price_czk. Nic se neodešle ani neúčtuje.
Stav a historie
GET /v1/sms/{id} vrátí zprávu. GET /v1/sms?limit=20&status=delivered&reference=…&before=msg_… vrací seznam od nejnovějších a next_before pro další stránku. GET /v1/balance vrací zůstatek kreditu, GET /v1/pricing ceník (bez klíče).
Ověření telefonního čísla kódem
Nemusíš kódy vyrábět ani hlídat. Kód má platnost (výchozí 5 minut), nejvýš 5 pokusů o zadání, nový kód zneplatní starý a na jedno číslo jdou nejvýš 3 kódy za 10 minut. Odeslání kódu se účtuje jako jedna SMS.
# 1. pošli kód curl https://sms.wopro.cz/api/v1/verify -H "Authorization: Bearer $WOPRO_SMS_KEY" -H "Content-Type: application/json" \ -d '{"to":"+420777123456","brand":"Vaše firma"}' # → {"ok":true,"verification":{"id":"ver_…","status":"pending","expires_at":"…","resend_after":30}} # 2. zkontroluj, co člověk opsal curl https://sms.wopro.cz/api/v1/verify/check -H "Authorization: Bearer $WOPRO_SMS_KEY" -H "Content-Type: application/json" \ -d '{"id":"ver_…","code":"482913"}' # → {"ok":true,"verification":{"status":"verified","valid":true,…}}
Volitelná pole startu: length (4 až 8), ttl (60 až 900 s), template (text s {code}, {brand}, {minutes}), sender, reference. Kontrolu jde zadat i podle čísla: {"to":"…","code":"…"}. Text zprávy se u nás ukládá se zakrytým kódem.
Webhooky
Adresu nastavíš v účtu (Nastavení) nebo u zprávy v callback_url. Při každé změně stavu (sent, delivered, undelivered, failed) pošleme POST s JSON {"type":"sms.delivered","created":1791970000,"data":{…zpráva…}}. Odpověz kódem 2xx. Při chybě to zkusíme znovu za 30 s, 2 min, 10 min, 1 h a 6 h.
Pravost ověř podpisem v hlavičce X-SMSpro-Signature: t=<čas>,v1=<hex>, kde v1 je HMAC-SHA256 z řetězce čas.tělo s tvým tajemstvím webhooku:
// PHP
[$t, $v1] = array_map(fn($p) => explode('=', $p, 2)[1], explode(',', $_SERVER['HTTP_X_SMSPRO_SIGNATURE']));
$body = file_get_contents('php://input');
$ok = hash_equals(hash_hmac('sha256', $t . '.' . $body, $tajemstvi), $v1) && abs(time() - (int)$t) < 300;
Limity a ochrana
- Jen mobilní čísla a jen povolené země (výchozí CZ a SK, další povolíš v nastavení).
- Výchozí limity: 60 zpráv za minutu, 300 za den a 300 Kč za den na účet. Zvýšení na požádání.
- Na jedno číslo nejvýš 6 běžných zpráv za hodinu (ověřovací kódy mají přísnější pravidla výše).
- Zprávy odešleme až po stržení kreditu. Když zpráva natrvalo selže, cena se vrátí.
Chyby
| Stav | Kód | Význam |
|---|---|---|
| 400, 422 | invalid_number, empty_text, too_long, sender_not_approved, country_not_allowed, country_not_supported | Chybný vstup, v message je důvod. |
| 401 | missing_api_key, invalid_api_key, revoked_api_key | Klíč chybí, nesedí nebo byl zrušen. |
| 402 | insufficient_credit | Nedostatek kreditu, dobij ho v účtu. |
| 403 | org_blocked | Účet je zablokovaný. |
| 403 | kyc_required | Odesílá se až po ověření totožnosti (KYC). Dokonči ověření v účtu. |
| 429 | rate_limited, daily_limit, daily_spend_limit, number_rate_limited, too_soon | Limit. Hlavička Retry-After a pole retry_after říkají, za kolik vteřin to zkusit. |
| 503 | billing_unavailable, sending_disabled, kyc_unavailable | Dočasně nejde strhnout kredit nebo je odesílání vypnuté. Zkus za chvíli, stejným idempotency_key. |
Služby Wopro
Aplikace platformy Wopro (například Eshopland nebo Onlinepet) volají Wopro SMS napřímo, bez API klíče: POST /v1/service/sms, POST /v1/service/verify, POST /v1/service/verify/check a GET /v1/service/balance. Každé volání nese ?service_slug=<služba>&org=<organizace> a hlavičku X-Service-Secret (tajemství služby Wopro). Parametr org jde vynechat: pak se účtuje organizaci, kterou má služba nastavenou na serveru Wopro SMS (aplikace platformy tak nic dalšího neposílají).
- Kdo platí: organizace z
org(uživatel, za kterého aplikace posílá). Strhne se z jejího kreditu Wopro, a jen když to organizace povolila na stránce Aplikace Wopro. Jinak odpověď403 org_not_allowed. - Kolik: cenu určuje vždy Wopro SMS podle ceníku a vrací ji v odpovědi jako
price_czk. Aplikace může v těle poslatmax_price_czk, tedy nejvyšší cenu, kterou uživatel odsouhlasil. Vyjde-li zpráva dráž, přijde422 price_exceeds_limita nic se neodešle ani nestrhne. - Kdo to uvidí: zpráva nese název aplikace (
servicev odpovědi). Organizace ji vidí v Historii se sloupcem Odkud a útratu po aplikacích na stránce Aplikace Wopro, správce Wopro SMS vidí útratu každé aplikace i jednotlivých organizací přes ni. - KYC: u volání od aplikací Wopro se nevyžaduje, odpovídá za něj aplikace.
POST https://sms.wopro.cz/api/v1/service/sms?service_slug=czechday&org=3F2A…(32 znaků)
X-Service-Secret: <tajemství služby>
{"to":"+420777123456","text":"Dobrý den, váš lístek je připravený.","reference":"order-1042","max_price_czk":1.4}
Máš otázku, kterou tu nenajdeš? Napiš na [email protected].