GPTpost Developers
Let Claude, ChatGPT or your own scripts draft, schedule and publish social posts in your GPTpost workspace, with a scoped API key.
Overview
https://app.oraglegpt.org/mcp for Claude Code, Claude Desktop and other MCP clients (streamable HTTP).
https://app.oraglegpt.org/api/v1/agent/... for scripts and agent frameworks.
https://app.oraglegpt.org/openapi.json for ChatGPT Actions and any OpenAPI-aware tool.
Every request authenticates with Authorization: Bearer gpk_.... Posts created by an agent go through the same rules as posts created in the app: per-network text limits, approval workflows, plan limits and publishing safeguards.
Get an API key
- Sign in at https://app.oraglegpt.org/ as a workspace owner or admin.
- Open Settings > API & Agents (https://app.oraglegpt.org/#/settings/api-agents).
- Choose Create API key, give it a name, pick scopes and an expiry.
- Copy the key straight away. It is shown once and starts with
gpk_.
Copy it now, you will not see it again. GPTpost keeps only a hash. If you lose a key, revoke it and create a new one.
Scopes
| Scope | Allows |
|---|---|
accounts:read | List connected social accounts (network, handle, state, text limit). |
posts:read | List posts and read their schedule and per-network publish status. |
posts:write | Create posts, schedule them and publish now. Approval rules and plan limits still apply. |
media:write | Upload media (from a URL or base64) and read it back. |
A key never has more rights than the person who created it. If that person loses a role or is removed, the key stops working. Changing or resetting the password, or replacing the second factor, revokes every key that person created. Keys work only on /api/v1/agent/ and /mcp.
Connect Claude Code
claude mcp add --transport http gptpost https://app.oraglegpt.org/mcp \
--header "Authorization: Bearer <YOUR_API_KEY>"
Then run /mcp inside Claude Code to see the GPTpost tools, and ask for example: "Schedule a LinkedIn post for tomorrow at 9:00 announcing our webinar".
Connect Claude Desktop
Open Settings > Developer > Edit Config, add this to claude_desktop_config.json, and restart Claude Desktop. It uses mcp-remote, so Node.js must be installed.
{
"mcpServers": {
"gptpost": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://app.oraglegpt.org/mcp",
"--header",
"Authorization: Bearer ${GPTPOST_API_KEY}"
],
"env": {
"GPTPOST_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
claude.ai (web)
Custom connectors on claude.ai sign in with OAuth, which the GPTpost MCP endpoint does not support yet. Use Claude Code or Claude Desktop with an API key for now.
ChatGPT and other agents (OpenAPI)
For a Custom GPT: Configure > Actions > Create new action > Import from URL, then set authentication to API key, auth type Bearer.
OpenAPI schema URL: https://app.oraglegpt.org/openapi.json
Authentication: API key
Auth type: Bearer
API key: <YOUR_API_KEY>
Agent frameworks that load tools from OpenAPI (LangChain, Semantic Kernel, OpenAI Agents SDK and similar) can use the same URL and header.
REST quickstart
1. Check the key
curl https://app.oraglegpt.org/api/v1/agent/me \
-H "Authorization: Bearer $GPTPOST_API_KEY"
2. List the accounts you can post to
curl https://app.oraglegpt.org/api/v1/agent/accounts \
-H "Authorization: Bearer $GPTPOST_API_KEY"
3. Create a post
curl -X POST https://app.oraglegpt.org/api/v1/agent/posts \
-H "Authorization: Bearer $GPTPOST_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"text":"Hello from my agent","account_ids":["ACCOUNT_ID"]}'
Add "schedule_at":"2026-11-02T09:00:00Z" to schedule it in the same call, or "publish_now":true to publish immediately. Optional fields: title, media_ids, and variants (per-network text, for example {"x":"Short version"}).
4. Schedule or publish an existing post
curl -X POST https://app.oraglegpt.org/api/v1/agent/posts/POST_ID/schedule \
-H "Authorization: Bearer $GPTPOST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"schedule_at":"2026-11-02T09:00:00Z"}'
curl -X POST https://app.oraglegpt.org/api/v1/agent/posts/POST_ID/publish \
-H "Authorization: Bearer $GPTPOST_API_KEY"
5. Check status
curl https://app.oraglegpt.org/api/v1/agent/posts/POST_ID \
-H "Authorization: Bearer $GPTPOST_API_KEY"
curl "https://app.oraglegpt.org/api/v1/agent/posts?state=scheduled&limit=20" \
-H "Authorization: Bearer $GPTPOST_API_KEY"
Upload media
curl -X POST https://app.oraglegpt.org/api/v1/agent/media \
-H "Authorization: Bearer $GPTPOST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/image.jpg","rights_status":"owned"}'
Use the returned media id in media_ids when you create the post. Set rights_status to owned or licensed: posts refuse media whose rights are unknown.
MCP tools
| Tool | What it does | Scope |
|---|---|---|
whoami | Workspace, key scopes and plan usage | any |
list_accounts | Connected social accounts a post can target | accounts:read |
create_post | Create a post, optionally scheduled or published now | posts:write |
schedule_post | Schedule an existing post | posts:write |
publish_post | Publish an existing post now | posts:write |
upload_media | Upload media from a URL or base64 | media:write |
get_post_status | A post with its schedule and per-network status | posts:read |
list_posts | Recent posts, filterable by state | posts:read |
Rate limits
Each key can make about 120 requests per minute, with a lower budget for writes. Above that the API answers 429 Too Many Requests with a Retry-After header in seconds. Wait that long, then retry. Send an Idempotency-Key header on create calls so a retry never creates a duplicate post.
Errors
Errors are application/problem+json: {"type","title","status","code","detail"}.
| Status | Meaning | What to do |
|---|---|---|
| 401 | Missing, malformed, expired or revoked key | Check the header, or create a new key. |
| 403 | The key lacks the scope (insufficient_scope), or the path is outside the agent API (key_surface_not_allowed) | Create a key with the needed scope; call only /api/v1/agent/ and /mcp. |
| 409 | Approval required before scheduling or publishing | The post waits for review in GPTpost; check it later with get_post_status. |
| 422 | Validation failed, for example text too long for a network | Shorten the text or add a per-network variant. |
| 402 | Plan limit reached (for example posts per month) or the plan lacks API access | Check usage with whoami; upgrade the plan. |
| 429 | Rate limit reached | Wait for Retry-After, then retry. |
Security notes
- Keys are stored hashed. The full key is shown once, when it is created.
- A key acts as the person who created it, bounded by its scopes. It cannot manage members, billing, OAuth apps or other API keys.
- Revoke a key at any time in Settings > API & Agents. It stops working immediately.
- Keep keys out of source code and shared chats. Prefer an environment variable such as
GPTPOST_API_KEY. - Use one key per agent or device, so you can revoke one without breaking the others.