> ## Documentation Index
> Fetch the complete documentation index at: https://help.semji.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get content details

> Returns full details of a content, including HTML body, version, and embedded relations.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/contents/{contentId}
openapi: 3.0.3
info:
  description: >
    The Semji API lets you integrate Semji's AI-powered Content Marketing
    platform into your own tools and workflows. Scale your organic and AI
    visibility programmatically.


    ## Authentication


    All endpoints require a Bearer API key. Generate one from **Settings > API
    Keys** in the Semji app. Each key is scoped to a single user and
    organization.


    ```

    Authorization: Bearer sk_your_api_key_here

    ```


    ## Rate Limiting


    Requests are rate-limited per API key: **1,000 requests per hour**. Rate
    limit headers are included in every response:


    - `X-RateLimit-Limit` — Maximum requests per window

    - `X-RateLimit-Remaining` — Requests remaining

    - `X-RateLimit-Reset` — Seconds until the window resets


    ## Response Format


    All responses return JSON. Collections use a standard envelope:


    ```json

    {
      "data": [...],
      "pagination": { "total": 42, "page": 1, "limit": 25, "hasMore": true }
    }

    ```


    Errors follow a consistent format:


    ```json

    {
      "error": { "code": "not_found", "message": "The requested resource was not found." }
    }

    ```


    ## Core Concepts


    - **Workspace** — A single website you track. Contains pages, contents,
    keywords, and all related analysis data.

    - **Page** — A URL on your website that Semji monitors. Pages are the anchor
    for keywords and content drafts.

    - **Content** — An SEO-optimized article linked to a page. Drafts evolve
    through workflow statuses toward publication.

    - **Content Score** — A 0–100 score measuring how well your content follows
    Semji's SEO recommendations. Aim for 75+ before publishing.

    - **Keyword** — A search term tracked for a page. Analyzing a keyword
    produces SERP-based recommendations (topics, questions, search intents,
    links).

    - **Prompt** — A question users ask AI engines (ChatGPT, Google AI
    Overviews). Analyzing a prompt reveals how to optimize your content for AI
    citations.

    - **Atomic Content** — AI-powered content generation that produces a
    complete SEO-optimized article in one step.
  title: Semji API
  version: 1.0.0
servers: []
security:
  - apiKey: []
tags:
  - description: >-
      Retrieve the authenticated user and their organization, including
      remaining credit balances.
    name: Me
  - description: >-
      List members of the organization linked to the API key, with their roles
      (Admin or Member).
    name: Users
  - description: >-
      A workspace represents a single website you track in Semji. Each workspace
      has its own pages, contents, keywords, folders, and workflow statuses. Use
      these endpoints to list workspaces, view members, and access
      workspace-level configuration.
    name: Workspaces
  - description: >-
      Organize your content into a hierarchical folder structure within a
      workspace. Folders are returned as a flat list — reconstruct the tree
      client-side using `parentFolderId`.
    name: Folders
  - description: >-
      Pages are URLs on your website that Semji tracks for SEO performance.
      Import a URL to start monitoring it, trigger a crawl to fetch its
      metadata, and associate keywords for analysis. Each page can have content
      drafts attached.
    name: Pages
  - description: >-
      Contents are SEO-optimized articles managed through Semji. Create drafts,
      update them with the built-in editor or via the API, track their Content
      Score (0–100), and publish them to your CMS. Use Atomic Content to
      generate a complete optimized article with AI. The `version` field enables
      optimistic locking for concurrent editing.
    name: Contents
  - description: >-
      Track the progress of Atomic Content AI generations. After launching a
      generation via `POST /v1/contents/:contentId/atomic`, poll the status
      here. When status reaches `review`, confirm to apply the generated content
      to your draft, or cancel to discard it.
    name: Content Generations
  - description: >-
      View the credit consumption history for your organization. Credits are
      consumed by keyword analyses, AI content generation, and content idea
      searches. Each entry details what was consumed, by whom, and in which
      workspace.
    name: Credit Usages
  - description: >-
      Keywords are search terms associated with your pages. Analyzing a keyword
      triggers a SERP analysis that produces actionable SEO recommendations:
      topics to cover, questions to answer, search intents to address, and links
      to add. Use the report endpoint to score any content against these
      recommendations.
    name: Keywords
  - description: >-
      Prompts represent questions that users ask AI engines (ChatGPT, Google AI
      Overviews). Analyzing a prompt reveals which sources and brands are cited
      in AI responses, and produces GEO recommendations to improve your
      content's visibility in AI-generated answers.
    name: Prompts
  - description: >-
      Brand Voices encode your editorial identity for AI-generated content. When
      configured, Atomic Content and AI features automatically adopt your
      writing style, tone, and brand guidelines. Select a brand voice ID in the
      `settings` of `POST /v1/contents/:contentId/atomic`.
    name: Brand Voices
  - description: >-
      Knowledge Documents are reference materials (text, URLs, or files) that
      enrich AI content generation with your expertise. When knowledge sources
      are enabled in Atomic Content settings, the AI draws from these documents
      to produce more accurate, brand-aligned content.
    name: Knowledge Documents
