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

# Comment likers

> Retrieve the people who reacted to one LinkedIn comment. Rate limit: 180 requests per fixed minute per workspace, counted separately for each LinkedIn content endpoint; pagination requests and retries count.

Retrieve one synchronous page of up to 100 people who reacted to a LinkedIn comment, with their name, headline, profile picture, and reaction type. Rows are returned as found on LinkedIn, without profile enrichment.

<Note>
  Each successful request costs **1 credit**, whatever the number of people returned. A successful empty page is also charged. Invalid input and failed requests are not charged. The workspace needs at least 1 credit to start a request.
</Note>

## Authentication

Send your Airscale workspace API key as a Bearer token. Both V1 and V2 workspace API keys are accepted.

## Request fields

Send `comment_url` as a LinkedIn URL that identifies one comment: it must contain a `urn:li:comment:(...)` reference, for example in a `commentUrn` query parameter. The `comment_url` values returned by [Profile comments](/api-reference/profile-comments) can be sent unchanged. Unknown fields are rejected with `400`.

Each person's `linkedin_url` can be a member-ID URL (`/in/ACoAA...`) rather than a vanity URL. Both forms identify the same LinkedIn profile.

## Rate limit

The limit is **180 requests per minute per workspace** for Comment likers, including requests made with different API keys for the same workspace. [Post search](/api-reference/post-search) and [Profile comments](/api-reference/profile-comments) each have their own separate 180-request allowance. Pagination requests and retries count toward the limit.

The counter uses a fixed minute window and resets at the next minute boundary. Requests above the limit receive HTTP `429` and are not charged. When LinkedIn content capacity is busy for all workspaces, the response is a free `503` with `Retry-After: 5`.

## Pagination

Omit `cursor` on the first request. When `pagination.next_cursor` is not `null`, send it unchanged together with the same `comment_url` to fetch the next page. A cursor sent with a different comment, or to another endpoint, returns `400`. `pagination.total` is the number of reactions reported by LinkedIn, or `null` when unavailable.

## Retries

This endpoint does not accept an idempotency key. Retrying a request fetches the page again and is charged again. Retry only responses that were not charged:

| Response | Next action |
| - | - |
| `400 Bad Request` | Correct the body or cursor. The `message` field names the problem. |
| `403 Forbidden` | Add credits to the workspace before retrying. |
| `413 Payload Too Large` | Keep the JSON body under 16 KiB. |
| `429 Too Many Requests` | Wait for the next minute boundary, then retry with bounded exponential backoff. |
| `502 Bad Gateway` or `504 Gateway Timeout` | Retry with increasing delays and a fixed retry limit. |
| `503 Service Unavailable` | Wait for `Retry-After` when present, then retry with bounded backoff. |

## Next step

Use [Post likers](/api-reference/post-likers) or [Post commenters](/api-reference/post-commenters) to retrieve enriched people who engaged with a whole post.


## OpenAPI

````yaml openapi.json POST /v1/comment-likers
openapi: 3.1.0
info:
  title: Airscale Public API
  version: '2026-09-11'
  description: Search, enrich, and resolve public business data with Airscale.
  x-airscale-source-repository: ViceScale/airscale-code
  x-airscale-source-sha: 1de19e1b70a052a4b8d9c2075021a7e5e7a94d51
servers:
  - url: https://api.airscale.io
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Search and discovery
    description: Search people, companies, and the web.
  - name: Contact data
    description: Find professional and personal contact data.
  - name: Profiles and reverse lookup
    description: Extract profiles or resolve a person from known contact data.
  - name: Post engagement
    description: Retrieve and enrich people who liked or commented on LinkedIn posts.
  - name: LinkedIn content
    description: Search LinkedIn posts and retrieve profile comments and comment reactions.
  - name: Account
    description: Inspect workspace account state.
  - name: Miscellaneous
    description: Check WhatsApp availability, Meta ads, and email deliverability.
