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

# Lister les contenus

> Renvoie tous les éléments de Content Hub, publiés ou non : brouillons, briefs, ciblages concurrents, optimize/slice, planifiés, échoués et pages suivies. C’est le chemin de liste des lignes non publiées d’un `sheet_id`. `POST /api/v1/content` ne liste que les lignes de pipeline terminées avec métriques ; une feuille de brouillons générés y paraît vide, utilisez donc ce point.

Renvoie seulement l’identité (id, titre, type, étape, feuille, URL, dates, ID des prompts cibles), sans métriques. Lecture non mise en cache du stockage primaire : visible dès que `POST /api/v1/content/generate` renvoie `content_id`. Lisez son texte avec `GET /api/v1/content/{content_id}`.

`stage` est l’état brut du pipeline, pas un indicateur publié : `null` signifie absence de pipeline (la plupart des pages externes/importées), et l’éditeur manuel utilise `generated`. Publié seulement si `done` (ou externe/importé) avec une `url` ; `done` sans `url` est un orphelin non publié.

Le `sheet_id` d’un onglet de type view (voir `sheet_type` sur `GET /api/v1/content/sheets`) liste l’inventaire principal sans ses filtres enregistrés. Le contenu masqué (`is_hidden = true`) est exclu. Anticipation `page_size + 1` : `pagination.has_more === true` indique une page suivante, sans total. Un `sheet_id` ou `prompt_id` inconnu ou d’un autre site renvoie 403.

Également disponible comme outil MCP `list_content`.



## OpenAPI

````yaml fr/api-reference/openapi.json get /api/v1/content/items
openapi: 3.1.0
info:
  title: API AthenaHQ
  description: >-
    L’API AthenaHQ permet de gérer vos sites et prompts par programme pour
    l’optimisation de contenu par IA.
  version: 1.0.0
  contact:
    email: support@athenahq.ai
servers:
  - url: https://api.athenahq.ai
    description: Serveur de production
security:
  - apiKey: []
tags:
  - name: Basics
    description: Opérations API principales pour gérer sites et prompts
  - name: Metrics
    description: Points de terminaison de métriques et analyses de visibilité IA
  - name: Billing
    description: Points de facturation et crédits pour gérer la consommation
  - name: Team Management
    description: Points de terminaison de gestion des membres et invitations
  - name: Groups
    description: Points de terminaison de gestion des groupes de sites
  - name: Content
    description: >-
      Points de terminaison Content Hub : onglets, URL suivies et détail des
      prompts par URL.
  - name: Pitch Workspace
    description: >-
      Points de terminaison des rapports Pitch Workspace : exécutions à
      l’échelle de l’organisation avec concurrents, prompts, attributs et
      métriques agrégées.
  - name: Knowledge Base
    description: >-
      Endpoints de lecture de la base de connaissances de la marque — faits
      approuvés et piliers qui les organisent.
