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

# List job-change events

> Read cursor-paginated employer-change events and their webhook delivery receipts for a monitor. 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.

List job-change events for one monitor, newest first. Set `limit` from 1 to 100 (default 50); when `next_cursor` is not `null`, send that value unchanged as `cursor` on the next request. A malformed cursor returns `422 invalid_event_cursor`.

> [!NOTE]
>
> An event is created only when a checked profile's employer identity changes. The event includes your `external_id` when one was supplied for the profile.

Events include the previous and new employer identities and names, the detection time, and `read_at`. This endpoint is also the durable fallback when webhook delivery is delayed or unavailable.

## Webhook delivery receipts

Each event carries a `webhook` object, or `null` when no delivery receipt exists. `status` is `pending`, `sending`, `retryable`, `sent`, `failed`, `uncertain`, or `cancelled`, with `attempt_count`, `last_attempt_at`, `sent_at`, and `error_code` (for example `webhook_http_410` or `webhook_configuration_changed`). `uncertain` means a timeout or dropped connection: the request may have been received. Use [Redeliver a webhook](https://docs.airscale.io/api-reference/job-change-monitors/events/redeliver.md) to send a `failed` or `uncertain` event again.

## Next step

Use [Mark an event as read](https://docs.airscale.io/api-reference/job-change-monitors/events/read.md) after your application has processed an event.


## OpenAPI

````yaml openapi.json GET /v1/job-change-monitors/{monitor_id}/events
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:
    get:
      tags:
        - Job change monitoring
      summary: List job-change events
      description: >-
        Returns cursor-paginated job-change events, newest first, each with its
        webhook delivery receipt. Use next_cursor unchanged on the next request.
        An unknown monitor ID returns an empty page rather than 404. Requires a
        V2 workspace API key. V1 (Bubble) API keys are not supported. Monitors
        and monitoring credits belong to the V2 workspace.
      operationId: listJobChangeMonitorEvents
      parameters:
        - name: monitor_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          example: 11111111-1111-4111-8111-111111111111
        - name: limit
          in: query
          required: false
          description: Number of events to return, from 1 to 100. Defaults to 50.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
          example: 50
        - name: cursor
          in: query
          required: false
          description: Opaque cursor from the preceding response.
          schema:
            type: string
            minLength: 1
          example: >-
            eyJkZXRlY3RlZEF0IjoiMjAyNi0xMC0xMVQxMDowMDowMC4wMDBaIiwiaWQiOiIzMzMzMzMzMy0zMzMzLTQzMzMtODMzMy0zMzMzMzMzMzMzMzMzIn0
      responses:
        '200':
          description: The requested event page.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - events
                  - next_cursor
                properties:
                  events:
                    type: array
                    items:
                      $ref: '#/components/schemas/JobChangeEventWithWebhook'
                  next_cursor:
                    type:
                      - string
                      - 'null'
              examples:
                success:
                  summary: Successful response
                  value:
                    events:
                      - 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: null
                        webhook:
                          status: sent
                          attempt_count: 1
                          last_attempt_at: '2026-12-02T10:00:04.000Z'
                          sent_at: '2026-12-02T10:00:05.000Z'
                          error_code: null
                    next_cursor: null
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          description: >-
            invalid_event_page (limit outside 1–100 or an unknown query
            parameter) or invalid_event_cursor.
          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:
    JobChangeEventWithWebhook:
      type: object
      additionalProperties: false
      required:
        - id
        - monitor_id
        - profile_id
        - linkedin_url
        - external_id
        - previous_employer
        - new_employer
        - detected_at
        - read_at
        - webhook
      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
        webhook:
          description: >-
            The webhook delivery receipt for this event, or null when no
            delivery receipt exists.
          oneOf:
            - $ref: '#/components/schemas/JobChangeWebhookDelivery'
            - type: 'null'
    JobChangeError:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
    Error:
      type: object
      additionalProperties: true
      properties:
        error:
          type: string
        message:
          type: string
    JobChangeEmployer:
      type: object
      additionalProperties: false
      required:
        - identity
        - name
      properties:
        identity:
          type:
            - string
            - 'null'
        name:
          type:
            - string
            - 'null'
    JobChangeWebhookDelivery:
      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
        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 or webhook_configuration_changed.
  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.