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

# Redeliver a job-change webhook

> Send one event's webhook again after a failed or unconfirmed delivery. 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.

Re-arm one event's webhook after a `failed` or `uncertain` attempt. Airscale resets the attempt count and sends the event again to the monitor's **current** webhook URL, signed with its current signing secret. Redelivery never replays the paid profile check and spends no credits.

The request accepts an empty body or `{}`. The `202` response returns `event_id` and the new `webhook` receipt, normally `pending` with `attempt_count: 0`. If a send for the event is already in flight, its `sending` receipt is returned unchanged.

> [!WARNING]
>
> The event keeps the same ID and `Idempotency-Key: job-change-event:<event_id>` header. Your receiver may already have processed an `uncertain` delivery, so handle the event idempotently.

A monitor without a webhook returns `422 webhook_not_configured`. Track the outcome through the `webhook` receipt in [List job-change events](https://docs.airscale.io/api-reference/job-change-monitors/events.md).

## Next step

Use [Update a job-change monitor](https://docs.airscale.io/api-reference/job-change-monitors/update.md) to change the webhook URL or rotate its signing secret before redelivering.


## OpenAPI

````yaml openapi.json POST /v1/job-change-monitors/{monitor_id}/events/{event_id}/webhook/redeliver
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}/webhook/redeliver:
    post:
      tags:
        - Job change monitoring
      summary: Redeliver an event's webhook
      description: >-
        Re-arms one event's webhook after a failed or unconfirmed attempt. The
        attempt count is reset and the event is sent again to the monitor's
        current webhook URL with its current signing secret. It never replays
        the paid profile check. If a send is already in flight, the in-flight
        receipt is returned unchanged. 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: redeliverJobChangeEventWebhook
      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: Send the webhook again
                value: {}
      responses:
        '202':
          description: The webhook delivery was queued again.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - event_id
                  - webhook
                properties:
                  event_id:
                    type: string
                    format: uuid
                  webhook:
                    $ref: '#/components/schemas/JobChangeWebhookDelivery'
              examples:
                success:
                  summary: Successful response
                  value:
                    event_id: 33333333-3333-4333-8333-333333333333
                    webhook:
                      status: pending
                      attempt_count: 0
                      last_attempt_at: null
                      sent_at: null
                      error_code: null
        '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: monitor_not_found or event_not_found in this workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobChangeError'
        '422':
          description: 'webhook_not_configured: the monitor has no webhook URL.'
          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:
    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.
    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
  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.