Endpoints
Use the posts endpoints to create, schedule, update, fetch, list, and delete posts in FeedHive. The response shape is documented on the Post object page.
GET /posts
List all posts owned by the authenticated caller.
Query parameters
| Field | Type | Description |
|---|---|---|
| limit | number | Page size. Defaults to 20 and cannot exceed 100. |
| cursor | string | Pagination cursor from a previous response. |
| status | string | Optional comma-separated status filter. Supported values: draft, scheduled, publishing, published, failed. |
| labels | string | Optional comma-separated label ID filter. Matching uses OR semantics. |
| socials | string | Optional comma-separated social account ID filter. Matching uses OR semantics. |
Example request
curl --request GET \
--url 'https://api.feedhive.com/posts?limit=20&status=draft,scheduled&labels=lbl_campaign_q4&socials=social_123' \
--header 'accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY'Response body
| Field | Type | Description |
|---|---|---|
| success | boolean | Whether the request succeeded. |
| data.items | Post[] | Returned posts for this page. |
| data.total | number | Total number of posts owned by the caller. |
| data.has_more | boolean | Whether another page of posts is available. |
| data.next_cursor | string | null | Cursor for the next page, or null when there are no more results. |
GET /posts/:id
Fetch a single post by ID.
Path parameters
| Field | Type | Description |
|---|---|---|
| id | string | Post identifier. |
Example request
curl --request GET \
--url https://api.feedhive.com/posts/post_123 \
--header 'accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY'Response body
| Field | Type | Description |
|---|---|---|
| success | boolean | Whether the request succeeded. |
| data | Post | Requested post. |
POST /posts
Create a new post.
Request body
| Field | Type | Description |
|---|---|---|
| text | string | Required. Root post text and must be non-empty. |
| media | string[] | Ordered media IDs to attach. Do not send duplicates. |
| subposts | SubpostInput[] | Optional thread replies. |
| accounts | string[] | Optional social account IDs to target. |
| account_customizations | AccountCustomizationInput[] | Optional per-account overrides. Each id must also appear in accounts. |
| labels | string[] | Optional label IDs to attach. Do not send duplicates. |
| status | draft | scheduled | Optional post status. Defaults to draft. |
| scheduled_at | string | Required when status is scheduled. Must be a future ISO 8601 datetime. |
| notes | string | null | Optional internal notes. |
| short_link_enabled | boolean | Optional short-link setting. |
SubpostInput
| Field | Type | Description |
|---|---|---|
| text | string | null | Subpost text. |
| media | string[] | Ordered media IDs for the subpost. Do not send duplicates. |
AccountCustomizationInput
| Field | Type | Description |
|---|---|---|
| id | string | Account ID. Must also appear in the accounts array. |
| text | string | null | Override text for that account. |
| media | string[] | Override media IDs. |
| subposts | SubpostInput[] | Override subposts for that account. |
Validation rules
textis required and must be non-empty.- Arrays for media IDs, account IDs, and label IDs must not contain duplicates.
- Every
account_customizations[].idvalue must also be present inaccounts. - When
statusisscheduled, you must sendaccountsand a futurescheduled_atvalue. scheduled_atis only allowed whenstatusisscheduled.
Example request
curl --request POST \
--url https://api.feedhive.com/posts \
--header 'accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"text": "Launch update for this week",
"media": ["med_hero_image"],
"subposts": [
{
"text": "Thread follow-up with the main rollout checklist.",
"media": []
}
],
"accounts": ["social_123", "social_456"],
"account_customizations": [
{
"id": "social_456",
"text": "A LinkedIn-specific version of the launch update.",
"media": [],
"subposts": []
}
],
"labels": ["lbl_campaign_q4"],
"status": "scheduled",
"scheduled_at": "2026-04-15T13:00:00.000Z",
"notes": "Use the updated CTA once legal signs off.",
"short_link_enabled": true
}'Response body
| Field | Type | Description |
|---|---|---|
| success | boolean | Whether the request succeeded. |
| data | Post | Created post. |
PATCH /posts/:id
Update an existing post. Fields use replace semantics, so any field you send fully overwrites the current value.
Path parameters
| Field | Type | Description |
|---|---|---|
| id | string | Post identifier. |
Request body
| Field | Type | Description |
|---|---|---|
| text | string | null | Replacement root text. |
| media | string[] | Replacement media IDs. |
| subposts | SubpostInput[] | Replacement subposts. |
| accounts | string[] | Replacement social account IDs. |
| account_customizations | AccountCustomizationInput[] | Replacement per-account overrides. |
| labels | string[] | Replacement label IDs. |
| status | draft | scheduled | Replacement status. |
| scheduled_at | string | null | Replacement scheduled datetime. Send null to clear it. |
| notes | string | null | Replacement notes value. |
| short_link_enabled | boolean | Replacement short-link setting. |
The same validation rules as POST /posts apply.
Example request
curl --request PATCH \
--url https://api.feedhive.com/posts/post_123 \
--header 'accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"text": "Launch update for this week - revised",
"labels": ["lbl_campaign_q4", "lbl_product_launch"],
"scheduled_at": "2026-04-16T13:00:00.000Z",
"notes": "Approved for the final review pass.",
"short_link_enabled": false
}'Response body
| Field | Type | Description |
|---|---|---|
| success | boolean | Whether the request succeeded. |
| data | Post | Updated post. |
DELETE /posts/:id
Soft-delete a post. Deleted posts no longer appear in list results, but the underlying record is retained internally.
Path parameters
| Field | Type | Description |
|---|---|---|
| id | string | Post identifier. |
Example request
curl --request DELETE \
--url https://api.feedhive.com/posts/post_123 \
--header 'accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY'Response body
| Field | Type | Description |
|---|---|---|
| success | boolean | Whether the request succeeded. |
| data | Post | Deleted post. |