Strapi Content Entries API

CRUD operations on content-type entries. Strapi auto-generates these endpoints for each content-type defined in the application.

OpenAPI Specification

strapi-content-entries-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Strapi Admin Panel Admin Authentication Content Entries API
  description: The Strapi Admin Panel API powers the back-office interface used to manage content-types, content entries, media assets, and administrator accounts. It provides endpoints for the Content-Type Builder, Content Manager, Media Library, and role-based access control configuration. The API supports three default administrator roles (Super Admin, Editor, and Author) with granular permission management, allowing organizations to control which administrative functions each role can access.
  version: 5.0.0
  contact:
    name: Strapi Support
    url: https://strapi.io/support
  termsOfService: https://strapi.io/terms
servers:
- url: https://{host}
  description: Strapi Server
  variables:
    host:
      default: localhost:1337
      description: The hostname and port of your Strapi instance
security:
- adminBearerAuth: []
tags:
- name: Content Entries
  description: CRUD operations on content-type entries. Strapi auto-generates these endpoints for each content-type defined in the application.
paths:
  /api/{pluralApiId}:
    get:
      operationId: findEntries
      summary: List content entries
      description: Returns a list of entries for the specified content-type. Results can be filtered, sorted, paginated, and populated with relational data using query parameters. By default, responses include only top-level fields without populating relations, media fields, components, or dynamic zones.
      tags:
      - Content Entries
      parameters:
      - $ref: '#/components/parameters/PluralApiId'
      - $ref: '#/components/parameters/Sort'
      - $ref: '#/components/parameters/PaginationPage'
      - $ref: '#/components/parameters/PaginationPageSize'
      - $ref: '#/components/parameters/PaginationStart'
      - $ref: '#/components/parameters/PaginationLimit'
      - $ref: '#/components/parameters/Fields'
      - $ref: '#/components/parameters/Populate'
      - $ref: '#/components/parameters/Filters'
      - $ref: '#/components/parameters/Locale'
      - $ref: '#/components/parameters/Status'
      responses:
        '200':
          description: A list of content entries
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntryListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      operationId: createEntry
      summary: Create a content entry
      description: Creates a new entry for the specified content-type. The request body must include a data object with the fields defined in the content-type schema. Returns the newly created entry.
      tags:
      - Content Entries
      parameters:
      - $ref: '#/components/parameters/PluralApiId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EntryRequest'
      responses:
        '201':
          description: Entry created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntrySingleResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/{pluralApiId}/{documentId}:
    get:
      operationId: findOneEntry
      summary: Get a content entry
      description: Returns a single entry for the specified content-type by its document ID. Results can be populated with relational data using query parameters.
      tags:
      - Content Entries
      parameters:
      - $ref: '#/components/parameters/PluralApiId'
      - $ref: '#/components/parameters/DocumentId'
      - $ref: '#/components/parameters/Fields'
      - $ref: '#/components/parameters/Populate'
      - $ref: '#/components/parameters/Locale'
      - $ref: '#/components/parameters/Status'
      responses:
        '200':
          description: A single content entry
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntrySingleResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateEntry
      summary: Update a content entry
      description: Updates an existing entry for the specified content-type by its document ID. Only the fields included in the request body will be updated. Returns the updated entry.
      tags:
      - Content Entries
      parameters:
      - $ref: '#/components/parameters/PluralApiId'
      - $ref: '#/components/parameters/DocumentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EntryRequest'
      responses:
        '200':
          description: Entry updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntrySingleResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteEntry
      summary: Delete a content entry
      description: Deletes an existing entry for the specified content-type by its document ID. Returns the deleted entry data.
      tags:
      - Content Entries
      parameters:
      - $ref: '#/components/parameters/PluralApiId'
      - $ref: '#/components/parameters/DocumentId'
      responses:
        '200':
          description: Entry deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntrySingleResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/{pluralApiId}/{documentId}/actions/publish:
    post:
      operationId: publishEntry
      summary: Publish a content entry
      description: Publishes a draft content entry, making it available through the Content API. Only available when Draft and Publish is enabled on the content-type.
      tags:
      - Content Entries
      parameters:
      - $ref: '#/components/parameters/PluralApiId'
      - $ref: '#/components/parameters/DocumentId'
      responses:
        '200':
          description: Entry published successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntrySingleResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/{pluralApiId}/{documentId}/actions/unpublish:
    post:
      operationId: unpublishEntry
      summary: Unpublish a content entry
      description: Unpublishes a published content entry, reverting it to draft status. Only available when Draft and Publish is enabled on the content-type.
      tags:
      - Content Entries
      parameters:
      - $ref: '#/components/parameters/PluralApiId'
      - $ref: '#/components/parameters/DocumentId'
      responses:
        '200':
          description: Entry unpublished successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntrySingleResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  responses:
    Forbidden:
      description: Forbidden - insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found - the requested resource does not exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized - missing or invalid authentication
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request - invalid input or validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    Sort:
      name: sort
      in: query
      description: Sort results by one or more fields. Use field:asc or field:desc notation. Multiple sort criteria can be provided as comma-separated values or array notation (e.g., sort[0]=title:asc&sort[1]=date:desc).
      schema:
        oneOf:
        - type: string
        - type: array
          items:
            type: string
    DocumentId:
      name: documentId
      in: path
      required: true
      description: The unique document ID of the content entry
      schema:
        type: string
    Locale:
      name: locale
      in: query
      description: Specify the locale for internationalized content-types. Returns entries matching the given locale code.
      schema:
        type: string
    PaginationLimit:
      name: pagination[limit]
      in: query
      description: The maximum number of entries to return for offset-based pagination
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
    Status:
      name: status
      in: query
      description: Filter entries by publication status. Only applicable when Draft and Publish is enabled on the content-type.
      schema:
        type: string
        enum:
        - draft
        - published
    PaginationPage:
      name: pagination[page]
      in: query
      description: The page number for page-based pagination (starts at 1)
      schema:
        type: integer
        minimum: 1
        default: 1
    PaginationStart:
      name: pagination[start]
      in: query
      description: The starting index for offset-based pagination
      schema:
        type: integer
        minimum: 0
        default: 0
    Filters:
      name: filters
      in: query
      description: Filter entries using operators such as $eq, $ne, $lt, $lte, $gt, $gte, $in, $notIn, $contains, $notContains, $startsWith, $endsWith, $null, $notNull, $between, $and, $or, $not. Use bracket notation for nested filters (e.g., filters[title][$eq]=Hello).
      schema:
        type: object
    Populate:
      name: populate
      in: query
      description: Populate relational fields, media fields, components, or dynamic zones. Use * to populate all first-level relations or specify individual fields using dot notation.
      schema:
        oneOf:
        - type: string
        - type: object
    Fields:
      name: fields
      in: query
      description: Select specific fields to include in the response. Provide as comma-separated values or array notation.
      schema:
        oneOf:
        - type: string
        - type: array
          items:
            type: string
    PluralApiId:
      name: pluralApiId
      in: path
      required: true
      description: The plural API identifier of the content-type (e.g., articles, categories, products)
      schema:
        type: string
    PaginationPageSize:
      name: pagination[pageSize]
      in: query
      description: The number of entries per page for page-based pagination
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
  schemas:
    Pagination:
      type: object
      description: Pagination metadata returned with list responses
      properties:
        page:
          type: integer
          description: The current page number
        pageSize:
          type: integer
          description: The number of entries per page
        pageCount:
          type: integer
          description: The total number of pages
        total:
          type: integer
          description: The total number of entries
    EntrySingleResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Entry'
        meta:
          type: object
          description: Metadata about the response
    Error:
      type: object
      properties:
        data:
          nullable: true
        error:
          type: object
          properties:
            status:
              type: integer
              description: The HTTP status code
            name:
              type: string
              description: The error name
            message:
              type: string
              description: A human-readable error message
            details:
              type: object
              description: Additional error details
    Entry:
      type: object
      description: A content entry object. In Strapi 5, attributes are directly accessible at the first level of the data object (flattened format).
      properties:
        id:
          type: integer
          description: The unique integer ID of the entry
        documentId:
          type: string
          description: The unique document identifier for the entry
        createdAt:
          type: string
          format: date-time
          description: The timestamp when the entry was created
        updatedAt:
          type: string
          format: date-time
          description: The timestamp when the entry was last updated
        publishedAt:
          type: string
          format: date-time
          nullable: true
          description: The timestamp when the entry was published, or null if in draft status
        locale:
          type: string
          nullable: true
          description: The locale code of the entry, if internationalization is enabled
      additionalProperties: true
    EntryRequest:
      type: object
      required:
      - data
      properties:
        data:
          type: object
          description: An object containing the fields and values for the content entry. The structure depends on the content-type schema definition.
          additionalProperties: true
    EntryListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Entry'
        meta:
          type: object
          properties:
            pagination:
              $ref: '#/components/schemas/Pagination'
  securitySchemes:
    adminBearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Admin JWT token obtained from the /admin/login endpoint. Include as Authorization: Bearer {token}.'
externalDocs:
  description: Strapi Admin Panel Documentation
  url: https://docs.strapi.io/cms/features/admin-panel