Skip to content

Quickstart

Postproxy is a unified API for social media platforms, with built-in scheduling, error handling, and retry management. This quickstart covers publishing posts, but the API also handles engagement: managing comments on your posts, sending and receiving 1:1 direct messages, and reading and replying to Google Business reviews. You’ll find guides and examples for each platform on the platform pages.

This guide gets you from zero to your first published post. Grab an API key, connect an account, then pick how you want to publish — the REST API, the MCP server for AI agents, or a no-code tool like Zapier or n8n.

  1. Sign up or log in to your Postproxy dashboard.
  2. Open the API keys settings and create a key.
  3. Copy the key — you’ll pass it as a Bearer token on every request.

API keys are either full access (your whole account) or scoped to a single profile group. See Authentication for details.

In the dashboard, open Profiles and authorize the social platforms you want to publish to (Facebook, Instagram, TikTok, LinkedIn, X, YouTube, Threads, Pinterest, Bluesky, Telegram, or Google Business).

Postproxy creates your first profile group automatically when you sign up, and each account you connect becomes a profile in that group. Once at least one account is connected, you’re ready to publish.

Prefer to onboard accounts programmatically? Call initialize_connection on a profile group to generate an OAuth URL, then redirect your user to it to authorize the account.

Terminal window
curl -X POST "https://api.postproxy.dev/api/profile_groups/grp456xyz/initialize_connection" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"platform": "instagram",
"redirect_url": "https://myapp.com/oauth/callback"
}'

Response:

{
"url": "https://app.postproxy.dev/partner_connect/inv789xyz",
"success": true
}

Redirect the user to the returned url to complete the OAuth flow. Once they authorize, the account appears as a profile in the group.

First, retrieve your connected profiles to get their IDs.

Terminal window
curl -X GET "https://api.postproxy.dev/api/profiles" \
-H "Authorization: Bearer YOUR_API_KEY"

Response:

{
"data": [
{
"id": "prof123abc",
"name": "My Company Page",
"platform": "facebook",
"status": "active",
"profile_group_id": "grp456xyz",
"expires_at": null,
"post_count": 42
},
{
"id": "prof789def",
"name": "@mycompany",
"platform": "instagram",
"status": "active",
"profile_group_id": "grp456xyz",
"expires_at": null,
"post_count": 38
}
]
}

Note the profile IDs and platform types - you’ll use these when creating posts.

Post content to one or more profiles. You can specify profiles by their ID or by platform name (uses the first profile for that platform).

Terminal window
curl -X POST "https://api.postproxy.dev/api/posts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"post": {
"body": "Hello World!",
"draft": true
},
"profiles": ["facebook", "instagram"],
"media": ["https://example.com/image.jpg"]
}'

Response:

{
"id": "xyz789abc",
"body": "Hello World!",
"status": "draft",
"scheduled_at": null,
"created_at": "2024-01-15T10:30:00.000Z",
"platforms": [
{
"platform": "facebook",
"status": "published",
"error": null,
"params": null,
"attempted_at": "2024-01-15T10:30:01.000Z"
},
{
"platform": "instagram",
"status": "published",
"error": null,
"params": {
"format": "post"
},
"attempted_at": "2024-01-15T10:30:02.000Z"
}
]
}

Your post will be published to the specified platforms almost immediately.

To schedule a post for later, add scheduled_at with an ISO 8601 timestamp.

Terminal window
curl -X POST "https://api.postproxy.dev/api/posts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"post": {
"body": "Hello World!",
"scheduled_at": "2024-01-20T12:00:00Z"
},
"profiles": ["facebook", "instagram"],
"media": ["https://example.com/image.jpg"]
}'

Response:

{
"id": "xyz789abc",
"body": "Hello World!",
"status": "scheduled",
"scheduled_at": "2024-01-20T12:00:00.000Z",
"created_at": "2024-01-15T10:30:00.000Z",
"platforms": [
{
"platform": "facebook",
"status": "processing",
"error": null,
"params": null,
"attempted_at": null
},
{
"platform": "instagram",
"status": "processing",
"error": null,
"params": {
"format": "post"
},
"attempted_at": null
}
]
}

Postproxy handles the scheduling - your post will be published at the specified time.

Prefer to publish from an AI agent? Point any MCP client at Postproxy’s hosted server — no install required. For Claude Code:

Terminal window
claude mcp add --transport http postproxy \
https://mcp.postproxy.dev/mcp?api_key=YOUR_KEY

Replace YOUR_KEY with your API key, then prompt your agent with something like “Check my Postproxy authentication status” or “Publish a post to X and LinkedIn.” See the MCP Server guide for the local npm package and full tool list.

If you’d rather wire Postproxy into an automation tool, it plugs into the platforms you already use:

  • Zapier — trigger a Zap, then use the Create Post, Schedule Post, or Create Draft actions.
  • Make — drop Postproxy into a scenario as a publishing step.
  • n8n — build production publishing pipelines with the Postproxy node.
  • Needle — publish from Needle workflows and collections via the official MCP connector.

Each connects with the same API key from the first step.

Running OpenClaw? Install the Postproxy skill from ClawHub and it can publish, schedule, and manage content from chat:

Terminal window
npx clawhub@latest install postproxy

Drop your API key in ~/.openclaw/.env, then prompt OpenClaw to publish to any connected platform. See the OpenClaw guide for setup details.

Each platform has its own API guide covering supported formats, media limits, and platform-specific parameters:

When creating a post with media, provide URLs to your images or videos. Postproxy downloads and processes the media, then uploads it to each platform according to their requirements.

Each platform has specific constraints for media (file size, formats, dimensions). See Platform Parameters for details.

Social networks have rate limits that Postproxy handles automatically. If a post hits a rate limit, Postproxy queues it and retries when possible. You don’t need to implement retry logic in your application.