API reference
Automation
Subscriptions made by Power Automate, Zapier and other platforms that subscribe through the API.
List subscriptions
GET/hooks
Lists the workspace's automation subscriptions, newest first. Their callback addresses are never shown.
- Scopes
- webhooks:read
Answers
- 200 The subscriptions. HookList
Fields
dataHook[]The subscriptions.
Show the fields
idstring (uuid)The subscription's id.
eventstringThe event type it receives.
eventIdstring (uuid)The one event it listens to; every event when empty.
clientstringThe platform that made it: powerautomate, zapier or make.
activebooleanWhether it is sent anything.
createdUtcstring (date-time)When it was made, in UTC.
- 401 invalidKey, keyExpired, keyRevoked.
- 403 missingScope.
- 429 rateLimited.
Refusals
Request
curl "https://attendbeacon.com/api/v1/hooks" \
-H "Authorization: Bearer $ATTENDBEACON_KEY"const response = await fetch("https://attendbeacon.com/api/v1/hooks", {
headers: {
Authorization: `Bearer ${process.env.ATTENDBEACON_KEY}`
}
});
if (!response.ok) throw new Error((await response.json()).detail);
const data = await response.json();using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ATTENDBEACON_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Get, "https://attendbeacon.com/api/v1/hooks");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();import os
import requests
response = requests.get(
"https://attendbeacon.com/api/v1/hooks",
headers={
"Authorization": f"Bearer {os.environ['ATTENDBEACON_KEY']}"
}
)
response.raise_for_status()
data = response.json()$headers = @{
Authorization = "Bearer $env:ATTENDBEACON_KEY"
}
$data = Invoke-RestMethod -Method Get -Uri "https://attendbeacon.com/api/v1/hooks" -Headers $headers401 invalidKey, keyExpired, keyRevoked.
{
"type": "https://attendbeacon.com/developers/errors#invalidKey",
"title": "No working API key",
"status": 401,
"detail": "No key was sent, or it is not one this platform made. Send it as Authorization: Bearer abk_... or in X-Api-Key.",
"instance": "/api/v1/hooks",
"code": "invalidKey",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",
"error": "No key was sent, or it is not one this platform made. Send it as Authorization: Bearer abk_... or in X-Api-Key."
}Subscribe to an event type Changes data
POST/hooks
Subscribes a callback address to one event type, for every event of the workspace or one of them. The answer's Location header is the address to DELETE to unsubscribe. Each delivery is a plain JSON body: id, type, timestamp and what happened. A callback that answers 410 Gone is unsubscribed, and every subscription goes when its key is revoked or expires. Needs webhooks:write (keys made before 15 October 2026: webhooks:read) and the scopes of what the type delivers.
- Scopes
- webhooks:write
- Send an Idempotency-Key to make retries safe. →
Parameters
header
Idempotency-KeystringA key of your own, such as a UUID, so a retry after a lost connection is answered with the first answer instead of doing it twice. Kept 24 hours.
Body NewHookWithType
The callback, the event type and optionally the event.
urlstringrequiredThe https address to call with each event.
eventstringrequiredThe event type to receive.
One of:
attendee.registered,attendee.updated,attendee.cancelled,attendee.erased,order.paid,checkin.created,feedback.given,lead.captured,certificate.issued,content.published,stay.requested,stay.assigned,stay.changed,stay.cancelled,member.joined,member.left,travel.changed,claim.submitted,claim.approved,claim.paid,shift.signed_up,shift.droppedeventIdstring (uuid)Only this event of the workspace; every event when absent.
Answers
- 201 Subscribed. Location names the subscription. Hook
Fields
idstring (uuid)The subscription's id.
eventstringThe event type it receives.
eventIdstring (uuid)The one event it listens to; every event when empty.
clientstringThe platform that made it: powerautomate, zapier or make.
activebooleanWhether it is sent anything.
createdUtcstring (date-time)When it was made, in UTC.
- 400 invalidRequest, tooManyHooks, invalidIdempotencyKey.
- 401 invalidKey, keyExpired, keyRevoked.
- 403 missingScope.
- 404 eventNotFound.
- 409 idempotencyKeyInUse.
- 422 idempotencyKeyReused.
- 429 rateLimited.
Refusals
invalidKey keyExpired keyRevoked rateLimited missingScope eventNotFound invalidRequest tooManyHooks idempotencyKeyInUse idempotencyKeyReused invalidIdempotencyKey
Request
curl -X POST "https://attendbeacon.com/api/v1/hooks" \
-H "Authorization: Bearer $ATTENDBEACON_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'const response = await fetch("https://attendbeacon.com/api/v1/hooks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ATTENDBEACON_KEY}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json"
},
body: JSON.stringify({})
});
if (!response.ok) throw new Error((await response.json()).detail);
const data = await response.json();using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ATTENDBEACON_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Post, "https://attendbeacon.com/api/v1/hooks");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
request.Content = new StringContent("""
{}
""", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();import os, uuid
import requests
response = requests.post(
"https://attendbeacon.com/api/v1/hooks",
headers={
"Authorization": f"Bearer {os.environ['ATTENDBEACON_KEY']}",
"Idempotency-Key": str(uuid.uuid4())
},
json={}
)
response.raise_for_status()
data = response.json()$headers = @{
Authorization = "Bearer $env:ATTENDBEACON_KEY"
"Idempotency-Key" = [guid]::NewGuid().ToString()
}
$body = @'
{}
'@
$data = Invoke-RestMethod -Method Post -Uri "https://attendbeacon.com/api/v1/hooks" -Headers $headers -ContentType "application/json" -Body $body400 invalidRequest, tooManyHooks, invalidIdempotencyKey.
{
"type": "https://attendbeacon.com/developers/errors#invalidRequest",
"title": "The request is not valid",
"status": 400,
"detail": "A field or parameter is missing or wrong; errors names each, with what is wrong.",
"instance": "/api/v1/hooks",
"code": "invalidRequest",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",
"errors": [
{
"field": "startDate",
"message": "startDate is a date such as 2026-11-12."
}
],
"error": "A field or parameter is missing or wrong; errors names each, with what is wrong."
}Subscribe to one event type Changes data
POST/hooks/{eventType}
Subscribes a callback address to the event type in the path. The same as posting to the hooks list with the type in the body; the AttendBeacon connector uses one path per trigger.
- Scopes
- webhooks:write
- Send an Idempotency-Key to make retries safe. →
Parameters
path
eventTypestringrequiredThe event type to receive.
One of:
attendee.registered,attendee.updated,attendee.cancelled,attendee.erased,order.paid,checkin.created,feedback.given,lead.captured,certificate.issued,content.published,member.joined,member.left,stay.requested,stay.assigned,stay.changed,stay.cancelled,shift.signed_up,shift.dropped,travel.changed,claim.submitted,claim.approved,claim.paid
header
Idempotency-KeystringA key of your own, such as a UUID, so a retry after a lost connection is answered with the first answer instead of doing it twice. Kept 24 hours.
Body NewHook
Where to send what happens, and for which event.
urlstringrequiredThe https address to call with each event.
eventIdstring (uuid)Only this event of the workspace; every event when empty.
Answers
- 201 Subscribed. Location names the subscription. Hook
Fields
idstring (uuid)The subscription's id.
eventstringThe event type it receives.
eventIdstring (uuid)The one event it listens to; every event when empty.
clientstringThe platform that made it: powerautomate, zapier or make.
activebooleanWhether it is sent anything.
createdUtcstring (date-time)When it was made, in UTC.
- 400 invalidRequest, tooManyHooks, invalidIdempotencyKey.
- 401 invalidKey, keyExpired, keyRevoked.
- 403 missingScope.
- 404 eventNotFound.
- 409 idempotencyKeyInUse.
- 422 idempotencyKeyReused.
- 429 rateLimited.
Refusals
invalidKey keyExpired keyRevoked rateLimited missingScope eventNotFound invalidRequest tooManyHooks idempotencyKeyInUse idempotencyKeyReused invalidIdempotencyKey
Request
curl -X POST "https://attendbeacon.com/api/v1/hooks/attendee.registered" \
-H "Authorization: Bearer $ATTENDBEACON_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'const response = await fetch("https://attendbeacon.com/api/v1/hooks/attendee.registered", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ATTENDBEACON_KEY}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json"
},
body: JSON.stringify({})
});
if (!response.ok) throw new Error((await response.json()).detail);
const data = await response.json();using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ATTENDBEACON_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Post, "https://attendbeacon.com/api/v1/hooks/attendee.registered");
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
request.Content = new StringContent("""
{}
""", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();import os, uuid
import requests
response = requests.post(
"https://attendbeacon.com/api/v1/hooks/attendee.registered",
headers={
"Authorization": f"Bearer {os.environ['ATTENDBEACON_KEY']}",
"Idempotency-Key": str(uuid.uuid4())
},
json={}
)
response.raise_for_status()
data = response.json()$headers = @{
Authorization = "Bearer $env:ATTENDBEACON_KEY"
"Idempotency-Key" = [guid]::NewGuid().ToString()
}
$body = @'
{}
'@
$data = Invoke-RestMethod -Method Post -Uri "https://attendbeacon.com/api/v1/hooks/attendee.registered" -Headers $headers -ContentType "application/json" -Body $body400 invalidRequest, tooManyHooks, invalidIdempotencyKey.
{
"type": "https://attendbeacon.com/developers/errors#invalidRequest",
"title": "The request is not valid",
"status": 400,
"detail": "A field or parameter is missing or wrong; errors names each, with what is wrong.",
"instance": "/api/v1/hooks/{eventType}",
"code": "invalidRequest",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",
"errors": [
{
"field": "startDate",
"message": "startDate is a date such as 2026-11-12."
}
],
"error": "A field or parameter is missing or wrong; errors names each, with what is wrong."
}Get a subscription
GET/hooks/{hookId}
Gets one automation subscription of the workspace, without its callback address.
- Scopes
- webhooks:read
Parameters
path
hookIdstring (uuid)requiredThe subscription's id, from the Location header of the answer that made it.
Answers
- 200 The subscription. Hook
Fields
idstring (uuid)The subscription's id.
eventstringThe event type it receives.
eventIdstring (uuid)The one event it listens to; every event when empty.
clientstringThe platform that made it: powerautomate, zapier or make.
activebooleanWhether it is sent anything.
createdUtcstring (date-time)When it was made, in UTC.
- 401 invalidKey, keyExpired, keyRevoked.
- 403 missingScope.
- 404 notFound.
- 429 rateLimited.
Refusals
invalidKey keyExpired keyRevoked rateLimited missingScope notFound
Request
curl "https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d" \
-H "Authorization: Bearer $ATTENDBEACON_KEY"const response = await fetch("https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d", {
headers: {
Authorization: `Bearer ${process.env.ATTENDBEACON_KEY}`
}
});
if (!response.ok) throw new Error((await response.json()).detail);
const data = await response.json();using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ATTENDBEACON_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Get, "https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();import os
import requests
response = requests.get(
"https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d",
headers={
"Authorization": f"Bearer {os.environ['ATTENDBEACON_KEY']}"
}
)
response.raise_for_status()
data = response.json()$headers = @{
Authorization = "Bearer $env:ATTENDBEACON_KEY"
}
$data = Invoke-RestMethod -Method Get -Uri "https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d" -Headers $headers401 invalidKey, keyExpired, keyRevoked.
{
"type": "https://attendbeacon.com/developers/errors#invalidKey",
"title": "No working API key",
"status": 401,
"detail": "No key was sent, or it is not one this platform made. Send it as Authorization: Bearer abk_... or in X-Api-Key.",
"instance": "/api/v1/hooks/{hookId}",
"code": "invalidKey",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",
"error": "No key was sent, or it is not one this platform made. Send it as Authorization: Bearer abk_... or in X-Api-Key."
}Unsubscribe Changes data
DELETE/hooks/{hookId}
Removes an automation subscription, so nothing more is sent to its callback. A key removes its own as it may make them; another key's need webhooks:write.
- Scopes
- webhooks:write
Parameters
path
hookIdstring (uuid)requiredThe subscription's id, from the Location header of the answer that made it.
Answers
- 204 Removed.
- 401 invalidKey, keyExpired, keyRevoked.
- 403 missingScope.
- 404 notFound.
- 429 rateLimited.
Refusals
invalidKey keyExpired keyRevoked rateLimited missingScope notFound
Request
curl -X DELETE "https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d" \
-H "Authorization: Bearer $ATTENDBEACON_KEY"const response = await fetch("https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d", {
method: "DELETE",
headers: {
Authorization: `Bearer ${process.env.ATTENDBEACON_KEY}`
}
});
if (!response.ok) throw new Error((await response.json()).detail);using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ATTENDBEACON_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Delete, "https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();import os
import requests
response = requests.delete(
"https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d",
headers={
"Authorization": f"Bearer {os.environ['ATTENDBEACON_KEY']}"
}
)
response.raise_for_status()$headers = @{
Authorization = "Bearer $env:ATTENDBEACON_KEY"
}
Invoke-RestMethod -Method Delete -Uri "https://attendbeacon.com/api/v1/hooks/5a7c9e1b-3d5f-4a6b-8c9d-0e1f2a3b4c5d" -Headers $headers401 invalidKey, keyExpired, keyRevoked.
{
"type": "https://attendbeacon.com/developers/errors#invalidKey",
"title": "No working API key",
"status": 401,
"detail": "No key was sent, or it is not one this platform made. Send it as Authorization: Bearer abk_... or in X-Api-Key.",
"instance": "/api/v1/hooks/{hookId}",
"code": "invalidKey",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",
"error": "No key was sent, or it is not one this platform made. Send it as Authorization: Bearer abk_... or in X-Api-Key."
}The guides and this site are in your language. The API reference's own descriptions are in English, as the API itself speaks.