Integrations overview
Publish from n8n and your own services through staqly, receive its signed webhooks, and pick between the SDKs, MCP and plain REST.
Staqly sits between the tools that produce content and the channels it goes to. Whatever produces your posts (an agent, an n8n workflow, a script, a cron job), the integration is the same loop:
- Write. Your tool creates a post (
POST /v1/posts, an SDK, MCPcreate_post) with the channels it should go to, and a time or none. - Publish. At the time, or when a collection's schedule picks the post, a job publishes every channel. A channel on your own automation hands the post back to you instead and waits for your result.
- React.
post.published,post.failedand the other events reach your services as signed webhooks, and you as alerts.
Pick your integration
n8n
Webhook receivers
TypeScript SDK
posts, channels, schedules, work, verifyWebhook.Python SDK
CLI
Coding agents (Claude Code, Codex, Cursor, Windsurf, OpenCode) connect over MCP with no code: see Connect agents.
Three ways to connect
| Way | Best for | Endpoint |
|---|---|---|
| SDK (Python or TypeScript) | Your own code writes posts and publishes through your own automation | http://localhost:3333/v1/... |
| MCP (Streamable HTTP) | Letting the model call create_post, schedule_post and list_requested_work itself | http://localhost:3333/mcp |
| REST + webhooks | No-code tools (n8n) and other languages | http://localhost:3333/v1/... |
Community Edition vs Staqly Cloud
The same integrations work against Staqly Community Edition on your own computer and against Staqly Cloud, the hosted service. Only the base URL and the key change.
| Aspect | Community Edition | Staqly Cloud |
|---|---|---|
| Status | Self-hosted, ready to use | Hosted by us at app.staqly.ai |
| Base URL | http://localhost:3333 | https://app.staqly.ai |
| Setup | curl -fsSL https://raw.githubusercontent.com/staqly/staqly/main/scripts/install.sh | sh then staqly serve, or Docker | Sign up (Google, an email code or a passkey); create a scoped key (stk_...) for each tool under Integrations → API keys |
| Credentials | Authorization: Bearer with the access token staqly prints at start (staqly serve token), full access | Authorization: Bearer API key with scopes |
| API surface | Full REST API, MCP at /mcp, webhooks | Same REST API, MCP at /mcp, webhooks |
| Quota | None | Unlimited posts; channels and keys by plan, from 5 channels on Starter, priced per user (plans) |
| OAuth platforms | Your own developer app per platform | Ours, ready to connect |
| Reachable from SaaS tools | No, the API listens on 127.0.0.1 only | Yes |
| Support | GitHub issues | support@staqly.ai; GitHub issues for the software |
Both SDKs read the base URL from STAQLY_API_URL and the key from STAQLY_API_KEY, or take
them in the constructor:
import os
from staqly import Staqly
local = Staqly() # http://localhost:3333, the access token from STAQLY_API_KEY
cloud = Staqly(base_url="https://app.staqly.ai", api_key=os.environ["STAQLY_API_KEY"])Give writers a key that cannot publish
In cloud mode, give a tool that only drafts a key with posts:write posts:read collections:read
and no posts:publish. It fills collections; your schedules, a person or a publisher key send
the posts out.