paths:
  /api/v1/content/items:
    get:
      tags:
        - Content
      summary: Lister les contenus
      description: >-
        Renvoie tous les éléments de Content Hub, publiés ou non : brouillons,
        briefs, ciblages concurrents, optimize/slice, planifiés, échoués et
        pages suivies. C’est le chemin de liste des lignes non publiées d’un
        `sheet_id`. `POST /api/v1/content` ne liste que les lignes de pipeline
        terminées avec métriques ; une feuille de brouillons générés y paraît
        vide, utilisez donc ce point.


        Renvoie seulement l’identité (id, titre, type, étape, feuille, URL,
        dates, ID des prompts cibles), sans métriques. Lecture non mise en cache
        du stockage primaire : visible dès que `POST /api/v1/content/generate`
        renvoie `content_id`. Lisez son texte avec `GET
        /api/v1/content/{content_id}`.


        `stage` est l’état brut du pipeline, pas un indicateur publié : `null`
        signifie absence de pipeline (la plupart des pages externes/importées),
        et l’éditeur manuel utilise `generated`. Publié seulement si `done` (ou
        externe/importé) avec une `url` ; `done` sans `url` est un orphelin non
        publié.


        Le `sheet_id` d’un onglet de type view (voir `sheet_type` sur `GET
        /api/v1/content/sheets`) liste l’inventaire principal sans ses filtres
        enregistrés. Le contenu masqué (`is_hidden = true`) est exclu.
        Anticipation `page_size + 1` : `pagination.has_more === true` indique
        une page suivante, sans total. Un `sheet_id` ou `prompt_id` inconnu ou
        d’un autre site renvoie 403.


        Également disponible comme outil MCP `list_content`.
      operationId: listContentItems
      parameters:
        - name: website_id
          in: query
          description: Site dont énumérer Content Hub.
          required: true
          schema:
            type: string
            format: uuid
        - name: sheet_id
          in: query
          description: >-
            Limiter à un seul onglet de Content Hub. Utilisez `GET
            /api/v1/content/sheets` pour découvrir les ID. Un onglet de type vue
            utilise l’ensemble principal partagé. Omettez pour couvrir tous les
            onglets.
          required: false
          schema:
            type: string
            format: uuid
        - name: content_type
          in: query
          description: >-
            Limiter à un type de contenu. `athena_created` est un raccourci pour
            les quatre sous-types générés par Athena (draft, snipe, optimize,
            slice). Omettez pour couvrir tous les types.
          required: false
          schema:
            type: string
            enum:
              - external
              - imported
              - athena_created
              - draft
              - snipe
              - optimize
              - slice
              - manual
        - name: stage
          in: query
          description: >-
            Limite à une étape du pipeline. Ne correspond qu’aux lignes avec un
            enregistrement de pipeline ; exclut donc la plupart des pages
            externes/importées. Omettez pour toutes les étapes.
          required: false
          schema:
            type: string
            enum:
              - scheduled
              - pending
              - pending_brief
              - generated_brief
              - pending_article
              - generated
              - done
              - failed
        - name: prompt_id
          in: query
          description: >-
            Limite aux contenus écrits pour ce prompt, le ciblage avec les mêmes
            ID que `POST /api/v1/content/generate`. Les prompts supprimés
            logiquement correspondent aussi.
          required: false
          schema:
            type: string
            format: uuid
        - name: page_num
          in: query
          description: Numéro de page commençant à zéro.
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
        - name: page_size
          in: query
          description: Nombre d’éléments par page (1–100).
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
      responses:
        '200':
          description: Réponse réussie avec la page de contenus.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContentItemsListResponse'
              example:
                content:
                  - content_id: 11111111-2222-3333-4444-555555555555
                    title: How to Apply Foundation on Mature Skin
                    type: draft
                    stage: generated
                    url: null
                    normalized_url: null
                    sheet_id: 00000000-0000-4000-8000-000000000001
                    sheet_name: Drafts - sprint 1
                    topic_name: Makeup for Mature Skin
                    prompt_ids:
                      - aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee
                    prompt_count: 1
                    mark_as_done_time: null
                    created_at: '2026-09-01T20:59:53.000Z'
                    updated_at: '2026-09-01T21:09:04.000Z'
                pagination:
                  page_num: 0
                  page_size: 50
                  has_more: false
        '400':
          description: Requête incorrecte, paramètres invalides.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing_website_id:
                  value:
                    error: website_id is required
                invalid_stage:
                  value:
                    error: >-
                      stage: Invalid option: expected one of
                      "scheduled"|"pending"|"pending_brief"|"generated_brief"|"pending_article"|"generated"|"done"|"failed"
        '401':
          description: Non autorisé, clé API invalide ou manquante.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Interdit : aucun accès au site, ou `sheet_id` / `prompt_id` d’un
            autre site.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                website:
                  value:
                    error: Unauthorized access to this website
                sheet:
                  value:
                    error: Unauthorized access to this sheet
                prompt:
                  value:
                    error: Unauthorized access to this prompt
        '500':
          description: Erreur interne du serveur.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - apiKey: []
