Sari la conținut
API v1 2026-10-05

Worbo API

Versiunea 1.0.0 · OpenAPI 3.1 · Worbo-Version 2026-10-05

API-ul Worbo: contacte, obiecte și evenimente, mesaje și template-uri WhatsApp, segmente, automatizări, campanii, inboxul, cataloage și webhooks. E un API REST prin HTTPS: schimbă date în JSON și răspunde cu codurile de stare HTTP standard. Fiecare cerere aparține unei singure organizații, cea a cheii ei.

Cu API-ul Worbo poți:

  • să scrii contacte, obiecte și evenimente din CRM-ul, magazinul online sau programul sălii tale, găsind fiecare contact după oricare dintre identitățile lui;
  • să trimiți template-uri WhatsApp aprobate și, în fereastra de 24 de ore, mesaje libere, cu aceleași reguli de consimțământ ca în aplicație;
  • să citești mesajele, conversațiile și rapoartele și să le răspunzi contactelor din sistemele tale;
  • să pregătești template-uri, segmente, automatizări și campanii, care se aprobă în aplicație;
  • să afli prin webhooks când se schimbă ceva și să conectezi asistenți AI prin MCP.
Serverul
https://api.worbo.app/v1
AutentificareBearer
Authorization: Bearer wk_live_…

Pornire rapidă#

  1. Fă o cheie în Worbo, la Integrări › Chei API. Începe cu o cheie de test: fiecare scriere e verificată, dar nu se salvează nimic.

  2. Pune cheia în variabila WORBO_API_KEY și verific-o cu GET /me: răspunsul are numele cheii, scope-urile ei și organizația.

    curl "https://api.worbo.app/v1/me" \
      -H "Authorization: Bearer $WORBO_API_KEY"
  3. Scrie primul contact: POST /contacts găsește contactul după oricare dintre identitățile lui și îl creează când nu există.

    curl -X POST "https://api.worbo.app/v1/contacts" \
      -H "Authorization: Bearer $WORBO_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{
        "identities": {
          "phone": "+40722123456",
          "email": "ana@example.com",
          "external_id": "crm-1001"
        },
        "source": "crm",
        "fields": {
          "first_name": "Ana"
        },
        "update_existing_only": false
      }'
  4. Când integrarea merge, fă o cheie live doar cu scope-urile de care are nevoie.

Autentificare#

Fiecare cerere vine cu o cheie a organizației în antetul Authorization. Cheile se fac în dashboard, la Chei API, doar cu scope-urile de care are nevoie integrarea; cheia întreagă se arată o singură dată.

Authorization: Bearer wk_live_…

O cheie wk_live_ lucrează cu datele reale. O cheie wk_test_ e pentru construirea integrării: fiecare scriere e o probă, verificată dar nesalvată, iar cu ea se poate citi doar modelul de date.

Permisiuni (scopes)#

O cheie face doar ce îi permit scope-urile ei; o operație din afara lor e refuzată cu insufficient_scope. Fiecare operație arată scope-ul de care are nevoie, iar modelul de date se citește cu orice cheie.

ScopeCe permite
contacts:readCitește contactele, identitățile și consimțămintele lor
contacts:writeCreează, actualizează și unește contacte
contacts:deleteȘterge contacte la cererea lor (GDPR)
consents:writeÎnregistrează acorduri și retrageri
objects:readCitește obiectele
objects:writeCreează și actualizează obiecte și legăturile lor
events:writeTrimite evenimente
messages:readCitește mesajele și statusul lor
messages:sendTrimite template-uri și mesaje libere contactelor
templates:readCitește template-urile
templates:writePregătește ciorne de template-uri și le trimite la Meta
segments:readCitește și numără segmentele
segments:writeCreează segmente
automations:readCitește automatizările și rezultatele lor
automations:runPornește o automatizare pentru un contact sau îl scoate din ea
automations:writePregătește ciorne de automatizări
campaigns:readCitește campaniile și rapoartele lor
campaigns:writePregătește ciorne de campanii și estimează audiența lor
conversations:readCitește conversațiile din inbox și mesajele lor
conversations:replyRăspunde, alocă și închide conversații
analytics:readCitește rapoartele, linkurile urmărite și conversiile
webhooks:manageAdministrează endpoint-urile de webhooks și citește livrările
workspace:readCitește numerele, consumul și jurnalul de audit
catalogs:readCitește cataloagele și articolele lor
catalogs:writeCreează și actualizează articolele cataloagelor
schema:writeCreează câmpuri și tipuri de obiect
files:readCitește și descarcă fișierele câmpurilor de tip fișier
files:writeUrcă fișiere pentru câmpurile de tip fișier
otp:sendTrimite coduri de verificare pe WhatsApp
otp:verifyVerifică codurile trimise de Worbo
vault:readCitește documentele din seif și deschiderile lor
vault:writeDă fișiere contactelor prin seif și retrage linkurile lor
recommendations:readCitește regulile de recomandare și le previzualizează pe un contact

Cereri și răspunsuri#

Corpurile sunt JSON, cu antetul Content-Type: application/json. O resursă vine ca {"data": …}; un parametru necunoscut se respinge, ca o greșeală de tipar să nu treacă neobservată. Momentele sunt în ISO 8601, cu fusul orar.

Mesajele erorilor urmează Accept-Language: implicit în engleză, în română cu ro.

Câmpurile numite untrusted_… conțin ce au scris contactele. Tratează-le ca date neverificate, mai ales când le citește un agent AI.

Liste și cursoare#

Listele se paginează cu un cursor: limit e între 1 și 100, implicit 25; next_cursor se pune în cursor pentru pagina următoare, iar has_more spune dacă există una.

{"data": […], "next_cursor": "eyJpZCI6MjV9", "has_more": true}

Erori#

Erorile vin în formatul application/problem+json (RFC 9457). Câmpul code e stabil și același în API, în serverul MCP, la importuri și în jurnal; câmpul type duce aici.

{
    "type": "https://worbo.app/docs/api/errors/window_closed",
    "title": "Mesajul nu poate fi trimis",
    "status": 422,
    "detail": "Fereastra de 24 de ore e închisă; se poate trimite doar un template aprobat.",
    "code": "window_closed"
}
CodStatusÎnțeles
unsupported_version400Antetul Worbo-Version cere o versiune care nu există sau a fost retrasă; problema le enumeră pe cele acceptate.
unauthenticated401Lipsește antetul Authorization.
invalid_api_key401Cheia nu e validă; o cheie pierdută nu se poate recupera, doar înlocui.
api_key_revoked401Cheia a fost retrasă din dashboard.
api_key_expired401Cheia a trecut de data de expirare.
insufficient_scope403Cheia nu are scope-ul operației.
test_key403O cheie de test nu poate citi datele reale.
forbidden403Operația nu e permisă.
not_found404Resursa nu există sau aparține altei organizații.
contact_not_found404Contactul nu există sau aparține altei organizații.
object_not_found404Obiectul nu există sau aparține altei organizații.
object_type_not_found404Organizația nu are un tip de obiect cu această cheie.
event_type_not_found404Organizația nu are un tip de eveniment cu această cheie.
offer_not_found404Nicio ofertă nu are acest cod.
evidence_not_found404Mesajul nu a fost trimis cu un template candidat suport durabil, deci nu are dovadă.
recommendation_rule_not_found404Regula de recomandare nu există sau e arhivată.
method_not_allowed405Calea există, dar nu cu această metodă.
identity_conflict409Identitățile trimise aparțin unor contacte diferite; unește-le întâi.
idempotency_conflict409Idempotency-Key a fost folosit pentru altă cerere.
idempotency_in_progress409Prima cerere cu acest Idempotency-Key încă rulează; încearcă din nou peste o secundă.
invalid_idempotency_key400Idempotency-Key e gol, are peste 255 de caractere sau nu e ASCII vizibil.
invalid_json400Corpul nu e JSON valid.
payload_too_large413Corpul cererii e prea mare.
validation_failed422Un parametru lipsește, nu e valid sau nu e cunoscut; câmpul errors spune care.
schema_violation422Câmpurile sau proprietățile nu se potrivesc cu modelul de date al organizației.
rate_limited429Prea multe cereri; așteaptă secundele din Retry-After.
otp_too_soon429La acest telefon s-a trimis un cod acum mai puțin de 30 de secunde.
otp_rate_limited429Telefonul a primit 5 coduri în ultimele 15 minute.
otp_template_missing422Numărul nu are un template aprobat pentru codurile de verificare; creează-l din pagina numerelor.
otp_undeliverable422Telefonul nu primește mesaje WhatsApp; oferă altă cale, de exemplu SMS sau email.
otp_refused422Contactul este blocat sau a oprit mesajele organizației.
otp_not_verifiable409Codul a fost dat de organizație, deci îl verifică ea.
internal_error500O eroare de partea noastră; a fost raportată, iar cererea se poate reîncerca.
blocked_contact422Mesajul nu poate fi trimis: Contactul e blocat.
no_channel_optin422Mesajul nu poate fi trimis: Contactul nu are opt-in pentru WhatsApp înregistrat.
muted_object422Mesajul nu poate fi trimis: Contactul a oprit mesajele despre acest obiect.
no_whatsapp_identity422Mesajul nu poate fi trimis: Contactul nu are un telefon sau un ID WhatsApp la care să-i scriem.
undeliverable422Mesajul nu poate fi trimis: Numărul nu poate primi mesaje WhatsApp.
window_closed422Mesajul nu poate fi trimis: Fereastra de 24 de ore e închisă; se poate trimite doar un template aprobat.
template_unavailable422Mesajul nu poate fi trimis: Template-ul nu e aprobat sau e pe pauză ori dezactivat.
number_unavailable422Mesajul nu poate fi trimis: Numărul WhatsApp al organizației nu poate trimite acum.
budget_reached422Mesajul nu poate fi trimis: Bugetul lunar pentru marketing al organizației s-a consumat.
organization_stopped422Mesajul nu poate fi trimis: Echipa Worbo a oprit trimiterea organizației; scrie-ne la hello@worbo.app.

Limitele de cereri#

600 de cereri pe minut pentru fiecare cheie și 1200 pentru organizație. Antetele RateLimit-Limit, RateLimit-Remaining și RateLimit-Reset arată unde se află cheia; peste limită vine 429, cu Retry-After.

Idempotență#

Un POST cu antetul Idempotency-Key rulează o singură dată: o cerere repetată cu aceeași cheie primește primul răspuns, cu antetul Idempotent-Replayed: true. Aceeași cheie cu alt corp dă idempotency_conflict.

Proba și cheile de test#

Cu dry_run=true, o scriere trece prin toate verificările și întoarce ce ar face, dar nu se salvează nimic; răspunsul are antetul Worbo-Dry-Run: true. Cu o cheie de test, fiecare scriere e o probă. ID-urile din răspunsul unei probe nu există.

Loturile primesc cel mult 100 elemente; fiecare se scrie separat, iar rezultatul are, pentru fiecare, indexul, starea și datele sau eroarea lui.

Versiuni#

Versiunea majoră e în cale (/v1). Schimbările mai mici care nu sunt compatibile vin în versiuni numite după data lor, alese cu antetul Worbo-Version; fără el, o cerere folosește versiunea cheii, cea curentă la crearea cheii. Fiecare răspuns spune în Worbo-Version ce versiune a folosit.

O versiune rămâne stabilă 12 luni, apoi depreciată încă 12, cu antetele Deprecation și Sunset; o schimbare incompatibilă se anunță cu 30 de zile înainte. Versiunea curentă: 2026-10-05. Acceptate: 2026-10-05.

Worbo-Version: 2026-10-05

Webhooks#

Worbo trimite evenimentele la care sunt abonate endpoint-urile ca POST cu corp JSON, semnat în formatul Standard Webhooks. Un endpoint care nu răspunde cu 2xx primește evenimentul din nou, la pauze tot mai mari; după multe eșecuri se oprește, iar proprietarul este anunțat.

webhook-id: msg_2mF0…
webhook-timestamp: 1760511600
webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=

{"type": "contact.created", "timestamp": "2026-10-15T06:20:00Z", "data": {…}}

Pentru verificarea semnăturii: calculează HMAC-SHA256 peste webhook-id, webhook-timestamp și corpul brut, unite prin puncte, cu secretul decodat din base64 după prefixul whsec_; compară-l, în timp constant, cu fiecare semnătură v1 din antet. Refuză un timestamp mai vechi de cinci minute. După o rotire, antetul are două semnături timp de 24 de ore.

Cu payload-ul thin, data are doar referința obiectului, care se citește apoi prin API.

Mesaje
  • message.queued
  • message.sent
  • message.delivered
  • message.read
  • message.failed
  • message.received
  • interactive.button_clicked
  • link.clicked
  • flow.submitted
Contacte
  • contact.created
  • contact.updated
  • contact.merged
  • contact.consent_granted
  • contact.consent_revoked
Obiecte și oferte
  • object.created
  • object.updated
  • object.status_changed
  • offer.issued
  • offer.redeemed
  • offer.expired
