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

# Add sources to a post engagement monitor

> Follow more LinkedIn company pages or profiles, up to 100 per monitor. Rate limit: 120 requests per fixed minute per API key, shared by all post engagement monitor endpoints.

> [!NOTE]
>
> Post engagement monitoring requires a **V2 workspace API key**. Legacy V1 API keys are not supported by these endpoints. Monitors and their credits belong to the V2 workspace associated with the key.

Add sources with `{"sources": ["https://www.linkedin.com/in/example-person-2"]}`. Each URL must be a LinkedIn company (`/company/...`) or profile (`/in/...`) URL; single post URLs are rejected with `422 invalid_sources`.

The `201` response returns `sources` (all active sources), `added_source_count` (URLs already followed are ignored), and `source_count`. A monitor follows at most **100 sources**; exceeding it returns `422 source_limit_reached`.

> [!NOTE]
>
> Adding sources restarts coverage for the monitor. Delivered engagers and the results table are kept, and people already delivered are never charged again.

The JSON request body must be at most **256 KiB (262,144 bytes)**. Adding sources spends no credits.

## Next step

Use [Get a post engagement monitor](https://docs.airscale.io/api-reference/post-engagement-monitors/get.md) to follow the first check of each new source.


## OpenAPI

````yaml openapi.json POST /v1/post-engagement-monitors/{monitor_id}/sources
openapi: 3.1.0
info:
  title: Airscale Public API
  version: '2026-09-11'
  description: >-
    Search, enrich, resolve public business data, and monitor job changes 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, read profile and company feeds, and retrieve
      profile comments and comment reactions.
  - name: Job change monitoring
    description: Track LinkedIn profiles and receive job-change events.
  - name: New hire monitoring
    description: Watch companies or the market for people who start a matching role.
  - name: Post engagement monitoring
    description: >-
      Follow LinkedIn company pages and profiles and receive the people who
      engage with their posts.
  - name: Account
    description: Inspect workspace account state.
  - name: Miscellaneous
    description: >-
      Find website technologies and check WhatsApp availability, Meta ads, and
      email deliverability.
paths:
  /v1/post-engagement-monitors/{monitor_id}/sources:
    post:
      tags:
        - Post engagement monitoring
      summary: Add sources to a monitor
      description: >-
        Adds LinkedIn company or profile URLs to a monitor, up to 100 active
        sources in total. URLs the monitor already follows are ignored. Adding
        sources restarts coverage for the monitor; delivered engagers and the
        results table are kept. Requires a V2 workspace API key. Legacy V1 API
        keys are not supported. Monitors and their credits belong to the V2
        workspace.
      operationId: addPostEngagementMonitorSources
      parameters:
        - name: monitor_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          example: 71111111-1111-4111-8111-111111111111
      requestBody:
        required: true
        description: >-
          Provide 1–100 LinkedIn company or profile URLs in a JSON body of at
          most 256 KiB (262,144 bytes).
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - sources
              properties:
                sources:
                  type: array
                  minItems: 1
                  maxItems: 100
                  items:
                    type: string
                    minLength: 1
                    maxLength: 1000
                  description: >-
                    1–100 LinkedIn company (/company/...) or personal profile
                    (/in/...) URLs. URLs are canonicalized and de-duplicated.
                    Single post URLs are rejected.
            examples:
              sources:
                summary: Follow one more profile
                value:
                  sources:
                    - https://www.linkedin.com/in/example-person-2
      responses:
        '201':
          description: The monitor's active sources after the addition.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - sources
                  - added_source_count
                  - source_count
                properties:
                  sources:
                    type: array
                    items:
                      $ref: '#/components/schemas/PostEngagementSource'
                    description: All active sources after the addition.
                  added_source_count:
                    type: integer
                    minimum: 0
                    maximum: 100
                  source_count:
                    type: integer
                    minimum: 0
                    maximum: 100
              examples:
                success:
                  summary: Successful response
                  value:
                    sources:
                      - id: 72222222-2222-4222-8222-222222222222
                        linkedin_url: https://www.linkedin.com/company/example-company
                        kind: company
                        status: monitoring
                        last_checked_at: '2026-11-02T09:00:00.000Z'
                        last_error: null
                      - id: 72222223-2222-4222-8222-222222222223
                        linkedin_url: https://www.linkedin.com/in/example-person
                        kind: profile
                        status: monitoring
                        last_checked_at: '2026-11-02T09:00:00.000Z'
                        last_error: null
                      - id: 72222224-2222-4222-8222-222222222224
                        linkedin_url: https://www.linkedin.com/in/example-person-2
                        kind: profile
                        status: pending
                        last_checked_at: null
                        last_error: null
                    added_source_count: 1
                    source_count: 3
        '400':
          description: >-
            The request body is missing or is not valid JSON. The public API
            returns {"error":"Invalid JSON"}.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                error:
                  summary: Error response
                  value:
                    error: Invalid JSON
        '401':
          $ref: '#/components/responses/MonitorUnauthorized'
        '404':
          description: monitor_not_found in this workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitorApiError'
              examples:
                error:
                  summary: Error response
                  value:
                    error:
                      code: monitor_not_found
                      message: Monitor not found
        '413':
          description: The JSON request body exceeds the 256 KiB (262,144 bytes) limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: >-
            invalid_sources (for example an unknown field, a URL that is not a
            LinkedIn company or profile, or a single post URL) or
            source_limit_reached when the monitor would follow more than 100
            sources.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitorApiError'
        '429':
          description: >-
            The API key has exceeded 120 requests in the current minute across
            post engagement monitor endpoints. Wait for the Retry-After seconds
            before retrying.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                error:
                  summary: Error response
                  value:
                    error: Too Many Requests
                    message: 'Rate limit exceeded: 120 requests per minute'
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: string
              example: '60'
        '503':
          description: >-
            service_unavailable: post engagement monitoring is temporarily
            unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitorApiError'
components:
  schemas:
    PostEngagementSource:
      type: object
      additionalProperties: false
      required:
        - id
        - linkedin_url
        - kind
        - status
        - last_checked_at
        - last_error
      properties:
        id:
          type: string
          format: uuid
        linkedin_url:
          type: string
        kind:
          type: string
          enum:
            - company
            - profile
            - post
          description: >-
            The API accepts company and profile sources only; post appears on
            single-post sources added in the Airscale app.
        status:
          type: string
          enum:
            - pending
            - monitoring
            - removed
          description: >-
            pending until the source's first check, then monitoring. removed
            appears only in a remove response.
        last_checked_at:
          type:
            - string
            - 'null'
          format: date-time
        last_error:
          type:
            - string
            - 'null'
    Error:
      type: object
      additionalProperties: true
      properties:
        error:
          type: string
        message:
          type: string
    MonitorApiError:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
  responses:
    MonitorUnauthorized:
      description: >-
        A missing Bearer token returns
        {"error":"Unauthorized","message":"Missing or invalid bearer token"}. An
        unknown API key returns invalid_api_key.
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/MonitorApiError'
              - $ref: '#/components/schemas/Error'
          examples:
            invalidKey:
              summary: Unknown API key
              value:
                error:
                  code: invalid_api_key
                  message: The API key is not valid
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        Use an Airscale workspace API key. Never expose the key in client-side
        code.

````

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