components:
  schemas:
    ContentItemsListResponse:
      type: object
      required:
        - content
        - pagination
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ContentInventoryItem'
        pagination:
          $ref: '#/components/schemas/Pagination'
    Error:
      type: object
      description: Objet de réponse d’erreur
      required:
        - error
      properties:
        error:
          type: string
          description: Message expliquant l’erreur
          example: Unauthorized
    ContentInventoryItem:
      type: object
      description: >-
        Un élément de Content Hub tel que répertorié par `GET
        /api/v1/content/items` : uniquement les champs d’identité et de flux de
        travail, sans indicateurs. Les lignes publiées, les brouillons non
        publiés et les pages suivies partagent cette structure.
      required:
        - content_id
        - title
        - type
        - stage
        - url
        - normalized_url
        - sheet_id
        - sheet_name
        - topic_name
        - prompt_ids
        - prompt_count
        - mark_as_done_time
        - created_at
        - updated_at
      properties:
        content_id:
          type: string
          format: uuid
          description: >-
            Identifiant unique du contenu. `GET /api/v1/content/{content_id}`
            lit brief et corps.
          example: 11111111-2222-3333-4444-555555555555
        title:
          type: string
          nullable: true
          description: Titre de page/article, nullable pour une URL non extraite.
          example: How to Apply Foundation on Mature Skin
        type:
          type: string
          nullable: true
          description: >-
            Origine du contenu dans le hub : `draft` (article rédigé par
            Athena), `optimize` (réécriture d’une page), `snipe`, `slice`,
            `manual` (rédigé dans l’éditeur), `external` (ajouté manuellement),
            `imported` (via GA4). `null` pour les anciennes lignes.
          example: draft
        stage:
          type: string
          nullable: true
          enum:
            - scheduled
            - pending
            - pending_brief
            - generated_brief
            - pending_article
            - generated
            - done
            - failed
          description: >-
            État brut du flux de travail, pas un indicateur de publication.
            `null` sans enregistrement de pipeline (la plupart des pages suivies
            externes/importées). `generated` signifie texte prêt mais non
            publié, y compris dans l’éditeur manuel ; `done`, publié ou terminé
            ; `scheduled`, publication planifiée. Un élément n’est publié que si
            son étape est `done` (ou s’il est externe/importé) et possède une
            `url`.
          example: generated
        url:
          type: string
          nullable: true
          description: >-
            URL canonique d’affichage, pouvant inclure `www.`. `null` avant
            toute publication.
          example: null
        normalized_url:
          type: string
          nullable: true
          description: >-
            URL sans protocole ni barre finale, utilisée pour la jointure aux
            citations.
          example: null
        sheet_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            Onglet Content Hub où l’élément est fixé. `null` pour l’inventaire
            principal partagé.
        sheet_name:
          type: string
          nullable: true
          description: Nom lisible de l’onglet. `null` si `sheet_id` est null.
          example: Drafts - sprint 1
        topic_name:
          type: string
          nullable: true
          description: Sujet associé au contenu (le cas échéant).
          example: Makeup for Mature Skin
        prompt_ids:
          type: array
          items:
            type: string
            format: uuid
          description: >-
            Prompts pour lesquels le contenu a été écrit (ciblage), plafonnés à
            25 par ligne ; `prompt_count` donne le total non tronqué. Inclut les
            prompts supprimés logiquement, absents de `GET /api/v1/prompts`.
            Vide sans ciblage enregistré, cas normal pour les pages
            importées/externes. Ce ne sont pas les prompts dont les réponses
            citent la page ; voir `POST /api/v1/content/prompts`.
        prompt_count:
          type: integer
          description: >-
            Nombre total de prompts ciblés par cet élément, y compris ceux
            au-delà des 25 de `prompt_ids`. Lisez le reste via `GET
            /api/v1/content/{content_id}`.
          example: 1
        mark_as_done_time:
          type: string
          format: date-time
          nullable: true
          description: >-
            Date à laquelle le contenu a été marqué comme publié ou terminé dans
            Content Hub. `null` tant qu’il n’est pas publié.
          example: null
        created_at:
          type: string
          format: date-time
          description: Date de création de la ligne de contenu (UTC).
          example: '2026-09-01T20:59:53.000Z'
        updated_at:
          type: string
          format: date-time
          description: >-
            Dernière mise à jour la plus récente entre ligne de contenu et
            pipeline (UTC), actualisée par la progression de génération.
          example: '2026-09-01T21:09:04.000Z'
    Pagination:
      type: object
      description: >-
        Métadonnées de pagination. Anticipation sur `page_size + 1` :
        `has_more=true` signifie que la page suivante n’est pas vide. Aucun
        total, volontairement, pour éviter un appel `COUNT(*)` supplémentaire.
      required:
        - page_num
        - page_size
        - has_more
      properties:
        page_num:
          type: integer
          description: Numéro de page renvoyé, à partir de zéro.
          example: 0
        page_size:
          type: integer
          description: Maximum d’éléments par page.
          example: 50
        has_more:
          type: boolean
          description: '`true` si une autre page est disponible.'
          example: true
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Clé API d’authentification. Créez-en une
        [ici](https://app.athenahq.ai/organization?tab=api).

````

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