> ## 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 job-change event as read

> Acknowledge one job-change event after processing it. Rate limit: 120 requests per fixed minute per API key, shared by all job-change monitor endpoints.

> [!NOTE]
>
> Job-change monitoring requires a **V2 workspace API key**. V1 (Bubble) API keys are not supported by these endpoints. Monitors and monitoring credits belong to the V2 workspace associated with the key.

Mark one event as read after your integration has handled it. The response returns the event with its `read_at` timestamp, and the monitor's unread count decreases.

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

> [!NOTE]
>
> Treat the event ID as the durable acknowledgement key. Webhook retries use the same event ID, so processing it idempotently prevents duplicate downstream work.

An event can be marked read once. Marking an event that is already read returns `404 event_not_found`, so treat that response as already acknowledged when you know the event exists.

Reading an event does not delete it. You can still retrieve it through [List job-change events](https://docs.airscale.io/api-reference/job-change-monitors/events.md) or the monitor detail response.

## Next step

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


## OpenAPI

````yaml openapi.json POST /v1/job-change-monitors/{monitor_id}/events/{event_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: Account
    description: Inspect workspace account state.
  - name: Miscellaneous
    description: >-
      Find website technologies and check WhatsApp availability, Meta ads, and
      email deliverability.
paths:
  /v1/job-change-monitors/{monitor_id}/events/{event_id}/read:
    post:
      tags:
        - Job change monitoring
      summary: Mark a job-change event as read
      description: >-
        Marks one unread event read and returns the event with its read_at
        timestamp. The request body is optional: send no body or an empty JSON
        object. Requires a V2 workspace API key. V1 (Bubble) API keys are not
        supported. Monitors and monitoring credits belong to the V2 workspace.
      operationId: markJobChangeEventRead
      parameters:
        - name: monitor_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          example: 11111111-1111-4111-8111-111111111111
        - name: event_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          example: 33333333-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 event
                value: {}
      responses:
        '200':
          description: The event after it was marked read.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - event
                properties:
                  event:
                    $ref: '#/components/schemas/JobChangeEvent'
              examples:
                success:
                  summary: Successful response
                  value:
                    event:
                      id: 33333333-3333-4333-8333-333333333333
                      monitor_id: 11111111-1111-4111-8111-111111111111
                      profile_id: 22222222-2222-4222-8222-222222222222
                      linkedin_url: https://www.linkedin.com/in/example-person
                      external_id: crm-contact-123
                      previous_employer:
                        identity: example-old-company
                        name: Example Old Company
                      new_employer:
                        identity: example-new-company
                        name: Example New Company
                      detected_at: '2026-12-02T10:00:00.000Z'
                      read_at: '2026-12-02T10:05:00.000Z'
        '400':
          description: The optional body is present but is not valid JSON.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: >-
            event_not_found: the event does not exist in this monitor or is
            already marked read.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobChangeError'
        '429':
          description: >-
            The API key has exceeded 120 requests in the current minute across
            job-change monitor endpoints. Wait for the Retry-After seconds
            before retrying.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: string
              example: '60'
        '503':
          description: Job change monitoring is temporarily unavailable or not enabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobChangeError'
components:
  schemas:
    JobChangeEvent:
      type: object
      additionalProperties: false
      required:
        - id
        - monitor_id
        - profile_id
        - linkedin_url
        - external_id
        - previous_employer
        - new_employer
        - detected_at
        - read_at
      properties:
        id:
          type: string
          format: uuid
        monitor_id:
          type: string
          format: uuid
        profile_id:
          type: string
          format: uuid
        linkedin_url:
          type: string
          format: uri
        external_id:
          type:
            - string
            - 'null'
        previous_employer:
          $ref: '#/components/schemas/JobChangeEmployer'
        new_employer:
          type: object
          additionalProperties: false
          required:
            - identity
            - name
          properties:
            identity:
              type: string
            name:
              type:
                - string
                - 'null'
        detected_at:
          type: string
          format: date-time
        read_at:
          type:
            - string
            - 'null'
          format: date-time
    Error:
      type: object
      additionalProperties: true
      properties:
        error:
          type: string
        message:
          type: string
    JobChangeError:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
    JobChangeEmployer:
      type: object
      additionalProperties: false
      required:
        - identity
        - name
      properties:
        identity:
          type:
            - string
            - 'null'
        name:
          type:
            - string
            - 'null'
  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.

````

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