Get a monitor with companies and recent new hires
curl --request GET \
--url https://api.airscale.io/v1/new-hire-monitors/{monitor_id} \
--header 'Authorization: Bearer <token>'const url = 'https://api.airscale.io/v1/new-hire-monitors/{monitor_id}';
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/new-hire-monitors/{monitor_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"monitor": {
"id": "61111111-1111-4111-8111-111111111111",
"name": "Target accounts",
"frequency": "weekly",
"status": "active",
"audience": "companies",
"legacy": false,
"filters": {
"job_titles": [
"VP Sales",
"Head of Sales"
],
"excluded_job_titles": [],
"title_match": "strict",
"seniorities": [],
"hire_types": [
"external"
],
"industries": [],
"company_size": null,
"company_location": null,
"person_location": null
},
"results_table_id": "64444444-4444-4444-8444-444444444444",
"results_status": "ready",
"results_error": null,
"baseline_completed_at": "2026-11-02T10:05:00.000Z",
"next_check_at": "2026-11-09T10:05:00.000Z",
"last_successful_check_at": "2026-11-02T10:05:00.000Z",
"run_block_reason": null,
"created_at": "2026-11-02T10:00:00.000Z",
"updated_at": "2026-11-02T10:05:00.000Z",
"webhook_url": "https://hooks.example.com/airscale/new-hires",
"webhook_configured": true,
"company_count": 2,
"unresolved_company_count": 0,
"new_hire_count": 1,
"unread_event_count": 1
},
"companies": [
{
"identifier": "example-company",
"linkedin_url": "https://www.linkedin.com/company/example-company",
"linkedin_company_id": "1035",
"name": "Example Company",
"status": "resolved",
"last_checked_at": "2026-11-02T10:05:00.000Z"
},
{
"identifier": "example-company-2",
"linkedin_url": "https://www.linkedin.com/company/example-company-2",
"linkedin_company_id": "2036",
"name": "Example Company Two",
"status": "resolved",
"last_checked_at": "2026-11-02T10:05:00.000Z"
}
],
"events": [
{
"id": "63333333-3333-4333-8333-333333333333",
"monitor_id": "61111111-1111-4111-8111-111111111111",
"detected_at": "2026-11-09T10:05:00.000Z",
"hire_type": "external",
"person": {
"name": "Example Person",
"linkedin_url": "https://www.linkedin.com/in/example-person",
"location": "Paris, France"
},
"title": "VP Sales",
"start_date": "2026-10",
"company": {
"name": "Example Company",
"linkedin_company_id": null,
"linkedin_url": null
},
"previous_title": "Director of Sales",
"previous_company_name": "Example Previous Company",
"read_at": null
}
]
}{
"error": {
"code": "invalid_api_key",
"message": "The API key is not valid"
}
}{
"error": {
"code": "monitor_not_found",
"message": "Monitor not found"
}
}{
"error": "Too Many Requests",
"message": "Rate limit exceeded: 120 requests per minute"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Get a new hire monitor
Retrieve one monitor, its company list, and its latest 100 new hires. Rate limit: 120 requests per fixed minute per API key, shared by all new hire monitor endpoints.
GET
/
v1
/
new-hire-monitors
/
{monitor_id}
Get a monitor with companies and recent new hires
curl --request GET \
--url https://api.airscale.io/v1/new-hire-monitors/{monitor_id} \
--header 'Authorization: Bearer <token>'const url = 'https://api.airscale.io/v1/new-hire-monitors/{monitor_id}';
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/new-hire-monitors/{monitor_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"monitor": {
"id": "61111111-1111-4111-8111-111111111111",
"name": "Target accounts",
"frequency": "weekly",
"status": "active",
"audience": "companies",
"legacy": false,
"filters": {
"job_titles": [
"VP Sales",
"Head of Sales"
],
"excluded_job_titles": [],
"title_match": "strict",
"seniorities": [],
"hire_types": [
"external"
],
"industries": [],
"company_size": null,
"company_location": null,
"person_location": null
},
"results_table_id": "64444444-4444-4444-8444-444444444444",
"results_status": "ready",
"results_error": null,
"baseline_completed_at": "2026-11-02T10:05:00.000Z",
"next_check_at": "2026-11-09T10:05:00.000Z",
"last_successful_check_at": "2026-11-02T10:05:00.000Z",
"run_block_reason": null,
"created_at": "2026-11-02T10:00:00.000Z",
"updated_at": "2026-11-02T10:05:00.000Z",
"webhook_url": "https://hooks.example.com/airscale/new-hires",
"webhook_configured": true,
"company_count": 2,
"unresolved_company_count": 0,
"new_hire_count": 1,
"unread_event_count": 1
},
"companies": [
{
"identifier": "example-company",
"linkedin_url": "https://www.linkedin.com/company/example-company",
"linkedin_company_id": "1035",
"name": "Example Company",
"status": "resolved",
"last_checked_at": "2026-11-02T10:05:00.000Z"
},
{
"identifier": "example-company-2",
"linkedin_url": "https://www.linkedin.com/company/example-company-2",
"linkedin_company_id": "2036",
"name": "Example Company Two",
"status": "resolved",
"last_checked_at": "2026-11-02T10:05:00.000Z"
}
],
"events": [
{
"id": "63333333-3333-4333-8333-333333333333",
"monitor_id": "61111111-1111-4111-8111-111111111111",
"detected_at": "2026-11-09T10:05:00.000Z",
"hire_type": "external",
"person": {
"name": "Example Person",
"linkedin_url": "https://www.linkedin.com/in/example-person",
"location": "Paris, France"
},
"title": "VP Sales",
"start_date": "2026-10",
"company": {
"name": "Example Company",
"linkedin_company_id": null,
"linkedin_url": null
},
"previous_title": "Director of Sales",
"previous_company_name": "Example Previous Company",
"read_at": null
}
]
}{
"error": {
"code": "invalid_api_key",
"message": "The API key is not valid"
}
}{
"error": {
"code": "monitor_not_found",
"message": "Monitor not found"
}
}{
"error": "Too Many Requests",
"message": "Rate limit exceeded: 120 requests per minute"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}New hire 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.
monitor_id. The response contains the monitor, its companies sorted by URL, and up to the latest 100 events ordered newest first.
new_hire_count and unread_event_count cover every event, not only the 100-event preview. Preview events have no webhook receipt; use List new hire events for receipts, filters, and pagination.identifier (the lower-case slug or numeric ID from its URL), linkedin_url, linkedin_company_id, name, last_checked_at, and status: pending until it is resolved, then resolved, or unresolved when the company could not be found. An unresolved company pauses the monitor with run_block_reason: "unresolved_companies". A market monitor returns an empty companies array.
The monitor reports baseline_completed_at, next_check_at, and last_successful_check_at as ISO 8601 timestamps, or null. A paused monitor has no next check scheduled. run_block_reason explains why checks are not progressing and results_status with results_error explains why found new hires are not yet delivered to the results table.
Next step
Use Add companies to extend a company-list monitor.Authorizations
Use an Airscale workspace API key. Never expose the key in client-side code.