> ## 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.

# Profile comments

> Retrieve the comments a LinkedIn profile wrote, each with the post it was left on. 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 comments written by a LinkedIn profile, with each comment's text, date, like and reply counts, and the post it was left on. Rows are returned as found on LinkedIn, without profile enrichment.

<Note>
  Each successful request costs **1 credit**, whatever the number of comments 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 `profile_url` as a LinkedIn profile URL (`linkedin.com/in/...`). Optionally set `posted_within` to `24h`, `week`, or `month` to return only recent comments. Unknown fields are rejected with `400`.

## Rate limit

The limit is **180 requests per minute per workspace** for Profile comments, including requests made with different API keys for the same workspace. [Post search](/api-reference/post-search) and [Comment likers](/api-reference/comment-likers) 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

A page holds up to about 100 comments. Omit `cursor` on the first request. When `pagination.next_cursor` is not `null`, send it unchanged together with the same `profile_url` and `posted_within` to fetch the next page. A cursor sent with different fields, or to another endpoint, returns `400`.

`pagination.total` is always `null` for this endpoint because no reliable total is reported. Use `has_more` and `next_cursor` to decide whether to continue.

## 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

Send a returned `comment_url` to [Comment likers](/api-reference/comment-likers) to see who reacted to that comment.


## OpenAPI

````yaml openapi.json POST /v1/profile-comments
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/profile-comments:
    post:
      tags:
        - LinkedIn content
      summary: List a LinkedIn profile's comments
      description: >-
        Returns one page of comments written by a LinkedIn profile, each with
        the post it was left on. Costs 1 credit per successful request.
      operationId: listLinkedinProfileComments
      requestBody:
        required: true
        description: >-
          A LinkedIn profile URL, an optional period, and an optional cursor.
          The JSON body must not exceed 16 KiB.
        content:
          application/json:
            schema:
              type: object
              required:
                - profile_url
              additionalProperties: false
              properties:
                profile_url:
                  type: string
                  minLength: 1
                  maxLength: 2048
                  description: LinkedIn profile URL (linkedin.com/in/...).
                posted_within:
                  type:
                    - string
                    - 'null'
                  enum:
                    - 24h
                    - week
                    - month
                    - null
                  description: Only return comments from this period.
                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:
                  profile_url: https://www.linkedin.com/in/example-person
                  posted_within: month
              nextPage:
                summary: Next page
                value:
                  profile_url: https://www.linkedin.com/in/example-person
                  posted_within: month
                  cursor: eyJ2IjoxLCJyIjoiZXhhbXBsZSJ9
      responses:
        '200':
          description: A page of comments written by the profile.
          content:
            application/json:
              schema:
                type: object
                required:
                  - items
                  - pagination
                  - billing
                additionalProperties: false
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      required:
                        - comment_url
                        - comment_id
                        - comment
                        - commented_at
                        - likes
                        - replies
                        - post
                      additionalProperties: false
                      properties:
                        comment_url:
                          type: string
                          description: >-
                            URL of the comment. Use it as `comment_url` for
                            Comment likers.
                        comment_id:
                          type:
                            - string
                            - 'null'
                        comment:
                          type: string
                        commented_at:
                          type:
                            - string
                            - 'null'
                          format: date-time
                        likes:
                          type:
                            - integer
                            - 'null'
                          minimum: 0
                        replies:
                          type:
                            - integer
                            - 'null'
                          minimum: 0
                        post:
                          type:
                            - object
                            - 'null'
                          description: >-
                            The post the comment was left on, or null when
                            unavailable.
                          required:
                            - post_url
                            - post_id
                            - content
                            - posted_at
                            - author
                          additionalProperties: false
                          properties:
                            post_url:
                              type: string
                            post_id:
                              type:
                                - string
                                - 'null'
                            content:
                              type:
                                - string
                                - 'null'
                            posted_at:
                              type:
                                - string
                                - 'null'
                              format: date-time
                            author:
                              type:
                                - object
                                - 'null'
                              required:
                                - type
                                - name
                                - linkedin_url
                                - headline
                                - picture_url
                              additionalProperties: false
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - person
                                    - company
                                name:
                                  type:
                                    - string
                                    - 'null'
                                linkedin_url:
                                  type:
                                    - string
                                    - 'null'
                                  description: Canonical LinkedIn profile or company URL.
                                headline:
                                  type:
                                    - string
                                    - 'null'
                                picture_url:
                                  type:
                                    - string
                                    - 'null'
                    description: Comments written by the profile.
                  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: >-
                          Always null: no reliable total is reported for profile
                          comments.
                  billing:
                    type: object
                    required:
                      - credits_consumed
                    additionalProperties: false
                    properties:
                      credits_consumed:
                        type: integer
                        const: 1
              examples:
                page:
                  summary: Synthetic page
                  value:
                    items:
                      - comment_url: >-
                          https://www.linkedin.com/posts/example-person_sales-activity-7511035039397339136-8myb?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7511035039397339136%2C7511040000000000000%29
                        comment_id: '7511040000000000000'
                        comment: Great point, thanks for sharing.
                        commented_at: '2026-09-30T14:03:41.169Z'
                        likes: 12
                        replies: 2
                        post:
                          post_url: >-
                            https://www.linkedin.com/posts/example-person_sales-activity-7511035039397339136-8myb
                          post_id: '7511035039397339136'
                          content: Example post about sales automation.
                          posted_at: '2026-09-30T12:11:41.675Z'
                          author:
                            type: person
                            name: Example Person
                            linkedin_url: https://www.linkedin.com/in/example-person
                            headline: Head of Sales at Example Company
                            picture_url: https://www.example.org/images/example-person.png
                    pagination:
                      has_more: true
                      next_cursor: eyJ2IjoxLCJyIjoiZXhhbXBsZSJ9
                      total: null
                    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.

````