Appearance
chatwoot
6 endpoints.
POST /api/v1/webhooks/chatwoot
Receive Webhook
200 — Successful Response
json
{
"additionalProperties": true,
"type": "object",
"title": "Response Receive Webhook Api V1 Webhooks Chatwoot Post"
}GET /api/v1/chatwoot/webhook-info
Webhook Info
The URL + secret to paste into Lubb Inbox's webhook settings — auto- provisions a secret on first call so there's nothing to generate by hand.
200 — Successful Response
json
{
"additionalProperties": true,
"type": "object",
"title": "Response Webhook Info Api V1 Chatwoot Webhook Info Get"
}POST /api/v1/customers/{customer_id}/chatwoot-link
Link Customer
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
customer_id | path | yes | integer |
Request body
json
{
"properties": {
"chatwoot_contact_id": {
"type": "integer",
"title": "Chatwoot Contact Id"
}
},
"type": "object",
"required": [
"chatwoot_contact_id"
],
"title": "ChatwootLinkIn"
}200 — Successful Response
json
{
"type": "object",
"additionalProperties": true,
"title": "Response Link Customer Api V1 Customers Customer Id Chatwoot Link Post"
}422 — Validation Error
json
{
"properties": {
"detail": {
"items": {
"properties": {
"loc": {
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
},
"type": "array",
"title": "Location"
},
"msg": {
"type": "string",
"title": "Message"
},
"type": {
"type": "string",
"title": "Error Type"
}
},
"type": "object",
"required": [
"loc",
"msg",
"type"
],
"title": "ValidationError"
},
"type": "array",
"title": "Detail"
}
},
"type": "object",
"title": "HTTPValidationError"
}POST /api/v1/crm/contacts/{contact_id}/chatwoot-link
Link Contact
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
contact_id | path | yes | integer |
Request body
json
{
"properties": {
"chatwoot_contact_id": {
"type": "integer",
"title": "Chatwoot Contact Id"
}
},
"type": "object",
"required": [
"chatwoot_contact_id"
],
"title": "ChatwootLinkIn"
}200 — Successful Response
json
{
"type": "object",
"additionalProperties": true,
"title": "Response Link Contact Api V1 Crm Contacts Contact Id Chatwoot Link Post"
}422 — Validation Error
json
{
"properties": {
"detail": {
"items": {
"properties": {
"loc": {
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
},
"type": "array",
"title": "Location"
},
"msg": {
"type": "string",
"title": "Message"
},
"type": {
"type": "string",
"title": "Error Type"
}
},
"type": "object",
"required": [
"loc",
"msg",
"type"
],
"title": "ValidationError"
},
"type": "array",
"title": "Detail"
}
},
"type": "object",
"title": "HTTPValidationError"
}GET /api/v1/chatwoot/launch
Inbox Launch
A signed-in Lubb Inbox URL for the caller, into their active org's account, matched to a Lubb Inbox agent by email. Framing is judged against the browser's own origin (the API may sit on a different host to the app — e.g. api.lubb.co.za serving lubb.co.za), so prefer the Origin header over our own hostname.
200 — Successful Response
json
{}GET /api/v1/chatwoot/features
Inbox Feature Flags
This site's LubbInbox feature switches, as set on the app's Features grid.
The dashboard needs these client-side: it builds its category tabs from the site's INSTALLED APPS rather than from GET /erp/categories (see features/dashboard/index.tsx), so a server-side filter on that list would hide nothing. Read-only and non-secret — any signed-in user gets it, since every signed-in user's tab strip depends on it; writing them is admin-only, on the grid.
200 — Successful Response
json
{
"additionalProperties": true,
"type": "object",
"title": "Response Inbox Feature Flags Api V1 Chatwoot Features Get"
}