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

POST/api/v1/sms/sendTrimite un SMS

Trimiț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.

GET/api/v1/http/sendTrimite un SMS prin HTTP GET pentru sisteme legacy

Trimiț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.

POST/api/v1/http/sendTrimite un SMS prin formular HTTP sau JSON

Trimiți: to, message, from, apiKey

Primești: message_id, segments, credits, balance, status

GET/api/v1/soapDescarca descrierea WSDL pentru clientii SOAP

Primești: WSDL

POST/api/v1/soapCompatibilitate SOAP pentru operatia SendSms

Trimiț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.

POST/api/v1/sms/bulkTrimite mai multe mesaje intr-un apel

Trimiț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.

POST/api/v1/eventsRaporteaza un eveniment din magazin

Trimiț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.

GET/api/v1/eventsEvenimentele pe care platforma le intelege

Primești: events

POST/api/v1/otp/sendTrimite un cod de unica folosinta

Trimiț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.

POST/api/v1/otp/verifyVerifica un cod de unica folosinta

Trimiț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.

POST/api/v1/shipmentsInregistreaza un colet sau raporteaza-i starea

Trimiț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.

GET/api/v1/shipmentsCurierii acceptati si statusurile recunoscute

Primești: couriers[], statuses[]

GET/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