GramClaw API

v1

Управляйте рассылками в Telegram из скриптов, ИИ-агентов или сервер Telegram MCP: ищите сообщения, управляйте CRM-воронкой, задавайте пользовательские столбцы и отправляйте сообщения, рассылки и кампании. Создайте ключ в Настройки → Ключи API.

Start with an outcome

View all

Аутентификация

Для каждого запроса нужен ключ API рабочего пространства в виде токена Bearer. Создайте его в Настройки → Ключи API — полный ключ ( gc_live_…) показывается один раз.

Базовый URL
https://gramclaw.com
Каждый запрос
Authorization: Bearer gc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Быстрый старт
BASE="https://gramclaw.com"
KEY="gc_live_…"
curl -s "$BASE/api/v1/me" -H "Authorization: Bearer $KEY"

Обратите внимание: вызовы API выполняются напрямую — без шага подтверждения (в отличие от встроенного ИИ). Ключ — это авторизация; храните его как пароль. Ограничение частоты: 120 запросов / минуту на ключ, с заголовками X-RateLimit-* в каждом ответе. Ошибки возвращают { "error": "…" } со статусом 4xx/5xx.

Области доступа: ключи имеют read (чаты, сообщения, поиск, аналитика), write (воронка, столбцы, вебхуки), и/или send (сообщения, рассылки, кампании), or campaign for separately authorized internal campaign reads (and, behind a separate mutation gate and allowlists, campaign creation and cancellation). — выберите их при создании ключа. POST-запросы отправки принимают заголовок Idempotency-Key , чтобы повторные попытки не приводили к двойной отправке.

Конечные точки

GET/api/v1/me— Verify key & list Telegram accountsобласть: read

Returns only currently eligible, workspace-scoped internal Telegram accounts plus explicit capabilities.

GET/api/v1/chats— List existing Telegram chatsобласть: read

Reads an exact eligible account through scoped Telegram v2. No conversation is created and no message is marked read.

ПолеТипПримечания
account_id*string
cursorstring
limitnumberdefault 50, max 100
GET/api/v1/chats/{id}— Get chat and participantsобласть: read

Returns provider-neutral metadata and participants for the exact account/chat scope.

ПолеТипПримечания
account_id*string
participant_cursorstring
participant_limitnumber
GET/api/v1/chats/{id}/messages— Read message historyобласть: read

Reads scoped Telegram history without changing read state.

ПолеТипПримечания
account_id*string
beforestring
limitnumber
POST/api/v1/chats/start— Open a chat by Telegram usernameобласть: send

Resolves a Telegram username and opens its private chat under one exact eligible account. Requires a send-scoped key, the Start Chat feature gate, and a caller-supplied Idempotency-Key. It never sends a message.

ПолеТипПримечания
account_id*string
identifier*stringusername, @username, or t.me username link
Idempotency-Key header*string
GET/api/v1/contacts— List observed Telegram contactsобласть: read

Reads account-scoped contacts already observed by GramClaw. Requires both REST API and CRM read access; it never performs a Telegram lookup.

ПолеТипПримечания
account_idstring
qstring
cursorstring
limitnumberdefault 100, max 200
GET/api/v1/pipeline— Read scoped Telegram pipelineобласть: read

Returns workspace stages and account-qualified Telegram chat placements. Requires both REST API and Pipeline read access.

POST/api/v1/pipeline/move— Move a scoped Telegram chatобласть: write

Assigns an existing chat to a visible workspace stage. Requires an explicit write-scoped key plus the REST API and Pipeline gates.

ПолеТипПримечания
account_id*string
chat_id*string
stage_key*stringvisible key from GET /api/v1/pipeline
GET/api/v1/columns— Read custom columns and scoped valuesобласть: read

Returns workspace column definitions plus values keyed by both Telegram account and chat. Requires both REST API and CRM read access.

ПолеТипПримечания
account_idstringoptional exact account filter for values
POST/api/v1/columns/set— Set a scoped Telegram column valueобласть: write

Sets or clears a configured value for one exact account/chat. Requires an explicit write-scoped key plus the REST API and CRM gates.

ПолеТипПримечания
account_id*string
chat_id*string
column_id*string
value*string[]empty array clears the value
GET/api/v1/analytics— Read truthful Telegram analyticsобласть: read

Reports persisted message activity and durable campaign-send ledger counts. Delivery, read, and engagement are null rather than inferred. Requires both REST API and Analytics read access.

ПолеТипПримечания
period"7d" | "30d" | "all"default 7d
GET/api/v1/campaigns— List internal Telegram campaignsобласть: campaign

Lists only workspace-owned internal Telegram campaigns with truthful durable reporting. Requires an explicitly issued campaign scope plus the independent Campaigns gate and user allowlist.

