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

# Post search

> Search LinkedIn posts by keywords, authors, companies, mentions, groups, content type, and date. Rate limit: 180 requests per fixed minute per workspace, counted separately for each LinkedIn content endpoint; pagination requests and retries count.

Search LinkedIn posts and retrieve one synchronous page of up to 50 posts, each with its author, content, publication date, engagement counts, and image URLs. Rows are returned as found on LinkedIn, without profile enrichment.

<Note>
  Each successful request costs **1 credit**, whatever the number of posts 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.

## Filters

Provide `keywords` (up to 200 characters) or at least one author, mention, or group filter. All filters you send combine, so a post must match every one of them.

| Field | Matches |
| - | - |
| `keywords` | Words in the post. |
| `author_keywords` | Words in the authors' profiles (up to 200 characters). |
| `author_profile_urls` | Posts written by these profiles (`linkedin.com/in/...`). |
| `author_company_urls` | Posts published by these company pages (URL or numeric ID). |
| `author_employer_company_urls` | Posts whose authors work at these companies (URL or numeric ID). |
| `author_industry_ids` | Authors' company industry, as numeric LinkedIn industry IDs. |
| `mentioning_profile_urls` | Posts that mention these profiles. |
| `mentioning_company_urls` | Posts that mention these companies (URL or numeric ID). |
| `group_url` | Posts inside one LinkedIn group (`linkedin.com/groups/...` or numeric ID). |
| `content_type` | `videos`, `images`, `live_videos`, `documents`, `collaborative_articles`, or `jobs`. |
| `sort_by` | `date` (default) or `relevance`. |
| `posted_within` | `24h`, `week`, or `month`, filtered by LinkedIn; or `1h`, `3months`, `6months`, or `year`, which require `sort_by: "date"`. |

List filters accept a string or an array of up to 10 values. Unknown fields are rejected with `400`. With `posted_within` set to `1h`, `3months`, `6months`, or `year`, the period is applied to each fetched page, so a page can hold fewer than 50 posts. LinkedIn search can return fewer posts per author than that author's full feed.

## Rate limit

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

Omit `cursor` on the first request. When `pagination.next_cursor` is not `null`, send it unchanged together with the same filters to fetch the next page. A cursor sent with different filters, or to another endpoint, returns `400`. `pagination.total` is the number of matching posts 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 [Profile comments](/api-reference/profile-comments) to see what a post author comments on, or [Post likers](/api-reference/post-likers) to retrieve enriched people who liked a post.


## OpenAPI

````yaml openapi.json POST /v1/post-search
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/post-search:
    post:
      tags:
        - LinkedIn content
      summary: Search LinkedIn posts
      description: >-
        Returns one page of up to 50 LinkedIn posts matching keywords, author,
        mention, group, content-type, and date filters. Costs 1 credit per
        successful request.
      operationId: searchLinkedinPosts
      requestBody:
        required: true
        description: >-
          Search filters and an optional cursor. The JSON body must not exceed
          16 KiB.
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              description: >-
                Provide `keywords` or at least one author, mention, or group
                filter. All provided filters combine.
              properties:
                keywords:
                  type:
                    - string
                    - 'null'
                  maxLength: 200
                  description: Words to search for in posts.
                author_keywords:
                  type:
                    - string
                    - 'null'
                  maxLength: 200
                  description: Words in the authors' profiles.
                author_profile_urls:
                  description: >-
                    Posts written by these LinkedIn profiles
                    (linkedin.com/in/...). A string or an array of up to 10
                    values.
                  oneOf:
                    - type: string
                      minLength: 1
                    - type: array
                      maxItems: 10
                      items:
                        type: string
                        minLength: 1
                author_company_urls:
                  description: >-
                    Posts published by these company pages, as LinkedIn company
                    URLs or numeric company IDs. A string or an array of up to
                    10 values.
                  oneOf:
                    - type: string
                      minLength: 1
                    - type: array
                      maxItems: 10
                      items:
                        type: string
                        minLength: 1
                author_employer_company_urls:
                  description: >-
                    Posts whose authors work at these companies, as LinkedIn
                    company URLs or numeric company IDs. A string or an array of
                    up to 10 values.
                  oneOf:
                    - type: string
                      minLength: 1
                    - type: array
                      maxItems: 10
                      items:
                        type: string
                        minLength: 1
                author_industry_ids:
                  description: >-
                    Authors' company industry, as numeric LinkedIn industry IDs.
                    A value or an array of up to 10 values.
                  oneOf:
                    - type:
                        - string
                        - integer
                    - type: array
                      maxItems: 10
                      items:
                        type:
                          - string
                          - integer
                mentioning_profile_urls:
                  description: >-
                    Posts that mention these LinkedIn profiles. A string or an
                    array of up to 10 values.
                  oneOf:
                    - type: string
                      minLength: 1
                    - type: array
                      maxItems: 10
                      items:
                        type: string
                        minLength: 1
                mentioning_company_urls:
                  description: >-
                    Posts that mention these companies, as LinkedIn company URLs
                    or numeric company IDs. A string or an array of up to 10
                    values.
                  oneOf:
                    - type: string
                      minLength: 1
                    - type: array
                      maxItems: 10
                      items:
                        type: string
                        minLength: 1
                group_url:
                  type:
                    - string
                    - integer
                    - 'null'
                  description: >-
                    Posts inside one LinkedIn group, as a group URL
                    (linkedin.com/groups/...) or numeric group ID.
                content_type:
                  type:
                    - string
                    - 'null'
                  enum:
                    - videos
                    - images
                    - live_videos
                    - documents
                    - collaborative_articles
                    - jobs
                    - null
                sort_by:
                  type:
                    - string
                    - 'null'
                  enum:
                    - date
                    - relevance
                    - null
                  default: date
                posted_within:
                  type:
                    - string
                    - 'null'
                  enum:
                    - 1h
                    - 24h
                    - week
                    - month
                    - 3months
                    - 6months
                    - year
                    - null
                  description: >-
                    24h, week, and month are filtered by LinkedIn. 1h, 3months,
                    6months, and year are applied to each fetched page, so pages
                    can hold fewer than 50 posts; they require sort_by date.
                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:
                  keywords: sales automation
                  author_employer_company_urls:
                    - https://www.linkedin.com/company/example-company
                  posted_within: week
              nextPage:
                summary: Next page
                value:
                  keywords: sales automation
                  author_employer_company_urls:
                    - https://www.linkedin.com/company/example-company
                  posted_within: week
                  cursor: eyJ2IjoxLCJyIjoiZXhhbXBsZSJ9
      responses:
        '200':
          description: A page of LinkedIn posts.
          content:
            application/json:
              schema:
                type: object
                required:
                  - items
                  - pagination
                  - billing
                additionalProperties: false
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      required:
                        - post_url
                        - post_id
                        - content
                        - posted_at
                        - author
                        - likes
                        - comments
                        - shares
                        - image_urls
                      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'
                        likes:
                          type:
                            - integer
                            - 'null'
                          minimum: 0
                        comments:
                          type:
                            - integer
                            - 'null'
                          minimum: 0
                        shares:
                          type:
                            - integer
                            - 'null'
                          minimum: 0
                        image_urls:
                          type: array
                          items:
                            type: string
                    description: Posts matching the filters.
                  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 matching posts 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:
                      - 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
                        likes: 4
                        comments: 1
                        shares: 0
                        image_urls:
                          - https://www.example.org/images/example-post.png
                    pagination:
                      has_more: true
                      next_cursor: eyJ2IjoxLCJyIjoiZXhhbXBsZSJ9
                      total: 178
                    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.

````