API reference
A key-authenticated REST gateway over the same publishing pipeline as the app. It powers the MCP server, the CLI, and any integration you build.
Base URL
https://api.posteahora.com/functions/v1/apiThe /functions/v1/ segment is part of the stable URL — don’t strip it. This is the frozen v1 contract: additive changes only, never breaking ones in place.
Authentication
Every request carries a PosteAhora API key as a bearer token. Keys are created under API and shown once. See Authentication for keys, scopes and plan requirements.
Authorization: Bearer pah_live_xxxxxxxxxxxxxxxxideas:readList ideasideas:writeCreate / update / delete ideasposts:readList and read postsposts:writeCreate / update / delete / publish postsanalytics:readRead post analyticsaccounts:readList connected social accountsmedia:writeRequest presigned media upload URLsConventions
- •JSON request and response bodies. Send Content-Type: application/json.
- •Timestamps are ISO 8601 (UTC), e.g. 2026-07-20T14:30:00Z.
- •Rate limiting is per key (429 when exceeded). Your monthly post quota still applies.
- •Errors have the shape { "error": "message" }.
Errors
400Invalid request (bad body, bad scheduledAt, unknown status, …)401Missing or invalid API key403Key lacks the required scope404Resource not found (or not owned by the key’s user)429Rate limit exceeded5xxServer errorResources
Your connected social accounts. Call this first — publishing needs each account’s id, and tokens are never returned.
IdeasLightweight backlog items — brainstorming only. They never publish.
PostsCreate drafts, schedule, publish now, edit, and read posts.
AnalyticsRead-only metrics, refreshed hourly by the analytics sync crons.
MediaGet a presigned URL, PUT your file to it, then use the returned publicUrl in mediaUrls.
Quick start
Replace ACCOUNT_ID with an id from GET /accounts. See the full Quickstart for a step-by-step.
BASE="https://api.posteahora.com/functions/v1/api"
KEY="pah_live_xxxxxxxxxxxxxxxx"
# 1. List accounts
curl -s "$BASE/accounts" -H "Authorization: Bearer $KEY"
# 2. Publish a post now
curl -s -X POST "$BASE/posts" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"caption": "Hello from the PosteAhora API 👋",
"accountMappings": [{ "platform": "twitter", "accountId": "ACCOUNT_ID" }],
"status": "published"
}'