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

> ## Agent Instructions
> - Base URLs: models `https://api.aisa.one/v1` (Gemini GenerateContent: `https://api.aisa.one/v1beta`); data APIs `https://api.aisa.one/apis/v1`. The `servers` of each operation in https://aisa.one/openapi.yaml is authoritative.
> - Auth: `Authorization: Bearer $AISA_API_KEY`. Never print, log, or commit the key.
> - MCP (preferred for agents): `https://mcp.aisa.one/mcp`, signed in with OAuth, so there is no key to paste.
> - Agent Skill: `npx skills add AIsa-team/agent-skills --skill aisa`. Fallback with the AIsa CLI: `aisa skills install aisa`.
> - Spending: docs, https://aisa.one/models, https://aisa.one/api, `/v1/models`, and MCP `search`, `list_categories`, `get_details`, `batch_quote`, and the `account` operation are free. Quote the exact calls before running them (MCP `batch_quote`, CLI `aisa quote --json`). If the quote reports `auto_execute_eligible: true`, run it unless the user set a tighter limit or asked only for a quote. Otherwise, tell the user in one message the planned calls, the quoted price, and a total USD budget for the task, then wait for approval. Direct HTTP calls follow the stricter rule at https://aisa.one/docs/get-started/cli.md#direct-http-fallback. Do not make paid calls to test availability. Full rule: https://aisa.one/llms.txt

# List commented posts

> Comments. Read only; needs social:read. Ids are yours: accounts acc_..., profiles prf_..., posts pst_...; every other object id is checked against your accounts before the call. Without profileId or accountId it reads your default profile. On a profile with an X account, pass accountId or a platform other than twitter: X bills each read.

Returns posts with comment counts from all connected accounts. Aggregates data across multiple accounts.

### Caching

Responses are cached for up to 10 minutes, so the feed may lag new comments by that window.

Do not poll this endpoint for real-time updates. Subscribe to the `comment.received` webhook, which fires for every new comment across your posts and carries the post reference needed to keep this list current.

### Meta ads

For users with the Ads add-on (accounts on usage-based billing always qualify), the user's Meta ads (boosted/dark posts) are included too.

There's one row per (ad, placement-with-comments). An ad that runs on both Facebook feed and Instagram feed produces up to two rows, since the Page dark post and the IG media have separate comment threads.

Each ad row is flagged `isAd: true` with `adId` and `placement` (`id` is `{adId}:{placement}`). Filter with `platform`:

- `?platform=metaads`: *only* ad rows.
- `facebook`/`instagram`: *organic* posts only (no ads).
- Omitted: both.

Fetch a row's thread from GET /apis/v1/ads/{adId}/comments?placement={placement}.

Ad comment counts are read with the Marketing API token (Facebook side) or the connected Instagram account's token (Instagram side). A row whose count can't be read is omitted.

### Pagination

Pagination walks each account's platform listing. Following `nextCursor` reaches past the first page on Facebook, Instagram, Threads, LinkedIn and YouTube, the platforms that support a server-side date window. On the others the listing stops at its first page.

Cursor pagination is only coherent for the default sort (`sortBy=date`, `sortOrder=desc`). With `sortOrder=asc`, or with `sortBy=comments`, the cursor filter does not match the sort order and the second page is unreliable.

`minComments` is applied to each page after pagination. A page can hold fewer than `limit` posts, even none, while `hasMore` is true; keep following `nextCursor`.

`nextCursor` is opaque: pass it back verbatim, never construct or parse it, its composition may change without notice. Because each page re-queries a live window, results can still shift between requests, so dedupe by `id` on the client.

### Comment counts

`commentCount` semantics differ by platform:

- YouTube's includes replies.
- Facebook's counts top-level comments only.

<!-- aisa-pricing:start -->
A request reference price is not currently available; use a request quote where supported. Account-specific pricing and final settlement may differ.
<!-- aisa-pricing:end -->

## Request contract

* **Method and path:** GET /apis/v1/social/inbox/comments
* **Availability:** enabled
* **Request URL template:** `https://api.aisa.one/apis/v1/social/inbox/comments`
* **profileId:** query; optional
* **platform:** query; optional
* **minComments:** query; optional
* **since:** query; optional
* **sortBy:** query; optional
* **sortOrder:** query; optional
* **limit:** query; optional
* **cursor:** query; optional
* **accountId:** query; optional
* **Runtime facts:** 99acb5bddbedc8d3352e7c4fef86c3e6d8852c14772bcd18dbcf415237a642bd

