Contents

Long-form content — blog posts and articles. List, get by ID, get by slug.

Contents are blog posts and articles. They can be written manually in the dashboard or generated by AI on a schedule. Each content item has an author, category, publish date, featured image, SEO metadata, tags, and a markdown body.

List contents

GET /api/organizations/{orgId}/contents

API-key callers receive all published content, newest first.

Response

{
  "items": [
    {
      "id": "cnt_1",
      "title": "How to grow with content",
      "slug": "how-to-grow-with-content",
      "excerpt": "A short summary of the post.",
      "categoryName": "Marketing",
      "categorySlug": "marketing",
      "authorName": "Inventra",
      "publishedAt": "2026-03-15",
      "featuredImage": { "url": "...", "alt": "..." },
      "seoMetadata": { "title": "...", "description": "..." },
      "tags": ["seo", "growth"]
    }
  ]
}

Note the list response does not include the article body. Fetch by slug (or ID) to get the full content.

SDK equivalent

const posts = await inventra.contents.list();

Get content by ID

GET /api/organizations/{orgId}/contents/{contentId}

Get content by slug

GET /api/organizations/{orgId}/contents/by-slug/{slug}

Returns the full content detail, including the markdown body.

Response

{
  "id": "cnt_1",
  "title": "How to grow with content",
  "slug": "how-to-grow-with-content",
  "excerpt": "A short summary of the post.",
  "content": "## Introduction\n\nLong-form markdown body...",
  "categoryName": "Marketing",
  "categorySlug": "marketing",
  "authorName": "Inventra",
  "publishedAt": "2026-03-15",
  "featuredImage": { "url": "...", "alt": "..." },
  "seoMetadata": { "title": "...", "description": "..." },
  "tags": ["seo", "growth"],
  "references": [
    {
      "source": "The Knot 2024 Real Weddings Study",
      "url": "https://example.com/study",
      "asOf": "2024",
      "claim": "$2,800 average US wedding photographer package"
    }
  ]
}

The references array lists the external sources cited inline in the body via [N] markers. Each entry has the publication name (source), a direct url, an optional asOf year, and the optional verbatim claim the marker refers to. Older posts created before structured references were stored separately may have references: null and still keep the references embedded in the markdown body.

Example (TypeScript)

const post = await inventra.contents.getBySlug('how-to-grow-with-content');
console.log(post.content); // full markdown

SDK equivalent

const post = await inventra.contents.getBySlug(slug);

Get references

GET /api/organizations/{orgId}/contents/{contentId}/references

Returns just the references array for a single content item. Useful when you already have the post body cached and only need the citation list.

Response

[
  {
    "source": "The Knot 2024 Real Weddings Study",
    "url": "https://example.com/study",
    "asOf": "2024",
    "claim": "$2,800 average US wedding photographer package"
  }
]

Returns [] when the post has no references (or when the post predates structured references and still carries them inline in the markdown body).

Rendering the content body

The content field is raw markdown (GitHub-flavored). Render it with your markdown renderer of choice. The SDK ships a ready-to-use React component that handles headings, tables, links, and code blocks:

import { Markdown } from 'inventra/react';

<Markdown>{post.content}</Markdown>

See the React SDK page for the full component reference.