Comenzi, scrise înapoi în magazin
  • order.confirmed
  • order.cancelled
  • order.note_added
Rezervări și abonamente, scrise înapoi în programul sălii
  • booking.confirmed
  • booking.cancelled
  • membership.pause_requested
Automatizări
  • automation.run_started
  • automation.run_completed
  • automation.goal_reached
  • automation.webhook
Inbox
  • conversation.opened
  • conversation.assigned
  • conversation.closed
Seiful de documente
  • document.opened
Template-uri
  • template.status_changed
  • template.category_changed
  • template.quality_changed
Operațional
  • webhook_endpoint.disabled
  • webhook.test

MCP (asistenți AI)#

Serverul MCP Worbo îi lasă pe asistenții AI, de exemplu Claude sau ChatGPT, să lucreze într-o organizație cu permisiunile omului care i-a conectat. Asistentul se conectează prin OAuth, iar omul îl aprobă în Worbo; conexiunile sunt la Integrări › Asistenți AI.

Din asistent nu pleacă nimic către mulți oameni: el pregătește și estimează o campanie, iar lansarea o aprobă un membru, în Worbo. Erorile au aceleași coduri ca în API.

Adresa serverului
https://mcp.worbo.app/mcp
Unelte
get_workspace_status search_contacts get_contact get_contact_timeline list_schema list_templates get_template list_automations get_automation estimate_audience get_report recommend_items list_conversations get_conversation draft_template draft_segment draft_campaign draft_automation request_approval get_approval send_template upsert_contact upsert_object record_opt_out add_internal_note track_event

Specificație și unelte#

Specificația OpenAPI 3.1 descrie fiecare operație, în JSON sau YAML. Cerută cu cheia ta, specificația OpenAPI are și schema contactelor, a tipurilor de obiect și a tipurilor de eveniment ale tale, pentru generatoare de cod și Postman.

Colecția Postman are fiecare cerere, cu corpul ei de exemplu; pune cheia ta în variabila apiKey a colecției.

  • SDK-uri: @worbo/sdk pentru JavaScript și worbo/worbo-php pentru PHP, cu o metodă pentru fiecare operație, reîncercări, idempotență și verificarea semnăturii webhooks.
  • Fără cod: Zapier și Make, plus pluginul WordPress pentru magazinele WooCommerce.

Referință

Organizația#

Cheia folosită, numerele WhatsApp, consumul lunii și jurnalul.

Citește cheia folosită și organizația ei#

GET /me Orice cheie

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /me
curl "https://api.worbo.app/v1/me" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "key": {
      "name": "CRM",
      "environment": "live",
      "scopes": [
        "string"
      ],
      "expires_at": "2026-10-15T09:00:00+03:00",
      "api_version": "2026-10-05"
    },
    "organization": {
      "name": "Sala Centru",
      "slug": "sala-centru"
    },
    "api_version": "2026-10-05"
  }
}

Listează numerele WhatsApp, cu calitatea, tranșa și încălzirea#

GET /numbers Permisiune workspace:read Cheie live

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /numbers
curl "https://api.worbo.app/v1/numbers" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 3,
      "phone": "+40 722 000 000",
      "name": "Sala Centru",
      "sandbox": false,
      "quality_rating": "GREEN",
      "messaging_limit_tier": "TIER_1K",
      "warmup": false,
      "marketing_paused_until": "2026-10-15T09:00:00+03:00",
      "disabled": false,
      "disabled_reason": "string"
    }
  ]
}

Citește consumul unei luni și limitele planului#

GET /usage Permisiune workspace:read Cheie live

Parametri de query

  • month string

    Luna, ca AAAA-LL; implicit luna curentă.

    Exemplu: 2026-10

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /usage
curl "https://api.worbo.app/v1/usage" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "month": "2026-10",
    "currency": "EUR",
    "categories": {
      "marketing": {
        "messages": 120,
        "billable": 118,
        "estimated_cost": 6.42
      }
    },
    "estimated_cost": 6.42,
    "plan": "growth",
    "billing_state": "active",
    "limits": {}
  }
}

Listează jurnalul organizației#

GET /audit-logs Permisiune workspace:read Cheie live

Parametri de query

  • action string

    Doar rândurile acestei acțiuni.

    Exemplu: contact.created
  • since string

    Doar ce s-a schimbat în acest moment sau după el.

    Format: date-time Exemplu: 2026-10-01T00:00:00+03:00
  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /audit-logs
curl "https://api.worbo.app/v1/audit-logs" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 1201,
      "action": "contact.created",
      "label": "Contact created",
      "source": "api",
      "actor": {},
      "subject": {},
      "properties": {},
      "created_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Referință

Contacte#

Persoanele, găsite după oricare dintre identitățile lor: telefon, email, BSUID sau ID-ul de la o sursă.

Listează și caută contacte#

GET /contacts Permisiune contacts:read Cheie live

Parametri de query

  • search string

    Text din nume, telefon sau email.

    Exemplu: Ana
  • phone string

    Contactul cu acest telefon.

    Exemplu: +40722123456
  • email string

    Contactul cu acest email.

    Format: email Exemplu: ana@example.com
  • external_id string

    Contactul cu acest ID la sursa dată în source.

    Exemplu: crm-1001
  • source string

    Sursa ID-ului extern sau a contactelor.

    Exemplu: crm
  • tag string

    Doar contactele cu acest tag.

    Exemplu: vip
  • updated_since string

    Doar ce s-a schimbat în acest moment sau după el.

    Format: date-time Exemplu: 2026-10-01T00:00:00+03:00
  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /contacts
curl "https://api.worbo.app/v1/contacts" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 123,
      "identities": [
        {
          "id": 501,
          "type": "phone",
          "value": "+40722123456",
          "source": "string",
          "primary": true
        }
      ],
      "fields": {
        "first_name": "Ana",
        "last_name": "Popescu",
        "language": "ro"
      },
      "tags": [
        "vip"
      ],
      "source": "api",
      "blocked": false,
      "created_at": "2026-10-15T09:00:00+03:00",
      "updated_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Creează sau actualizează un contact după oricare dintre identitățile lui#

POST /contacts Permisiune contacts:write

Contactul se găsește după oricare dintre identitățile trimise, iar celelalte i se adaugă. Cu update_existing_only, un contact necunoscut nu se creează.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • identities object Obligatoriu

    Cel puțin o identitate; contactul se găsește după oricare dintre ele.

    Arată câmpurileAscunde câmpurile
    • phone string

      În format E.164, de exemplu +40722123456.

      Exemplu: +40722123456
    • email string
      Format: email Exemplu: ana@example.com
    • bsuid string
    • external_id string

      ID-ul contactului la sursă: text sau un obiect cu source și value.

      Exemplu: crm-1001
  • source string
    Exemplu: crm
  • fields object
  • tags string[]
  • update_existing_only boolean
    Exemplu: false

Răspunsuri

POST /contacts
curl -X POST "https://api.worbo.app/v1/contacts" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "identities": {
      "phone": "+40722123456",
      "email": "ana@example.com",
      "external_id": "crm-1001"
    },
    "source": "crm",
    "fields": {
      "first_name": "Ana"
    },
    "update_existing_only": false
  }'
{
  "data": {
    "id": 123,
    "identities": [
      {
        "id": 501,
        "type": "phone",
        "value": "+40722123456",
        "source": "string",
        "primary": true
      }
    ],
    "fields": {
      "first_name": "Ana",
      "last_name": "Popescu",
      "language": "ro"
    },
    "tags": [
      "vip"
    ],
    "source": "api",
    "blocked": false,
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Creează sau actualizează cel mult 100 de contacte#

POST /contacts/batch Permisiune contacts:write

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • items object[] Obligatoriu
    Arată câmpurileAscunde câmpurile
    • identities object Obligatoriu

      Cel puțin o identitate; contactul se găsește după oricare dintre ele.

      Arată câmpurileAscunde câmpurile
      • phone string

        În format E.164, de exemplu +40722123456.

        Exemplu: +40722123456
      • email string
        Format: email Exemplu: ana@example.com
      • bsuid string
      • external_id string

        ID-ul contactului la sursă: text sau un obiect cu source și value.

        Exemplu: crm-1001
    • source string
      Exemplu: crm
    • fields object
    • tags string[]
    • update_existing_only boolean
      Exemplu: false

Răspunsuri

POST /contacts/batch
curl -X POST "https://api.worbo.app/v1/contacts/batch" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "identities": {
          "phone": "+40722123456",
          "email": "ana@example.com",
          "external_id": "crm-1001"
        },
        "source": "crm",
        "fields": {
          "first_name": "Ana"
        },
        "update_existing_only": false
      }
    ]
  }'
{
  "data": [
    {
      "index": 0,
      "status": "created",
      "data": {
        "id": 123,
        "identities": [
          {
            "id": 501,
            "type": "phone",
            "value": "+40722123456",
            "source": "string",
            "primary": true
          }
        ],
        "fields": {
          "first_name": "Ana",
          "last_name": "Popescu",
          "language": "ro"
        },
        "tags": [
          "vip"
        ],
        "source": "api",
        "blocked": false,
        "created_at": "2026-10-15T09:00:00+03:00",
        "updated_at": "2026-10-15T09:00:00+03:00"
      },
      "error": {
        "type": "https://worbo.app/docs/api/errors/validation_failed",
        "title": "The request is not valid",
        "status": 422,
        "detail": "The name field is required.",
        "code": "validation_failed",
        "errors": {
          "name": [
            "The name field is required."
          ]
        }
      }
    }
  ]
}

Citește un contact#

GET /contacts/{contact} Permisiune contacts:read Cheie live

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /contacts/{contact}
curl "https://api.worbo.app/v1/contacts/123" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 123,
    "identities": [
      {
        "id": 501,
        "type": "phone",
        "value": "+40722123456",
        "source": "string",
        "primary": true
      }
    ],
    "fields": {
      "first_name": "Ana",
      "last_name": "Popescu",
      "language": "ro"
    },
    "tags": [
      "vip"
    ],
    "source": "api",
    "blocked": false,
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Schimbă câmpurile și tag-urile unui contact#

PATCH /contacts/{contact} Permisiune contacts:write

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • fields object
  • tags string[]

Răspunsuri

PATCH /contacts/{contact}
curl -X PATCH "https://api.worbo.app/v1/contacts/123" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fields": {
      "last_name": "Ionescu"
    }
  }'
{
  "data": {
    "id": 123,
    "identities": [
      {
        "id": 501,
        "type": "phone",
        "value": "+40722123456",
        "source": "string",
        "primary": true
      }
    ],
    "fields": {
      "first_name": "Ana",
      "last_name": "Popescu",
      "language": "ro"
    },
    "tags": [
      "vip"
    ],
    "source": "api",
    "blocked": false,
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Șterge un contact, la cererea persoanei (GDPR)#

DELETE /contacts/{contact} Permisiune contacts:delete

Datele contactului se șterg definitiv; jurnalul păstrează doar faptul că s-a făcut ștergerea.

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

DELETE /contacts/{contact}
curl -X DELETE "https://api.worbo.app/v1/contacts/123" \
  -H "Authorization: Bearer $WORBO_API_KEY"
Fără conținut

Oprește sau pornește botul pe cuvinte cheie pentru un contact#

POST /contacts/{contact}/bot Permisiune contacts:write

De exemplu când un CRM preia conversația.

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • enabled boolean Obligatoriu
    Exemplu: false

Răspunsuri

POST /contacts/{contact}/bot
curl -X POST "https://api.worbo.app/v1/contacts/123/bot" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": false
  }'
{
  "data": {
    "contact_id": 123,
    "bot_enabled": false
  }
}

Listează identitățile unui contact#

GET /contacts/{contact}/identities Permisiune contacts:read Cheie live

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /contacts/{contact}/identities
curl "https://api.worbo.app/v1/contacts/123/identities" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 501,
      "type": "phone",
      "value": "+40722123456",
      "source": "string",
      "primary": true
    }
  ]
}

Adaugă o identitate unui contact#

POST /contacts/{contact}/identities Permisiune contacts:write

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • type string Obligatoriu
    Valori posibile: phone email bsuid username external_id
  • value string Obligatoriu
    Exemplu: ana@example.com
  • source string
  • primary boolean
    Exemplu: false

Răspunsuri

POST /contacts/{contact}/identities
curl -X POST "https://api.worbo.app/v1/contacts/123/identities" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "email",
    "value": "ana@example.com",
    "primary": false
  }'
{
  "data": {
    "id": 501,
    "type": "phone",
    "value": "+40722123456",
    "source": "string",
    "primary": true
  }
}

Desprinde o identitate de un contact#

DELETE /contacts/{contact}/identities/{identity} Permisiune contacts:write

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123
  • identity integer Obligatoriu

    ID-ul identității.

    Exemplu: 501

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

DELETE /contacts/{contact}/identities/{identity}
curl -X DELETE "https://api.worbo.app/v1/contacts/123/identities/501" \
  -H "Authorization: Bearer $WORBO_API_KEY"
