API референца
Интегришите enuchat у своје системе користећи Tenant API. Управљајте разговорима, шаљите поруке и приступајте подацима о наплати програмски.
Аутентификација
Сви API захтеви се аутентификују користећи API кључ послан у X-Api-Key заглављу.
Добијање вашег API кључа
- Идите на Подешавања → API кључеви у свом dashboard-у
- Кликните Креирај API кључ и дајте му име
- Одмах копирајте кључ — приказује се само једном
- Похраните га безбедно (варијабла окружења, менаџер тајни)
Слање захтева
Укључите кључ у сваки захтев:
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 параметри
| Параметар | Тип | Опис |
|---|---|---|
status | string | Филтрирај по статусу: open, pending, closed |
widgetId | string | Филтрирај по UUID widget-а |
limit | integer | Максимални резултати (подразумевано 20, max 100) |
offset | integer | Прескочи 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 параметри
| Параметар | Тип | Опис |
|---|---|---|
limit | integer | Максимално порука (подразумевано 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"
}| Поље | Тип | Опис |
|---|---|---|
content | string | Обавезно. Текст поруке. |
role | string | system (подразумевано) или 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"
}| Поље | Тип | Опис |
|---|---|---|
status | string | open, pending, или closed |
assignedTo | string|null | UUID оператера за доделу, или 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 кључ за неколико минута.
Започните бесплатно