Docs

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/v1

Step 1 — Create an API key

  1. Go to Dashboard → API & Apps
  2. Click Create API Key
  3. Give it a name (e.g. "My Script") and select Read & Write permission
  4. Copy the key immediately — it's only shown once

Your key looks like:

fh_aee6d4242ae1d2ff857b4a900904f9e5beac1f2168a6c83da9f63053fda8caf8

Step 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
curl https://feedhorizon.com/api/v1/me \
  -H "Authorization: Bearer fh_YOUR_API_KEY"

Then list your profiles:

cURL
curl -X GET https://feedhorizon.com/api/v1/profiles \
  -H "Authorization: Bearer fh_YOUR_API_KEY"
Node.js (fetch)
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);
Python (requests)
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
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
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