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

# List Content APIs

> Returns all content APIs in the workspace, or a single one when you supply `name` or `id`. Use either `name` or `id`, not both. Omit both parameters to list every content API in the workspace (paginated).




## OpenAPI

````yaml /api/content-apis/content-apis.yaml get /v5/content-apis
openapi: 3.0.3
info:
  title: MoEngage Content APIs
  version: '5.0'
  description: >
    A content API is an external endpoint that MoEngage calls to pull dynamic
    data into a campaign at send time — for example, the current weather in a
    user's city or the live price of an item in their cart.


    Use these endpoints to list the content APIs configured in your workspace
    and to test a saved configuration against its upstream endpoint. To create
    or edit a content API, use the MoEngage dashboard. For more information, see
    [Add a Content
    API](/user-guide/settings/advanced-settings/add-a-content-api).
servers:
  - url: https://api-{dc}.moengage.com
    description: MoEngage Content APIs Server
    variables:
      dc:
        default: '01'
        description: >-
          The 'dc' in the API Endpoint URL refers to the MoEngage Data Center
          (DC). MoEngage hosts each customer in a different DC. You can find
          your DC number and replace the value of 'dc' in the URL by referring
          to the DC and API endpoint mapping
          [here](/api/introduction#data-centers). Your MoEngage Data Center (DC)
          can be 01, 02, 03, 04, 05, 06, or 101.
security:
  - basicAuth: []
tags:
  - name: Content APIs
    description: List, look up, and test workspace Content API configurations.
paths:
  /v5/content-apis:
    get:
      tags:
        - Content APIs
      summary: List Content APIs
      description: >
        Returns all content APIs in the workspace, or a single one when you
        supply `name` or `id`. Use either `name` or `id`, not both. Omit both
        parameters to list every content API in the workspace (paginated).
      operationId: listContentApis
      parameters:
        - name: name
          in: query
          schema:
            type: string
          description: Exact content API name. Use either `name` or `id`, not both.
          example: WeatherAPI
        - name: id
          in: query
          schema:
            type: string
          description: >-
            Content API ID — a bare 24-character hexadecimal ObjectId, with no
            resource prefix. Pass it exactly as returned in `data[].id`. Use
            either `name` or `id`, not both.
          example: 66b3d1e0f2a4c58e9d7b3c21
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Cursor'
        - $ref: '#/components/parameters/RequestId'
      responses:
        '200':
          description: Content API list
          headers:
            X-MOE-Request-Id:
              schema:
                type: string
                format: uuid
              description: >-
                Trace ID echoed from the request. Generated by MoEngage when you
                do not send one.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContentApiListResponse'
              example:
                response_id: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
                type: content-apis
                data:
                  - id: 66b3d1e0f2a4c58e9d7b3c21
                    name: WeatherAPI
                    url: https://api.example.com/v1/weather
                    method: GET
                    params:
                      q: Delhi
                      appid: 7f3a9c2e5b1d4860a2f7c9e3b5d81a04
                    headers: {}
                    request_body_type: JSON
                    request_body: {}
                    oauth_enabled: false
                    oauth_prefix_for_header: Bearer
                    caching_enabled: true
                    caching_ttl_in_minutes: 15
                    pii_fields_in_response:
                      - email
                      - phone
                    verified: true
                    last_tested_at: '2026-07-10T11:45:30Z'
                    updated_at: '2026-07-10T11:45:30Z'
                pagination:
                  has_more: true
                  next_cursor: eyJsYXN0X2lkIjoiNjZiM2QxZTBmMmE0YzU4ZTlkN2IzYzIxIn0=
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - basicAuth: []
components:
  parameters:
    Limit:
      name: limit
      in: query
      schema:
        type: integer
        default: 20
        maximum: 20
      description: Page size. Max 20 per page.
    Cursor:
      name: cursor
      in: query
      schema:
        type: string
      description: Opaque pagination cursor from a previous response.
    RequestId:
      name: X-MOE-Request-Id
      in: header
      required: false
      schema:
        type: string
        format: uuid
      description: >
        Client-supplied trace ID (UUID v4). Echoed back in the
        `X-MOE-Request-Id` response header and returned unchanged as
        `response_id` in the body. When you omit this header, MoEngage generates
        a 12-character hexadecimal identifier instead. Quote it when contacting
        MoEngage Support.


        On [Test Content API](/api/content-apis/test-content-api), the body
        field `request_id` takes precedence: when you send both, `response_id`
        echoes `request_id` and this header is echoed only in the
        `X-MOE-Request-Id` response header.
      example: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
  schemas:
    ContentApiListResponse:
      type: object
      properties:
        response_id:
          type: string
          description: >-
            Unique identifier for this response. Echoes the `X-MOE-Request-Id`
            header you sent, returned unchanged. When you omit it, MoEngage
            generates a 12-character hexadecimal identifier. Quote it when
            contacting MoEngage Support.
          example: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
        type:
          type: string
          description: >-
            The resource type contained in `data`. Always `content-apis` for
            this endpoint.
          enum:
            - content-apis
        data:
          type: array
          description: The content APIs matching your filters, up to `limit` per page.
          items:
            $ref: '#/components/schemas/ContentApi'
        pagination:
          description: Cursor pagination state for this page of results.
          allOf:
            - $ref: '#/components/schemas/Pagination'
    ContentApi:
      type: object
      description: A content API configured in the workspace.
      properties:
        id:
          type: string
          description: >
            Content API ID — a bare 24-character hexadecimal ObjectId. It
            identifies the configuration itself, unlike `response_id`, which is
            a per-response trace identifier. Pass this value unchanged as the
            `id` query parameter or as the `{id}` path parameter when testing.
          example: 66b3d1e0f2a4c58e9d7b3c21
        name:
          type: string
          description: Content API name (unique per workspace).
          example: WeatherAPI
        url:
          type: string
          description: Endpoint URL invoked at send time. May contain Jinja tokens.
          example: https://api.example.com/v1/weather
        method:
          type: string
          enum:
            - GET
            - POST
            - PUT
          description: HTTP method used when invoking the API.
          example: GET
        params:
          type: object
          additionalProperties: true
          description: >-
            Query parameters sent with the request, as free-form key-value
            pairs. Keys and values are whatever the upstream endpoint expects,
            and values may contain Jinja tokens.
          example:
            q: Delhi
            appid: 7f3a9c2e5b1d4860a2f7c9e3b5d81a04
        headers:
          type: object
          additionalProperties:
            type: string
          description: Request headers sent with the request.
          example: {}
        request_body_type:
          type: string
          enum:
            - JSON
            - FORM
            - RAW
          description: Encoding of the request body for POST/PUT APIs.
          example: JSON
        request_body:
          type: object
          additionalProperties: true
          description: >-
            Body sent with POST/PUT requests, as free-form key-value pairs
            matching whatever the upstream endpoint expects. Values may contain
            Jinja tokens. Empty for GET content APIs.
          example: {}
        oauth_enabled:
          type: boolean
          description: >-
            Whether an OAuth token is attached as the Authorization header at
            send time. For more information, see [Authorization Configuration
            with OAuth
            2.0](/user-guide/settings/advanced-settings/authorization-configuration-with-oauth-20).
          example: false
        oauth_prefix_for_header:
          type: string
          description: Token prefix used on the Authorization header when `oauth_enabled`.
          example: Bearer
        caching_enabled:
          type: boolean
          description: Whether responses are cached at send time.
          example: true
        caching_ttl_in_minutes:
          type: integer
          description: Cache TTL in minutes (5–60) when caching is enabled.
          example: 15
        pii_fields_in_response:
          type: array
          items:
            type: string
          description: Response fields marked as PII.
          example:
            - email
            - phone
        verified:
          type: boolean
          description: True once the API has returned a successful test response.
          example: true
        last_tested_at:
          type: string
          format: date-time
          description: >-
            ISO 8601 UTC timestamp of the most recent test call. Absent if the
            content API has never been tested.
          example: '2026-07-10T11:45:30Z'
        updated_at:
          type: string
          format: date-time
          description: ISO 8601 UTC timestamp of when this configuration was last edited.
          example: '2026-07-10T11:45:30Z'
    Pagination:
      type: object
      properties:
        has_more:
          type: boolean
          description: >-
            Whether more pages exist. When `true`, pass `next_cursor` back as
            `cursor` on the next request.
          example: true
        next_cursor:
          type: string
          description: >-
            Opaque cursor for the next page. Present only when `has_more` is
            `true`.
          example: eyJsYXN0X2lkIjoiNjZiM2QxZTBmMmE0YzU4ZTlkN2IzYzIxIn0=
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Machine-readable UPPER_SNAKE_CASE code.
              example: INVALID_REQUEST
            message:
              type: string
              description: Human-readable description of the error.
              example: Use either 'name' or 'id', not both.
            target:
              type: string
              description: >-
                The query parameter, path parameter, or body field that caused
                the error.
              example: id
            details:
              type: array
              description: Field-level violations. Returned for validation errors only.
              items:
                type: object
                properties:
                  code:
                    type: string
                    example: INVALID_PARAMETER_COMBINATION
                  target:
                    type: string
                    example: id
                  message:
                    type: string
                    example: The 'id' parameter cannot be combined with 'name'.
        response_id:
          type: string
          description: >-
            Unique identifier for this response. Quote it when contacting
            MoEngage Support.
          example: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
  responses:
    BadRequest:
      description: Bad request / validation failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: INVALID_REQUEST
              message: Use either 'name' or 'id', not both.
              target: id
              details:
                - code: INVALID_PARAMETER_COMBINATION
                  target: id
                  message: The 'id' parameter cannot be combined with 'name'.
            response_id: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
    Unauthorized:
      description: Missing or invalid authentication
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: UNAUTHORIZED
              message: Missing or invalid authentication credentials.
              target: Authorization
            response_id: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
    Forbidden:
      description: Missing required scope
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: FORBIDDEN
              message: >-
                This API key does not have the scope required to read content
                APIs.
              target: Authorization
            response_id: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
    RateLimited:
      description: Rate limited
      headers:
        Retry-After:
          schema:
            type: integer
            example: 60
          description: Seconds to wait before retrying.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: RATE_LIMIT_EXCEEDED
              message: Workspace rate limit exceeded. Retry after 60 seconds.
            response_id: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: INTERNAL_ERROR
              message: >-
                An unexpected error occurred while processing the request. Retry
                the request, and quote `response_id` if you contact MoEngage
                Support.
            response_id: 9f2c1b7a-4d3e-4a08-b5c6-1e7d02f43a91
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >
        Authentication is done via Basic Auth. This requires a base64-encoded
        string of your credentials in the format `username:password`.


        - **Username**: Use your MoEngage Workspace ID (also known as the App
        ID). Find it in the MoEngage dashboard at **Settings** > **Account** >
        **API keys**.

        - **Password**: Use an API key from **Settings** > **Account** > **API
        keys**.


        Refer to [API Key
        Dashboard](/user-guide/settings/account/api-and-api-keys/api-key-dashboard)
        for details on creating and managing API keys.

````