paths:
  /v1/comment-likers:
    post:
      tags:
        - LinkedIn content
      summary: List LinkedIn comment likers
      description: >-
        Returns one page of up to 100 people who reacted to one LinkedIn
        comment. Costs 1 credit per successful request.
      operationId: listLinkedinCommentLikers
      requestBody:
        required: true
        description: >-
          A LinkedIn comment URL and an optional cursor. The JSON body must not
          exceed 16 KiB.
        content:
          application/json:
            schema:
              type: object
              required:
                - comment_url
              additionalProperties: false
              properties:
                comment_url:
                  type: string
                  minLength: 1
                  maxLength: 2048
                  description: >-
                    LinkedIn URL that identifies one comment (it contains
                    urn:li:comment:(...)), such as a comment_url returned by
                    Profile comments.
                cursor:
                  type:
                    - string
                    - 'null'
                  minLength: 1
                  maxLength: 2048
                  description: >-
                    The opaque `pagination.next_cursor` from the previous page.
                    Send it unchanged with the same filters as the first page.
            examples:
              firstPage:
                summary: First page
                value:
                  comment_url: >-
                    https://www.linkedin.com/posts/example-person_sales-activity-7511035039397339136-8myb?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7511035039397339136%2C7511040000000000000%29
              nextPage:
                summary: Next page
                value:
                  comment_url: >-
                    https://www.linkedin.com/posts/example-person_sales-activity-7511035039397339136-8myb?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7511035039397339136%2C7511040000000000000%29
                  cursor: eyJ2IjoxLCJyIjoiZXhhbXBsZSJ9
      responses:
        '200':
          description: A page of people who reacted to the comment.
          content:
            application/json:
              schema:
                type: object
                required:
                  - items
                  - pagination
                  - billing
                additionalProperties: false
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      required:
                        - linkedin_url
                        - full_name
                        - headline
                        - profile_picture_url
                        - reaction_type
                      additionalProperties: false
                      properties:
                        linkedin_url:
                          type:
                            - string
                            - 'null'
                          description: >-
                            LinkedIn profile or company URL. It can be a
                            member-ID URL (`/in/ACoAA...`) rather than a vanity
                            URL.
                        full_name:
                          type:
                            - string
                            - 'null'
                        headline:
                          type:
                            - string
                            - 'null'
                        profile_picture_url:
                          type:
                            - string
                            - 'null'
                        reaction_type:
                          type:
                            - string
                            - 'null'
                          description: LinkedIn reaction, such as LIKE or PRAISE.
                    description: People who reacted to the comment.
                  pagination:
                    type: object
                    required:
                      - has_more
                      - next_cursor
                      - total
                    additionalProperties: false
                    properties:
                      has_more:
                        type: boolean
                      next_cursor:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Opaque cursor for the next page, or null when no
                          further page is available.
                      total:
                        type:
                          - integer
                          - 'null'
                        minimum: 0
                        description: >-
                          Total reactions reported by LinkedIn, or null when
                          unavailable.
                  billing:
                    type: object
                    required:
                      - credits_consumed
                    additionalProperties: false
                    properties:
                      credits_consumed:
                        type: integer
                        const: 1
              examples:
                page:
                  summary: Synthetic page
                  value:
                    items:
                      - linkedin_url: https://www.linkedin.com/in/example-person
                        full_name: Example Person
                        headline: Head of Sales at Example Company
                        profile_picture_url: https://www.example.org/images/example-person.png
                        reaction_type: LIKE
                    pagination:
                      has_more: true
                      next_cursor: eyJ2IjoxLCJyIjoiZXhhbXBsZSJ9
                      total: 104
                    billing:
                      credits_consumed: 1
        '400':
          description: >-
            The JSON body is invalid, contains an unsupported field, or carries
            a cursor that is malformed or belongs to a different request. Not
            charged.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: >-
            The workspace does not have enough credits for this request. Not
            charged.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: The JSON request body exceeds the 16 KiB limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            The workspace has exceeded 180 requests per minute for this
            endpoint. Each LinkedIn content endpoint has its own counter. Wait
            until the next minute boundary, then retry with bounded backoff. Not
            charged.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: >-
            The LinkedIn content lookup failed. Not charged; retry with
            increasing delays.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: >-
            The lookup is busy (the response includes Retry-After: 5) or a
            required service is unavailable. Not charged; wait and retry with
            bounded backoff.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds to wait before retrying when the lookup is busy.
              schema:
                type: string
              example: '5'
        '504':
          description: The LinkedIn content lookup timed out. Not charged; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      additionalProperties: true
      properties:
        error:
          type: string
        message:
          type: string
  responses:
    Unauthorized:
      description: The Bearer token is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        Use an Airscale workspace API key. Never expose the key in client-side
        code.

````