Skip to content

Content model

Every publishable unit in NativPost is a content object. Whether it lands on X as a text post, on Instagram as a Reel, or on YouTube as a Short, the same underlying record drives it.

{
"object": "content",
"id": "cnt_9f2c8e7b1a3d4f60",
"workspace_id": "org_2gK9c7dL3eX8fY1a",
"campaign_id": null,
"status": "scheduled",
"content_type": "reel",
"platforms": ["instagram", "tiktok"],
"body_text": "Ship faster with NativPost.",
"hook_text": "Stop guessing what to post.",
"media_assets": [
{ "id": "med_1e7b8a2c9d3f", "kind": "video", "url": "https://..." }
],
"scheduled_at": "2026-07-19T13:00:00Z",
"published_at": null,
"created_at": "2026-07-19T12:04:11Z",
"updated_at": "2026-07-19T12:07:52Z"
}
  • Identity: id, workspace_id, campaign_id (optional link to a campaign).
  • Lifecycle: status, scheduled_at, published_at, created_at, updated_at.
  • Rendering: content_type, hook_text, body_text, slide_copy, media_assets.
  • Targeting: platforms array plus optional per-platform overrides in platform_overrides.
  • Metadata: free-form metadata object for your own tags.

Text, hook, and slide copy live directly on the content object. Rendered video and image output is generated by the platform’s engine and stored in media_assets once the content moves to approved or beyond. See Statuses for the full lifecycle.

A content object can exist on its own or belong to a campaign via campaign_id. Campaigns bundle multiple content items with a shared cadence and platforms. Launching a campaign puts every child content in the scheduled state at the appropriate slot. See Campaigns.

Once a content object reaches published, most fields are frozen. You can still update metadata and delete the record, but rewriting body_text after publish has no effect on the live post. To edit a published post, republish through the platform’s own interface.