Skip to main content

How to Use the AEvent API

Create an API token, explore the built-in interactive reference, and pull your registrants, their attendance, and your webinars from the AEvent REST API.

The AEvent API lets you pull your webinar data programmatically and manage it from your own code, scripts, or no-code tools. This guide shows you how to create a token, find the interactive reference built into your account, and run real calls to read your registrants, their attendance, and your webinars, and to push updates back.

AEvent REST API

A standard HTTPS + JSON API. Authenticate with a token you create in the app, then call it from curl, any language, or a no-code platform.

What you can do

Read registrants and who attended

Read webinars and their attendance stats

Add a registrant to a campaign

Ban or unban an email

Send a webinar chat message


What you need

  • An active AEvent account with access to Settings, Developer (admin).

  • A few minutes, and anything that can make an HTTPS request (curl, Postman, your own code, or a no-code tool).

  • A token you create in Step 1. The token carries your account scope, so every call automatically operates only on your account. There is no separate account or tenant parameter to pass.


Step 1: Create your API token

You authenticate to the API with an HTTP Bearer token. Create one inside the AEvent app:

  1. Go to Settings, Developer and open the Tokens tab.

  2. Click Create Token and give it a name (for example, reporting).

  3. Check the scopes you need. For the read-only examples in this guide, registrants.read and webinars.read are enough. Pick only what you will use.

  4. Click Create, then copy the token immediately. You will not be able to read it again.

Use that token wherever the examples below show <YOUR_API_TOKEN>. Treat it like a password: anyone who has it can read your account data, so store it in a secret manager and never commit it to code or share it in a screenshot.


Step 2: Explore the interactive reference

Your account has a complete, always-current API reference built in. In Settings, Developer, open the Endpoints tab. It lists every endpoint with its parameters and response shape, and it is generated directly from the live API, so it never drifts out of date.

The Try It button on any endpoint runs a real call against your account, right there in the page, already signed in as you. It is the fastest way to see exactly what an endpoint returns before you write any code.

A few things to know that apply to every call:

  • The base URL is https://app-api.aevent.com.

  • Most endpoints live under /api/ (for example, /api/registrants); the one exception in this guide is the registration endpoint, /api-registration.

  • You send your token in an Authorization header: Authorization: Bearer <YOUR_API_TOKEN>.

  • Responses are JSON. List endpoints wrap results in a success field and include a total count.


Step 3: Make your first call

Here is the simplest possible call. It asks for one registrant so you can confirm your token works:

curl -H "Authorization: Bearer <YOUR_API_TOKEN>" \
"https://app-api.aevent.com/api/registrants?count=1"

If your token is valid you get back a JSON object. If it is missing, malformed, or expired, the API returns a 401:

HTTP/1.1 401 Unauthorized
{ "message": "Unauthenticated." }

Seeing this 401 means the token is the problem. Re-check Step 1: a valid token, the Bearer prefix present, and no stray whitespace.


Real examples

These examples are read-only GET calls. You can paste each one into your terminal after swapping in your own token and IDs. Replace the sample campaign ID, webinar ID, and registrant ID with real ones from your account (the calls themselves show you where to find them).


Example 1: List everyone who registered for a campaign

Pass a campaign ID (wtl) to get everyone who registered for it. Each registrant includes an attendance object, so this one call tells you both who signed up and who showed up.

curl -H "Authorization: Bearer <YOUR_API_TOKEN>" \
"https://app-api.aevent.com/api/registrants?wtl=aBcD1234EfGh567&count=20"

{
"success": [
{
"firstName": "Jordan",
"lastName": "Lee",
"email": "[email protected]",
"uuid": "Xk7YpQ2mNvTb9Rs",
"webinarID": "12300012345",
"webinarTimeline": "aBcD1234EfGh567",
"registrationDate": "07/14/2026 - 10:21 AM EDT",
"attendance": { "groups": ["Attendee"], "attendance": 1830 },
"banned": false,
"unsub": 0
}
],
"total": 560
}

Where to get the campaign ID: it is the 15-character wtl in your campaign URL, or the webinarTimeline value returned by the webinars call below.


Understanding attendance

The attendance object on every registrant is how you tell attendees from non-attendees. There is no attended=true filter on the list; instead you read it off each record:

  • groups: the audience the person landed in, for example ["Attendee"], ["Non-Attendee"], or your own custom audiences.

  • attendance: total watch time in seconds. A value of 0 means they did not attend; 1830 means they watched for 30 minutes and 30 seconds.

So to count attendees, pull the registrant list for the campaign and keep the records whose attendance.attendance is greater than 0 (or whose groups contains Attendee).


Example 2: Look up a single registrant

Pass a registrant ID to get that person's full record, including their join and replay links, the integrations they were synced to, and their attendance. The ID is the uuid from the list call above.

curl -H "Authorization: Bearer <YOUR_API_TOKEN>" \
"https://app-api.aevent.com/api/registrants/Xk7YpQ2mNvTb9Rs"

{
"success": {
"firstName": "Jordan",
"email": "[email protected]",
"uuid": "Xk7YpQ2mNvTb9Rs",
"country": "US",
"city": "Austin",
"state": "Texas",
"joinURL": "https://aevent.stream/AbC123/Xk7YpQ2mNvTb9Rs",
"replay": "https://replayevent.link/AbC123/Xk7YpQ2mNvTb9Rs",
"attendance": { "groups": ["Attendee"], "attendance": 1830 },
"added": ["ActiveCampaign", "GoHighLevel"],
"verified": true
}
}


Example 3: See your webinars and their attendance numbers

List your webinars with their registrant and attendance numbers. Use type=past for completed webinars, type=upcoming for scheduled ones. Results are grouped by webinar.