Fără conținut

Unește alt contact cu acesta#

POST /contacts/{contact}/merge Permisiune contacts:write

Identitățile, istoricul și obiectele celuilalt contact se mută aici; urmează evenimentul contact.merged.

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • contact_id integer Obligatoriu

    Contactul unit cu acesta; identitățile și istoricul lui se mută aici.

    Exemplu: 124

Răspunsuri

POST /contacts/{contact}/merge
curl -X POST "https://api.worbo.app/v1/contacts/123/merge" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": 124
  }'
{
  "data": {
    "id": 123,
    "identities": [
      {
        "id": 501,
        "type": "phone",
        "value": "+40722123456",
        "source": "string",
        "primary": true
      }
    ],
    "fields": {
      "first_name": "Ana",
      "last_name": "Popescu",
      "language": "ro"
    },
    "tags": [
      "vip"
    ],
    "source": "api",
    "blocked": false,
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Referință

Consimțământ#

Istoricul consimțământului, la care doar se adaugă, pe scopuri și topicuri, cu dovada fiecărui acord.

Citește consimțământul unui contact, cu istoricul lui#

GET /contacts/{contact}/consents Permisiune contacts:read Cheie live

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /contacts/{contact}/consents
curl "https://api.worbo.app/v1/contacts/123/consents" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "status": {
      "purposes": {
        "channel": "granted",
        "transactional": null,
        "marketing": "granted",
        "recommendations": null
      },
      "topics": {},
      "meta_blocked": false,
      "blocked": false,
      "allowed": {
        "transactional": true,
        "marketing": true,
        "recommendations": false
      }
    },
    "history": [
      {
        "id": 900,
        "purpose": "marketing",
        "topic": "string",
        "state": "granted",
        "basis": "consent",
        "source": "form",
        "proof": {},
        "occurred_at": "2026-10-15T09:00:00+03:00"
      }
    ]
  }
}

Înregistrează un acord, cu dovada lui, sau o retragere#

POST /contacts/{contact}/consents Permisiune consents:write

Un acord retras de persoană îl poate reda doar ea: printr-un formular, la checkout sau printr-un link.

Parametri din cale

  • contact integer Obligatoriu

    ID-ul contactului.

    Exemplu: 123

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • purposes string[] Obligatoriu
    Minim: 1
  • state string Obligatoriu
    Valori posibile: granted revoked
  • source string
    Valori posibile: form checkout click_to_chat api
  • topic string null
  • basis string
    Valori posibile: consent soft_opt_in
  • proof object

    Ce dovedește acordul: textul formularului, pagina, IP-ul.

  • occurred_at string null
    Format: date-time

Răspunsuri

POST /contacts/{contact}/consents
curl -X POST "https://api.worbo.app/v1/contacts/123/consents" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "purposes": [
      "channel",
      "marketing"
    ],
    "state": "granted",
    "source": "form",
    "proof": {
      "form": "Newsletter, footer",
      "text": "I agree to receive offers on WhatsApp"
    }
  }'
{
  "data": {
    "recorded": [
      {
        "id": 900,
        "purpose": "marketing",
        "topic": "string",
        "state": "granted",
        "basis": "consent",
        "source": "form",
        "proof": {},
        "occurred_at": "2026-10-15T09:00:00+03:00"
      }
    ],
    "status": {
      "purposes": {
        "channel": "granted",
        "transactional": null,
        "marketing": "granted",
        "recommendations": null
      },
      "topics": {},
      "meta_blocked": false,
      "blocked": false,
      "allowed": {
        "transactional": true,
        "marketing": true,
        "recommendations": false
      }
    },
    "history": [
      {
        "id": 900,
        "purpose": "marketing",
        "topic": "string",
        "state": "granted",
        "basis": "consent",
        "source": "form",
        "proof": {},
        "occurred_at": "2026-10-15T09:00:00+03:00"
      }
    ]
  }
}

Referință

Model de date#

Câmpurile contactelor, tipurile de obiect și tipurile de eveniment ale organizației, cu JSON Schema lor.

Citește JSON Schema corpului care scrie un contact#

GET /contacts/schema Orice cheie

Cu câmpurile proprii ale organizației; o citește orice cheie.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /contacts/schema
curl "https://api.worbo.app/v1/contacts/schema" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {}
}

Listează câmpurile contactelor#

GET /field-definitions Orice cheie

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /field-definitions
curl "https://api.worbo.app/v1/field-definitions" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "key": "shoe_size",
      "label": "Shoe size",
      "labels": {},
      "type": "number",
      "required": false,
      "unique": false,
      "sensitivity": "normal",
      "key_date": false,
      "calculated": false,
      "multiple": false,
      "choices": [
        {
          "key": "string",
          "labels": {}
        }
      ],
      "default": {},
      "archived": false
    }
  ]
}

Creează un câmp al contactelor sau al unui tip de obiect#

POST /field-definitions Permisiune schema:write

Prin aceleași verificări și limite ca în dashboard; cheia nu se mai schimbă după aceea.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • object_type string

    Cheia tipului de obiect; fără ea, câmpul este al contactelor.

    Exemplu: vehicle
  • labels object Obligatoriu
  • key string
    Exemplu: plate
  • type string Obligatoriu
    Valori posibile: text number money date datetime boolean single_select multi_select phone email url reference file location interval
  • sensitivity string
    Valori posibile: normal personal special
  • is_required boolean
  • is_unique boolean
  • segmentable boolean
  • templatable boolean
  • key_date boolean
  • audited boolean
  • settings object
  • default_value string

    Valoarea implicită, de tipul câmpului.

Răspunsuri

POST /field-definitions
curl -X POST "https://api.worbo.app/v1/field-definitions" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "object_type": "vehicle",
    "labels": {
      "en": "Plate",
      "ro": "Număr de înmatriculare"
    },
    "key": "plate",
    "type": "text"
  }'
{
  "data": {
    "key": "shoe_size",
    "label": "Shoe size",
    "labels": {},
    "type": "number",
    "required": false,
    "unique": false,
    "sensitivity": "normal",
    "key_date": false,
    "calculated": false,
    "multiple": false,
    "choices": [
      {
        "key": "string",
        "labels": {}
      }
    ],
    "default": {},
    "archived": false
  }
}

Listează tipurile de obiect#

GET /object-types Orice cheie

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /object-types
curl "https://api.worbo.app/v1/object-types" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "key": "fit.membership",
      "label": "Membership",
      "labels": {},
      "plural_labels": {},
      "source": "fitness",
      "status_axes": [
        {
          "key": "lifecycle",
          "labels": {},
          "statuses": [
            {
              "key": "active",
              "labels": {},
              "category": "active"
            }
          ]
        }
      ],
      "roles": [
        {
          "key": "holder",
          "labels": {},
          "multiple": false,
          "primary": true
        }
      ],
      "fields": [
        {
          "key": "shoe_size",
          "label": "Shoe size",
          "labels": {},
          "type": "number",
          "required": false,
          "unique": false,
          "sensitivity": "normal",
          "key_date": false,
          "calculated": false,
          "multiple": false,
          "choices": [
            {
              "key": "string",
              "labels": {}
            }
          ],
          "default": {},
          "archived": false
        }
      ]
    }
  ]
}

Creează un tip de obiect#

POST /object-types Permisiune schema:write

Tipul este al organizației și intră în limita ei de tipuri.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • labels object Obligatoriu
  • plural_labels object
  • key string
    Exemplu: vehicle
  • status_axes object[]
  • roles object[]
  • title_field string
  • retention_days integer

Răspunsuri

POST /object-types
curl -X POST "https://api.worbo.app/v1/object-types" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "labels": {
      "en": "Vehicle",
      "ro": "Vehicul"
    },
    "key": "vehicle"
  }'
{
  "data": {
    "key": "fit.membership",
    "label": "Membership",
    "labels": {},
    "plural_labels": {},
    "source": "fitness",
    "status_axes": [
      {
        "key": "lifecycle",
        "labels": {},
        "statuses": [
          {
            "key": "active",
            "labels": {},
            "category": "active"
          }
        ]
      }
    ],
    "roles": [
      {
        "key": "holder",
        "labels": {},
        "multiple": false,
        "primary": true
      }
    ],
    "fields": [
      {
        "key": "shoe_size",
        "label": "Shoe size",
        "labels": {},
        "type": "number",
        "required": false,
        "unique": false,
        "sensitivity": "normal",
        "key_date": false,
        "calculated": false,
        "multiple": false,
        "choices": [
          {
            "key": "string",
            "labels": {}
          }
        ],
        "default": {},
        "archived": false
      }
    ]
  }
}

Citește un tip de obiect, cu statusurile, rolurile și câmpurile lui#

GET /object-types/{type} Orice cheie

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /object-types/{type}
curl "https://api.worbo.app/v1/object-types/fit.membership" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "key": "fit.membership",
    "label": "Membership",
    "labels": {},
    "plural_labels": {},
    "source": "fitness",
    "status_axes": [
      {
        "key": "lifecycle",
        "labels": {},
        "statuses": [
          {
            "key": "active",
            "labels": {},
            "category": "active"
          }
        ]
      }
    ],
    "roles": [
      {
        "key": "holder",
        "labels": {},
        "multiple": false,
        "primary": true
      }
    ],
    "fields": [
      {
        "key": "shoe_size",
        "label": "Shoe size",
        "labels": {},
        "type": "number",
        "required": false,
        "unique": false,
        "sensitivity": "normal",
        "key_date": false,
        "calculated": false,
        "multiple": false,
        "choices": [
          {
            "key": "string",
            "labels": {}
          }
        ],
        "default": {},
        "archived": false
      }
    ]
  }
}

Citește JSON Schema corpului care scrie un obiect al tipului#

GET /object-types/{type}/schema Orice cheie

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /object-types/{type}/schema
curl "https://api.worbo.app/v1/object-types/fit.membership/schema" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {}
}

Listează tipurile de eveniment#

GET /event-types Orice cheie

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /event-types
curl "https://api.worbo.app/v1/event-types" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "key": "visit.recorded",
      "label": "Visit recorded",
      "labels": {},
      "source": "fitness",
      "violation_policy": "reject",
      "properties": [
        {
          "key": "shoe_size",
          "label": "Shoe size",
          "labels": {},
          "type": "number",
          "required": false,
          "unique": false,
          "sensitivity": "normal",
          "key_date": false,
          "calculated": false,
          "multiple": false,
          "choices": [
            {
              "key": "string",
              "labels": {}
            }
          ],
          "default": {},
          "archived": false
        }
      ]
    }
  ]
}

Citește un tip de eveniment, cu proprietățile lui#

GET /event-types/{type} Orice cheie

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /event-types/{type}
curl "https://api.worbo.app/v1/event-types/fit.membership" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "key": "visit.recorded",
    "label": "Visit recorded",
    "labels": {},
    "source": "fitness",
    "violation_policy": "reject",
    "properties": [
      {
        "key": "shoe_size",
        "label": "Shoe size",
        "labels": {},
        "type": "number",
        "required": false,
        "unique": false,
        "sensitivity": "normal",
        "key_date": false,
        "calculated": false,
        "multiple": false,
        "choices": [
          {
            "key": "string",
            "labels": {}
          }
        ],
        "default": {},
        "archived": false
      }
    ]
  }
}

Citește JSON Schema proprietăților unui tip de eveniment#

GET /event-types/{type}/schema Orice cheie

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /event-types/{type}/schema
curl "https://api.worbo.app/v1/event-types/fit.membership/schema" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {}
}

Referință

Obiecte#

Abonamente, rezervări, comenzi: înregistrările fiecărui tip de obiect, legate de contacte în roluri.

Listează obiectele unui tip#

GET /objects/{type} Permisiune objects:read Cheie live

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership

Parametri de query

  • external_id string

    Obiectul cu acest ID la sursă.

    Exemplu: abn-7781
  • source string

    Doar obiectele acestei surse.

    Exemplu: upfit
  • contact_id integer

    Doar obiectele legate de acest contact.

    Exemplu: 123
  • status object

    Statusul pe fiecare axă, de exemplu status[lifecycle]=active.

  • updated_since string

    Doar ce s-a schimbat în acest moment sau după el.

    Format: date-time Exemplu: 2026-10-01T00:00:00+03:00
  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /objects/{type}
curl "https://api.worbo.app/v1/objects/fit.membership" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 456,
      "type": "fit.membership",
      "source": "string",
      "external_id": "abn-7781",
      "title": "Full access 12 luni",
      "fields": {
        "plan": 12,
        "starts_on": "2026-09-01",
        "ends_on": "2027-08-31"
      },
      "statuses": {
        "lifecycle": "active",
        "payment": "ok"
      },
      "raw_status": "string",
      "relations": [
        {
          "id": 77,
          "contact_id": 123,
          "role": "holder",
          "primary": true,
          "muted": false,
          "valid_from": "2026-10-15",
          "valid_until": "2026-10-15"
        }
      ],
      "created_at": "2026-10-15T09:00:00+03:00",
      "updated_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Creează sau actualizează un obiect după ID-ul lui la sursă#

