Skip to content
ChatVendor ChatVendor

Messenger API

Everything the panel can do with a connected Telegram, WhatsApp or Instagram account, over REST — one key, one response shape, chapter by chapter.

Endpoints live under /api/v1/channels/{id}/… where {id} is the channel id from GET /channels (wa_… for WhatsApp, ig_… for Instagram). Scopes: channels:read, channels:write, leads:read, leads:write, scenarios:manage, ai:use. Requires a plan with the API feature. Pick a chapter below.

Telegram: chats & messages

Chats, messages, files, media, contacts and search of a connected Telegram account (user or bot).

{id} is the channel id from GET /channels. {peer} is a Telegram peer: numeric id (groups/channels are negative, e.g. -1001234567890), @username or phone +9989…

Bot accounts work with the same endpoints; they have no dialog list of their own, so chats appear as customers write. Media of a message carries a ref — pass it to POST /dialogs/{peer}/media to send the same sticker/photo again without uploading.

Base URL: https://chatvendor.net/api/v1 · every response is {"success": true, "data": …}

GET /me Workspace, plan and number of channels

Response 200 · Me

id integerworkspace stringplan stringaccounts integerrate_limit string

curl https://chatvendor.net/api/v1/me \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /channels Connected Telegram accounts

Scope: channels:read

Response 200 · Channel[]

id integertype string: telegram_user | telegram_bot | whatsapp | instagramname stringusername stringphone stringstatus stringconnected_at string (date-time)

curl https://chatvendor.net/api/v1/channels \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /channels/{id} One channel

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

Response 200 · Channel

id integertype string: telegram_user | telegram_bot | whatsapp | instagramname stringusername stringphone stringstatus stringconnected_at string (date-time)

curl https://chatvendor.net/api/v1/channels/1 \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /channels/{id}/dialogs Chats of a channel

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

typequery · string: user | bot | group | supergroup | channel
qquery · string
per_pagequery · integer
livequery · integer

1 = refresh from Telegram first

Response 200 · Dialog[]

peer_id integertype stringtitle stringusername stringunread_count integerlast_message_at string (date-time)last_message_text string

curl https://chatvendor.net/api/v1/channels/1/dialogs \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /channels/{id}/dialogs/{peer}/messages Messages of a chat

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

limitquery · integer
beforequery · integer
afterquery · integer
livequery · integer

Response 200 · ChatMessage[]

id integerchat_id integersender_id integersender_name stringout booleandate string (date-time)text stringmedia objectreply_to integertopic_id integerbuttons object[][]

curl https://chatvendor.net/api/v1/channels/1/dialogs/@username/messages \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
POST /channels/{id}/dialogs/{peer}/messages Send a text message

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

Body (application/json)

textstringrequired
reply_tointeger
parse_modestring: md | html | none
silentboolean
schedulestring (date-time)

Response 200 · ChatMessage

id integerchat_id integersender_id integersender_name stringout booleandate string (date-time)text stringmedia objectreply_to integertopic_id integerbuttons object[][]

curl -X POST https://chatvendor.net/api/v1/channels/1/dialogs/@username/messages \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -H "Content-Type: application/json" \
  -d '{"text":"…"}'
POST /channels/{id}/dialogs/{peer}/file Send a file (multipart/form-data: file, caption, as=auto|document|voice)

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

multipart/form-data — fields are listed in the summary above.

Response 200 · ChatMessage

id integerchat_id integersender_id integersender_name stringout booleandate string (date-time)text stringmedia objectreply_to integertopic_id integerbuttons object[][]

curl -X POST https://chatvendor.net/api/v1/channels/1/dialogs/@username/file \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -F "file=@photo.jpg" -F "caption=…"
POST /channels/{id}/dialogs/{peer}/forward Forward messages

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

Body (application/json)

idsinteger[]required
to_peerstringrequired
drop_authorboolean

Response 200

OK

curl -X POST https://chatvendor.net/api/v1/channels/1/dialogs/@username/forward \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -H "Content-Type: application/json" \
  -d '{"ids":1,"to_peer":"…","drop_author":true}'
POST /channels/{id}/dialogs/{peer}/delete Delete messages

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

Body (application/json)

idsinteger[]required
revokeboolean

Response 200

OK

curl -X POST https://chatvendor.net/api/v1/channels/1/dialogs/@username/delete \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -H "Content-Type: application/json" \
  -d '{"ids":1,"revoke":true}'
POST /channels/{id}/dialogs/{peer}/read Mark a chat as read

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

Response 200

OK

curl -X POST https://chatvendor.net/api/v1/channels/1/dialogs/@username/read \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /channels/{id}/dialogs/{peer}/messages/{message}/media Download media (?thumb=1 for a thumbnail)

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