curl -H "Authorization: Bearer <YOUR_API_TOKEN>" \
"https://app-api.aevent.com/api/webinars?type=past&count=10"

{
"success": {
"1360": [
{
"webinarID": "12300012345",
"webinarTimeline": "aBcD1234EfGh567",
"timeStamp": "2026-07-14 16:00:00+00:00",
"webinarType": "automatic",
"registrants": 128,
"attendees": 74,
"attendance": "57.8%"
}
]
},
"total": 12
}

Here registrants and attendees are counts, and attendance is the show-up rate for that webinar.


Example 4: Get one webinar's full details

Pass a webinar ID (the webinarID from the call above) to get that webinar's full record, including its schedule, tracks, and live status fields.

curl -H "Authorization: Bearer <YOUR_API_TOKEN>" \
"https://app-api.aevent.com/api/webinars/12300012345"

{
"success": {
"webinarID": "12300012345",
"webinarTimeline": "aBcD1234EfGh567",
"timeStamp": "2026-07-14 16:00:00+00:00",
"registrants": 128,
"type": "single_session",
"startsIn": 0,
"expiresIn": 0,
"frozen": false
}
}

The full response is large and includes the campaign settings, tracks, and status blocks. Use the Endpoints, Try It button to browse the complete shape for your own webinar.


Example 5: List your recurring and evergreen webinars

List your recurring and evergreen webinars (the underlying schedules, as opposed to individual occurrences).

curl -H "Authorization: Bearer <YOUR_API_TOKEN>" \
"https://app-api.aevent.com/api/recurring?count=20"

{
"success": [
{
"uniqueID": 42,
"webinarTimeline": "aBcD1234EfGh567",
"timelineName": "My Evergreen Webinar",
"integrationID": "aevent",
"interval": "daily"
}
],
"total": 7,
"total_pages": 1
}


Example 6: Filter, sort, and page through registrants

The registrants list supports filtering, sorting, and paging. Combine the query parameters to get exactly the slice you want. For example, the 25 most recent registrations:

curl -H "Authorization: Bearer <YOUR_API_TOKEN>" \
"https://app-api.aevent.com/api/registrants?sort=date&direction=desc&count=25&page=0"

The parameters you can use:

  • page and count: paging. The response total tells you how many records exist, so page until page * count reaches total.

  • sort: one of date, name, email, phone, wtl. direction: asc or desc.

  • wtl: limit to one campaign. startDate and endDate: limit to a date range.

  • filter: banned or unsubscribed to return only those registrants.


Pushing data back

The API is not read-only. You can add registrants, manage your ban list, and send webinar chat messages. Writes change real data, so build them carefully and test each one with the Endpoints, Try It button before you automate it. Every write also validates its input: send a request with a missing field and the API tells you exactly what it needs, for example a call to POST /api/messages with no body returns 422 { "message": "The message field is required." }.

These calls need a write scope on your token (for example registrants.write or webinars.write), so add those scopes in Step 1 if you plan to make changes.


Add a registrant

Register someone for a campaign with POST /api-registration (shown as Register for a webinar in your Endpoints reference). This endpoint authenticates with your account's Registration secret rather than the API token: the secret is displayed on that endpoint in the Endpoints tab and is meant to live on your server. Required fields are secret, wtl (the campaign), and email; you can also send firstName, lastName, phone, webinarid (a specific session), location, ipAddress, and country. AEvent registers the person and returns a success response.

curl -X POST -H "Content-Type: application/json" \
-d '{ "secret": "<YOUR_REGISTRATION_SECRET>", "wtl": "aBcD1234EfGh567", "email": "[email protected]", "firstName": "Jordan", "lastName": "Lee", "phone": "15551234567" }' \
"https://app-api.aevent.com/api-registration"

For a public web registration form, use the hosted /registration page instead of calling this directly. To change someone who already exists, send updated fields to PUT /api/registrants/{uniqueID} using your API token and the numeric uniqueID from the registrants list.


Ban or unban an email

Ban an email so it can no longer register, or lift a ban. Both endpoints accept a single email or an emails array, and return 201. Omitting the email returns 422 { "message": "At least one email is required." }.

curl -X POST -H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "email": "[email protected]" }' \
"https://app-api.aevent.com/api/registrants/ban"

To lift the ban, send the same body to /api/registrants/unban.


Send a webinar chat message

Send a chat message into a live webinar. message and webinarID are required. Add registrantID or email to message one specific person, or inReplyTo to answer a specific message from a registrant. A successful send returns 200. This is the endpoint that powers two-way chat bots and AI agents.

curl -X POST -H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "message": "Welcome! Drop your questions here.", "webinarID": "12300012345" }' \
"https://app-api.aevent.com/api/messages"

The webinar must be live for the message to appear. There is also POST /api/webinar/create (requires timestamp and webinarTimeline) and POST /api/webinar/delete (requires webinarID) for managing webinars; browse the Endpoints tab for their full request shapes.


Tips and troubleshooting

  • 401 / Unauthenticated: the token is missing, malformed, or expired, or lacks the scope the endpoint needs. Re-issue it at Settings, Developer, and re-send it with the Bearer prefix and no trailing whitespace.

  • Base URL: everything runs on https://app-api.aevent.com (most paths under /api/; the registration endpoint is /api-registration). Point your calls there, not at aevent.com (the sales site) or app.aevent.com (the app UI).

  • Finding IDs: get a campaign ID (wtl) from your campaign URL, a webinarID from the webinars call, and a registrant uuid from the registrants call. Do not construct or guess IDs.

  • Paging large lists: list endpoints default to a small page. Use count to raise the page size and page to walk through, using the total field to know when you are done.

  • Write scopes: the push calls need write scopes on your token, for example registrants.write or webinars.write. Add them when you create the token if you plan to make changes.


Did this answer your question?