For the complete documentation index, see llms.txt. This page is also available as Markdown.

Channel

A channel is how Solvio talks to the outside world — an email mailbox today, other transports later. A thread bound to a channel delivers its messages through it and receives replies back into the same conversation.

Two properties decide what a channel is:

Values

kind

the transport: EMAIL, WEBHOOK, TEAMS, SMS, WHATSAPP, WEBCHAT, NOTICE

purpose

what it is used for: THREAD and TICKET carry conversations, NOTIFICATION only sends out

config is a typed object per purpose — it holds static defaults such as the sender name a channel uses, never conditions. It is validated against the purpose when a channel is created or changed.

Only EMAIL channels with a conversational purpose can be created at the moment; every other kind is answered with 400. The addresses a channel uses are described under Channel Addresses.

List channels

get

Returns the tenant's channels, ordered by id unless sort says otherwise.

Filterableid, tenantId, name, kind, purpose, active, createdAt, updatedAt.

Sortableid, name, active, createdAt, updatedAt.

Searchable — nothing yet.

The identities of a channel are not part of the default answer; request them with fields=identities.

Authorizations
AuthorizationstringRequired

Token issued by the central equipme authentication, sent as Bearer <token>.

Query parameters
filterstringOptional

JSON filter expression

searchstringOptional

Free-text term — no effect here

sortstringOptional

Comma-separated field:direction terms

fieldsstringOptional

Selection of fields and relations

Example: name,kind,purpose,active
offsetintegerOptional

Number of entries to skip

Default: 0
limitintegerOptional

Page size, 1 to 100

Default: 100
Responses
200

OK

application/json
countintegerOptional
get/v1/channels
GET /api/v1/channels HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "count": 1,
  "data": [
    {
      "active": true,
      "createdAt": "text",
      "id": 1,
      "kind": "",
      "name": "text",
      "purpose": "",
      "tenant": {
        "id": 1,
        "name": "text"
      },
      "tenantId": 1,
      "updatedAt": "text"
    }
  ]
}

Create a channel

post

Creates a channel. name, kind and purpose are required, config is validated against the purpose and rejected with 400 when it does not fit.

Today only EMAIL with a conversational purpose (THREAD or TICKET) can be created — any other kind is answered with 400. Inbound email additionally requires the server to have its mail domain configured.

active decides whether the channel is used; an inactive channel keeps its configuration but neither sends nor receives.

Authorizations
AuthorizationstringRequired

Token issued by the central equipme authentication, sent as Bearer <token>.

Body
objectOptional
or
Responses
201

Created

application/json
post/v1/channels
POST /api/v1/channels HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2

{}
{
  "data": {
    "active": true,
    "createdAt": "text",
    "id": 1,
    "kind": "",
    "name": "text",
    "purpose": "",
    "tenant": {
      "id": 1,
      "name": "text"
    },
    "tenantId": 1,
    "updatedAt": "text"
  }
}

Get a channel

get

Returns a single channel by its id. Its identities are not included unless fields=identities asks for them.

Authorizations
AuthorizationstringRequired

Token issued by the central equipme authentication, sent as Bearer <token>.

Path parameters
channelIdintegerRequired

Channel id

Example: 3
Query parameters
fieldsstringOptional

Selection of fields and relations

Example: name,kind,identities
Responses
200

OK

application/json
get/v1/channels/{channelId}
GET /api/v1/channels/{channelId} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": {
    "active": true,
    "createdAt": "text",
    "id": 1,
    "kind": "",
    "name": "text",
    "purpose": "",
    "tenant": {
      "id": 1,
      "name": "text"
    },
    "tenantId": 1,
    "updatedAt": "text"
  }
}

Delete a channel

delete

Deletes a channel. Threads that were bound to it keep their messages; they simply have no transport any more, so nothing further is delivered for them. Answers with 204 and no body.

Authorizations
AuthorizationstringRequired

Token issued by the central equipme authentication, sent as Bearer <token>.

Path parameters
channelIdintegerRequired

Channel id

Example: 3
Responses
204

No Content

No content

delete/v1/channels/{channelId}
DELETE /api/v1/channels/{channelId} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

Change a channel

patch

Changes a channel. The body follows JSON Merge Patch semantics: an absent field stays as it is, null clears it, a value sets it.

kind and purpose cannot be changed — they decide what the channel is, and its configuration and identities depend on them. A replacement config is validated against the existing purpose.

Authorizations
AuthorizationstringRequired

Token issued by the central equipme authentication, sent as Bearer <token>.

Path parameters
channelIdintegerRequired

Channel id

Example: 3
Body
objectOptional
or
Responses
200

OK

application/json
patch/v1/channels/{channelId}
PATCH /api/v1/channels/{channelId} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2

{}
{
  "data": {
    "active": true,
    "createdAt": "text",
    "id": 1,
    "kind": "",
    "name": "text",
    "purpose": "",
    "tenant": {
      "id": 1,
      "name": "text"
    },
    "tenantId": 1,
    "updatedAt": "text"
  }
}

Last updated

Was this helpful?