Documentație API
API-ul SMSPro foloseste REST peste JSON ca interfata principala si are adaptoare HTTP GET/form POST si SOAP SendSms pentru sisteme legacy. Aceeasi cheie API, aceleasi reguli de suprimare, credite si rate limiting se aplica tuturor. API-ul acopera trimiterea SMS, bulk, evenimente ecommerce, OTP, colete si starea confirmarilor de comanda.
Start Rapid
Generați o cheie în aplicație, apoi:
curl -X POST https://smspro.ro/api/v1/sms/send \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{"to": "+40712345678", "message": "Comanda 1042 a fost expediata."}'Endpoint-uri API
/api/v1/sms/sendTrimite un SMSTrimiți: to, message, from
Primești: message_id, segments, credits, balance, status
Raspunde 409 daca destinatarul s-a dezabonat si 402 daca nu sunt credite.
/api/v1/http/sendTrimite un SMS prin HTTP GET pentru sisteme legacyTrimiți: to, message, from
Primești: message_id, segments, credits, balance, status
Este un adaptor de compatibilitate. Cheia ramane in Authorization sau x-api-key, nu in URL, ca sa nu ajunga in loguri de proxy/browser. Pentru integrari noi folositi REST JSON.
/api/v1/http/sendTrimite un SMS prin formular HTTP sau JSONTrimiți: to, message, from, apiKey
Primești: message_id, segments, credits, balance, status
/api/v1/soapDescarca descrierea WSDL pentru clientii SOAPPrimești: WSDL
/api/v1/soapCompatibilitate SOAP pentru operatia SendSmsTrimiți: to, message, from, apiKey
Primești: success, messageId, providerId, to, segments, credits, balance, status
SOAP este tradus intern in acelasi flux ca REST. Nu exista un motor separat de trimitere si nu ocoleste regulile API.
/api/v1/sms/bulkTrimite mai multe mesaje intr-un apelTrimiți: messages[].to, messages[].text, messages[].from
Primești: total, sent, failed, rejected, credits_used, balance, results
Accepta si text/csv cu antetul to,from,message. Maximum 250 de mesaje per apel; peste atat este o campanie.
/api/v1/eventsRaporteaza un eveniment din magazinTrimiți: event, reference, phone, data
Primești: scheduled, skipped, cancelled
Nu trimite nimic in timpul cererii. Un eveniment necunoscut este respins cu lista celor acceptate.
/api/v1/eventsEvenimentele pe care platforma le intelegePrimești: events
/api/v1/otp/sendTrimite un cod de unica folosintaTrimiți: phone, purpose, length, ttlSeconds, template, senderId
Primești: requestId
Codul nu este returnat niciodata apelantului si nu apare in loguri. Un API care da codul inapoi face codul inutil.
/api/v1/otp/verifyVerifica un cod de unica folosintaTrimiți: code, requestId, phone, purpose
Primești: valid
Raspunde doar valid sau invalid. Motivul esecului nu este returnat: a spune expirat in loc de gresit confirma ca forma codului era buna.
/api/v1/shipmentsInregistreaza un colet sau raporteaza-i stareaTrimiți: courier, awb, phone, reference, status, occurredAt, location
Primești: shipmentId, trackingUrl, status, automationsScheduled
Acelasi endpoint pentru ambele, pentru ca magazinul le face din acelasi loc in cod. Statusul accepta si formularea curierului, si vocabularul platformei.
/api/v1/shipmentsCurierii acceptati si statusurile recunoscutePrimești: couriers[], statuses[]
/api/v1/orders/{reference}/confirmationPot expedia comanda asta?Primești: exists, status, shouldShip, needsHumanReview
Intrebati inainte de a genera AWB-ul. Daca nu a fost pusa nicio intrebare pentru comanda, raspunsul spune ca nimic nu o blocheaza.
Chei stocate ca hash
Cheia începe cu sk_ și se trimite ca Bearer. Nu poate fi recitită după generare.
Webhooks
Două evenimente, ambele emise de cod. Se configurează din aplicație.
Limite pe cheie
Listă de adrese IP permise și limită de cereri pe minut, per cheie.
Evenimente de webhook
Exact acestea două se trimit. Numele evenimentului vine într-un antet, ca să puteți ramifica fără să desfaceți corpul.
shipment.statusLa fiecare schimbare confirmata de stare a unui colet.order.confirmation.resolvedCand o confirmare de ramburs sau de adresa primeste raspuns. Contine shouldShip.Protocoale suportate
REST peste JSON
HTTP GET/POST pentru sisteme legacy
SOAP SendSms de compatibilitate
Incarcare in masa prin JSON sau CSV
Webhooks semnate, catre adresa dumneavoastra
Autentificare
Cheia incepe cu sk_ si se trimite ca Authorization: Bearer. Este acceptat si antetul x-api-key, iar doua endpoint-uri accepta cheia si in corpul cererii, pentru integrari vechi. Nu folositi varianta din corp la integrari noi: cheile ajunse in corpuri de cerere ajung in loguri.
Cheia este stocata ca hash, nu in clar, deci nu poate fi recitita dupa generare. Daca o pierdeti, generati alta. O cheie poate avea o lista de adrese IP permise si o limita de cereri pe minut; depasirea limitei raspunde 429 cu antetul Retry-After.
- 401 - cheie lipsa, invalida, inactiva sau expirata.
- 403 - adresa IP nu este pe lista permisa a cheii.
- 429 - limita de cereri pe minut depasita.
- 402 - credite insuficiente pentru mesajul cerut.
Webhooks
Webhook-urile se creeaza din aplicatie, nu prin API, si nu exista un endpoint public pentru crearea lor. Fiecare livrare poarta numele evenimentului intr-un antet, ca sa puteti ramifica fara sa desfaceti corpul.
Se trimit exact doua evenimente. Lista este derivata din apelurile care exista in cod: candva ecranul oferea sapte evenimente pe care nimic nu le emitea, iar cine se abona astepta la infinit un apel care nu venea niciodata.
Compatibilitate si limite
Nu exista endpoint public pentru soldul de credite, pentru programarea unui mesaj, pentru starea unui mesaj dupa id si nici pentru contacte. Soldul vine inapoi in raspunsul trimiterii, programarea se face din campanii, iar starea mesajului ajunge la dumneavoastra prin webhook, nu prin interogare repetata.
Pentru sisteme legacy exista acum HTTP GET/form POST si o interfata SOAP SendSms. Ambele sunt adaptoare peste acelasi flux REST canonic; pentru integrari noi recomandarea ramane REST JSON.
Întrebări frecvente
- Unde gasesc cheia API?
- Se genereaza din aplicatie, din sectiunea de chei API a organizatiei. Este afisata o singura data, la creare: platforma pastreaza doar hash-ul ei, deci nu poate fi recitita ulterior.
- Cum aflu daca un mesaj a fost livrat?
- Nu prin interogare repetata: nu exista endpoint pentru starea unui mesaj dupa id. Raportul de livrare ajunge de la operator la furnizor si de acolo in platforma, care actualizeaza mesajul. Pentru colete si pentru confirmari de comanda puteti primi evenimentele pe webhook.
- Cate mesaje pot trimite intr-un singur apel in masa?
- Cel mult 250. Limita este data de cat apuca sa termine o singura invocare inainte de expirarea functiei. Ce depaseste atat este o campanie, care este procesata pe loturi de un proces separat si poate fi reluata.
- Pot cere inapoi codul OTP trimis?
- Nu. Codul exista in exact doua locuri: pe telefonul clientului si ca hash cu sare in baza de date. Nu este returnat, nu este scris in loguri si nu apare in metadatele mesajului.
Gata să integrezi?
Creează un cont și generează cheia API din secțiunea de chei a organizației.
Obține Cheia API