Download OpenAPI specification:Download
Public REST API for the Relasi.U omnichannel chat platform. Use it to read conversations and messages, send outbound messages across any connected channel (WhatsApp, Telegram, Instagram, Facebook, Email, Livechat), and manage contacts.
Authenticate every request with an API key in the Authorization header:
Authorization: Bearer ru_live_<id>.<secret>
Create and manage keys in the dashboard under Settings → Developer / API. The full key (including its secret) is shown only once at creation — store it securely. Each key carries a set of scopes that gate which endpoints it can call, and an optional IP allowlist.
Requests are throttled per API key (~60 req/s). Exceeding the limit returns
429 Too Many Requests with a Retry-After header.
Returns metadata about the API key making the request, including granted scopes. No additional scope required.
{- "app_id": "string",
- "key_id": "string",
- "name": "string",
- "public_id": "string",
- "mode": "live",
- "scopes": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z"
}Returns conversations for the workspace, newest activity first.
| page | integer >= 1 Default: 1 |
| per_page | integer [ 1 .. 500 ] |
| last_updated_at | integer <int64> UNIX timestamp; only return conversations updated at/after this time (delta sync). |
{- "current_page": 0,
- "from": 0,
- "to": 0,
- "per_page": 0,
- "last_page": 0,
- "total": 0,
- "has_next": true,
- "data": [
- {
- "id": "string",
- "app_id": "string",
- "channel": "string",
- "channel_id": "string",
- "external_id": "string",
- "customer_id": "string",
- "status": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}Returns messages, optionally filtered by conversation or session.
| conversation_id | string |
| message_session_id | string |
| page | integer >= 1 Default: 1 |
| per_page | integer [ 1 .. 500 ] |
{- "current_page": 0,
- "from": 0,
- "to": 0,
- "per_page": 0,
- "last_page": 0,
- "total": 0,
- "has_next": true,
- "data": [
- {
- "id": "string",
- "app_id": "string",
- "conversation_id": "string",
- "message_session_id": "string",
- "channel_id": "string",
- "channel": "string",
- "from_user_id": "string",
- "from_customer": true,
- "client_request_id": "string",
- "content": "string",
- "message_type": "text",
- "send_state": "pending",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}Sends a text message into an existing conversation. The message is
dispatched to the underlying channel (WhatsApp, Telegram, …). Use a
unique client_request_id per message for idempotency.
| client_request_id required | string Unique idempotency key supplied by the caller. |
| conversation_id required | string |
| text required | string [ 1 .. 4000 ] characters |
| reply_to_message_id | string Optional id of the message being replied to. |
| as_system | boolean Default: false Attribute the message to the workspace System rather than an
agent (rendered as "System", no read receipts). Mutually exclusive
with |
| from_user_id | string Attribute the message to a specific agent/owner in your workspace.
Must be a valid user id belonging to the same workspace. If omitted
(and |
{- "client_request_id": "string",
- "conversation_id": "string",
- "text": "string",
- "reply_to_message_id": "string",
- "as_system": false,
- "from_user_id": "string"
}{- "message": {
- "id": "string",
- "app_id": "string",
- "conversation_id": "string",
- "message_session_id": "string",
- "channel_id": "string",
- "channel": "string",
- "from_user_id": "string",
- "from_customer": true,
- "client_request_id": "string",
- "content": "string",
- "message_type": "text",
- "send_state": "pending",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}| search | string Fuzzy match on name, email, phone, company. |
| lead_status | string Enum: "new" "contacted" "qualified" "won" "lost" |
| page | integer >= 1 Default: 1 |
| per_page | integer [ 1 .. 500 ] |
{- "current_page": 0,
- "from": 0,
- "to": 0,
- "per_page": 0,
- "last_page": 0,
- "total": 0,
- "has_next": true,
- "data": [
- {
- "id": "string",
- "app_id": "string",
- "name": "string",
- "phone": "string",
- "email": "string",
- "company": "string",
- "job_title": "string",
- "lead_status": "new",
- "lead_source": "string",
- "address": "string",
- "city": "string",
- "country": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}| name required | string <= 200 characters |
| phone | string <= 50 characters |
string <= 200 characters | |
| company | string <= 200 characters |
| job_title | string <= 200 characters |
| lead_status | string Enum: "" "new" "contacted" "qualified" "won" "lost" |
| lead_source | string |
| address | string <= 500 characters |
| city | string <= 100 characters |
| country | string <= 100 characters |
| comment | string |
{- "name": "string",
- "phone": "string",
- "email": "string",
- "company": "string",
- "job_title": "string",
- "lead_status": "",
- "lead_source": "string",
- "address": "string",
- "city": "string",
- "country": "string",
- "comment": "string"
}{- "id": "string",
- "app_id": "string",
- "name": "string",
- "phone": "string",
- "email": "string",
- "company": "string",
- "job_title": "string",
- "lead_status": "new",
- "lead_source": "string",
- "address": "string",
- "city": "string",
- "country": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "id": "string",
- "app_id": "string",
- "name": "string",
- "phone": "string",
- "email": "string",
- "company": "string",
- "job_title": "string",
- "lead_status": "new",
- "lead_source": "string",
- "address": "string",
- "city": "string",
- "country": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string |
| name required | string <= 200 characters |
| phone | string <= 50 characters |
string <= 200 characters | |
| company | string <= 200 characters |
| job_title | string <= 200 characters |
| lead_status | string Enum: "" "new" "contacted" "qualified" "won" "lost" |
| lead_source | string |
| address | string <= 500 characters |
| city | string <= 100 characters |
| country | string <= 100 characters |
| comment | string |
{- "name": "string",
- "phone": "string",
- "email": "string",
- "company": "string",
- "job_title": "string",
- "lead_status": "",
- "lead_source": "string",
- "address": "string",
- "city": "string",
- "country": "string",
- "comment": "string"
}{- "message": "string"
}Merges a source contact into a target, preserving channel identifiers and history.
| primary_id required | string Contact to keep. |
| secondary_id required | string Contact to merge in and remove. |
{- "primary_id": "string",
- "secondary_id": "string"
}{- "error": "string",
- "required_scope": "string"
}| page | integer >= 1 Default: 1 |
| per_page | integer [ 1 .. 500 ] |
{- "current_page": 0,
- "from": 0,
- "to": 0,
- "per_page": 0,
- "last_page": 0,
- "total": 0,
- "has_next": true,
- "data": [
- {
- "id": "string",
- "app_id": "string",
- "type": "telegram",
- "external_id": "string",
- "name": "string",
- "username": "string",
- "phone_number": "string",
- "email": "string",
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z"
}
]
}