List job-change events
curl --request GET \
--url https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events \
--header 'Authorization: Bearer <token>'const url = 'https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"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
}{
"error": "<string>",
"message": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}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.
GET
/
v1
/
job-change-monitors
/
{monitor_id}
/
events
List job-change events
curl --request GET \
--url https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events \
--header 'Authorization: Bearer <token>'const url = 'https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"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
}{
"error": "<string>",
"message": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}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.
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.
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.read_at. This endpoint is also the durable fallback when webhook delivery is delayed or unavailable.
Webhook delivery receipts
Each event carries awebhook 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 to send a failed or uncertain event again.
Next step
Use Mark an event as read after your application has processed an event.Authorizations
Use an Airscale workspace API key. Never expose the key in client-side code.
Path Parameters
Query Parameters
Number of events to return, from 1 to 100. Defaults to 50.
Required range:
1 <= x <= 100Opaque cursor from the preceding response.
Minimum string length:
1