# DripChat Bot API

Send messages and native playable videos to DripChat from your app or assistant.
Official API base: https://api.dripchat.io. Updated October 18, 2026.

## Quick start

Use your existing DripChat bot token. The token belongs in the URL path:
`https://api.dripchat.io/bot<TOKEN>/<METHOD>`. Keep the entire token, including its colon.
This is the DripChat API, not api.telegram.org. A personal access token is a different credential.

Supported methods are `GET getMe`, `POST sendMessage`, and `POST sendVideo`.
Video sending is available now. These sending methods do not consume DripBot AI credits.

First call `getMe` to verify the token and read capabilities. This does not send a message.
The examples read `DRIPCHAT_BOT_TOKEN` from your secret store/environment; replace the variable with the saved secret in your integration, without displaying or logging it.

```sh
curl --fail-with-body --silent --show-error \
  "https://api.dripchat.io/bot${DRIPCHAT_BOT_TOKEN}/getMe"
```

Never put the token in public documents, source control, screenshots, analytics, or request logs. Redact the token-bearing URL in errors and monitoring.
If you do not have a bot token, obtain one from the owner of the DripChat bot you are integrating.

## Choose a recipient

Supply exactly one destination in the request:

- `chat_id: "@ikako"` — send to the exact DripChat username ikako. Replace with the intended username.
- `recipient_username: "ikako"` — equivalent username addressing, with or without `@`.
- `recipient_id: "USER_ID"` — send to a known DripChat user ID.
- `chat_id: "me"` — send to the owner of this bot token, not necessarily the person chatting with your assistant.
- `chat_id: "CHAT_ID"` — send to an existing chat that the bot belongs to.

Private recipients do not need to message the bot first. No existing conversation or chat ID is needed when you know their username or user ID. The API creates or reuses the direct conversation, and the first delivered message appears in their chat list.

A display name alone is not a unique username. If the API returns `RECIPIENT_NOT_FOUND`, obtain the exact username or user ID. Do not substitute the bot owner or a similarly named account. Blocks, chat membership, and media permissions still apply. Group chats require existing membership.

Camel-case aliases `chatId`, `recipientId`, and `recipientUsername` are also accepted. The response's `result.chatId` identifies the resolved conversation.

## Send a native playable video

Upload the actual MP4/MOV file using multipart form data. The file field must be named `video`.
Use a new unique idempotency key for each intended message; keep the same key and content if retrying it.

```sh
# Example key only: generate and persist a unique key for each new video.
curl --fail-with-body --silent --show-error \
  "https://api.dripchat.io/bot${DRIPCHAT_BOT_TOKEN}/sendVideo" \
  -H 'Idempotency-Key: video-20261018-001' \
  --form-string 'chat_id=@ikako' \
  --form-string 'caption=Your video is ready' \
  --form 'video=@/path/to/clip.mp4;type=video/mp4'
```

This creates a native video message with a player, not a document attachment. The recipient does not need to start a bot conversation first.

Uploads support up to 25 MiB (26,214,400 bytes) of MP4/MOV with H.264 or HEVC video and optional AAC audio. The server checks the media, prepares an MP4 for progressive playback, and creates its thumbnail, dimensions, and duration. Renaming an unsupported file to .mp4 does not convert it.

Alternatively, send a direct public HTTPS media URL in JSON or URL-encoded form data:

```sh
curl --fail-with-body --silent --show-error \
  "https://api.dripchat.io/bot${DRIPCHAT_BOT_TOKEN}/sendVideo" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: video-20261018-002' \
  --data '{"chat_id":"@ikako","video":"https://media.example.com/clip.mp4","caption":"Your video is ready"}'
```

The URL pathname must end in `.mp4` or `.mov`. YouTube, TikTok, Facebook, and HTML page links are not direct video URLs. URL mode references the original media without fetching, converting, or hosting it for you. Keep it publicly available without cookies or authentication; upload the file for server-prepared media instead.