POST /objects/{type} Permisiune objects:write

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • external_id string Obligatoriu
    Exemplu: abn-7781
  • source string
    Exemplu: upfit
  • fields object
  • statuses object
  • raw_status string
  • raw_status_label string
  • contact object

    Contactul legat în rol: {"id": 123} sau {"identities": {...}, "fields": {...}}.

  • role string
    Exemplu: holder
  • update_existing_only boolean
    Exemplu: false

Răspunsuri

POST /objects/{type}
curl -X POST "https://api.worbo.app/v1/objects/fit.membership" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "abn-7781",
    "source": "upfit",
    "fields": {
      "starts_on": "2026-09-01",
      "ends_on": "2027-08-31"
    },
    "statuses": {
      "lifecycle": "active"
    },
    "contact": {
      "identities": {
        "phone": "+40722123456"
      }
    },
    "role": "holder",
    "update_existing_only": false
  }'
{
  "data": {
    "id": 456,
    "type": "fit.membership",
    "source": "string",
    "external_id": "abn-7781",
    "title": "Full access 12 luni",
    "fields": {
      "plan": 12,
      "starts_on": "2026-09-01",
      "ends_on": "2027-08-31"
    },
    "statuses": {
      "lifecycle": "active",
      "payment": "ok"
    },
    "raw_status": "string",
    "relations": [
      {
        "id": 77,
        "contact_id": 123,
        "role": "holder",
        "primary": true,
        "muted": false,
        "valid_from": "2026-10-15",
        "valid_until": "2026-10-15"
      }
    ],
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Creează sau actualizează cel mult 100 de obiecte#

POST /objects/{type}/batch Permisiune objects:write

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • items object[] Obligatoriu
    Arată câmpurileAscunde câmpurile
    • external_id string Obligatoriu
      Exemplu: abn-7781
    • source string
      Exemplu: upfit
    • fields object
    • statuses object
    • raw_status string
    • raw_status_label string
    • contact object

      Contactul legat în rol: {"id": 123} sau {"identities": {...}, "fields": {...}}.

    • role string
      Exemplu: holder
    • update_existing_only boolean
      Exemplu: false

Răspunsuri

POST /objects/{type}/batch
curl -X POST "https://api.worbo.app/v1/objects/fit.membership/batch" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "external_id": "abn-7781",
        "source": "upfit",
        "fields": {
          "starts_on": "2026-09-01",
          "ends_on": "2027-08-31"
        },
        "statuses": {
          "lifecycle": "active"
        },
        "contact": {
          "identities": {
            "phone": "+40722123456"
          }
        },
        "role": "holder",
        "update_existing_only": false
      }
    ]
  }'
{
  "data": [
    {
      "index": 0,
      "status": "created",
      "data": {
        "id": 456,
        "type": "fit.membership",
        "source": "string",
        "external_id": "abn-7781",
        "title": "Full access 12 luni",
        "fields": {
          "plan": 12,
          "starts_on": "2026-09-01",
          "ends_on": "2027-08-31"
        },
        "statuses": {
          "lifecycle": "active",
          "payment": "ok"
        },
        "raw_status": "string",
        "relations": [
          {
            "id": 77,
            "contact_id": 123,
            "role": "holder",
            "primary": true,
            "muted": false,
            "valid_from": "2026-10-15",
            "valid_until": "2026-10-15"
          }
        ],
        "created_at": "2026-10-15T09:00:00+03:00",
        "updated_at": "2026-10-15T09:00:00+03:00"
      },
      "error": {
        "type": "https://worbo.app/docs/api/errors/validation_failed",
        "title": "The request is not valid",
        "status": 422,
        "detail": "The name field is required.",
        "code": "validation_failed",
        "errors": {
          "name": [
            "The name field is required."
          ]
        }
      }
    }
  ]
}

Citește un obiect#

GET /objects/{type}/{object} Permisiune objects:read Cheie live

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership
  • object integer Obligatoriu

    ID-ul obiectului.

    Exemplu: 456

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /objects/{type}/{object}
curl "https://api.worbo.app/v1/objects/fit.membership/456" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 456,
    "type": "fit.membership",
    "source": "string",
    "external_id": "abn-7781",
    "title": "Full access 12 luni",
    "fields": {
      "plan": 12,
      "starts_on": "2026-09-01",
      "ends_on": "2027-08-31"
    },
    "statuses": {
      "lifecycle": "active",
      "payment": "ok"
    },
    "raw_status": "string",
    "relations": [
      {
        "id": 77,
        "contact_id": 123,
        "role": "holder",
        "primary": true,
        "muted": false,
        "valid_from": "2026-10-15",
        "valid_until": "2026-10-15"
      }
    ],
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Schimbă câmpurile sau statusurile unui obiect#

PATCH /objects/{type}/{object} Permisiune objects:write

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership
  • object integer Obligatoriu

    ID-ul obiectului.

    Exemplu: 456

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • source string
  • fields object
  • statuses object
  • raw_status string
  • raw_status_label string
  • contact object
  • role string

Răspunsuri

PATCH /objects/{type}/{object}
curl -X PATCH "https://api.worbo.app/v1/objects/fit.membership/456" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "statuses": {
      "lifecycle": "frozen"
    }
  }'
{
  "data": {
    "id": 456,
    "type": "fit.membership",
    "source": "string",
    "external_id": "abn-7781",
    "title": "Full access 12 luni",
    "fields": {
      "plan": 12,
      "starts_on": "2026-09-01",
      "ends_on": "2027-08-31"
    },
    "statuses": {
      "lifecycle": "active",
      "payment": "ok"
    },
    "raw_status": "string",
    "relations": [
      {
        "id": 77,
        "contact_id": 123,
        "role": "holder",
        "primary": true,
        "muted": false,
        "valid_from": "2026-10-15",
        "valid_until": "2026-10-15"
      }
    ],
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Leagă un contact de un obiect, într-un rol#

POST /objects/{type}/{object}/relations Permisiune objects:write

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership
  • object integer Obligatoriu

    ID-ul obiectului.

    Exemplu: 456

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • contact_id integer
    Exemplu: 123
  • contact object

    Un contact găsit sau creat după identitățile lui, în loc de contact_id.

  • role string Obligatoriu
    Exemplu: beneficiary
  • primary boolean
    Exemplu: false
  • muted boolean
    Exemplu: false
  • valid_from string null
    Format: date
  • valid_until string null
    Format: date

Răspunsuri

POST /objects/{type}/{object}/relations
curl -X POST "https://api.worbo.app/v1/objects/fit.membership/456/relations" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": 123,
    "role": "beneficiary",
    "primary": false,
    "muted": false
  }'
{
  "data": {
    "id": 77,
    "contact_id": 123,
    "role": "holder",
    "primary": true,
    "muted": false,
    "valid_from": "2026-10-15",
    "valid_until": "2026-10-15"
  }
}

Șterge legătura unui contact cu un obiect#

DELETE /objects/{type}/{object}/relations/{relation} Permisiune objects:write

Parametri din cale

  • type string Obligatoriu

    Cheia tipului, de exemplu fit.membership.

    Exemplu: fit.membership
  • object integer Obligatoriu

    ID-ul obiectului.

    Exemplu: 456
  • relation integer Obligatoriu

    ID-ul legăturii.

    Exemplu: 77

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

DELETE /objects/{type}/{object}/relations/{relation}
curl -X DELETE "https://api.worbo.app/v1/objects/fit.membership/456/relations/77" \
  -H "Authorization: Bearer $WORBO_API_KEY"
Fără conținut

Referință

Fișiere#

Fișierele câmpurilor de tip fișier: se urcă întâi, apoi se dau prin ID ca valoare a câmpului.

Urcă un fișier pentru un câmp de tip fișier#

POST /files Permisiune files:write

PDF, imagini, documente Office, text sau CSV, până la 16 MB. Un fișier nefolosit de niciun câmp într-o zi se șterge.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriimultipart/form-data

  • file string Obligatoriu

    Fișierul: PDF, imagine, Office, text sau CSV, până la 16 MB.

Răspunsuri

POST /files
curl -X POST "https://api.worbo.app/v1/files" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F "file=@document.pdf"
{
  "data": {
    "id": 77,
    "name": "contract.pdf",
    "mime": "application/pdf",
    "size": 48213,
    "sha256": "string",
    "contact_id": 123,
    "object_id": 456,
    "created_at": "2026-10-15T09:00:00+03:00"
  }
}

Citește un fișier, cu contactul sau obiectul care îl folosește#

GET /files/{file} Permisiune files:read Cheie live

Parametri din cale

  • file integer Obligatoriu

    ID-ul fișierului.

    Exemplu: 77

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /files/{file}
curl "https://api.worbo.app/v1/files/77" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 77,
    "name": "contract.pdf",
    "mime": "application/pdf",
    "size": 48213,
    "sha256": "string",
    "contact_id": 123,
    "object_id": 456,
    "created_at": "2026-10-15T09:00:00+03:00"
  }
}

Descarcă conținutul unui fișier#

GET /files/{file}/content Permisiune files:read Cheie live

Parametri din cale

  • file integer Obligatoriu

    ID-ul fișierului.

    Exemplu: 77

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /files/{file}/content
curl "https://api.worbo.app/v1/files/77/content" \
  -H "Authorization: Bearer $WORBO_API_KEY"
Un fișier, așa cum a fost încărcat.

Referință

Evenimente#

Ce s-a întâmplat la sursă; evenimentele pornesc automatizări și actualizează obiecte.

Înregistrează un eveniment#

POST /events Permisiune events:write

Contactul și obiectul evenimentului se găsesc sau se creează; un eveniment cu același ID de la aceeași sursă se înregistrează o singură dată.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • id string

    ID-ul evenimentului la sursă; același ID se înregistrează o singură dată.

    Exemplu: m-1
  • type string Obligatoriu
    Exemplu: membership.created
  • occurred_at string
    Format: date-time Exemplu: 2026-10-15T09:00:00+03:00
  • source string
    Exemplu: upfit
  • contact object
  • object object
    Arată câmpurileAscunde câmpurile
    • type string
    • external_id string
    • role string
    • upsert object
  • properties object
  • historical boolean
    Exemplu: false
  • update_existing_only boolean
    Exemplu: false

Răspunsuri

POST /events
curl -X POST "https://api.worbo.app/v1/events" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "m-1",
    "type": "membership.created",
    "occurred_at": "2026-10-15T09:00:00+03:00",
    "source": "upfit",
    "contact": {
      "phone": "+40722123456"
    },
    "object": {
      "type": "fit.membership",
      "external_id": "abn-7781",
      "upsert": {
        "statuses": {
          "lifecycle": "active"
        }
      }
    },
    "properties": {
      "plan": "plan-12"
    },
    "historical": false,
    "update_existing_only": false
  }'
{
  "data": {
    "event_id": 8812,
    "type": "membership.created",
    "source": "upfit",
    "source_id": "m-1",
    "occurred_at": "2026-10-15T09:00:00+03:00",
    "duplicate": false,
    "historical": false,
    "contact_id": 123,
    "object_id": 456,
    "warnings": {},
    "identity_conflict": {}
  }
}

Înregistrează cel mult 100 de evenimente#

POST /events/batch Permisiune events:write

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • items object[] Obligatoriu
    Arată câmpurileAscunde câmpurile
    • id string

      ID-ul evenimentului la sursă; același ID se înregistrează o singură dată.

      Exemplu: m-1
    • type string Obligatoriu
      Exemplu: membership.created
    • occurred_at string
      Format: date-time Exemplu: 2026-10-15T09:00:00+03:00
    • source string
      Exemplu: upfit
    • contact object
    • object object
      Arată câmpurileAscunde câmpurile
      • type string
      • external_id string
      • role string
      • upsert object
    • properties object
    • historical boolean
      Exemplu: false
    • update_existing_only boolean
      Exemplu: false

Răspunsuri

POST /events/batch
curl -X POST "https://api.worbo.app/v1/events/batch" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "id": "m-1",
        "type": "membership.created",
        "occurred_at": "2026-10-15T09:00:00+03:00",
        "source": "upfit",
        "contact": {
          "phone": "+40722123456"
        },
        "object": {
          "type": "fit.membership",
          "external_id": "abn-7781",
          "upsert": {
            "statuses": {
              "lifecycle": "active"
            }
          }
        },
        "properties": {
          "plan": "plan-12"
        },
        "historical": false,
        "update_existing_only": false
      }
    ]
  }'
{
  "data": [
    {
      "index": 0,
      "status": "created",
      "data": {
        "event_id": 8812,
        "type": "membership.created",
        "source": "upfit",
        "source_id": "m-1",
        "occurred_at": "2026-10-15T09:00:00+03:00",
        "duplicate": false,
        "historical": false,
        "contact_id": 123,
        "object_id": 456,
        "warnings": {},
        "identity_conflict": {}
      },
      "error": {
        "type": "https://worbo.app/docs/api/errors/validation_failed",
        "title": "The request is not valid",
        "status": 422,
        "detail": "The name field is required.",
        "code": "validation_failed",
        "errors": {
          "name": [
            "The name field is required."
          ]
        }
      }
    }
  ]
}

