Skip to main content

Relasi.U Omnichannel Developer API (2026-06-01)

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.

Authentication

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.

Modes

Keys are either live (ru_live_…) or test (ru_test_…).

Rate limits

Requests are throttled per API key (~60 req/s). Exceeding the limit returns 429 Too Many Requests with a Retry-After header.

Meta

Credential introspection

Inspect the authenticated API key

Returns metadata about the API key making the request, including granted scopes. No additional scope required.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "app_id": "string",
  • "key_id": "string",
  • "name": "string",
  • "public_id": "string",
  • "mode": "live",
  • "scopes": [
    ],
  • "created_at": "2019-08-24T14:15:22Z"
}

Conversations

Read conversations and messages

List conversations

Returns conversations for the workspace, newest activity first.

Authorizations:
ApiKeyAuth
query Parameters
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).

Responses

Response samples

Content type
application/json
{
  • "current_page": 0,
  • "from": 0,
  • "to": 0,
  • "per_page": 0,
  • "last_page": 0,
  • "total": 0,
  • "has_next": true,
  • "data": [
    ]
}

List messages

Returns messages, optionally filtered by conversation or session.

Authorizations:
ApiKeyAuth
query Parameters
conversation_id
string
message_session_id
string
page
integer >= 1
Default: 1
per_page
integer [ 1 .. 500 ]

Responses

Response samples

Content type
application/json
{
  • "current_page": 0,
  • "from": 0,
  • "to": 0,
  • "per_page": 0,
  • "last_page": 0,
  • "total": 0,
  • "has_next": true,
  • "data": [
    ]
}

Messages

Send outbound messages

Send a text message

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.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
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. Takes precedence if both are set.

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 as_system is false) the message is attributed to the user who created the API key. The same overrides are accepted as form fields on the multipart media endpoints (/messages/image, /audio, /video, /document) and in the JSON body of /messages/location.

Responses

Request samples

Content type
application/json
{
  • "client_request_id": "string",
  • "conversation_id": "string",
  • "text": "string",
  • "reply_to_message_id": "string",
  • "as_system": false,
  • "from_user_id": "string"
}

Response samples

Content type
application/json
{
  • "message": {
    }
}

Contacts

Manage contacts (customers)

List contacts

Authorizations:
ApiKeyAuth
query Parameters
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 ]

Responses

Response samples

Content type
application/json
{
  • "current_page": 0,
  • "from": 0,
  • "to": 0,
  • "per_page": 0,
  • "last_page": 0,
  • "total": 0,
  • "has_next": true,
  • "data": [
    ]
}

Create a contact

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
name
required
string <= 200 characters
phone
string <= 50 characters
email
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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "phone": "string",
  • "email": "string",
  • "company": "string",
  • "job_title": "string",
  • "lead_status": "",
  • "lead_source": "string",
  • "address": "string",
  • "city": "string",
  • "country": "string",
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "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"
}

Get a contact

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "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"
}

Update a contact

Authorizations:
ApiKeyAuth
path Parameters
id
required
string
Request Body schema: application/json
required
name
required
string <= 200 characters
phone
string <= 50 characters
email
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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "phone": "string",
  • "email": "string",
  • "company": "string",
  • "job_title": "string",
  • "lead_status": "",
  • "lead_source": "string",
  • "address": "string",
  • "city": "string",
  • "country": "string",
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "message": "string"
}

Merge two contacts

Merges a source contact into a target, preserving channel identifiers and history.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
primary_id
required
string

Contact to keep.

secondary_id
required
string

Contact to merge in and remove.

Responses

Request samples

Content type
application/json
{
  • "primary_id": "string",
  • "secondary_id": "string"
}

Response samples

Content type
application/json
{
  • "error": "string",
  • "required_scope": "string"
}

Channels

Read connected channels

List connected channels

Authorizations:
ApiKeyAuth
query Parameters
page
integer >= 1
Default: 1
per_page
integer [ 1 .. 500 ]

Responses

Response samples

Content type
application/json
{
  • "current_page": 0,
  • "from": 0,
  • "to": 0,
  • "per_page": 0,
  • "last_page": 0,
  • "total": 0,
  • "has_next": true,
  • "data": [
    ]
}