CLI

The inklate command line — create, schedule, validate, and measure from the terminal, plus a local stdio MCP server via `inklate mcp`.

The inklate CLI is a thin client over the same guarded REST API the dashboard and MCP server use — no CLI-only behavior, no weaker validation. Terminal to published post in under a minute:

npm i -g inklate
inklate auth login                  # device flow: approve a short code in the browser
inklate channels connect x          # OAuth consent in the browser, destinations in the terminal
inklate posts create --text "hello" --channels x --scheduled-at now
inklate posts publish <post-id> --wait

Output contract

  • stdout carries the result as structured YAML — pass --json for JSON. Nothing else is ever written to stdout.
  • stderr carries progress, prompts, and errors for humans. --quiet silences progress.
CodeNameMeaning
0okThe command succeeded.
1unexpectedAn unhandled or transport-level failure — retry or report it.
2usageBad or missing arguments. Nothing was sent.
3authNo stored credential, or it was rejected. Run inklate auth login.
4refusalThe platform refused on purpose — plan limit, permission, or a preflight verdict. The machine-readable refusal is on stdout.
5not foundThe addressed resource does not exist.
6conflictThe resource changed underneath you, or its state forbids the action.
7rate limitedThe organization’s request budget is exhausted after the client already waited out Retry-After. Safe to re-run later — the message names the wait.

A typed refusal (4) is not a crash: the machine-readable refusal — per-channel errors with fixes, plan-limit codes — is on stdout for the caller to act on.

Global flags

Accepted by every command:

FlagDescription
--org <value>Organization slug to act in
--profile <value>Named credentials profile (default: default)
--jsonJSON output instead of YAML
--quietSuppress progress output on stderr
--yesSkip confirmation prompts
--no-inputNever prompt (fail instead)
--base-url <value>Override the API base URL

Credentials

inklate auth login runs a device flow: it prints a short code, opens the browser to approve it, and stores an organization API key (prefix inklate_) in ~/.config/inklate/config.json (mode 0600). In CI, skip the browser entirely: set INKLATE_API_KEY, or paste a key with inklate auth set. Keys are the same ones listed under Settings → API keys — revoke there anytime.

Scheduling times

Scheduling flags accept ISO-8601 with an offset (2026-07-21T09:00:00-07:00) or a relative shorthand anchored to the server clock: 30m, 2h, 3d, 1w. Naive local times are rejected with a corrective error.

Interactivity

In a terminal, missing arguments prompt (channel pickers come from your real channel list) and destructive commands confirm. In scripts, agents, and CI — no TTY, CI set, or --no-input — the CLI never prompts: it fails with the exact flag named, and destructive commands require --yes.

inklate mcp

Runs the same binary as a local stdio MCP server bridged to your organization: every remote tool appears unchanged, and files_upload additionally accepts local file paths (the bridge uploads the bytes and returns file ids). Point Claude Code, Cursor, or any stdio MCP client at:

{ "command": "inklate", "args": ["mcp"] }

Escape hatch

Any REST endpoint is callable before it has a dedicated command:

inklate api GET /posts
inklate api POST /posts --field content=hello --field 'channel_ids=["<channel-id>"]'

Commands

auth — Log in and manage stored credentials

CommandDescription
inklate auth loginLog in via the browser (device flow) and store an organization API key
inklate auth setStore an organization API key (paste flow — works everywhere, incl. CI)
inklate auth checkVerify the stored credentials and show reachable organizations
inklate auth logoutRemove the stored credentials for this profile

organizations — Organizations you can act in

CommandDescription
inklate organizations listList organizations you can act in

channels — Connected social channels, their metrics, and growth

CommandDescription
inklate channels listList publishable channels + connection health
inklate channels creator-policyWhat a channel’s creator account currently allows (TikTok)
inklate channels connectConnect a channel: browser OAuth consent, then destination picking
inklate channels disconnectDisconnect a channel (its scheduled placements stop publishing)
inklate channels metricsAggregated per-day engagement for one channel
inklate channels growthFollowers trajectory + per-day page flows for one channel

capabilities — Per-channel capabilities + provider manifests

CommandDescription
inklate capabilitiesPer-channel effective capabilities + provider manifests

posts — Create, validate, schedule, publish, and measure posts

CommandDescription
inklate posts createCreate a post — draft, scheduled, or published now, in one call
inklate posts listList posts with their per-channel status
inklate posts getThe post, its per-channel validation, and live publish results
inklate posts updateChange anything — content, channels, media, labels, campaign, or the schedule
inklate posts validateDry-run validation — exit 4 when the post is not ready, nothing stored
inklate posts deleteDelete a post (—takedown also removes it from the platforms)
inklate posts publishPublish an existing draft now (—wait polls to a terminal state)
inklate posts metricsPer-channel totals + snapshot time series for one post

files — Upload and manage the files a post attaches

CommandDescription
inklate files uploadUpload local files (presign → PUT → poll) and print reusable file ids
inklate files getGet a file (readiness, facts, variants; optionally a signed URL)
inklate files listList files (keyset-paginated, newest first)
inklate files deleteDelete a file (refused while attached to a post)

search — Full-text search over your content

CommandDescription
inklate searchFull-text search over your own content

interactions — Ingested comments and mentions

CommandDescription
inklate interactions listIngested comments and mentions across channels
inklate interactions replyReply to an ingested comment or mention (1 Ink)

webhooks — Webhook endpoints and deliveries

CommandDescription
inklate webhooks listList webhook endpoints
inklate webhooks createRegister a webhook endpoint (the signing secret is shown once)
inklate webhooks deleteDelete a webhook endpoint
inklate webhooks rotate-secretRotate a webhook signing secret (the old secret stops verifying)
inklate webhooks deliveriesRecent deliveries for a webhook endpoint

campaigns — Campaign grouping and rollups

CommandDescription
inklate campaigns listList campaigns
inklate campaigns createCreate a campaign
inklate campaigns metricsRoll up a campaign’s engagement

approvals — Approval rules, requests, and decisions

CommandDescription
inklate approvals ruleShow the organization’s approval rule
inklate approvals set-ruleSet the organization’s approval rule
inklate approvals requestsList approval requests
inklate approvals requestSubmit a post for approval
inklate approvals decideApprove or reject an approval request

audit-logs — The organization’s audit trail

CommandDescription
inklate audit-logs listRead the audit trail (admin)

api — Call any REST endpoint directly

CommandDescription
inklate apiCall any REST endpoint directly (escape hatch)

mcp — Run a local stdio MCP server bridged to your organization

CommandDescription
inklate mcpRun a local stdio MCP server bridged to the remote Inklate MCP

completions — Shell completion scripts

CommandDescription
inklate completionsPrint a shell completion script (bash, zsh, or fish)