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

# List conversations

> Threads across every connected account, newest activity first.



## OpenAPI

````yaml /openapi.yaml get /v1/inbox/conversations
openapi: 3.1.0
info:
  title: Nylon API
  version: 1.0.0
  description: |
    One API for publishing to seventeen social networks.

    You address a post to connected profile ids; Nylon knows which network each
    one belongs to, what that network accepts, and how to get the media there.
    Character limits, media specs, upload protocols and threading rules are
    normalised before the request reaches a platform, and every failure comes
    back in one error taxonomy.

    ## Conventions

    - Request and response fields are `snake_case`.
    - Successful responses wrap the payload in `data`. List responses add
      `meta.pagination`.
    - Failures return `{ "error": { "code", "message", "details?" } }`.
      Branch on `code`; `message` is written for humans and may change.
    - Times are ISO 8601 with a `Z` offset.
    - Successful responses carry `RateLimit-Limit`, `RateLimit-Remaining` and
      `RateLimit-Reset`. A `429` carries those plus `Retry-After`.
servers:
  - url: https://api.nylon.dev
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Posts
    description: Create, schedule, validate, inspect, edit and retry posts.
  - name: Profiles
    description: Social profiles connected to the authenticated Nylon account.
  - name: Connections
    description: Start a connection and see which networks are available.
  - name: Networks
    description: What each network accepts, as data.
  - name: Webhooks
    description: Endpoints Nylon calls when a post finishes or a profile stops working.
  - name: Media
    description: >-
      Getting a file to a URL a network can fetch, when you do not already host
      one.
  - name: Inbox
    description: >-
      Direct messages and comment threads on the connected accounts, and replies
      to them.
paths:
  /v1/inbox/conversations:
    get:
      tags:
        - Inbox
      summary: List conversations
      description: |
        Direct messages and comment threads across the connected accounts, most
        recent activity first.

        Cursor-paged rather than offset-paged: an inbox reorders while you read
        it, so an offset would repeat a conversation on the next page while
        something else slipped past. Pass `meta.pagination.next_cursor` back as
        `cursor`.
      operationId: listConversations
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
        - name: cursor
          in: query
          description: From a previous response's `meta.pagination.next_cursor`.
          schema:
            type: string
        - name: network
          in: query
          description: Comma-separated networks.
          schema:
            type: string
            example: instagram
        - name: kind
          in: query
          description: Comma-separated thread kinds.
          schema:
            type: string
            example: dm
        - name: status
          in: query
          schema:
            type: string
            enum:
              - open
              - closed
        - name: profile_id
          in: query
          schema:
            type: string
        - name: unread
          in: query
          description: Only conversations with unread messages.
          schema:
            type: boolean
      responses:
        '200':
          description: The conversations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConversationListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    ConversationListResponse:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Conversation'
        meta:
          type: object
          properties:
            pagination:
              $ref: '#/components/schemas/CursorPagination'
    Conversation:
      type: object
      required:
        - id
        - profile_id
        - network
        - kind
        - status
        - unread_count
        - last_message
      properties:
        id:
          type: string
        profile_id:
          type: string
          description: The connected account this thread is on.
        profile_external_id:
          type:
            - string
            - 'null'
          description: >-
            That account's id on the network itself — a Page id, an Instagram
            account id — so a thread can be matched to an account without a
            second call.
          example: '102938475610111'
        network:
          $ref: '#/components/schemas/Network'
        kind:
          type: string
          enum:
            - dm
            - comment
            - mention
          description: A `comment` thread is public; a `dm` is not.
        external_id:
          type: string
          description: The thread's id on the network.
        participant:
          type: object
          properties:
            id:
              type:
                - string
                - 'null'
            name:
              type:
                - string
                - 'null'
            handle:
              type:
                - string
                - 'null'
            avatar_url:
              type:
                - string
                - 'null'
        url:
          type:
            - string
            - 'null'
          description: Where to open this on the network itself.
        status:
          type: string
          enum:
            - open
            - closed
        unread_count:
          type: integer
          description: Cleared only by `POST .../read`, never by reading the messages.
        last_message:
          type: object
          properties:
            text:
              type:
                - string
                - 'null'
            at:
              type: string
              format: date-time
        referral:
          type:
            - object
            - 'null'
          additionalProperties: true
          description: >-
            How the conversation started, when the network says so — an ad, a
            ref link, a post.
        created_at:
          type: string
          format: date-time
    CursorPagination:
      type: object
      required:
        - limit
        - has_more
      properties:
        limit:
          type: integer
          example: 25
        has_more:
          type: boolean
        next_cursor:
          type:
            - string
            - 'null'
          description: Pass back as `cursor` for the next page. Null on the last one.
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/Error'
    Network:
      type: string
      description: A network Nylon publishes to.
      enum:
        - facebook
        - instagram
        - x
        - linkedin
        - pinterest
        - bluesky
        - threads
        - tiktok
        - youtube
        - google_business
        - mastodon
        - discord
        - dribbble
        - kick
        - twitch
        - whop
        - devto
      example: instagram
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: The stable identifier to branch on.
          enum:
            - invalid_request
            - unauthorized
            - payment_required
            - forbidden
            - not_found
            - conflict
            - rate_limited
            - unsupported
            - publish_failed
            - internal_error
          example: unauthorized
        message:
          type: string
          description: Written for humans. Do not match on it.
          example: A valid Nylon API key is required.
        details:
          type: array
          description: Present when the failure has a per-field or per-network breakdown.
          items:
            $ref: '#/components/schemas/ErrorDetail'
    ErrorDetail:
      type: object
      required:
        - message
      properties:
        field:
          type: string
          description: The request field the problem is about.
          example: profile_ids
        network:
          type: string
          description: The network the problem is about.
          example: instagram
        code:
          type: string
          description: |
            Machine-readable identifier for this problem. On a per-network
            detail this is a publishing code: `invalid_request`,
            `unsupported`, `media_error`, `reauthentication_required`,
            `rejected_by_network`, `network_error`, `timeout`,
            `profile_unavailable` or `internal_error`.
          example: invalid_request
        message:
          type: string
          example: >-
            Instagram requires at least 1 media item — text-only posts are not
            supported.
  responses:
    Unauthorized:
      description: The bearer API key is missing, malformed or revoked.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missingKey:
              value:
                error:
                  code: unauthorized
                  message: A valid Nylon API key is required.
    RateLimited:
      description: |
        Too many requests for this API key. Reads allow 120 requests a minute;
        publishing endpoints allow 30, because each one costs real upstream
        calls. The limit is per key, not per IP.
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimitLimit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimitRemaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimitReset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            throttled:
              value:
                error:
                  code: rate_limited
                  message: Too many requests. Retry after the window resets.
    InternalError:
      description: Nylon encountered an unexpected error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  headers:
    RetryAfter:
      description: Seconds to wait before retrying.
      schema:
        type: integer
        example: 47
    RateLimitLimit:
      description: Requests allowed in the current window.
      schema:
        type: integer
        example: 120
    RateLimitRemaining:
      description: Requests left in the current window.
      schema:
        type: integer
        example: 119
    RateLimitReset:
      description: Seconds until the window resets.
      schema:
        type: integer
        example: 47
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Nylon API key
      description: An API key beginning with `nylon_live_`.

````

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