Referință

Mesaje#

Mesajele WhatsApp trimise și primite, prin aceleași reguli ca în dashboard.

Listează mesajele#

GET /messages Permisiune messages:read Cheie live

Parametri de query

  • contact_id integer

    Doar mesajele acestui contact.

    Exemplu: 123
  • direction string

    Primite sau trimise.

    Valori posibile: inbound outbound
  • status string

    Doar mesajele cu acest status.

    Exemplu: delivered
  • since string

    Doar ce s-a schimbat în acest moment sau după el.

    Format: date-time Exemplu: 2026-10-01T00:00:00+03:00
  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /messages
curl "https://api.worbo.app/v1/messages" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 7001,
      "contact_id": 123,
      "number_id": 3,
      "direction": "outbound",
      "type": "template",
      "text": "string",
      "untrusted_text": "string",
      "template": {
        "name": "booking_confirmed",
        "language": "ro"
      },
      "category": "utility",
      "status": "pending",
      "reason": "string",
      "error_code": "string",
      "wamid": "string",
      "created_at": "2026-10-15T09:00:00+03:00",
      "sent_at": "2026-10-15T09:00:00+03:00",
      "delivered_at": "2026-10-15T09:00:00+03:00",
      "read_at": "2026-10-15T09:00:00+03:00",
      "failed_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Trimite unui contact un template, un text liber sau un formular#

POST /messages Permisiune messages:send

Mesajul trece prin aceleași reguli ca în dashboard: consimțământ, ore de liniște, frecvență și limite. Un text liber sau un formular cere fereastra de 24 de ore deschisă; un refuz vine cu codul motivului, de exemplu window_closed. Răspunsurile la un formular vin prin webhook-ul flow.submitted.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • contact_id integer Obligatoriu
    Exemplu: 123
  • number_id integer null
  • template object
    Arată câmpurileAscunde câmpurile
    • name string Obligatoriu
      Exemplu: booking_confirmed
    • language string
      Exemplu: ro
    • variables string[]

      Valorile variabilelor; o valoare lipsă se completează din câmpul variabilei. La un template din bibliotecă nemodificat, prenumele lipsă ia textul de rezervă al bibliotecii, de exemplu „Bună, suntem echipa sălii.”.

  • text string

    Un text liber, doar cât timp fereastra de 24 de ore e deschisă; în locul lui template.

  • flow object
    Arată câmpurileAscunde câmpurile
    • key string Obligatoriu

      Cheia unui formular WhatsApp publicat în contul numărului.

      Exemplu: nps
    • body string Obligatoriu

      Textul mesajului, deasupra butonului care deschide formularul.

      Exemplu: Ne spui în 10 secunde cum a fost?

Răspunsuri

POST /messages
curl -X POST "https://api.worbo.app/v1/messages" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": 123,
    "template": {
      "name": "booking_confirmed",
      "language": "ro",
      "variables": [
        "Ana",
        "3 octombrie, 18:00"
      ]
    },
    "flow": {
      "key": "nps",
      "body": "Ne spui în 10 secunde cum a fost?"
    }
  }'
{
  "data": {
    "id": 7001,
    "contact_id": 123,
    "number_id": 3,
    "direction": "outbound",
    "type": "template",
    "text": "string",
    "untrusted_text": "string",
    "template": {
      "name": "booking_confirmed",
      "language": "ro"
    },
    "category": "utility",
    "status": "pending",
    "reason": "string",
    "error_code": "string",
    "wamid": "string",
    "created_at": "2026-10-15T09:00:00+03:00",
    "sent_at": "2026-10-15T09:00:00+03:00",
    "delivered_at": "2026-10-15T09:00:00+03:00",
    "read_at": "2026-10-15T09:00:00+03:00",
    "failed_at": "2026-10-15T09:00:00+03:00"
  }
}

Citește un mesaj și statusul lui#

GET /messages/{message} Permisiune messages:read Cheie live

Parametri din cale

  • message integer Obligatoriu

    ID-ul mesajului.

    Exemplu: 7001

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /messages/{message}
curl "https://api.worbo.app/v1/messages/7001" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 7001,
    "contact_id": 123,
    "number_id": 3,
    "direction": "outbound",
    "type": "template",
    "text": "string",
    "untrusted_text": "string",
    "template": {
      "name": "booking_confirmed",
      "language": "ro"
    },
    "category": "utility",
    "status": "pending",
    "reason": "string",
    "error_code": "string",
    "wamid": "string",
    "created_at": "2026-10-15T09:00:00+03:00",
    "sent_at": "2026-10-15T09:00:00+03:00",
    "delivered_at": "2026-10-15T09:00:00+03:00",
    "read_at": "2026-10-15T09:00:00+03:00",
    "failed_at": "2026-10-15T09:00:00+03:00"
  }
}

Citește dovada unui mesaj trimis cu un template candidat suport durabil#

GET /messages/{message}/evidence Permisiune messages:read Cheie live

Textul exact primit de contact și documentul din antet păstrat de Worbo, cu amprentele lor SHA-256, și momentele raportate de Meta. Nu înlocuiește e-mailul cerut de lege.

Parametri din cale

  • message integer Obligatoriu

    ID-ul mesajului.

    Exemplu: 7001

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /messages/{message}/evidence
curl "https://api.worbo.app/v1/messages/7001/evidence" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 52,
    "message_id": 7001,
    "contact_id": 123,
    "number_id": 3,
    "template": {
      "name": "withdrawal_received",
      "language": "ro"
    },
    "recipient": "+40722123456",
    "wamid": "string",
    "text": "string",
    "text_sha256": "string",
    "document": {
      "name": "confirmare.pdf",
      "mime": "application/pdf",
      "size": 48213,
      "sha256": "string",
      "stored": true,
      "error": "string",
      "url": "string"
    },
    "sent_at": "2026-10-15T09:00:00+03:00",
    "delivered_at": "2026-10-15T09:00:00+03:00",
    "read_at": "2026-10-15T09:00:00+03:00",
    "failed_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00"
  }
}

Descarcă documentul păstrat ca dovadă a unui mesaj#

GET /messages/{message}/evidence/document Permisiune messages:read Cheie live

Parametri din cale

  • message integer Obligatoriu

    ID-ul mesajului.

    Exemplu: 7001

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /messages/{message}/evidence/document
curl "https://api.worbo.app/v1/messages/7001/evidence/document" \
  -H "Authorization: Bearer $WORBO_API_KEY"
Un fișier, așa cum a fost încărcat.

Referință

Seiful de documente#

Fișiere date unui contact printr-un link care expiră, anunțat pe WhatsApp și deschis doar cu un cod trimis la telefonul contactului.

Dă un fișier unui contact prin seif#

POST /vault Permisiune vault:write

Urcă întâi fișierul prin uploadFile. Contactul primește pe WhatsApp template-ul worbo_document, cu titlul, termenul și butonul care deschide linkul; linkul se deschide doar cu un cod trimis la telefonul lui. Răspunsul conține linkul, singura dată când apare: trimite-l și pe email, dacă e nevoie. Numărul are nevoie de template-urile seifului aprobate, create din pagina seifului.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • contact_id integer Obligatoriu
    Exemplu: 123
  • file_id integer Obligatoriu

    ID-ul unui fișier urcat prin uploadFile.

    Exemplu: 77
  • title string Obligatoriu

    Titlul pe care îl vede contactul, în mesaj și pe pagina linkului.

    Lungime maximă: 120 Exemplu: Rezultatul analizelor
  • expires_in_days integer

    Câte zile este valabil linkul, până la sfârșitul ultimei zile.

    Implicit: 7 Minim: 1 Maxim: 30
  • number_id integer null

Răspunsuri

POST /vault
curl -X POST "https://api.worbo.app/v1/vault" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": 123,
    "file_id": 77,
    "title": "Rezultatul analizelor"
  }'
{
  "data": {
    "id": 15,
    "contact_id": 123,
    "file_id": 77,
    "number_id": 3,
    "title": "Rezultatul analizelor",
    "state": "active",
    "expires_at": "2026-10-15T09:00:00+03:00",
    "opened_at": "2026-10-15T09:00:00+03:00",
    "opens": 1,
    "message_id": 7001,
    "created_at": "2026-10-15T09:00:00+03:00",
    "url": "https://example.com"
  }
}

Citește un document din seif, cu starea linkului și deschiderile#

GET /vault/{vault} Permisiune vault:read Cheie live

Parametri din cale

  • vault integer Obligatoriu

    ID-ul documentului din seif.

    Exemplu: 15

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /vault/{vault}
curl "https://api.worbo.app/v1/vault/15" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 15,
    "contact_id": 123,
    "file_id": 77,
    "number_id": 3,
    "title": "Rezultatul analizelor",
    "state": "active",
    "expires_at": "2026-10-15T09:00:00+03:00",
    "opened_at": "2026-10-15T09:00:00+03:00",
    "opens": 1,
    "message_id": 7001,
    "created_at": "2026-10-15T09:00:00+03:00",
    "url": "https://example.com"
  }
}

Retrage linkul unui document din seif#

DELETE /vault/{vault} Permisiune vault:write

Parametri din cale

  • vault integer Obligatoriu

    ID-ul documentului din seif.

    Exemplu: 15

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

DELETE /vault/{vault}
curl -X DELETE "https://api.worbo.app/v1/vault/15" \
  -H "Authorization: Bearer $WORBO_API_KEY"
Fără conținut

Referință

Coduri de verificare#

Coduri de unică folosință trimise pe WhatsApp cu template-ul de autentificare al numărului, verificate de Worbo sau de organizație.

Trimite un cod de verificare pe WhatsApp#

POST /otp Permisiune otp:send

Fără code, Worbo generează un cod din 6 cifre, valabil 10 minute, și îl verifică prin verifyOtp; cu code, organizația îl verifică singură. Mesajul pleacă imediat, cu template-ul de autentificare al numărului, aprobat din pagina lui. Un telefon despre care se știe că nu are WhatsApp primește imediat otp_undeliverable, ca site-ul să ofere SMS sau email; altfel, eșecul vine ca status al mesajului și prin webhook-ul message.failed. Un telefon primește cel mult 5 coduri în 15 minute și unul la 30 de secunde (otp_rate_limited, otp_too_soon). Codul nu apare niciodată în răspunsuri, webhooks sau inbox.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • phone string Obligatoriu

    Telefonul care primește codul, în format internațional.

    Exemplu: +40722123456
  • code string

    Codul generat de organizație, care îl verifică singură; fără el, Worbo generează codul și îl verifică.

    Exemplu: 482913
  • number_id integer null
  • language string

    Limba mesajului; implicit, limba contactului.

    Exemplu: ro
  • purpose string

    La ce folosește codul, păstrat cu el, de exemplu login sau document.

    Lungime maximă: 64 Exemplu: login

Răspunsuri

POST /otp
curl -X POST "https://api.worbo.app/v1/otp" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "+40722123456",
    "code": "482913",
    "language": "ro",
    "purpose": "login"
  }'
{
  "data": {
    "id": 880,
    "phone": "+40722123456",
    "purpose": "login",
    "verifiable": true,
    "expires_at": "2026-10-15T09:00:00+03:00",
    "message_id": 7001,
    "status": "pending"
  }
}

Verifică un cod de verificare generat de Worbo#

POST /otp/{otp}/verify Permisiune otp:verify

Un cod se folosește o singură dată, în termenul lui, cu cel mult 5 încercări; răspunsul spune de ce o verificare nu a reușit. Un cod dat de organizație primește 409 otp_not_verifiable.

Parametri din cale

  • otp integer Obligatoriu

    ID-ul codului de verificare, din răspunsul care l-a trimis.

    Exemplu: 880

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • code string Obligatoriu
    Exemplu: 482913

Răspunsuri

POST /otp/{otp}/verify
curl -X POST "https://api.worbo.app/v1/otp/880/verify" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "482913"
  }'
{
  "data": {
    "id": 880,
    "verified": true,
    "reason": "wrong_code",
    "attempts_left": 4
  }
}

Referință

Recomandări#

Regulile motorului de recomandări și ce ar recomanda acum una dintre ele unui contact, cu motivul fiecărui articol.

Listează regulile de recomandare#

GET /recommendation-rules Permisiune recommendations:read

Regulile active, făcute în dashboard la Recomandări: catalogul, tipurile în ordinea lor, numărul de articole și cooldown-urile. Automatizările le folosesc după cheie.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /recommendation-rules
curl "https://api.worbo.app/v1/recommendation-rules" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "key": "ecom.cross_sell",
      "name": "Bought together",
      "catalog": "ecom.products",
      "types": [
        {
          "type": "co_purchase",
          "params": {}
        }
      ],
      "max_items": 3,
      "contact_cooldown_days": 14,
      "item_cooldown_days": 30,
      "fill_bestsellers": true
    }
  ]
}