[Complete OpenAPI definition](https://aisa.one/docs/reference-contracts/aisa-social.json)

Effective request and pricing declaration (including authentication and referenced schemas):

```json theme={null}
{
  "operationId": "get_aisa_social_apis_v1_social_inbox_comments",
  "method": "GET",
  "path": "/apis/v1/social/inbox/comments",
  "servers": [
    {
      "url": "https://api.aisa.one"
    }
  ],
  "parameters": [
    {
      "description": "One of your profiles (prf_...). Defaults to your default profile when neither profileId nor accountId is sent.",
      "in": "query",
      "name": "profileId",
      "required": false,
      "schema": {
        "pattern": "^prf_[0-9A-Za-z]{22}$",
        "type": "string"
      }
    },
    {
      "description": "Filter by platform. `metaads` is a synthetic value meaning the user's ads (boosted/dark posts) only; `facebook`/`instagram` return organic posts only. `tiktok` covers accounts connected through the TikTok Business app only; developer-app TikTok accounts are returned under `meta.accountsSkipped`.",
      "in": "query",
      "name": "platform",
      "required": false,
      "schema": {
        "enum": [
          "facebook",
          "instagram",
          "twitter",
          "bluesky",
          "threads",
          "youtube",
          "linkedin",
          "reddit",
          "tiktok",
          "metaads"
        ],
        "type": "string"
      }
    },
    {
      "description": "Minimum comment count, applied to each page after pagination",
      "in": "query",
      "name": "minComments",
      "required": false,
      "schema": {
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "description": "Posts created after this date",
      "in": "query",
      "name": "since",
      "required": false,
      "schema": {
        "format": "date-time",
        "type": "string"
      }
    },
    {
      "description": "Sort field",
      "in": "query",
      "name": "sortBy",
      "required": false,
      "schema": {
        "default": "date",
        "enum": [
          "date",
          "comments"
        ],
        "type": "string"
      }
    },
    {
      "description": "Sort order",
      "in": "query",
      "name": "sortOrder",
      "required": false,
      "schema": {
        "default": "desc",
        "enum": [
          "asc",
          "desc"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "required": false,
      "schema": {
        "default": 50,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "cursor",
      "required": false,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "One of your social accounts (acc_...).",
      "in": "query",
      "name": "accountId",
      "required": false,
      "schema": {
        "pattern": "^acc_[0-9A-Za-z]{22}$",
        "type": "string"
      }
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "x-aisa-status": "enabled",
  "x-aisa-pricing": {
    "description": "Included with your connected social accounts: AIsa does not charge per call.",
    "kind": "no_customer_charge"
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  }
}
```

## Cost and request rules

A request reference price is not currently available; use a request quote where supported. Account-specific pricing and final settlement may differ.

Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.


## OpenAPI

````yaml reference-contracts/aisa-social.json GET /apis/v1/social/inbox/comments
openapi: 3.1.0
info:
  description: ''
  title: AIsa Social
  version: '1'
  x-aisa-capabilities:
    idempotency: Idempotency-Key
    max_price: X-AISA-Max-Price-USD
    quote:
      header: X-AISA-Cost-Mode
      value: quote
  x-aisa-configured-paths: []
  x-aisa-document:
    facts_hash: 99acb5bddbedc8d3352e7c4fef86c3e6d8852c14772bcd18dbcf415237a642bd
    generator_version: '3'
    protocol_version: '1'
    schema_version: '1'
    composer_version: '27'
    response_pending: []
    document_hash: sha256:7f9742cb1ea233c648dcb290fdfbf24e53a27dcf900ec1386f83a8ef2e6b1bf9
  x-aisa-plans:
    builder: 1
    display_plan: payg
    payg: 1
    similarweb_payg: 1
    team: 1
    version: e70a0959cd1b93b84ae16dffd7a538273ddb9c1d46277b82823c37ff1b6bc0fb
  x-aisa-provider: aisa-social
  x-aisa-catalogs:
    aisa-social:
      title: AIsa Social
      description: ''
      x-aisa-document:
        facts_hash: 99acb5bddbedc8d3352e7c4fef86c3e6d8852c14772bcd18dbcf415237a642bd
        generator_version: '3'
        protocol_version: '1'
        schema_version: '1'
      x-aisa-plans:
        builder: 1
        display_plan: payg
        payg: 1
        similarweb_payg: 1
        team: 1
        version: e70a0959cd1b93b84ae16dffd7a538273ddb9c1d46277b82823c37ff1b6bc0fb
      x-aisa-capabilities:
        idempotency: Idempotency-Key
        max_price: X-AISA-Max-Price-USD
        quote:
          header: X-AISA-Cost-Mode
          value: quote
servers:
  - url: https://api.aisa.one
security:
  - bearerAuth: []
paths:
  /apis/v1/social/inbox/comments:
    get:
      summary: List commented posts
      description: >-
        Comments. Read only; needs social:read. Ids are yours: accounts acc_...,
        profiles prf_..., posts pst_...; every other object id is checked
        against your accounts before the call. Without profileId or accountId it
        reads your default profile. On a profile with an X account, pass
        accountId or a platform other than twitter: X bills each read.


        Returns posts with comment counts from all connected accounts.
        Aggregates data across multiple accounts.


        ### Caching


        Responses are cached for up to 10 minutes, so the feed may lag new
        comments by that window.


        Do not poll this endpoint for real-time updates. Subscribe to the
        `comment.received` webhook, which fires for every new comment across
        your posts and carries the post reference needed to keep this list
        current.


        ### Meta ads


        For users with the Ads add-on (accounts on usage-based billing always
        qualify), the user's Meta ads (boosted/dark posts) are included too.


        There's one row per (ad, placement-with-comments). An ad that runs on
        both Facebook feed and Instagram feed produces up to two rows, since the
        Page dark post and the IG media have separate comment threads.


        Each ad row is flagged `isAd: true` with `adId` and `placement` (`id` is
        `{adId}:{placement}`). Filter with `platform`:


        - `?platform=metaads`: *only* ad rows.

        - `facebook`/`instagram`: *organic* posts only (no ads).

        - Omitted: both.


        Fetch a row's thread from GET
        /apis/v1/ads/{adId}/comments?placement={placement}.


        Ad comment counts are read with the Marketing API token (Facebook side)
        or the connected Instagram account's token (Instagram side). A row whose
        count can't be read is omitted.


        ### Pagination


        Pagination walks each account's platform listing. Following `nextCursor`
        reaches past the first page on Facebook, Instagram, Threads, LinkedIn
        and YouTube, the platforms that support a server-side date window. On
        the others the listing stops at its first page.


        Cursor pagination is only coherent for the default sort (`sortBy=date`,
        `sortOrder=desc`). With `sortOrder=asc`, or with `sortBy=comments`, the
        cursor filter does not match the sort order and the second page is
        unreliable.


        `minComments` is applied to each page after pagination. A page can hold
        fewer than `limit` posts, even none, while `hasMore` is true; keep
        following `nextCursor`.


        `nextCursor` is opaque: pass it back verbatim, never construct or parse
        it, its composition may change without notice. Because each page
        re-queries a live window, results can still shift between requests, so
        dedupe by `id` on the client.


        ### Comment counts


        `commentCount` semantics differ by platform:


        - YouTube's includes replies.

        - Facebook's counts top-level comments only.


        <!-- aisa-pricing:start -->

        A request reference price is not currently available; use a request
        quote where supported. Account-specific pricing and final settlement may
        differ.

        <!-- aisa-pricing:end -->
      operationId: get_aisa_social_apis_v1_social_inbox_comments
      parameters:
        - description: >-
            One of your profiles (prf_...). Defaults to your default profile
            when neither profileId nor accountId is sent.
          in: query
          name: profileId
          required: false
          schema:
            pattern: ^prf_[0-9A-Za-z]{22}$
            type: string
        - description: >-
            Filter by platform. `metaads` is a synthetic value meaning the
            user's ads (boosted/dark posts) only; `facebook`/`instagram` return
            organic posts only. `tiktok` covers accounts connected through the
            TikTok Business app only; developer-app TikTok accounts are returned
            under `meta.accountsSkipped`.
          in: query
          name: platform
          required: false
          schema:
            enum:
              - facebook
              - instagram
              - twitter
              - bluesky
              - threads
              - youtube
              - linkedin
              - reddit
              - tiktok
              - metaads
            type: string
        - description: Minimum comment count, applied to each page after pagination
          in: query
          name: minComments
          required: false
          schema:
            minimum: 0
            type: integer
        - description: Posts created after this date
          in: query
          name: since
          required: false
          schema:
            format: date-time
            type: string
        - description: Sort field
          in: query
          name: sortBy
          required: false
          schema:
            default: date
            enum:
              - date
              - comments
            type: string
        - description: Sort order
          in: query
          name: sortOrder
          required: false
          schema:
            default: desc
            enum:
              - asc
              - desc
            type: string
        - in: query
          name: limit
          required: false
          schema:
            default: 50
            maximum: 100
            minimum: 1
            type: integer
        - in: query
          name: cursor
          required: false
          schema:
            type: string
        - description: One of your social accounts (acc_...).
          in: query
          name: accountId
          required: false
          schema:
            pattern: ^acc_[0-9A-Za-z]{22}$
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      properties:
                        accountId:
                          description: One of your social accounts (acc_...).
                          pattern: ^acc_[0-9A-Za-z]{22}$
                          type: string
                        accountUsername:
                          type: string
                        adId:
                          description: Internal AIsa ad id, only on ad rows.
                          type: string
                        cid:
                          description: Bluesky content identifier
                          type:
                            - string
                            - 'null'
                        commentCount:
                          type: integer
                        content:
                          description: >-
                            The post text/caption. On ad rows (isAd: true) this
                            is the AD NAME, not the underlying post's caption.
                            The creative text isn't exposed here.
                          type: string
                        createdTime:
                          format: date-time
                          type: string
                        id:
                          type: string
                        isAd:
                          description: >-
                            True when this row is an ad (boosted/dark post).
                            `platform` is then the placement (facebook = the
                            Page dark post / instagram = the IG media), `id` is
                            `{adId}:{placement}`, and the thread is at GET
                            /apis/v1/ads/{adId}/comments?placement={placement}.
                          type: boolean
                        likeCount:
                          description: Not fetched for ad rows (always 0 there).
                          type: integer
                        permalink:
                          description: >-
                            Public URL of the post. On ad rows: the Facebook
                            dark-post URL (facebook placement) or the IG media
                            permalink (instagram placement); may be null when
                            unknown.
                          type:
                            - string
                            - 'null'
                        picture:
                          description: >-
                            Post media thumbnail. On ad rows this is the ad
                            creative thumbnail.
                          type:
                            - string
                            - 'null'
                        placement:
                          description: >-
                            Which side of the ad this row's comments are on,
                            only on ad rows.
                          enum:
                            - facebook
                            - instagram
                          type: string
                        platform:
                          type: string
                        subreddit:
                          description: Reddit subreddit name
                          type:
                            - string
                            - 'null'
                      type: object
                    type: array
                  meta:
                    properties:
                      accountsFailed:
                        type: integer
                      accountsQueried:
                        type: integer
                      accountsSkipped:
                        description: >-
                          Connected accounts that were not queried: their
                          platform does not support this feature, or the account
                          is not enabled for it
                        items:
                          properties:
                            accountId:
                              description: One of your social accounts (acc_...).
                              pattern: ^acc_[0-9A-Za-z]{22}$
                              type: string
                            platform:
                              type: string
                          type: object
                        type: array
                      failedAccounts:
                        items:
                          properties:
                            accountId:
                              description: One of your social accounts (acc_...).
                              pattern: ^acc_[0-9A-Za-z]{22}$
                              type: string
                            accountUsername:
                              type:
                                - string
                                - 'null'
                            code:
                              description: >-
                                Error code if available (e.g. TOKEN_EXPIRED, or
                                X_INBOX_NOT_ENABLED for an X account whose owner
                                has not enabled X inbox)
                              type:
                                - string
                                - 'null'
                            error:
                              type: string
                            platform:
                              type: string
                            retryAfter:
                              description: Seconds to wait before retry (rate limits)
                              type:
                                - integer
                                - 'null'
                          type: object
                        type: array
                      lastUpdated:
                        format: date-time
                        type: string
                    type: object
                  pagination:
                    properties:
                      hasMore:
                        type: boolean
                      nextCursor:
                        type:
                          - string
                          - 'null'
                    type: object
                type: object
          description: Aggregated posts with comments
        default:
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type:
                          - string
                          - 'null'
                      details:
                        additionalProperties: {}
                        type:
                          - object
                          - 'null'
                      message:
                        type:
                          - string
                          - 'null'
                      param:
                        type:
                          - string
                          - 'null'
                      retryHint:
                        enum:
                          - never
                          - after_delay
                          - after_reconnect
                          - reconcile_first
                          - null
                        type:
                          - string
                          - 'null'
                      retryable:
                        type:
                          - boolean
                          - 'null'
                      type:
                        type:
                          - string
                          - 'null'
                    type:
                      - object
                      - 'null'
                type: object
          description: Error. The code field is stable; see the error catalog.
components:
  securitySchemes:
    bearerAuth:
      scheme: bearer
      type: http

````

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