Skip to content
API and publishers operational
Vol. I · No. 4Docs · API v1

Docs

REST quickstart

No SDK is required. Every call is HTTPS and JSON, every write takes an Idempotency-Key, and every error is a sentence with a code.

Base URL https://api.smmist.com/v1 · times are ISO-8601 · cursor pagination

The flow is the same as the MCP server’s: look up accounts, validate, create, then read the post back. Use a smm_test_ key until the output looks right.

01Authenticate§

Send the key as a bearer token (or as X-API-Key). GET /v1/me tells you which org, scopes and mode (live or test) the key carries.

curl https://api.smmist.com/v1/me -H "Authorization: Bearer $SMMIST_API_KEY"

02Find your accounts§

Posts target account ids. Connect accounts in the dashboard (X needs your own developer app’s keys; Instagram connects through Meta login), then list them:

curl https://api.smmist.com/v1/accounts -H "Authorization: Bearer $SMMIST_API_KEY"

03Validate§

POST /v1/posts/validate takes the same body as create and writes nothing. It returns every issue for every target at once.

curl https://api.smmist.com/v1/posts/validate \
  -H "Authorization: Bearer $SMMIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hold space. Talk. Let go. VoiceMsg is live.",
    "targets": [{ "account_id": "7c42…" }]
  }'

04Create§

POST /v1/posts requires an Idempotency-Key header when called with an API key. Per-target override carries platform-specific text, media or options. Omit publish_at to publish as soon as possible, or pass "draft": true to store it.

curl https://api.smmist.com/v1/posts \
  -H "Authorization: Bearer $SMMIST_API_KEY" \
  -H "Idempotency-Key: voicemsg-launch-2026-10-12" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hold space. Talk. Let go. VoiceMsg is live.",
    "media_ids": ["5f0c8a1e-…"],
    "targets": [
      { "account_id": "a3e1…" },
      { "account_id": "7c42…",
        "override": { "options": { "ig": { "type": "REELS", "share_to_feed": true } } } }
    ],
    "publish_at": "2026-10-12T16:30:00Z",
    "not_after": "2026-10-12T22:30:00Z",
    "timezone": "America/Los_Angeles",
    "labels": ["voicemsg"],
    "agent": { "name": "claude-code", "model": "claude-opus-5-5" }
  }'
201 Created · { post, targets[], draft_reason } · the same key and body again returns 200 with Idempotent-Replayed: true

05Read it back§

curl https://api.smmist.com/v1/posts/$POST_ID -H "Authorization: Bearer $SMMIST_API_KEY"
curl https://api.smmist.com/v1/posts/$POST_ID/attempts -H "Authorization: Bearer $SMMIST_API_KEY"
curl https://api.smmist.com/v1/posts/$POST_ID/events -H "Authorization: Bearer $SMMIST_API_KEY"

06Errors§

Every non-2xx response has the same shape, and the code is stable. Write your retry logic against codes, not messages.

{
  "error": {
    "code": "idempotency_key_reuse",
    "message": "this Idempotency-Key was used with a different body",
    "details": {},
    "request_id": "req_…"
  }
}
401 invalid_api_key
The key is missing, revoked or expired. Do not retry.
403 insufficient_scope
The key lacks the scope for this call. Ask a person for a key that has it.
409 content_changed
The post changed after you read its hash. Re-read, then approve the new hash.
422 validation_failed
Fix each issue in details; the codes match POST /v1/posts/validate.
422 idempotency_key_reuse
Same key, different body. Use a new key for new content.
429 rate_limited
Wait for Retry-After seconds, then retry with the same Idempotency-Key.