Submit a professional email batch
curl --request POST \
--url https://api.airscale.io/v1/email-bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"webhook_url": "https://webhook.example.org/email-results",
"inputs": [
{
"custom_id": "contact-001",
"linkedin_profile_url": "https://www.linkedin.com/in/example-person-000000"
},
{
"custom_id": 2002,
"first_name": "Sample",
"last_name": "Contact",
"company_name": "Example Company"
}
]
}
'const url = 'https://api.airscale.io/v1/email-bulk';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
webhook_url: 'https://webhook.example.org/email-results',
inputs: [
{
custom_id: 'contact-001',
linkedin_profile_url: 'https://www.linkedin.com/in/example-person-000000'
},
{
custom_id: 2002,
first_name: 'Sample',
last_name: 'Contact',
company_name: 'Example Company'
}
]
})
};
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/email-bulk"
payload = {
"webhook_url": "https://webhook.example.org/email-results",
"inputs": [
{
"custom_id": "contact-001",
"linkedin_profile_url": "https://www.linkedin.com/in/example-person-000000"
},
{
"custom_id": 2002,
"first_name": "Sample",
"last_name": "Contact",
"company_name": "Example Company"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"status": "accepted",
"count": 2
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Bulk email finder
Find professional email addresses for a batch of people. Rate limit: 3,000 input items per minute per workspace.
POST
/
v1
/
email-bulk
Submit a professional email batch
curl --request POST \
--url https://api.airscale.io/v1/email-bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"webhook_url": "https://webhook.example.org/email-results",
"inputs": [
{
"custom_id": "contact-001",
"linkedin_profile_url": "https://www.linkedin.com/in/example-person-000000"
},
{
"custom_id": 2002,
"first_name": "Sample",
"last_name": "Contact",
"company_name": "Example Company"
}
]
}
'const url = 'https://api.airscale.io/v1/email-bulk';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
webhook_url: 'https://webhook.example.org/email-results',
inputs: [
{
custom_id: 'contact-001',
linkedin_profile_url: 'https://www.linkedin.com/in/example-person-000000'
},
{
custom_id: 2002,
first_name: 'Sample',
last_name: 'Contact',
company_name: 'Example Company'
}
]
})
};
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/email-bulk"
payload = {
"webhook_url": "https://webhook.example.org/email-results",
"inputs": [
{
"custom_id": "contact-001",
"linkedin_profile_url": "https://www.linkedin.com/in/example-person-000000"
},
{
"custom_id": 2002,
"first_name": "Sample",
"last_name": "Contact",
"company_name": "Example Company"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"status": "accepted",
"count": 2
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Submit up to 100 people and receive one asynchronous professional-email result per item at your webhook.
The acceptance response only confirms that the batch was queued. Processing continues after that response, and each item is delivered separately to
Add credits before submitting skipped items again.
The limit is 3,000 input items per minute per workspace. Each item with
status: "success" costs 2 credits; misses and timeouts are not charged.webhook_url.
Webhook callbacks
Every callback echoescustom_id. When the submitted value is omitted or null, Airscale uses that item’s zero-based input index.
- A found email has
status: "success", the resolvedemail,email_status: "valid", and the publicproviderandverifierlabels. - An item skipped after the remaining batch balance drops below 2 credits has
status: "error",error: "insufficient_credits", andemail: null. - A miss or exhausted lookup has
status: "not_found"orstatus: "timeout", respectively, withemail: null.
Return a
2xx response promptly for every callback. Automatic webhook retries are not part of this operation’s contract, so persist callbacks and use custom_id to reconcile expected and received results.Next step
Use Email finder for a synchronous single-person lookup, or review Rate limits before batching requests.Authorizations
Use an Airscale workspace API key. Never expose the key in client-side code.
Body
application/json
Provide a webhook URL and between 1 and 100 inputs. Each input may include an optional custom_id and must identify a person by profile or by complete name and company information.