Skip to content

Content

The content resource is the workhorse of the API. See Content model for a full field reference; this page covers the endpoints.

GET /api/v1/content

Query parameters:

NameTypeNotes
statusstringFilter by status.
content_typestringFilter by content type.
limitinteger1 to 100, default 25.
cursorstringSee Pagination.
Terminal window
curl "https://app.nativpost.com/api/v1/content?status=scheduled&limit=20" \
-H "Authorization: Bearer $NATIVPOST_API_KEY"
GET /api/v1/content/{id}
Terminal window
curl https://app.nativpost.com/api/v1/content/9f2c8e7b-1a3d-4f60-b2c1-7e5a9d3c4b81 \
-H "Authorization: Bearer $NATIVPOST_API_KEY"
POST /api/v1/content

Body:

{
"caption": "Our new home office setup.",
"content_type": "single_image",
"target_platforms": ["instagram", "facebook"],
"media_urls": ["https://res.cloudinary.com/.../office.jpg"]
}

caption is the only required field. content_type defaults to single_image.

Optional fields: hashtags (array, no leading #), topic, platform_specific (object keyed by platform), aspect_ratio, scheduled_for (ISO 8601), and status — one of draft (default), pending_review, approved, scheduled.

Media is attached by URL via media_urls, not by asset id. Use the media library to find them.

PATCH /api/v1/content/{id}

Send only the fields you want to change. Common patterns:

Terminal window
# Approve and schedule
curl -X PATCH https://app.nativpost.com/api/v1/content/9f2c8e7b-1a3d-4f60-b2c1-7e5a9d3c4b81 \
-H "Authorization: Bearer $NATIVPOST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"scheduled","scheduled_for":"2026-07-19T13:00:00Z"}'

On update, status also accepts rejected.

POST /api/v1/content/{id}/publish

Queues the item for publishing and returns 202 Accepted. Omit scheduled_for to release it to the next publishing run; pass it to schedule the item for a specific time.

The item must already have target_platforms set — otherwise the call fails with 422 no_target_platforms.

Body (optional):

{ "scheduled_for": "2026-07-19T13:00:00Z" }

Response is the serialized content plus a queue flag:

{
"object": "content",
"id": "9f2c8e7b-1a3d-4f60-b2c1-7e5a9d3c4b81",
"status": "approved",
"scheduled_for": "2026-07-19T13:00:00Z",
"publish_queued": true
}

Because publishing is asynchronous, the response does not carry per-platform results. Poll the item, or subscribe to the publishing webhooks, to learn the outcome.

DELETE /api/v1/content/{id}

Archives the item — its status becomes archived and it drops out of list results. Fires the content.deleted webhook and returns:

{ "id": "9f2c8e7b-1a3d-4f60-b2c1-7e5a9d3c4b81", "object": "content", "deleted": true }

There is no API call to restore an archived item. Set status to rejected instead if it may be wanted back.