Developer API
Social media & ads API for your product
Publish organic posts, upload media, and manage paid campaigns from your backend—without building OAuth for every network.
Send X-Api-Key on every call · Pro, Agency & Enterprise · 100/min, or 500/min with Batch
Built for integrators
One REST surface for content and campaigns—the same modules your team uses in the Athenous app.
Posts API
Create, schedule, publish, and import. Per-channel settings for placement, content type, and media.
Campaigns API
CRUD campaigns, ad sets, and ads on Meta, Google, LinkedIn, OpenAI Ads, Reddit, and more.
Connectors
List OAuth-connected accounts and destinations before you publish. Health checks keep tokens in sync.
MCP & assistants
Same key for Claude, Cursor, and ChatGPT through the Athenous MCP server.
Three steps to the first call
Connect a network, create a key with the REST API scope, then call the public host.
-
Connect accounts
Link profiles in Connections. Each one gives you a
connectorIdfor posts and ads. -
Create an API key
In Settings → API keys (Pro, Agency, or Enterprise), enable REST API and copy the key once.
-
Call the API
Send
X-Api-Keytohttps://public-api.athenous.io. A CLI-only key is rejected.
Platforms
Organic publishing and paid ads use the connectors already linked in your workspace.
Organic posts
- X
- Threads
- Bluesky
- TikTok
- YouTube
Paid ads
- Meta
- TikTok
- Snapchat
- Bing
Quick start
Schedule a LinkedIn post in a few lines. Replace placeholders with your key and connector ID.
curl -sS -X POST "https://public-api.athenous.io/api/v1/posts" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Hello from our product",
"scheduledAt": "2026-05-20T14:00:00Z",
"channels": ["linkedin"],
"channelSettings": "{\"linkedin\":{\"contentType\":\"post\",\"connectorId\":\"CONNECTOR_UUID\"}}"
}'
import requests
API = "https://public-api.athenous.io"
headers = {"X-Api-Key": "YOUR_API_KEY", "Content-Type": "application/json"}
requests.post(
f"{API}/api/v1/posts",
headers=headers,
json={
"body": "Hello from our product",
"scheduledAt": "2026-05-20T14:00:00Z",
"channels": ["linkedin"],
"channelSettings": '{"linkedin":{"contentType":"post","connectorId":"CONNECTOR_UUID"}}',
},
).raise_for_status()
const API = "https://public-api.athenous.io";
const headers = {
"X-Api-Key": process.env.ATHENOUS_API_KEY,
"Content-Type": "application/json",
};
await fetch(`${API}/api/v1/posts`, {
method: "POST",
headers,
body: JSON.stringify({
body: "Hello from our product",
scheduledAt: "2026-05-20T14:00:00Z",
channels: ["linkedin"],
channelSettings: JSON.stringify({
linkedin: { contentType: "post", connectorId: "CONNECTOR_UUID" },
}),
}),
});
What you get vs. rolling your own
| DIY per network | Athenous API | |
|---|---|---|
| OAuth & token refresh | Build N times | Handled in Connections |
| Organic + paid | Separate integrations | Posts + Campaigns APIs |
| Content-type rules | Per-platform docs | Aligned with in-app composer |
| Spec & testing | Ad hoc | OpenAPI + Postman |
Questions
Which plans include API keys?
API keys are available on Pro, Agency, and Enterprise. Upgrade in billing or contact sales for Enterprise limits.
Where is the full reference?
Open the API reference. Download OpenAPI YAML and Postman from Settings → API keys.
Is channelSettings JSON inside JSON?
Yes—the request field is a string containing JSON per platform. This matches the web composer and keeps one schema for all channels.
Rate limits?
100 requests per minute per key on posts, campaigns, and connectors. 500 per minute when the key also has the Batch scope. A 429 includes Retry-After: 60.
Start building today
Create a workspace, connect channels, generate an API key, then open the interactive docs—or talk to the same API through MCP.