ПолеТипПримечания
cursorstring
limitnumberdefault 50, max 100
GET/api/v1/campaigns/{id}— Read internal Telegram campaign detailобласть: campaign

Returns durable recipients, sequence steps, operation state, and reporting. capabilities reflect the key scope, allowlists, gates, and current status. Legacy campaigns remain outside the public execution plane.

POST/api/v1/campaigns— Create a campaign for existing private chatsобласть: campaign

Disabled by default behind a separate mutation gate plus exact user and workspace allowlists. Requires a campaign-scoped key and Idempotency-Key. Recipients must be existing private chats of READY internal Telegram accounts (max 20). No @usernames, attachments, or client-supplied names; suppressed recipients reject the request. Campaign, steps and recipients are stored atomically and queued for the worker — this call never sends a message.

ПолеТипПримечания
message_text*string1-4096 chars; [[name]]/[[username]] come from Telegram
recipients*{ account_id, chat_id }[]1-20 existing private chats
namestringup to 200 chars
steps{ branch, wait_hours, variants }[]follow-ups; branch no_reply, or seen/unseen when branching is enabled
branching_enabledbooleanrequires the U4 branching gate
daily_quota_per_accountnumber1-50 campaign ceiling, default 50; account tier may enforce a lower limit
max_followupsnumber0-5, default 2
scheduled_at / schedule_timezonestringISO time (≤ 1 year ahead) / IANA zone
Idempotency-Key header*string
Ответ
{ "campaign": { "id": "…", "status": "queued" }, "recipients": 2, "dispatch": "worker" }
POST/api/v1/campaigns/{id}/pause— Pause an internal sequence campaignобласть: campaign

Requires campaign scope, the REST/campaign mutation gates and Idempotency-Key. Pausing changes queue state only; the durable worker remains the only dispatcher. Sequence campaigns only.

ПолеТипПримечания
Idempotency-Key header*string
Ответ
{ "campaign": { "id": "…", "status": "paused" }, "changed": true, "dispatch": "worker" }
POST/api/v1/campaigns/{id}/resume— Resume an internal sequence campaignобласть: campaign

Requires campaign scope, the REST/campaign mutation gates and Idempotency-Key. Resuming changes queue state only; the durable worker remains the only dispatcher. Sequence campaigns only.

ПолеТипПримечания
Idempotency-Key header*string
Ответ
{ "campaign": { "id": "…", "status": "sending" }, "changed": true, "dispatch": "worker" }
POST/api/v1/campaigns/{id}/cancel— Permanently cancel a campaignобласть: campaign

Same gates as creation plus Idempotency-Key. Atomically cancels a scheduled, queued, sending or paused campaign and stops queued recipients; idempotent and irreversible. A send already handed to Telegram may still complete.

ПолеТипПримечания
Idempotency-Key header*string
Ответ
{ "campaign": { "id": "…", "status": "cancelled", "cancelled_at": "…" }, "changed": true }
POST/api/v1/messages— Send text and optionally one attachmentобласть: send

Requires an explicit send-scoped key and caller-supplied Idempotency-Key. Sends only to an existing eligible account/chat. JSON supports plain text; multipart/form-data supports exactly one file up to 25 MiB with optional text. No multi-file support. Ambiguous outcomes are never retried.

ПолеТипПримечания
account_id*string
chat_id*string
textstringrequired for JSON; optional with an attachment
attachmentsone filemultipart only; maximum 25 MiB; multiple files rejected
Idempotency-Key header*string
Запрос
curl -s "$BASE/api/v1/messages" \
  -H "Authorization: Bearer $KEY" -H "Idempotency-Key: unique-operation-123" \
  -F "account_id=ACCOUNT_ID" -F "chat_id=telegram:chat:123" \
  -F "text=See attached" -F "attachments=@./file.pdf"
Ответ
{ "ok": true, "operation_id": "…", "message": { "id": "telegram:message:…" } }

Подключение из Claude / Cursor (Telegram MCP)

Проще всего — удалённый коннектор (URL). В вашем MCP-клиенте добавьте пользовательский коннектор и вставьте персональный URL. Создайте ключ в Настройки → Ключи API, чтобы получить полный URL с вашим ключом. См. обзор Telegram MCP для списка инструментов.

Удалённый URL MCP
https://gramclaw.com/api/mcp?key=gc_live_…

Альтернатива — локальный сервер (Cursor или файл конфигурации Claude Desktop):

claude_desktop_config.json
{
  "mcpServers": {
    "gramclaw": {
      "command": "npx",
      "args": ["-y", "gramclaw-mcp"],
      "env": {
        "GRAMCLAW_API_KEY": "gc_live_…",
        "GRAMCLAW_BASE_URL": "https://gramclaw.com"
      }
    }
  }
}
Нужна помощь с настройкой? Откройте руководство по API и MCP.
Chat on Telegram