Citește rezultatele unei reguli de recomandare#

GET /recommendation-rules/{rule}/results Permisiune recommendations:read Cheie live

Pe o perioadă, implicit ultimele 30 de zile: recomandările trimise și destinatarii lor, pașii săriți pe motive, clicurile pe articole, conversiile în 7 zile de la mesaj (o comandă pentru produse, o rezervare pentru clase, un abonament pentru planuri), venitul per destinatar, grupul de control al automatizărilor, dezabonările de după mesaj și costul Meta per conversie.

Parametri din cale

  • rule string Obligatoriu

    Cheia regulii de recomandare.

    Exemplu: ecom.cross_sell

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /recommendation-rules/{rule}/results
curl "https://api.worbo.app/v1/recommendation-rules/ecom.cross_sell/results" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "rule": "ecom.cross_sell",
    "from": "2026-10-15T09:00:00+03:00",
    "to": "2026-10-15T09:00:00+03:00",
    "sent": 120,
    "recipients": 118,
    "skipped": {},
    "clicks": 34,
    "clickers": 29,
    "items": [
      {
        "id": 310,
        "name": "Filtre de cafea",
        "clicks": 12
      }
    ],
    "goals": [
      "order.created"
    ],
    "conversions": 9,
    "conversion_rate": 0.075,
    "revenue": 1840.5,
    "revenue_per_recipient": 15.6,
    "currency": "RON",
    "control": {
      "contacts": 13,
      "conversions": 0,
      "rate": 0
    },
    "lift": 0.075,
    "opt_outs": 1,
    "cost": 18.4,
    "cost_per_conversion": 2.04
  }
}

Previzualizează o regulă de recomandare pe un contact#

POST /recommendations/preview Permisiune recommendations:read Cheie live

Ce ar recomanda acum regula contactului, cu motivul fiecărui articol, articolele lăsate deoparte și de ce, cooldown-ul regulii și consimțământul cerut. Nu se trimite nimic, iar cooldown-urile rămân cum sunt. Recomandările din istoricul contactului cer scopul recomandări personalizate pe lângă marketing.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • rule string Obligatoriu
    Exemplu: ecom.cross_sell
  • contact_id integer Obligatoriu
    Exemplu: 123

Răspunsuri

POST /recommendations/preview
curl -X POST "https://api.worbo.app/v1/recommendations/preview" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "rule": "ecom.cross_sell",
    "contact_id": 123
  }'
{
  "data": {
    "rule": "ecom.cross_sell",
    "contact_id": 123,
    "items": [
      {
        "id": 310,
        "name": "Filtre de cafea",
        "price": 19.9,
        "currency": "RON",
        "url": "string",
        "image_url": "string",
        "type": "co_purchase",
        "score": 5,
        "reason": "Often bought together with Coffee beans 1kg (5 orders).",
        "details": {}
      }
    ],
    "excluded": {},
    "empty": "cooldown",
    "cooldown_until": "2026-10-15T09:00:00+03:00",
    "purpose": "marketing",
    "sendable": true,
    "consent_reason": "string"
  }
}

Referință

Template-uri#

Template-urile WhatsApp: ciornele verificate de linter, trimiterea la Meta și statusul.

Listează template-urile#

GET /templates Permisiune templates:read

Parametri de query

  • number_id integer

    Doar template-urile acestui număr.

    Exemplu: 3
  • status string

    Doar template-urile cu acest status.

    Exemplu: approved
  • name string

    Doar template-urile cu acest nume.

    Exemplu: booking_confirmed
  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /templates
curl "https://api.worbo.app/v1/templates" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 31,
      "number_id": 3,
      "name": "booking_confirmed",
      "language": "ro",
      "category": "utility",
      "status": "approved",
      "rejected_reason": "string",
      "quality": "string",
      "components": [
        {}
      ],
      "variables": [
        {
          "example": "Ana",
          "field": "contact.first_name"
        }
      ],
      "source": "string",
      "submitted_at": "2026-10-15T09:00:00+03:00",
      "created_at": "2026-10-15T09:00:00+03:00",
      "updated_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Creează ciorna unui template, verificată de linter#

POST /templates Permisiune templates:write

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • number_id integer null
  • name string Obligatoriu
    Exemplu: booking_confirmed
  • language string Obligatoriu
    Exemplu: ro
  • category string Obligatoriu
    Valori posibile: utility marketing
  • body string Obligatoriu
    Exemplu: Bună, {{1}}. Rezervarea ta pentru {{2}} este confirmată.
  • examples string[]
  • fields string[]

    Pentru fiecare variabilă, câmpul care o completează, de exemplu contact.first_name, sau null.

  • header_format string
  • header_text string
  • header_example string
  • footer string
  • buttons object[]

Răspunsuri

POST /templates
curl -X POST "https://api.worbo.app/v1/templates" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "booking_confirmed",
    "language": "ro",
    "category": "utility",
    "body": "Bună, {{1}}. Rezervarea ta pentru {{2}} este confirmată.",
    "examples": [
      "Ana",
      "3 octombrie, 18:00"
    ],
    "fields": [
      "contact.first_name",
      null
    ]
  }'
{
  "data": {
    "id": 31,
    "number_id": 3,
    "name": "booking_confirmed",
    "language": "ro",
    "category": "utility",
    "status": "approved",
    "rejected_reason": "string",
    "quality": "string",
    "components": [
      {}
    ],
    "variables": [
      {
        "example": "Ana",
        "field": "contact.first_name"
      }
    ],
    "source": "string",
    "submitted_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00",
    "lint": {}
  }
}

Citește un template#

GET /templates/{template} Permisiune templates:read

Parametri din cale

  • template integer Obligatoriu

    ID-ul template-ului.

    Exemplu: 31

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /templates/{template}
curl "https://api.worbo.app/v1/templates/31" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 31,
    "number_id": 3,
    "name": "booking_confirmed",
    "language": "ro",
    "category": "utility",
    "status": "approved",
    "rejected_reason": "string",
    "quality": "string",
    "components": [
      {}
    ],
    "variables": [
      {
        "example": "Ana",
        "field": "contact.first_name"
      }
    ],
    "source": "string",
    "submitted_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Trimite un template la Meta#

POST /templates/{template}/submit Permisiune templates:write

Oprit de linter, cu motivul, sau acceptat, cu statusul „în revizuire”.

Parametri din cale

  • template integer Obligatoriu

    ID-ul template-ului.

    Exemplu: 31

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

POST /templates/{template}/submit
curl -X POST "https://api.worbo.app/v1/templates/31/submit" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
{
  "data": {
    "id": 31,
    "number_id": 3,
    "name": "booking_confirmed",
    "language": "ro",
    "category": "utility",
    "status": "approved",
    "rejected_reason": "string",
    "quality": "string",
    "components": [
      {}
    ],
    "variables": [
      {
        "example": "Ana",
        "field": "contact.first_name"
      }
    ],
    "source": "string",
    "submitted_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Referință

Oferte#

Ofertele găsite după cod și folosite, la recepție sau în software-ul sursei.

Găsește o ofertă după cod#

GET /offers/{code} Permisiune objects:read Cheie live

Parametri din cale

  • code string Obligatoriu

    Codul ofertei.

    Exemplu: AUTUMN-7KQ2

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /offers/{code}
curl "https://api.worbo.app/v1/offers/AUTUMN-7KQ2" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 456,
    "type": "fit.membership",
    "source": "string",
    "external_id": "abn-7781",
    "title": "Full access 12 luni",
    "fields": {
      "plan": 12,
      "starts_on": "2026-09-01",
      "ends_on": "2027-08-31"
    },
    "statuses": {
      "lifecycle": "active",
      "payment": "ok"
    },
    "raw_status": "string",
    "relations": [
      {
        "id": 77,
        "contact_id": 123,
        "role": "holder",
        "primary": true,
        "muted": false,
        "valid_from": "2026-10-15",
        "valid_until": "2026-10-15"
      }
    ],
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Marchează o ofertă ca folosită#

POST /offers/{code}/redeem Permisiune objects:write

Parametri din cale

  • code string Obligatoriu

    Codul ofertei.

    Exemplu: AUTUMN-7KQ2

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • location_id integer null
  • beneficiary_contact_id integer null
  • occurred_at string null
    Format: date-time

Răspunsuri

POST /offers/{code}/redeem
curl -X POST "https://api.worbo.app/v1/offers/AUTUMN-7KQ2/redeem" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{}'
{
  "data": {
    "id": 456,
    "type": "fit.membership",
    "source": "string",
    "external_id": "abn-7781",
    "title": "Full access 12 luni",
    "fields": {
      "plan": 12,
      "starts_on": "2026-09-01",
      "ends_on": "2027-08-31"
    },
    "statuses": {
      "lifecycle": "active",
      "payment": "ok"
    },
    "raw_status": "string",
    "relations": [
      {
        "id": 77,
        "contact_id": 123,
        "role": "holder",
        "primary": true,
        "muted": false,
        "valid_from": "2026-10-15",
        "valid_until": "2026-10-15"
      }
    ],
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Referință

Segmente#

Segmentele dinamice de contacte, numărate pe loc.

Listează segmentele#

GET /segments Permisiune segments:read Cheie live

Parametri de query

  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /segments
curl "https://api.worbo.app/v1/segments" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 12,
      "name": "Toți membrii",
      "description": "string",
      "definition": {
        "match": "all",
        "conditions": [
          {
            "type": "field",
            "field": "first_name",
            "operator": "not_empty"
          }
        ]
      },
      "last_count": 240,
      "counted_at": "2026-10-15T09:00:00+03:00",
      "created_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Creează un segment#

POST /segments Permisiune segments:write

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • name string Obligatoriu
    Exemplu: Toți membrii
  • description string
  • definition object Obligatoriu
    Arată câmpurileAscunde câmpurile
    • match string Obligatoriu
      Valori posibile: all any
    • conditions object[] Obligatoriu

Răspunsuri

POST /segments
curl -X POST "https://api.worbo.app/v1/segments" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Toți membrii",
    "definition": {
      "match": "all",
      "conditions": [
        {
          "type": "field",
          "field": "first_name",
          "operator": "not_empty"
        }
      ]
    }
  }'
{
  "data": {
    "id": 12,
    "name": "Toți membrii",
    "description": "string",
    "definition": {
      "match": "all",
      "conditions": [
        {
          "type": "field",
          "field": "first_name",
          "operator": "not_empty"
        }
      ]
    },
    "last_count": 240,
    "counted_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00"
  }
}

Numără contactele unei definiții, fără să o salveze#

POST /segments/count Permisiune segments:write

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • definition object Obligatoriu
    Arată câmpurileAscunde câmpurile
    • match string Obligatoriu
      Valori posibile: all any
    • conditions object[] Obligatoriu

Răspunsuri

POST /segments/count
curl -X POST "https://api.worbo.app/v1/segments/count" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "definition": {
      "match": "all",
      "conditions": [
        {
          "type": "field",
          "field": "first_name",
          "operator": "not_empty"
        }
      ]
    }
  }'
{
  "data": {
    "count": 240
  }
}

Citește un segment, cu numărul lui curent#

GET /segments/{segment} Permisiune segments:read Cheie live

Parametri din cale

  • segment integer Obligatoriu

    ID-ul segmentului.

    Exemplu: 12

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /segments/{segment}
curl "https://api.worbo.app/v1/segments/12" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 12,
    "name": "Toți membrii",
    "description": "string",
    "definition": {
      "match": "all",
      "conditions": [
        {
          "type": "field",
          "field": "first_name",
          "operator": "not_empty"
        }
      ]
    },
    "last_count": 240,
    "counted_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00",
    "count": 240
  }
}

Referință

Automatizări#

Citirea automatizărilor, pornirea uneia pentru un contact și scoaterea unui contact dintr-o rulare.

Listează automatizările#

GET /automations Permisiune automations:read

Parametri de query

  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /automations
curl "https://api.worbo.app/v1/automations" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 8,
      "name": "Recâștigare",
      "status": "active",
      "trigger": "manual",
      "number_id": 3,
      "recipe": "string",
      "version_id": 14,
      "holdout_percent": 0,
      "created_at": "2026-10-15T09:00:00+03:00",
      "updated_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Citește o automatizare, cu definiția și cifrele ei#

GET /automations/{automation} Permisiune automations:read

Parametri din cale

  • automation integer Obligatoriu

    ID-ul automatizării.

    Exemplu: 8

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /automations/{automation}
curl "https://api.worbo.app/v1/automations/8" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 8,
    "name": "Recâștigare",
    "status": "active",
    "trigger": "manual",
    "number_id": 3,
    "recipe": "string",
    "version_id": 14,
    "holdout_percent": 0,
    "created_at": "2026-10-15T09:00:00+03:00",
    "updated_at": "2026-10-15T09:00:00+03:00",
    "definition": {},
    "report": {}
  }
}

