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

# Mark a post engager as read

> Acknowledge one delivered engager after processing it. 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.

Mark one delivered engager as read after your integration has handled it. The response returns the engager with its `read_at` timestamp and webhook receipt, and the monitor's `unread_engager_count` decreases.

The request accepts an empty body or `{}`. A body that is present but not valid JSON returns `400`.

> [!NOTE]
>
> The call is idempotent: marking an engager that is already read keeps its first `read_at`. Webhook retries use the engager ID as the event ID, so treat it as the durable acknowledgement key.

Marking an engager read does not delete it and spends no credits.

## Next step

Review [Create a post engagement monitor](https://docs.airscale.io/api-reference/post-engagement-monitors/create.md) for webhook setup and signature verification.


## OpenAPI

````yaml openapi.json POST /v1/post-engagement-monitors/{monitor_id}/engagers/{engager_id}/read
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}/engagers/{engager_id}/read:
    post:
      tags:
        - Post engagement monitoring
      summary: Mark an engager as read
      description: >-
        Marks one delivered engager read and returns it with its read_at
        timestamp and webhook receipt. The call is idempotent: an engager that
        is already read keeps its first read time. The request body is optional:
        send no body or an empty JSON object. Requires a V2 workspace API key.
        Legacy V1 API keys are not supported. Monitors and their credits belong
        to the V2 workspace.
      operationId: markPostEngagementEngagerRead
      parameters:
        - name: monitor_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          example: 71111111-1111-4111-8111-111111111111
        - name: engager_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          example: 73333333-3333-4333-8333-333333333333
      requestBody:
        required: false
        description: Optional. Send no body or an empty JSON object ({}).
        content:
          application/json:
            schema:
              type: object
              properties: {}
              additionalProperties: false
            examples:
              empty:
                summary: Acknowledge the engager
                value: {}
      responses:
        '200':
          description: The engager after it was marked read.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - engager
                properties:
                  engager:
                    $ref: '#/components/schemas/PostEngagementEngager'
              examples:
                success:
                  summary: Successful response
                  value:
                    engager:
                      id: 73333333-3333-4333-8333-333333333333
                      monitor_id: 71111111-1111-4111-8111-111111111111
                      linkedin_url: https://www.linkedin.com/in/example-engager
                      name: Example Engager
                      headline: VP Sales at Example Company
                      title: VP Sales
                      company_name: Example Company
                      company_linkedin_url: https://www.linkedin.com/company/example-company-2
                      location: Paris, France
                      existing_engager: false
                      engagement_count: 2
                      first_detected_at: '2026-11-02T09:01:00.000Z'
                      last_detected_at: '2026-11-02T09:01:00.000Z'
                      delivered_at: '2026-11-02T09:02:00.000Z'
                      read_at: '2026-11-02T10:00:00.000Z'
                      webhook:
                        status: sent
                        attempt_count: 1
                        last_attempt_at: '2026-11-02T09:02:04.000Z'
                        sent_at: '2026-11-02T09:02:05.000Z'
                        error_code: null
        '400':
          description: The optional body is present but is not valid 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, or engager_not_found when no delivered engager
            has this ID in the monitor.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitorApiError'
              examples:
                error:
                  summary: Error response
                  value:
                    error:
                      code: monitor_not_found
                      message: Monitor not found
        '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:
    PostEngagementEngager:
      type: object
      additionalProperties: false
      required:
        - id
        - monitor_id
        - linkedin_url
        - name
        - headline
        - title
        - company_name
        - company_linkedin_url
        - location
        - existing_engager
        - engagement_count
        - first_detected_at
        - last_detected_at
        - delivered_at
        - read_at
        - webhook
      properties:
        id:
          type: string
          format: uuid
        monitor_id:
          type: string
          format: uuid
        linkedin_url:
          type: string
        name:
          type:
            - string
            - 'null'
        headline:
          type:
            - string
            - 'null'
        title:
          type:
            - string
            - 'null'
        company_name:
          type:
            - string
            - 'null'
        company_linkedin_url:
          type:
            - string
            - 'null'
        location:
          type:
            - string
            - 'null'
        existing_engager:
          type: boolean
          description: >-
            true when the person engaged before the monitor existed and was
            delivered because include_existing_engagers was on.
        engagement_count:
          type: integer
          minimum: 0
        first_detected_at:
          type: string
          format: date-time
        last_detected_at:
          type: string
          format: date-time
        delivered_at:
          type:
            - string
            - 'null'
          format: date-time
        read_at:
          type:
            - string
            - 'null'
          format: date-time
        webhook:
          description: >-
            The webhook delivery receipt for this engager, or null when no
            delivery exists.
          oneOf:
            - $ref: '#/components/schemas/MonitorWebhookDelivery'
            - type: '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
    MonitorWebhookDelivery:
      type: object
      additionalProperties: false
      required:
        - status
        - attempt_count
        - last_attempt_at
        - sent_at
        - error_code
      properties:
        status:
          type: string
          enum:
            - pending
            - sending
            - retryable
            - sent
            - failed
            - uncertain
            - cancelled
          description: >-
            uncertain means a timeout or dropped connection: the request may
            have been received. It is never resent automatically.
        attempt_count:
          type: integer
          minimum: 0
        last_attempt_at:
          type:
            - string
            - 'null'
          format: date-time
        sent_at:
          type:
            - string
            - 'null'
          format: date-time
        error_code:
          type:
            - string
            - 'null'
          description: >-
            For example webhook_http_410, webhook_url_rejected or
            webhook_configuration_changed.
  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.