Quickstart
Create an API key, make your first request and publish your first post in five minutes.
This page takes you from zero to a published post. You need a FeedHorizon account with at least one connected social account (open Connections in the dashboard).
Base URL:
https://feedhorizon.com/api/v1Step 1 — Create an API key
- Go to Dashboard → API & Apps
- Click Create API Key
- Give it a name (e.g. "My Script") and select Read & Write permission
- Copy the key immediately — it's only shown once
Your key looks like:
fh_aee6d4242ae1d2ff857b4a900904f9e5beac1f2168a6c83da9f63053fda8caf8Step 2 — Make your first request
Check the key with GET /api/v1/me. It returns your organization, plan, rate limit and the scopes of this key:
curl https://feedhorizon.com/api/v1/me \
-H "Authorization: Bearer fh_YOUR_API_KEY"Then list your profiles:
curl -X GET https://feedhorizon.com/api/v1/profiles \
-H "Authorization: Bearer fh_YOUR_API_KEY"const res = await fetch('https://feedhorizon.com/api/v1/profiles', {
headers: {
'Authorization': 'Bearer fh_YOUR_API_KEY',
},
});
const { data } = await res.json();
console.log(data);import requests
res = requests.get(
"https://feedhorizon.com/api/v1/profiles",
headers={"Authorization": "Bearer fh_YOUR_API_KEY"},
)
print(res.json()["data"])You should receive a JSON response:
{
"data": [
{
"id": "prof_2f9c1e4b6a3d4e8b9f0a1c2d3e4f5a6b",
"name": "My Brand",
"color": "#f5d76e",
"timezone": "Europe/Berlin",
"isDefault": true,
"queueEnabled": false,
"createdAt": "2026-11-01T09:00:00.000Z",
"updatedAt": "2026-11-01T09:00:00.000Z"
}
],
"nextCursor": null
}Copy the id of the profile: posts are created inside a profile. Every object comes wrapped in data, every list in data plus nextCursor, and ids carry a prefix such as prof_ or acc_ that says what they are. API basics explains these conventions, and Data model how profiles, accounts and posts fit together.
Step 3 — Create a post
curl -X POST https://feedhorizon.com/api/v1/posts \
-H "Authorization: Bearer fh_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"content": "Hello from the FeedHorizon API!",
"platforms": ["linkedin"],
"profileId": "YOUR_PROFILE_ID",
"publishNow": true
}'The response is the created post. It moves from scheduled to publishing to published within seconds. Leave out publishNow for a draft, or send scheduledFor instead (see Scheduling).
The Idempotency-Key header makes the request safe to retry: if the connection drops, send it again with the same key and you get the first response back instead of a second post.
Step 4 — Set up webhooks (optional)
Get notified when posts are published or fail:
curl -X POST https://feedhorizon.com/api/v1/webhooks \
-H "Authorization: Bearer fh_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My server",
"url": "https://your-server.com/webhooks/feedhorizon",
"events": ["post.published", "post.failed"]
}'Next steps
- Data model — How profiles, accounts, posts and targets fit together
- Scheduling — Drafts, scheduled posts, the queue and retries
- Authentication — API key formats, scopes, and security
- MCP Server — Let Claude, ChatGPT and other AI assistants schedule posts for you
- Errors — Error response format, codes and HTTP status codes
- Rate Limits — Understand request limits and headers
- Idempotency — Retry writes safely
- Webhooks — Events and signature verification