# List documents

- Operation ID: `documents-list`
- HTTP method: `GET`
- Path: `/schema-service/v2/documents`
- [Human-readable API reference](https://hub.synerise.com/api-reference/asset-management#tag/Documents/operation/documents-list)

## Self-contained OpenAPI method

The fenced document below contains this method's documentation and all of its local references. It is self-contained; no category or master specification fetch is required.

```yaml
openapi: 3.0.0
info:
  title: Synerise Public API
  version: 1.9.5
paths:
  /schema-service/v2/documents:
    get:
      tags:
        - Documents
      summary: List documents
      description: |
        Returns a paginated list of documents.

        ---

        **API consumers:** <a href="/api-reference/authorization?tag=Authorization&amp;operationId=profileLogin" target="_blank" rel="noopener">Workspace (Business Profile)</a>, <a href="/api-reference/authorization?tag=Authorization&amp;operationId=userLogin" target="_blank" rel="noopener">Synerise User</a>

        **API key permission required:** `SCHEMA_SERVICE_SCHEMA_READ`

        **User role permission required:** `assets_docs: read`
      security:
        - JWT: []
        - BasicAuth: []
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: number
            format: int32
            minimum: 1
            default: 1
        - name: limit
          in: query
          required: false
          description: Limit of items per page
          schema:
            type: number
            format: int32
            default: 25
        - name: search
          in: query
          required: false
          description: A string to search for in resource names
          schema:
            type: string
        - name: directoryId
          in: query
          required: false
          description: UUID of the directory for filtering the results
          schema:
            type: string
            format: uuid
        - name: groupId
          in: query
          required: false
          description: UUID of the document group for filtering the results
          schema:
            type: string
            format: uuid
            description: UUID of the document schema for filtering the results
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - DRAFT
              - ACTIVE
              - SCHEDULED
              - PAUSED
              - FINISHED
            description: Filter by status
        - name: schema
          in: query
          description: Name of the document schema (type) for filtering the results
          required: false
          schema:
            type: string
      responses:
        "200":
          description: List of documents
          content:
            application/json:
              schema:
                type: object
                required:
                  - meta
                  - data
                properties:
                  meta:
                    type: object
                    description: Pagination metadata
                    properties:
                      links:
                        type: array
                        description: Links to the neighboring pages and the first page
                        items:
                          type: object
                          required:
                            - url
                            - rel
                          properties:
                            url:
                              type: string
                              description: URL of the page, used for navigation
                            rel:
                              type: string
                              description: The type of relation to the current page. `first` is always the first page.
                              enum:
                                - first
                                - prev
                                - next
                      limit:
                        type: integer
                        format: int32
                        description: Limit of items per page
                      count:
                        type: number
                        nullable: true
                        description: Currently unused
                  data:
                    type: array
                    description: Array of analytics
                    items:
                      oneOf:
                        - type: object
                          title: Documents
                          required:
                            - id
                            - name
                            - priority
                            - status
                            - scheduled
                            - createdAt
                            - updatedAt
                            - author
                            - content
                            - audience
                          properties:
                            id:
                              type: string
                              format: uuid
                              description: UUID of the document
                            name:
                              type: string
                              description: Name of the document
                            priority:
                              type: integer
                              format: int32
                              maximum: 100
                              description: Priority of the document
                            content:
                              description: Content of the document. It can contain inserts.
                              anyOf:
                                - type: object
                                  example:
                                    someBoolean: true
                                    someString: Lorem ipsum
                                    aNestedDocument: "{% document exampleslug %}"
                                  additionalProperties: true
                                - type: string
                                  example: "{% document exampleslug %}"
                            slug:
                              type: string
                              description: Slug of the document
                              example: basket
                              pattern: "[a-z0-9]+(?:-[a-z0-9]+)*"
                            schema:
                              type: string
                              description: Schema of the document (called "Type" in the Synerise Web Application)
                              example: containers
                            scheduled:
                              type: boolean
                              description: Informs if the document has a defined schedule. Documents scheduled to be published immediately after activation are considered to be scheduled, so only a draft document can have this property at `false`. Copied documents inherit the schedule of their source document.
                            status:
                              type: string
                              enum:
                                - DRAFT
                                - ACTIVE
                                - SCHEDULED
                                - PAUSED
                                - FINISHED
                              description: Filter by status
                            audience:
                              type: object
                              description: The profiles (clients) which have access to this resource
                              required:
                                - targetType
                              properties:
                                targetType:
                                  type: string
                                  description: |
                                    The method of defining the audience:
                                    - SEGMENT sets the audience to segmentations whose UUIDs are provided in `segments`
                                    - QUERY sets the audience to an analytics query provided in `query`
                                    - ALL sets the audience to all profiles in the database
                                  enum:
                                    - SEGMENT
                                    - QUERY
                                    - ALL
                                segments:
                                  type: array
                                  description: "An array of segmentation IDs. Used with `targetType: SEGMENT`"
                                  items:
                                    type: string
                                query:
                                  type: string
                                  description: "Stringified `analysis` object for the segmentation analytics engine. Used with `targetType: QUERY`. Refer to the [Analytics API Reference](https://developers.synerise.com/#operation/addSegmentationPOST_v2)."
                                  example: '{"analysis":{"title":"Unnamed segmentation","description":"","unique":true,"segments":[{"title":"Segmentation A","description":"","filter":{"matching":true,"expressions":[{"_id":"a9b76c8e-34bd-4ac3-be8f-f37041d126bd","name":"","type":"FUNNEL","matching":true,"funnel":{"_id":"5c759d73-49c6-409f-96a3-b569dff8f8ff","title":"Unnamed","completedWithin":null,"dateFilter":{"type":"RELATIVE","offset":{"type":"DAYS","value":0},"duration":{"type":"DAYS","value":30}},"steps":[{"_id":"78b97ae0-1bc5-45fb-82a4-4f1280cfbdff","title":"","action":{"id":944,"name":"page.visit"},"eventName":"page.visit","expressions":[]}],"exact":false}}]}}]}}'
                            author:
                              type: object
                              description: Author of the resource
                              required:
                                - id
                                - name
                              properties:
                                id:
                                  type: integer
                                  format: int32
                                  description: ID of the author
                                name:
                                  type: string
                                  description: Name of the author
                                avatar:
                                  type: string
                                  description: URL of the author's avatar
                            directory:
                              type: object
                              description: Details of the directory where the resource is assigned
                              required:
                                - id
                                - name
                                - createdAt
                                - default
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                  description: |
                                    UUID of a directory. Directories can be used to organize documents and screen views for display in the Synerise Web Application.
                                    - If you want to organize documents for screen view campaigns, use document groups instead.
                                    - If you want to organize screen views for display, use screen view feeds instead.
                                name:
                                  type: string
                                  description: Name of the directory
                                createdAt:
                                  type: string
                                  format: date-time
                                  description: Date and time when the directory was created
                                default:
                                  type: boolean
                                  description: "`true` if this is the default directory"
                            group:
                              type: object
                              description: Details of the document group
                              required:
                                - id
                                - bpId
                                - name
                                - createdAt
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                  example: 43c97b25-4a10-45d0-99b7-d472eea2bb24
                                  description: UUID of the group
                                name:
                                  type: string
                                  description: Name of the group
                                createdAt:
                                  type: string
                                  format: date-time
                                  description: Date and time when the group was created
                                deletedAt:
                                  type: string
                                  format: date-time
                                  description: Date and time when the group was deleted, if applicable
                                  nullable: true
                                nr:
                                  description: The number of documents in this group with status other than FINISHED
                                  type: integer
                                  format: int32
                            createdAt:
                              type: string
                              description: Creation date
                              format: date-time
                            updatedAt:
                              type: string
                              format: date-time
                              description: Last update time
                            deletedAt:
                              type: string
                              format: date-time
                              description: Deletion time, if applicable
                              nullable: true
        "400":
          description: See error message for details
          content:
            application/json:
              schema:
                type: object
                properties:
                  timestamp:
                    type: string
                    format: date-time
                    description: Time when the error occurred
                  errorCode:
                    type: string
                    description: |
                      Code of the error, needed for troubleshooting

                      See error reference: [https://developers.synerise.com/errors.html](https://developers.synerise.com/errors.html)
                  status:
                    type: integer
                    description: Error's HTTP status code
                  message:
                    type: string
                    description: Description of the problem
        "401":
          description: "Unauthorized: wrong consumer scope; token missing/expired/invalid; invalid API key; etc."
          content:
            application/json:
              schema:
                type: object
                properties:
                  timestamp:
                    type: string
                    description: Time when the error occurred
                  error:
                    type: string
                    description: Summary of the error
                  message:
                    type: string
                    description: Description of the problem
                  status:
                    type: integer
                    format: int32
                    description: HTTP status code
        "403":
          description: Forbidden; insufficient permissions
          content:
            application/json:
              schema:
                type: object
                properties:
                  timestamp:
                    type: string
                    description: Time when the error occurred
                  error:
                    type: string
                    description: Summary of the error
                  message:
                    type: string
                    description: Description of the problem
                  status:
                    type: integer
                    format: int32
                    description: HTTP status code
        "404":
          description: Resource not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  timestamp:
                    type: string
                    format: date-time
                    description: Time when the error occurred
                  errorCode:
                    type: string
                    description: |
                      Code of the error, needed for troubleshooting

                      See error reference: [https://developers.synerise.com/errors.html](https://developers.synerise.com/errors.html)
                  status:
                    type: integer
                    description: Error's HTTP status code
                  message:
                    type: string
                    description: Description of the problem
        "500":
          description: See error message for details
          content:
            application/json:
              schema:
                type: object
                properties:
                  timestamp:
                    type: string
                    format: date-time
                    description: Time when the error occurred
                  errorCode:
                    type: string
                    description: |
                      Code of the error, needed for troubleshooting

                      See error reference: [https://developers.synerise.com/errors.html](https://developers.synerise.com/errors.html)
                  status:
                    type: integer
                    description: Error's HTTP status code
                  message:
                    type: string
                    description: Description of the problem
      operationId: documents-list
      x-snr-doc-urls:
        - /api-reference/asset-management#tag/Documents/operation/documents-list
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |-
            curl --request GET \
              --url 'https://api.synerise.com/schema-service/v2/documents?page=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&directoryId=SOME_STRING_VALUE&groupId=SOME_STRING_VALUE&status=SOME_STRING_VALUE&schema=SOME_STRING_VALUE' \
              --header 'Authorization: Basic REPLACE_BASIC_AUTH'
        - lang: Python
          label: Python
          source: |-
            import http.client

            conn = http.client.HTTPSConnection("api.synerise.com")

            headers = { 'Authorization': "Basic REPLACE_BASIC_AUTH" }

            conn.request("GET", "/schema-service/v2/documents?page=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&directoryId=SOME_STRING_VALUE&groupId=SOME_STRING_VALUE&status=SOME_STRING_VALUE&schema=SOME_STRING_VALUE", headers=headers)

            res = conn.getresponse()
            data = res.read()

            print(data.decode("utf-8"))
        - lang: JavaScript
          label: JavaScript
          source: |-
            const data = null;

            const xhr = new XMLHttpRequest();
            xhr.withCredentials = true;

            xhr.addEventListener("readystatechange", function () {
              if (this.readyState === this.DONE) {
                console.log(this.responseText);
              }
            });

            xhr.open("GET", "https://api.synerise.com/schema-service/v2/documents?page=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&directoryId=SOME_STRING_VALUE&groupId=SOME_STRING_VALUE&status=SOME_STRING_VALUE&schema=SOME_STRING_VALUE");
            xhr.setRequestHeader("Authorization", "Basic REPLACE_BASIC_AUTH");

            xhr.send(data);
        - lang: Node.js
          label: Node.js
          source: |-
            const http = require("https");

            const options = {
              "method": "GET",
              "hostname": "api.synerise.com",
              "port": null,
              "path": "/schema-service/v2/documents?page=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&directoryId=SOME_STRING_VALUE&groupId=SOME_STRING_VALUE&status=SOME_STRING_VALUE&schema=SOME_STRING_VALUE",
              "headers": {
                "Authorization": "Basic REPLACE_BASIC_AUTH"
              }
            };

            const req = http.request(options, function (res) {
              const chunks = [];

              res.on("data", function (chunk) {
                chunks.push(chunk);
              });

              res.on("end", function () {
                const body = Buffer.concat(chunks);
                console.log(body.toString());
              });
            });

            req.end();
        - lang: PHP
          label: PHP
          source: |-
            <?php

            $request = new HttpRequest();
            $request->setUrl('https://api.synerise.com/schema-service/v2/documents');
            $request->setMethod(HTTP_METH_GET);

            $request->setQueryData([
              'page' => 'SOME_NUMBER_VALUE',
              'limit' => 'SOME_NUMBER_VALUE',
              'search' => 'SOME_STRING_VALUE',
              'directoryId' => 'SOME_STRING_VALUE',
              'groupId' => 'SOME_STRING_VALUE',
              'status' => 'SOME_STRING_VALUE',
              'schema' => 'SOME_STRING_VALUE'
            ]);

            $request->setHeaders([
              'Authorization' => 'Basic REPLACE_BASIC_AUTH'
            ]);

            try {
              $response = $request->send();

              echo $response->getBody();
            } catch (HttpException $ex) {
              echo $ex;
            }
        - lang: Java
          label: Java
          source: |-
            HttpResponse<String> response = Unirest.get("https://api.synerise.com/schema-service/v2/documents?page=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&directoryId=SOME_STRING_VALUE&groupId=SOME_STRING_VALUE&status=SOME_STRING_VALUE&schema=SOME_STRING_VALUE")
              .header("Authorization", "Basic REPLACE_BASIC_AUTH")
              .asString();
servers:
  - url: https://api.synerise.com
    description: Microsoft Azure EU
  - url: https://api.azu.synerise.com
    description: Microsoft Azure USA
  - url: https://api.geb.synerise.com
    description: Google Cloud Platform
tags:
  - name: Documents
components:
  securitySchemes:
    JWT:
      type: http
      scheme: bearer
      description: |
        Synerise uses [JSON Web Token (JWT)](https://jwt.io/) as the authorization method.

        The token is generated by the *auth/login* endpoints.

        You need to include it in the `Authorization` header of your requests, with a `Bearer` prefix.


        By default, the token is valid for **one week** (see [workspace settings](https://hub.synerise.com/docs/settings/tool/iam-for-apps/general/#jwt-lifetime)).  
        You can request a refreshed key for the session by using the *auth/refresh* endpoint **before** the current token expires.


        You can verify your JWT signature by using the [public key](https://api.synerise.com/v4/public.pem).


        See Developer Guides on JWT API authentication for:
        - [profiles](https://hub.synerise.com/developers/api/api-authorization/client-login/);
        - [workspaces](https://hub.synerise.com/developers/api/api-authorization/workspace-login/#api-authentication-with-jwt);
        - [users](https://hub.synerise.com/developers/api/api-authorization/user-login/).
    BasicAuth:
      type: http
      scheme: basic
      description: |
        Basic authentication with login (workspace GUID) and password (workspace API key) encoded with Base64 and sent in the `Authorization` header. **Must be enabled in the settings of the API key**.

        <span style="color:red">This is less secure than JWTs.</span> Limit the API key permissions to only those that you need. Consider API key rotation and other security measures.

        You can still use JWTs from the same API key when basic authentication is enabled.

        For details, see ["Workspace authentication"](https://hub.synerise.com/jwt-or-basic/#basic-api-authentication-with-api-keys).
```
