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