Developer API

Send a DM with one POST.

A production-grade REST API for Telegram and X automation. Bearer auth, scoped keys, idempotency, rate-limit headers, outbound webhooks. No SDK required.

  • JSON over HTTPS
  • Low-latency responses
  • Reliable by design
api.crmsolid.com/v1/messages/send
v1 · stable
Request
curl -X POST \
https://api.crmsolid.com/v1/messages/send \
-H "Authorization: Bearer cs_live_***" \
-H "Idempotency-Key: 9d2c-44e1" \
-H "Content-Type: application/json" \
-d '{
"account_id": 7421,
"to": "@sarah_miller",
"text": "Hey {first_name}, your invite is ready"
}'
Response200 OK · 187 ms
{
"id": "msg_01HKQ9R2X3",
"status": "queued",
"eta": "2026-05-06T14:32:18Z"
}
Rate limit
X-RateLimit-Remaining
4,982 left this hour
Pick your stack

Same endpoint. Four languages.

One JSON contract. Copy, paste, ship. The full OpenAPI spec covers every endpoint, every error, every webhook payload.

curl -X POST https://api.crmsolid.com/v1/messages/send \
-H "Authorization: Bearer cs_live_***" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"account_id":7421,"to":"@sarah_miller","text":"Welcome aboard"}'

Full reference + error catalog at api.crmsolid.com/swagger

Authentication

Scoped keys. Least privilege by default.

Generate scoped API keys: read-only for analytics dashboards, write-scoped for production senders, manage-scoped for ops automation. Rotate without downtime; keys overlap during cutover so nothing breaks.

  • Bearer authentication

    Pass Authorization: Bearer cs_live_… on every request. Live and test keys are visually distinct so production flows stay safe.

  • Scoped permissions

    Pick the smallest set of scopes a key needs. A leaked dashboard key can never send a message.

  • Zero-downtime rotation

    Issue a replacement, deploy, then revoke the old key. Both are valid during the overlap window; no thundering-herd 401s.

Production sender
LIVE
cs_live_a4f9_•••••••••••••••
Scopes
read:contacts
read:messages
read:analytics
write:messages
write:contacts
manage:sequences
manage:webhooks
Reliability

Backpressure that tells you everything.

Idempotency keys mean retries are safe: never send the same message twice. Rate-limit headers tell your client when to slow down before a 429 ever lands.

Response · 200 OK187 ms
X-RateLimit-Limit:600
X-RateLimit-Remaining:588
X-RateLimit-Reset:42
Retry-After:12

Idempotency keys

Pass Idempotency-Key on every write. Retries return the original response. No duplicate messages, ever.

Adaptive rate limits

Defaults: 600 req/min and 50 sends/day per Telegram account, with auto flood-wait handling. Headers expose remaining budget so you never have to guess.

Stable error catalog

Every error returns a stable code you can branch on, plus a human message you can surface. RFC 7807 problem-detail format.

Webhooks

Outbound webhooks for every event.

Receive every CRM event in real time. HMAC-SHA256 signatures, automatic retries with exponential backoff, and a delivery log you can replay.

More events

message.sent · message.failed · contact.created · contact.tagged · sequence.started · sequence.paused · job.completed · subscription.upgraded

POST · your-handler
delivered
{
"event": "message.received",
"id": "evt_01HKQ9R2X7",
"created_at": "2026-05-06T14:32:18Z",
"account_id": 7421,
"contact": "@sarah_miller",
"text": "Hey, can you send the demo?",
"thread_id": "th_5829"
}
Verify on receipt
const sig = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
if (sig !== headers['x-signature']) return 401;

Build with CRM Solid. Ship in minutes.

Generate a sandbox key, paste a curl, watch the message land. The full production contract is the same shape. No rewrites between dev and prod.

  • Free sandbox tier
  • Live keys in < 60 seconds
  • HMAC-signed webhooks

Already have an account? Find your keys in Settings → API

We value your privacy

We use cookies to improve our site, analyze traffic, and personalize ads. You can accept all, reject non-essential, or customize your choices. Read our Cookie Policy.