API референца

Интегришите enuchat у своје системе користећи Tenant API. Управљајте разговорима, шаљите поруке и приступајте подацима о наплати програмски.

Аутентификација

Сви API захтеви се аутентификују користећи API кључ послан у X-Api-Key заглављу.

Добијање вашег API кључа

  1. Идите на Подешавања → API кључеви у свом dashboard-у
  2. Кликните Креирај API кључ и дајте му име
  3. Одмах копирајте кључ — приказује се само једном
  4. Похраните га безбедно (варијабла окружења, менаџер тајни)

Слање захтева

Укључите кључ у сваки захтев:

curl -H "X-Api-Key: tak_your_key_here" \
     https://api.enuchat.com/api/v1/tenant-api/widgets

Сви одговори су JSON. Успешни одговори имају data поље. Грешке имају error поље са code и message.

Безбедност: API кључеви су хеширани (SHA-256) у нашој бази података. Никада не чувамо сирови кључ. Третирајте свој кључ као лозинку — не commit-ујте га у код нити делите јавно.

Основни URL

https://api.enuchat.com/api/v1/tenant-api

Сви endpoint-и испод су релативни у односу на овај основни URL.

Endpoint-и

GET /widgets

Листа свих widget-а за ваш налог.

Одговор

{'{'}
  "data": [
{'{'}
      "id": "019d19c6-7e0b-...",
      "name": "Main Website Chat",
      "isActive": true,
      "aiEnabled": true,
      "translationEnabled": true,
      "primaryColor": "#2563eb",
      "position": "bottom-right"
    }
  ]
}

GET /conversations

Листа разговора, поређана по најновијој поруци.

Query параметри

ПараметарТипОпис
statusstringФилтрирај по статусу: open, pending, closed
widgetIdstringФилтрирај по UUID widget-а
limitintegerМаксимални резултати (подразумевано 20, max 100)
offsetintegerПрескочи N резултата

Пример

curl -H "X-Api-Key: tak_..." \
     "https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"

Одговор

{'{'}
  "data": [
{'{'}
      "id": "019d6724-000e-...",
      "widgetId": "019d19c6-7e0b-...",
      "visitorId": "v-abc123",
      "visitorName": "John",
      "visitorEmail": "john{'@'}example.com",
      "visitorLanguage": "en",
      "status": "open",
      "assignedTo": null,
      "lastMessageAt": "2026-04-11T14:30:00+00:00",
      "startedAt": "2026-04-11T14:25:00+00:00"
    }
  ]
}

GET /conversations/{'{'}id}

Добијте разговор са свим порукама.

Query параметри

ПараметарТипОпис
limitintegerМаксимално порука (подразумевано 50, max 200)

Одговор

{'{'}
  "data": {'{'}
    "id": "019d6724-000e-...",
    "visitorLanguage": "en",
    "status": "open",
    "messages": [
{'{'}
        "id": "019d6724-1234-...",
        "role": "visitor",
        "content": "Hello, how much does it cost?",
        "contentLanguage": "en",
        "translatedContent": "Cześć, ile to kosztuje?",
        "translatedLanguage": "pl",
        "isAutoReply": false,
        "createdAt": "2026-04-11T14:25:30+00:00"
      },
{'{'}
        "id": "019d6724-5678-...",
        "role": "ai",
        "content": "Our plans start at €19/month...",
        "isAutoReply": true,
        "createdAt": "2026-04-11T14:25:32+00:00"
      }
    ]
  }
}

POST /conversations/{'{'}id}/messages

Пошаљи поруку у разговор. Порука ће бити испоручена посетиоцу у реалном времену путем chat widget-а.

Тело захтева

{'{'}
  "content": "Thanks for reaching out! We'll process your request.",
  "role": "system"
}
ПољеТипОпис
contentstringОбавезно. Текст поруке.
rolestringsystem (подразумевано) или operator

Одговор (201 Created)

{'{'}
  "data": {'{'}
    "id": "019d6725-abcd-...",
    "role": "system",
    "content": "Thanks for reaching out!",
    "createdAt": "2026-04-11T14:35:00+00:00"
  }
}

PATCH /conversations/{'{'}id}

Ажурирај статус или доделу разговора.

Тело захтева

{'{'}
  "status": "closed"
}
ПољеТипОпис
statusstringopen, pending, или closed
assignedTostring|nullUUID оператера за доделу, или null за поништавање доделе

GET /billing/balance

Добијте свој тренутни план и стање кредита.

Одговор

{'{'}
  "data": {'{'}
    "plan": "pro",
    "creditBalance": 4500000,
    "totalCreditsAdded": 10000000
  }
}

Руковање грешкама

Грешке враћају не-2xx статусни код са JSON телом:

{'{'}
  "error": {'{'}
    "code": "NOT_FOUND",
    "message": "Conversation not found."
  }
}
HTTP статусЗначење
401Неважећи, истекао или недостајући API кључ
400Неважеће тело захтева или параметри
404Ресурс није пронађен (или припада другом tenant-у)
500Грешка сервера

Уобичајени случајеви употребе

CRM интеграција

Pollujte нове разговоре и синхронизујте податке о посетиоцу (име, email, језик) са својим CRM-ом. Користите ID разговора као спољну референцу.

Аутоматизована праћења

Након што је разговор затворен, пошаљите поруку праћења путем API-а: "Хвала на разговору! Има ли још нешто са чим можемо помоћи?"

Алтернатива webhook-овима

Док излазни webhook-ови не буду доступни, периодично pollujte endpoint разговора да детектујете нове поруке или промене статуса.

Масовне операције

Затворите све разговоре старије од 7 дана, доделите разговоре оператерима на основу спољне логике или извезите историју разговора за аналитику.

Ограничења стопе

API дозвољава до 60 захтева у минути по API кључу. Ако премашите овај лимит, примићете 429 Too Many Requests одговор. Сачекајте и покушајте поново са експоненцијалним backoff-ом.

Спремни за интеграцију?

Креирајте свој бесплатан налог и генеришите API кључ за неколико минута.

Започните бесплатно