Optional video fields: `caption` (maximum 4096 UTF-16 code units), `width` and `height` (supply both, each greater than 0 and at most 8192), `duration` (seconds, greater than 0 and at most 86400), `supports_streaming` (boolean), and `reply_to_message_id` (an accessible message in that chat). Uploaded-file metadata is detected from the file. `supports_streaming` does not transcode a URL. `videoURL` aliases `video`; `text` aliases `caption`. Conflicting aliases and unsupported video fields are rejected.

## Send text

```sh
curl --fail-with-body --silent --show-error \
  "https://api.dripchat.io/bot${DRIPCHAT_BOT_TOKEN}/sendMessage" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: message-20261018-001' \
  --data '{"chat_id":"@ikako","text":"Your video is ready"}'
```

Text must be non-empty after trimming. Keep it within 4096 UTF-16 code units; longer input is truncated. `reply_to_message_id` is optional and must refer to an accessible message in the destination chat. Markdown/HTML `parse_mode` is not implemented; send plain text.

## Responses and retries

New messages return HTTP 201; a successful replay returns HTTP 200. Both include `ok: true`, `replay`, and the message in `result`, including `message_id`, `chatId`, and `type`. Video messages include `videoURL`. Acceptance means the message was stored and delivery queued, not that the recipient has watched it.

```json
{"ok":true,"result":{"message_id":"MESSAGE_ID","chatId":"CHAT_ID","type":"video","videoURL":"https://media.example.com/clip.mp4"},"replay":false}
```

`Idempotency-Key` is strongly recommended. Use 1–121 characters from letters, digits, `_`, `:`, `@`, and `-`; reserved names `__proto__`, `constructor`, and `prototype` are invalid. Body fields `operationId` or `clientMessageId` are alternatives. A key identifies one send across this bot's sending methods. Reuse the exact destination, method, and content for retry; changing them can produce HTTP 409. Do not reuse a key for a different message. Without a key, retrying can send duplicates.

Errors have `ok: false`, `error_code`, `description`, and usually `code`. Authentication and proxy failures may not have a code or a JSON body, so check HTTP status as well.

- 400: fix malformed fields, destination, or unsupported media. `ONE_DESTINATION_REQUIRED` means exactly one destination is needed.
- 401: invalid or revoked bot token. Do not ask the recipient to message first.
- 403: blocked recipient or insufficient chat/media permission. Do not bypass the restriction.
- 404 `RECIPIENT_NOT_FOUND`: verify the exact username/user ID. A 404 on another path may mean the method or base URL is wrong.
- 409: idempotency or destination conflict. Inspect the original request; do not blindly send with a new key.
- 410: the previously sent message was removed. Do not automatically recreate it.
- 413: file is too large. Compress it below the upload limit or use an accessible direct URL.
- 429 or 503, timeout, or dropped connection: retry the identical request with the same key after bounded exponential backoff. Queue sends to avoid overlapping media work.

## Assistant integration checklist

For a request such as “send my videos to ikako on DripChat,” use the saved bot token, verify `getMe`, and send the actual video with `sendVideo` and `chat_id: "@ikako"`. Do not ask for a chat ID or a first message when the username is already known. If the name is only a display name or the server cannot resolve it, request the exact username.

Send only when authorized by the user. Persist the intended recipient and idempotency key with the job; report success only after an `ok: true` response. A preference for future videos must be implemented by the calling assistant's own workflow; the DripChat API does not schedule future sends automatically.

This is a supported subset of a Telegram-shaped API, not full Telegram API compatibility. Do not invent `sendDocument`, `sendPhoto`, `getUpdates`, webhook, or username-search methods. Native video uses `sendVideo`.

## Machine-readable reference

OpenAPI: https://api.dripchat.io/openapi.json

Assistant discovery: https://api.dripchat.io/llms.txt

Plain Markdown: https://api.dripchat.io/docs/bots.md

Human-readable docs: https://api.dripchat.io/docs/bots
