Redeliver an event's webhook
curl --request POST \
--url https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events/{event_id}/webhook/redeliver \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'const url = 'https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events/{event_id}/webhook/redeliver';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
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/{event_id}/webhook/redeliver"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"event_id": "33333333-3333-4333-8333-333333333333",
"webhook": {
"status": "pending",
"attempt_count": 0,
"last_attempt_at": null,
"sent_at": null,
"error_code": null
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}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.
POST
/
v1
/
job-change-monitors
/
{monitor_id}
/
events
/
{event_id}
/
webhook
/
redeliver
Redeliver an event's webhook
curl --request POST \
--url https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events/{event_id}/webhook/redeliver \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'const url = 'https://api.airscale.io/v1/job-change-monitors/{monitor_id}/events/{event_id}/webhook/redeliver';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
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/{event_id}/webhook/redeliver"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"event_id": "33333333-3333-4333-8333-333333333333",
"webhook": {
"status": "pending",
"attempt_count": 0,
"last_attempt_at": null,
"sent_at": null,
"error_code": null
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": {
"code": "<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.
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.
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.422 webhook_not_configured. Track the outcome through the webhook receipt in List job-change events.
Next step
Use Update a job-change monitor to change the webhook URL or rotate its signing secret before redelivering.Authorizations
Use an Airscale workspace API key. Never expose the key in client-side code.
Body
application/json
Optional. Send no body or an empty JSON object ({}).
The body is of type object.