Pornește o automatizare pentru un contact#

POST /automations/{automation}/runs Permisiune automations:run

Doar o automatizare activă, cu pornire manuală. Rularea ia cel mai nou obiect al contactului de tipul ales în declanșator; același Idempotency-Key o pornește o singură dată.

Parametri din cale

  • automation integer Obligatoriu

    ID-ul automatizării.

    Exemplu: 8

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • contact_id integer Obligatoriu
    Exemplu: 123

Răspunsuri

POST /automations/{automation}/runs
curl -X POST "https://api.worbo.app/v1/automations/8/runs" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": 123
  }'
{
  "data": {
    "id": 3301,
    "automation_id": 8,
    "contact_id": 123,
    "object_id": 1,
    "status": "active",
    "exit_reason": "string",
    "held_out": false,
    "started_at": "2026-10-15T09:00:00+03:00",
    "finished_at": "2026-10-15T09:00:00+03:00",
    "converted_at": "2026-10-15T09:00:00+03:00"
  }
}

Scoate un contact dintr-o rulare#

DELETE /automations/{automation}/runs/{run} Permisiune automations:run

Parametri din cale

  • automation integer Obligatoriu

    ID-ul automatizării.

    Exemplu: 8
  • run integer Obligatoriu

    ID-ul rulării.

    Exemplu: 3301

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

DELETE /automations/{automation}/runs/{run}
curl -X DELETE "https://api.worbo.app/v1/automations/8/runs/3301" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 3301,
    "automation_id": 8,
    "contact_id": 123,
    "object_id": 1,
    "status": "active",
    "exit_reason": "string",
    "held_out": false,
    "started_at": "2026-10-15T09:00:00+03:00",
    "finished_at": "2026-10-15T09:00:00+03:00",
    "converted_at": "2026-10-15T09:00:00+03:00"
  }
}

Referință

Campanii#

Ciornele campaniilor și estimarea lor; lansarea se aprobă în dashboard.

Listează campaniile#

GET /campaigns Permisiune campaigns:read

Parametri de query

  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /campaigns
curl "https://api.worbo.app/v1/campaigns" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 21,
      "name": "Oferta de toamnă",
      "status": "draft",
      "kind": "template",
      "text": "string",
      "object_id": 1,
      "object_roles": [
        "string"
      ],
      "purpose": "marketing",
      "number_id": 3,
      "template": "autumn_offer",
      "variables": [
        "string"
      ],
      "header_text": "string",
      "topic": "string",
      "segment_id": 12,
      "location_id": 1,
      "scheduled_at": "2026-10-15T09:00:00+03:00",
      "expires_at": "2026-10-15T09:00:00+03:00",
      "wave_by": "size",
      "wave_size": 1,
      "wave_hours": 24,
      "wave_segments": [
        1
      ],
      "budget": "250.00",
      "total": 1,
      "processed": 1,
      "created_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Creează ciorna unei campanii#

POST /campaigns Permisiune campaigns:write

Momentele vin în ISO 8601, cu fusul lor orar. Lansarea se aprobă în dashboard.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • name string Obligatoriu
    Exemplu: Oferta de toamnă
  • kind string

    free: un mesaj liber, fără template, doar către contactele cu fereastra de 24h deschisă pe număr. object: un template utility către oamenii unui obiect, în locul unui segment.

    Implicit: template Valori posibile: template free object
  • object_id integer null

    Cu kind object: obiectul ai cărui oameni primesc anunțul.

    Exemplu: 456
  • object_roles string[] null

    Cu kind object: rolurile oamenilor care îl primesc; fără roluri, toți.

  • text string null

    Mesajul liber, același pentru toți; doar cu kind free.

    Lungime maximă: 4096
  • purpose string null

    Ce este mesajul liber: marketing, cu acordul și plafonul lui, sau informare.

    Valori posibile: marketing transactional
  • number_id integer null
    Exemplu: 3
  • template string null
    Exemplu: autumn_offer
  • variables string[]
  • header_text string null
  • topic string null
  • segment_id integer null
    Exemplu: 12
  • location_id integer null
  • scheduled_at string null
    Format: date-time Exemplu: 2026-10-20T10:00:00+03:00
  • expires_at string null
    Format: date-time
  • wave_by string
    Valori posibile: size location segment
  • wave_size integer null
  • wave_hours integer
    Exemplu: 24
  • wave_segments integer[] null
  • budget number null

Răspunsuri

POST /campaigns
curl -X POST "https://api.worbo.app/v1/campaigns" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Oferta de toamnă",
    "object_id": 456,
    "object_roles": [
      "holder"
    ],
    "number_id": 3,
    "template": "autumn_offer",
    "segment_id": 12,
    "scheduled_at": "2026-10-20T10:00:00+03:00",
    "wave_by": "size",
    "wave_hours": 24
  }'
{
  "data": {
    "id": 21,
    "name": "Oferta de toamnă",
    "status": "draft",
    "kind": "template",
    "text": "string",
    "object_id": 1,
    "object_roles": [
      "string"
    ],
    "purpose": "marketing",
    "number_id": 3,
    "template": "autumn_offer",
    "variables": [
      "string"
    ],
    "header_text": "string",
    "topic": "string",
    "segment_id": 12,
    "location_id": 1,
    "scheduled_at": "2026-10-15T09:00:00+03:00",
    "expires_at": "2026-10-15T09:00:00+03:00",
    "wave_by": "size",
    "wave_size": 1,
    "wave_hours": 24,
    "wave_segments": [
      1
    ],
    "budget": "250.00",
    "total": 1,
    "processed": 1,
    "created_at": "2026-10-15T09:00:00+03:00"
  }
}

Citește o campanie, cu raportul mesajelor și costul#

GET /campaigns/{campaign} Permisiune campaigns:read

Parametri din cale

  • campaign integer Obligatoriu

    ID-ul campaniei.

    Exemplu: 21

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /campaigns/{campaign}
curl "https://api.worbo.app/v1/campaigns/21" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 21,
    "name": "Oferta de toamnă",
    "status": "draft",
    "kind": "template",
    "text": "string",
    "object_id": 1,
    "object_roles": [
      "string"
    ],
    "purpose": "marketing",
    "number_id": 3,
    "template": "autumn_offer",
    "variables": [
      "string"
    ],
    "header_text": "string",
    "topic": "string",
    "segment_id": 12,
    "location_id": 1,
    "scheduled_at": "2026-10-15T09:00:00+03:00",
    "expires_at": "2026-10-15T09:00:00+03:00",
    "wave_by": "size",
    "wave_size": 1,
    "wave_hours": 24,
    "wave_segments": [
      1
    ],
    "budget": "250.00",
    "total": 1,
    "processed": 1,
    "created_at": "2026-10-15T09:00:00+03:00",
    "report": {}
  }
}

Estimează audiența și costul unei campanii#

POST /campaigns/{campaign}/estimate Permisiune campaigns:write

Cu aceleași excluderi ca la lansare: fără WhatsApp, fără consimțământ, de nelivrat, plafonul de frecvență.

Parametri din cale

  • campaign integer Obligatoriu

    ID-ul campaniei.

    Exemplu: 21

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

POST /campaigns/{campaign}/estimate
curl -X POST "https://api.worbo.app/v1/campaigns/21/estimate" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
{
  "data": {
    "audience": 240,
    "contactable": 198,
    "excluded": {
      "whatsapp": 12,
      "consent": 28,
      "optin": 10,
      "marketing": 18,
      "window": 0,
      "undeliverable": 2
    },
    "capped": 0,
    "other_countries": 0,
    "number": {
      "quality": "GREEN",
      "marketing_paused_until": "2026-10-15T09:00:00+03:00"
    },
    "united_states": 0,
    "template": {},
    "cost": {
      "amount": 10.79,
      "free": 0,
      "rate": 0.0545,
      "currency": "EUR",
      "country": "RO",
      "budget_messages": 1
    },
    "waves": {
      "count": 1,
      "per_day": 198,
      "last_at": "2026-10-15T09:00:00+03:00",
      "sizes": [
        {}
      ]
    },
    "limit": {
      "daily": 1000,
      "days": 1,
      "over": false
    },
    "start": "2026-10-15T09:00:00+03:00",
    "quiet_until": "2026-10-15T09:00:00+03:00",
    "ends_before_last_wave": false
  }
}

Referință

Conversații#

Inboxul: conversațiile, mesajele lor, răspunsurile, alocarea și închiderea.

Listează conversațiile#

GET /conversations Permisiune conversations:read Cheie live

Parametri de query

  • status string

    Doar conversațiile cu acest status.

    Valori posibile: open pending resolved
  • contact_id integer

    Doar conversațiile acestui contact.

    Exemplu: 123
  • assigned_user_id integer

    Doar conversațiile alocate acestui membru.

    Exemplu: 5
  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /conversations
curl "https://api.worbo.app/v1/conversations" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 640,
      "contact_id": 123,
      "number_id": 3,
      "status": "open",
      "assigned_user_id": 1,
      "assigned_team_id": 1,
      "unread": 1,
      "last_message_at": "2026-10-15T09:00:00+03:00",
      "last_message_direction": "inbound",
      "last_message_preview": "string",
      "untrusted_last_message_preview": "string",
      "window_closes_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Listează mesajele unei conversații#

GET /conversations/{conversation}/messages Permisiune conversations:read Cheie live

Parametri din cale

  • conversation integer Obligatoriu

    ID-ul conversației.

    Exemplu: 640

Parametri de query

  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /conversations/{conversation}/messages
curl "https://api.worbo.app/v1/conversations/640/messages" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 7001,
      "contact_id": 123,
      "number_id": 3,
      "direction": "outbound",
      "type": "template",
      "text": "string",
      "untrusted_text": "string",
      "template": {
        "name": "booking_confirmed",
        "language": "ro"
      },
      "category": "utility",
      "status": "pending",
      "reason": "string",
      "error_code": "string",
      "wamid": "string",
      "created_at": "2026-10-15T09:00:00+03:00",
      "sent_at": "2026-10-15T09:00:00+03:00",
      "delivered_at": "2026-10-15T09:00:00+03:00",
      "read_at": "2026-10-15T09:00:00+03:00",
      "failed_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Răspunde cu un text liber, în fereastra de 24 de ore#

POST /conversations/{conversation}/messages Permisiune conversations:reply

Parametri din cale

  • conversation integer Obligatoriu

    ID-ul conversației.

    Exemplu: 640

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • text string Obligatoriu
    Exemplu: Bună! Cu ce vă ajutăm?

Răspunsuri

POST /conversations/{conversation}/messages
curl -X POST "https://api.worbo.app/v1/conversations/640/messages" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Bună! Cu ce vă ajutăm?"
  }'
{
  "data": {
    "id": 7001,
    "contact_id": 123,
    "number_id": 3,
    "direction": "outbound",
    "type": "template",
    "text": "string",
    "untrusted_text": "string",
    "template": {
      "name": "booking_confirmed",
      "language": "ro"
    },
    "category": "utility",
    "status": "pending",
    "reason": "string",
    "error_code": "string",
    "wamid": "string",
    "created_at": "2026-10-15T09:00:00+03:00",
    "sent_at": "2026-10-15T09:00:00+03:00",
    "delivered_at": "2026-10-15T09:00:00+03:00",
    "read_at": "2026-10-15T09:00:00+03:00",
    "failed_at": "2026-10-15T09:00:00+03:00"
  }
}

Alocă o conversație unui membru#

POST /conversations/{conversation}/assign Permisiune conversations:reply

Parametri din cale

  • conversation integer Obligatoriu

    ID-ul conversației.

    Exemplu: 640

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • user_id integer Obligatoriu null

    Membrul care preia conversația; null o lasă nealocată.

    Exemplu: 5

Răspunsuri

POST /conversations/{conversation}/assign
curl -X POST "https://api.worbo.app/v1/conversations/640/assign" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": 5
  }'
{
  "data": {
    "id": 640,
    "contact_id": 123,
    "number_id": 3,
    "status": "open",
    "assigned_user_id": 1,
    "assigned_team_id": 1,
    "unread": 1,
    "last_message_at": "2026-10-15T09:00:00+03:00",
    "last_message_direction": "inbound",
    "last_message_preview": "string",
    "untrusted_last_message_preview": "string",
    "window_closes_at": "2026-10-15T09:00:00+03:00"
  }
}

Închide o conversație#

POST /conversations/{conversation}/close Permisiune conversations:reply

Parametri din cale

  • conversation integer Obligatoriu

    ID-ul conversației.

    Exemplu: 640

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

POST /conversations/{conversation}/close
curl -X POST "https://api.worbo.app/v1/conversations/640/close" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
{
  "data": {
    "id": 640,
    "contact_id": 123,
    "number_id": 3,
    "status": "open",
    "assigned_user_id": 1,
    "assigned_team_id": 1,
    "unread": 1,
    "last_message_at": "2026-10-15T09:00:00+03:00",
    "last_message_direction": "inbound",
    "last_message_preview": "string",
    "untrusted_last_message_preview": "string",
    "window_closes_at": "2026-10-15T09:00:00+03:00"
  }
}