paths:
  /v1/contents/{contentId}:
    get:
      tags:
        - Contents
      summary: Get content details
      description: >-
        Returns full details of a content, including HTML body, version, and
        embedded relations.
      parameters:
        - schema:
            type: string
          in: path
          name: contentId
          required: true
          description: Content ID.
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  assignedTo:
                    nullable: true
                    description: User assigned to this content.
                    type: object
                    properties:
                      email:
                        type: string
                      firstName:
                        nullable: true
                        type: string
                      id:
                        type: string
                      lastName:
                        nullable: true
                        type: string
                      profileImageUrl:
                        nullable: true
                        type: string
                    required:
                      - email
                      - firstName
                      - id
                      - lastName
                      - profileImageUrl
                    additionalProperties: false
                  contentScore:
                    nullable: true
                    description: >-
                      This score out of 100 measures the SEO quality of a
                      content.
                    type: integer
                  contentStatus:
                    nullable: true
                    description: Workflow status assigned to this content.
                    type: object
                    properties:
                      color:
                        type: string
                      id:
                        type: string
                      isReadOnly:
                        type: boolean
                      label:
                        type: string
                      position:
                        type: integer
                    required:
                      - color
                      - id
                      - isReadOnly
                      - label
                      - position
                    additionalProperties: false
                  contentUpdatedAt:
                    nullable: true
                    description: ISO 8601 date of the last content body change.
                    type: string
                  createdAt:
                    type: string
                    description: ISO 8601 creation date.
                  dueDate:
                    nullable: true
                    description: Due date (ISO 8601).
                    type: string
                  folder:
                    nullable: true
                    description: Folder this content is organized in.
                    type: object
                    properties:
                      id:
                        type: string
                      name:
                        type: string
                    required:
                      - id
                      - name
                    additionalProperties: false
                  id:
                    type: string
                    description: Unique identifier of the content.
                  page:
                    type: object
                    properties:
                      id:
                        type: string
                      lastStatusCode:
                        nullable: true
                        description: >-
                          HTTP status code of the latest crawl of the associated
                          page.
                        type: integer
                      url:
                        type: string
                    required:
                      - id
                      - lastStatusCode
                      - url
                    additionalProperties: false
                    description: Page this content belongs to.
                  markedAsPublishedAt:
                    nullable: true
                    description: >-
                      Timestamp of the 'mark as published' action, set by Semji
                      (ISO 8601). Never editable. Use this one to detect
                      publications.
                    type: string
                  publishedAt:
                    nullable: true
                    description: >-
                      Publication date declared by the author in the editor (ISO
                      8601). Day granularity, and it can be back or forward
                      dated, so it does not tell when the content was actually
                      published.
                    type: string
                  title:
                    nullable: true
                    description: Title of the content.
                    type: string
                  type:
                    type: string
                    enum:
                      - DRAFT
                      - PUBLISHED
                      - ORIGINAL
                    description: Content type.
                  updatedAt:
                    nullable: true
                    description: ISO 8601 last update date.
                    type: string
                  wordsCount:
                    nullable: true
                    description: Number of words in the content.
                    type: integer
                  contentUpdatedBy:
                    nullable: true
                    description: User who last edited the content body.
                    type: object
                    properties:
                      firstName:
                        nullable: true
                        type: string
                      id:
                        type: string
                      lastName:
                        nullable: true
                        type: string
                    required:
                      - firstName
                      - id
                      - lastName
                    additionalProperties: false
                  html:
                    nullable: true
                    description: >-
                      HTML body of the content as authored in the Semji editor.
                      May contain editor-only markers (comments, fact-check
                      annotations) — for a clean version safe to publish
                      externally, use `htmlSanitized`.
                    type: string
                  htmlSanitized:
                    nullable: true
                    description: >-
                      HTML body of the content with all Semji editor annotations
                      (comments, fact-check markers) stripped. Safe to push into
                      a CMS or publish externally.
                    type: string
                  isStarted:
                    type: boolean
                    description: Whether the content has any HTML body.
                  lastGeneration:
                    nullable: true
                    description: Last Atomic Content generation.
                    type: object
                    properties:
                      id:
                        type: string
                      status:
                        type: string
                        enum:
                          - queued
                          - pending
                          - review
                          - success
                          - failed
                          - cancelled
                      type:
                        type: string
                        enum:
                          - optimize
                          - replace
                    required:
                      - id
                      - status
                      - type
                    additionalProperties: false
                  metaDescription:
                    nullable: true
                    description: Meta description for SEO.
                    type: string
                  markedAsPublishedBy:
                    nullable: true
                    description: User who ran the 'mark as published' action.
                    type: object
                    properties:
                      firstName:
                        nullable: true
                        type: string
                      id:
                        type: string
                      lastName:
                        nullable: true
                        type: string
                    required:
                      - firstName
                      - id
                      - lastName
                    additionalProperties: false
                  publishedBy:
                    nullable: true
                    description: >-
                      Deprecated, use markedAsPublishedBy. Same value, kept so
                      existing integrations keep working.
                    deprecated: true
                    type: object
                    properties:
                      firstName:
                        nullable: true
                        type: string
                      id:
                        type: string
                      lastName:
                        nullable: true
                        type: string
                    required:
                      - firstName
                      - id
                      - lastName
                    additionalProperties: false
                  version:
                    type: integer
                    description: Optimistic locking version.
                required:
                  - assignedTo
                  - contentScore
                  - contentStatus
                  - contentUpdatedAt
                  - createdAt
                  - dueDate
                  - folder
                  - id
                  - page
                  - markedAsPublishedAt
                  - publishedAt
                  - title
                  - type
                  - updatedAt
                  - wordsCount
                  - contentUpdatedBy
                  - html
                  - htmlSanitized
                  - isStarted
                  - lastGeneration
                  - metaDescription
                  - markedAsPublishedBy
                  - publishedBy
                  - version
                additionalProperties: false
components:
  securitySchemes:
    apiKey:
      bearerFormat: API Key
      description: API key starting with `sk_`. Generate one in **Settings > API Keys**.
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.