messagepath · integerrequired

Message id

Response 200

The file

curl https://chatvendor.net/api/v1/channels/1/dialogs/@username/messages/123/media \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /channels/{id}/peers/{peer} User / group info

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

Response 200 · Peer

id integertype stringtitle stringusername stringphone string

curl https://chatvendor.net/api/v1/channels/1/peers/@username \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /channels/{id}/resolve Resolve @username, t.me link or phone to a peer

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

qquery · stringrequired

Response 200 · Peer

id integertype stringtitle stringusername stringphone string

curl https://chatvendor.net/api/v1/channels/1/resolve?q=… \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
POST /channels/{id}/contacts Add a contact

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

Body (application/json)

phonestringrequired
first_namestringrequired
last_namestring

Response 200 · Peer

id integertype stringtitle stringusername stringphone string

curl -X POST https://chatvendor.net/api/v1/channels/1/contacts \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -H "Content-Type: application/json" \
  -d '{"phone":"…","first_name":"…","last_name":"…"}'
POST /channels/{id}/dialogs/{peer}/album Send an album (multipart/form-data: files[] 2–10, caption, reply_to, topic)

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

multipart/form-data — fields are listed in the summary above.

Response 200 · ChatMessage[]

id integerchat_id integersender_id integersender_name stringout booleandate string (date-time)text stringmedia objectreply_to integertopic_id integerbuttons object[][]

curl -X POST https://chatvendor.net/api/v1/channels/1/dialogs/@username/album \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -F "file=@photo.jpg" -F "caption=…"
POST /channels/{id}/dialogs/{peer}/media Send existing media by ref (sticker, saved GIF, media from any message)

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

Body (application/json)

refstringrequired
captionstring
reply_tointeger
topicinteger
spoilerboolean
schedulestring (date-time)

Response 200 · ChatMessage

id integerchat_id integersender_id integersender_name stringout booleandate string (date-time)text stringmedia objectreply_to integertopic_id integerbuttons object[][]

curl -X POST https://chatvendor.net/api/v1/channels/1/dialogs/@username/media \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -H "Content-Type: application/json" \
  -d '{"ref":"…"}'
POST /channels/{id}/dialogs/{peer}/messages/{message}/click Press a bot keyboard button (by data, text or index)

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

messagepath · integerrequired

Message id

Body (application/json)

datastring
textstring
indexinteger

Response 200 · ButtonAnswer

pressed stringmessage stringalert booleanurl string

curl -X POST https://chatvendor.net/api/v1/channels/1/dialogs/@username/messages/123/click \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -H "Content-Type: application/json" \
  -d '{"data":"…","text":"…","index":1}'
GET /channels/{id}/dialogs/{peer}/messages/{message}/replies Comments under a post / replies in a topic

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

messagepath · integerrequired

Message id

Response 200 · MessagePage

messages ChatMessage[]count integer

curl https://chatvendor.net/api/v1/channels/1/dialogs/@username/messages/123/replies \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /channels/{id}/dialogs/{peer}/mentions Unread mentions (?reactions=1: unseen reactions to our messages)

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

Response 200 · MessagePage

messages ChatMessage[]count integer

curl https://chatvendor.net/api/v1/channels/1/dialogs/@username/mentions \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
PUT /channels/{id}/dialogs/{peer}/draft Save the chat draft (empty text clears it)

Scope: channels:write

Parameters

idpath · integerrequired

Channel id (from GET /channels)

peerpath · stringrequired

Telegram peer: numeric id (channels/groups negative, e.g. -1001234567890), @username or phone

Body (application/json)

textstring
reply_tointeger
topicinteger

Response 200

OK

curl -X PUT https://chatvendor.net/api/v1/channels/1/dialogs/@username/draft \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -H "Content-Type: application/json" \
  -d '{"text":"…","reply_to":1,"topic":1}'
POST /channels/{id}/translate Translate text or messages with Telegram's translator

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

Body (application/json)

tostringrequired

ISO 639-1

textstring
peerstring
idsinteger[]

Response 200 · Translation[]

text string

curl -X POST https://chatvendor.net/api/v1/channels/1/translate \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
  -H "Content-Type: application/json" \
  -d '{"to":"…"}'
GET /channels/{id}/preview Link preview Telegram would attach to this text

Scope: channels:read

Parameters

idpath · integerrequired

Channel id (from GET /channels)

textquery · stringrequired

Response 200 · WebPage

url stringsite_name stringtitle stringdescription stringhas_photo boolean

curl https://chatvendor.net/api/v1/channels/1/preview?text=… \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"