Referință

Cataloage#

Produse, servicii, clase, abonamente și locații, scrise unul câte unul sau în lot.

Listează cataloagele#

GET /catalogs Permisiune catalogs:read

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /catalogs
curl "https://api.worbo.app/v1/catalogs" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "key": "fit.classes",
      "name": "Classes",
      "kind": "class",
      "currency": "RON",
      "source": "fitness"
    }
  ]
}

Listează articolele unui catalog#

GET /catalogs/{catalog}/items Permisiune catalogs:read

Parametri din cale

  • catalog string Obligatoriu

    Cheia catalogului, de exemplu fit.classes.

    Exemplu: fit.classes

Parametri de query

  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /catalogs/{catalog}/items
curl "https://api.worbo.app/v1/catalogs/fit.classes/items" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 310,
      "external_id": "yoga",
      "sku": "string",
      "name": "Yoga",
      "price": "50.00",
      "currency": "RON",
      "stock": 1,
      "available": true,
      "recommendable": true,
      "url": "string",
      "image_url": "string",
      "fields": {},
      "updated_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Creează sau actualizează un articol după ID-ul lui la sursă#

POST /catalogs/{catalog}/items Permisiune catalogs:write

Parametri din cale

  • catalog string Obligatoriu

    Cheia catalogului, de exemplu fit.classes.

    Exemplu: fit.classes

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • id integer
  • external_id string
    Exemplu: yoga
  • name string
    Exemplu: Yoga
  • sku string
  • price number
    Exemplu: 50
  • currency string
    Exemplu: RON
  • stock integer
  • available boolean
    Exemplu: true
  • recommendable boolean
    Exemplu: true
  • url string
  • image_url string
  • custom object

Răspunsuri

POST /catalogs/{catalog}/items
curl -X POST "https://api.worbo.app/v1/catalogs/fit.classes/items" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "yoga",
    "name": "Yoga",
    "price": 50,
    "currency": "RON",
    "available": true,
    "recommendable": true
  }'
{
  "data": {
    "id": 310,
    "external_id": "yoga",
    "sku": "string",
    "name": "Yoga",
    "price": "50.00",
    "currency": "RON",
    "stock": 1,
    "available": true,
    "recommendable": true,
    "url": "string",
    "image_url": "string",
    "fields": {},
    "updated_at": "2026-10-15T09:00:00+03:00"
  }
}

Creează sau actualizează cel mult 100 de articole#

POST /catalogs/{catalog}/items/batch Permisiune catalogs:write

Parametri din cale

  • catalog string Obligatoriu

    Cheia catalogului, de exemplu fit.classes.

    Exemplu: fit.classes

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • items object[] Obligatoriu
    Arată câmpurileAscunde câmpurile
    • id integer
    • external_id string
      Exemplu: yoga
    • name string
      Exemplu: Yoga
    • sku string
    • price number
      Exemplu: 50
    • currency string
      Exemplu: RON
    • stock integer
    • available boolean
      Exemplu: true
    • recommendable boolean
      Exemplu: true
    • url string
    • image_url string
    • custom object

Răspunsuri

POST /catalogs/{catalog}/items/batch
curl -X POST "https://api.worbo.app/v1/catalogs/fit.classes/items/batch" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "external_id": "yoga",
        "name": "Yoga",
        "price": 50,
        "currency": "RON",
        "available": true,
        "recommendable": true
      }
    ]
  }'
{
  "data": [
    {
      "index": 0,
      "status": "created",
      "data": {
        "id": 310,
        "external_id": "yoga",
        "sku": "string",
        "name": "Yoga",
        "price": "50.00",
        "currency": "RON",
        "stock": 1,
        "available": true,
        "recommendable": true,
        "url": "string",
        "image_url": "string",
        "fields": {},
        "updated_at": "2026-10-15T09:00:00+03:00"
      },
      "error": {
        "type": "https://worbo.app/docs/api/errors/validation_failed",
        "title": "The request is not valid",
        "status": 422,
        "detail": "The name field is required.",
        "code": "validation_failed",
        "errors": {
          "name": [
            "The name field is required."
          ]
        }
      }
    }
  ]
}

Referință

Webhooks#

Endpoint-urile care primesc evenimentele Worbo, livrările și reluările lor.

Listează endpoint-urile de webhook#

GET /webhook-endpoints Permisiune webhooks:manage

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /webhook-endpoints
curl "https://api.worbo.app/v1/webhook-endpoints" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 4,
      "url": "https://crm.example.com/worbo",
      "description": "string",
      "events": [
        "contact.created",
        "message.received"
      ],
      "payload": "snapshot",
      "enabled": true,
      "disabled_reason": "string",
      "failing_since": "2026-10-15T09:00:00+03:00",
      "last_success_at": "2026-10-15T09:00:00+03:00",
      "created_at": "2026-10-15T09:00:00+03:00"
    }
  ]
}

Adaugă un endpoint de webhook#

POST /webhook-endpoints Permisiune webhooks:manage

Secretul de semnare vine în răspuns, doar acum.

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • url string Obligatoriu
    Format: uri Exemplu: https://crm.example.com/worbo
  • description string
  • events string[] Obligatoriu
  • payload string
    Valori posibile: snapshot thin

Răspunsuri

POST /webhook-endpoints
curl -X POST "https://api.worbo.app/v1/webhook-endpoints" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://crm.example.com/worbo",
    "events": [
      "contact.created",
      "message.received"
    ],
    "payload": "snapshot"
  }'
{
  "data": {
    "id": 4,
    "url": "https://crm.example.com/worbo",
    "description": "string",
    "events": [
      "contact.created",
      "message.received"
    ],
    "payload": "snapshot",
    "enabled": true,
    "disabled_reason": "string",
    "failing_since": "2026-10-15T09:00:00+03:00",
    "last_success_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00",
    "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"
  }
}

Schimbă adresa sau evenimentele unui endpoint#

PATCH /webhook-endpoints/{endpoint} Permisiune webhooks:manage

Parametri din cale

  • endpoint integer Obligatoriu

    ID-ul endpoint-ului de webhook.

    Exemplu: 4

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Corpul cereriiapplication/json

  • url string Obligatoriu
    Format: uri Exemplu: https://crm.example.com/worbo
  • description string
  • events string[] Obligatoriu
  • payload string
    Valori posibile: snapshot thin

Răspunsuri

PATCH /webhook-endpoints/{endpoint}
curl -X PATCH "https://api.worbo.app/v1/webhook-endpoints/4" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://crm.example.com/worbo",
    "events": [
      "contact.created",
      "message.received"
    ],
    "payload": "snapshot"
  }'
{
  "data": {
    "id": 4,
    "url": "https://crm.example.com/worbo",
    "description": "string",
    "events": [
      "contact.created",
      "message.received"
    ],
    "payload": "snapshot",
    "enabled": true,
    "disabled_reason": "string",
    "failing_since": "2026-10-15T09:00:00+03:00",
    "last_success_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00"
  }
}

Șterge un endpoint de webhook#

DELETE /webhook-endpoints/{endpoint} Permisiune webhooks:manage

Parametri din cale

  • endpoint integer Obligatoriu

    ID-ul endpoint-ului de webhook.

    Exemplu: 4

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

DELETE /webhook-endpoints/{endpoint}
curl -X DELETE "https://api.worbo.app/v1/webhook-endpoints/4" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "id": 4,
    "deleted": true
  }
}

Rotește secretul de semnare al unui endpoint#

POST /webhook-endpoints/{endpoint}/rotate Permisiune webhooks:manage

Secretul vechi rămâne valabil 24 de ore; între timp se trimit ambele semnături.

Parametri din cale

  • endpoint integer Obligatoriu

    ID-ul endpoint-ului de webhook.

    Exemplu: 4

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

POST /webhook-endpoints/{endpoint}/rotate
curl -X POST "https://api.worbo.app/v1/webhook-endpoints/4/rotate" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
{
  "data": {
    "id": 4,
    "url": "https://crm.example.com/worbo",
    "description": "string",
    "events": [
      "contact.created",
      "message.received"
    ],
    "payload": "snapshot",
    "enabled": true,
    "disabled_reason": "string",
    "failing_since": "2026-10-15T09:00:00+03:00",
    "last_success_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00",
    "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"
  }
}

Listează livrările evenimentelor#

GET /webhook-deliveries Permisiune webhooks:manage

Parametri de query

  • endpoint_id integer

    Doar livrările către acest endpoint.

    Exemplu: 4
  • status string

    Doar livrările cu acest status.

    Valori posibile: pending delivered failed
  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /webhook-deliveries
curl "https://api.worbo.app/v1/webhook-deliveries" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "id": 9001,
      "endpoint_id": 4,
      "event": {
        "id": "msg_2mF0",
        "type": "contact.created"
      },
      "status": "delivered",
      "attempts": 1,
      "last_status": 200,
      "last_error": "string",
      "next_attempt_at": "2026-10-15T09:00:00+03:00",
      "delivered_at": "2026-10-15T09:00:00+03:00",
      "created_at": "2026-10-15T09:00:00+03:00"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Retrimite o livrare#

POST /webhook-deliveries/{delivery}/replay Permisiune webhooks:manage

Parametri din cale

  • delivery integer Obligatoriu

    ID-ul livrării.

    Exemplu: 9001

Parametri de query

  • dry_run boolean

    Trece prin toate verificările și întoarce ce s-ar întâmpla, fără să salveze nimic.

Antete

  • Idempotency-Key string

    O cheie unică a cererii, de exemplu un UUID: o cerere repetată cu aceeași cheie primește primul răspuns, fără să se facă din nou lucrul.

    Lungime maximă: 255
  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

POST /webhook-deliveries/{delivery}/replay
curl -X POST "https://api.worbo.app/v1/webhook-deliveries/9001/replay" \
  -H "Authorization: Bearer $WORBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
{
  "data": {
    "id": 9001,
    "endpoint_id": 4,
    "event": {
      "id": "msg_2mF0",
      "type": "contact.created"
    },
    "status": "delivered",
    "attempts": 1,
    "last_status": 200,
    "last_error": "string",
    "next_attempt_at": "2026-10-15T09:00:00+03:00",
    "delivered_at": "2026-10-15T09:00:00+03:00",
    "created_at": "2026-10-15T09:00:00+03:00"
  }
}

Referință

Rapoarte#

Rezultatele unei perioade și conversiile automatizărilor.

Citește rezultatele unei perioade#

GET /reports/results Permisiune analytics:read

Automatizările cu grupul de control, linia de bază, valoarea și costul, în zilele organizației.

Parametri de query

  • from string Obligatoriu

    Prima zi a perioadei.

    Format: date Exemplu: 2026-10-01
  • to string Obligatoriu

    Ultima zi a perioadei.

    Format: date Exemplu: 2026-10-15
  • location_id integer

    Doar contactele acestei locații de bază.

    Exemplu: 7

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /reports/results
curl "https://api.worbo.app/v1/reports/results" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": {
    "from": "2026-09-30T21:00:00+00:00",
    "to": "2026-10-15T20:59:59+00:00",
    "journeys": [
      {
        "id": 8,
        "name": "Recâștigare",
        "conversion": "string",
        "entered": 40,
        "converted": 6,
        "control": {},
        "value": 1194,
        "sent": 40,
        "clicked": 11,
        "cost": 2.18
      }
    ],
    "conversions": [
      {}
    ],
    "baseline": {},
    "cost": {
      "amount": 2.18,
      "currency": "EUR"
    },
    "value": 1194
  }
}

Listează conversiile automatizărilor#

GET /conversions Permisiune analytics:read

Parametri de query

  • automation_id integer

    Doar conversiile acestei automatizări.

    Exemplu: 8
  • since string

    Doar ce s-a schimbat în acest moment sau după el.

    Format: date-time Exemplu: 2026-10-01T00:00:00+03:00
  • limit integer

    Câte elemente are o pagină, între 1 și 100.

    Implicit: 25 Minim: 1 Maxim: 100
  • cursor string

    next_cursor de la pagina anterioară.

Antete

  • Worbo-Version string

    Versiunea API, ca dată; fără ea, versiunea cheii.

    Valori posibile: 2026-10-05

Răspunsuri

GET /conversions
curl "https://api.worbo.app/v1/conversions" \
  -H "Authorization: Bearer $WORBO_API_KEY"
{
  "data": [
    {
      "run_id": 3301,
      "automation_id": 8,
      "contact_id": 123,
      "object_id": 1,
      "held_out": false,
      "converted_at": "2026-10-15T09:00:00+03:00",
      "event_id": 1,
      "value": 199,
      "currency": "RON"
    }
  ],
  "next_cursor": "string",
  "has_more": true
}

Cheia rămâne doar în acest tab al browserului și pleacă doar către API-ul Worbo. Cu o cheie wk_test_, fiecare scriere e o probă.

Trimite cererea ca să vezi răspunsul.