You build it.
We post it.
You already have the content and the workflow. Add social publishing to your app, agent or pipeline through one REST API or MCP connection.
Free to start · No credit card · Try a practice post first
A terrible copy-paste arrangement.

X / Twitter · Instagram · Facebook · LinkedIn · TikTok · YouTube
Your workflow already works.
Give it somewhere to post.
REST API · YOUR BACKEND, OUR PUBLISHING
Your first post. Training wheels on.
- Create a free account, then open Settings → API Keys.
- Store your Client ID and Client Secret in your server environment. Keep them out of browser code and source control.
- Copy this Node.js example and run it locally or on your server. It authenticates and creates a simulated sandbox post.
// Node.js 18+. Save as socialcannon-test.mjs and run on your server.
// Supply SOCIALCANNON_CLIENT_ID and SOCIALCANNON_CLIENT_SECRET
// through your environment or secret manager. Never embed them in browser code.
const base = 'https://socialcannon.app';
const clientId = process.env.SOCIALCANNON_CLIENT_ID;
const clientSecret = process.env.SOCIALCANNON_CLIENT_SECRET;
if (!clientId || !clientSecret) throw new Error('Set your credentials first.');
const auth = await fetch(base + '/api/v1/auth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
grant_type: 'client_credentials',
client_id: clientId,
client_secret: clientSecret,
}),
});
if (!auth.ok) throw new Error('Authentication failed: ' + auth.status);
const token = await auth.json();
if (!token.success || !token.data?.access_token) {
throw new Error('No access token returned.');
}
const response = await fetch(base + '/api/v1/posts', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + token.data.access_token,
'Content-Type': 'application/json',
},
body: JSON.stringify({
accountId: 'sandbox',
content: 'Hello from my own workflow!',
}),
});
if (!response.ok) throw new Error('Sandbox test failed: ' + response.status);
const result = await response.json();
if (!result.success) throw new Error('Sandbox test was not confirmed.');
console.log(result); // Simulated post. Nothing goes to a real social account.Copy the example to your own environment.
Select code manually
No real social account is needed for this test. The example makes a request only when you run it in your own environment.
Ready for a real destination?
Connect an account in your dashboard, fetch GET /api/v1/accounts, and use its ID in place of sandbox. A request without scheduledAt publishes immediately; include an ISO timestamp to schedule. Check media requirements before sending: some platforms require an image or video.
Keep authentication on your server, refresh expired access tokens, and handle errors and rate limits. Check a post’s status before retrying an uncertain publish response.
Read the complete API reference →MCP · TOOLS FOR YOUR AGENT
An agent with somewhere to send its ideas.
Use this common MCP configuration as a starting point for a host that supports local stdio servers. Node.js 18+ and npx are required. Adapt the configuration to your host’s format.
{
"mcpServers": {
"socialcannon": {
"command": "npx",
"args": [
"-y",
"@socialcannon/mcp@1.0.2"
]
}
}
}Copy the example to your own environment.
Select code manually
Supply SOCIALCANNON_CLIENT_ID and SOCIALCANNON_CLIENT_SECRET privately through your host’s environment or secret settings. Some hosts filter inherited variables, so check that both reach the server process. The snippet alone does not connect your account.
Ask the agent to list your accounts to verify access, then make a sandbox post. For real accounts, review the content and approve publishing or scheduling first.
One account. Room to grow.
Start free with no card. Publishing, scheduling, analytics and other features have platform and plan limits. Choose the capacity you need as your workflow grows.