How do I manage events with the Amelia API
Use the events endpoints to create and update events, configure periods and recurring rules, manage staff and tickets, update bookings and status, check delete impact, and delete events.
You can review all endpoints and examples in the Amelia API Postman collection.
How do I add an event with the Amelia API?
Use this endpoint to create a new event, define one or more event periods, and configure capacity and pricing. You can also configure booking open and close rules, staff, tags, tickets, and recurring settings.
- Method: POST
- Path:
/events
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Required properties
- name (
string); event name - periods (
array); period objects containingperiodStartandperiodEnd - maxCapacity (
integer); maximum number of attendees - price (
double); event price
Other properties
- show (
boolean); show on front end, defaultfalse - parentId (
integer); parent event ID for recurring events - bookingOpens (
string); booking open date and time inYYYY-MM-DD HH:mm:ssformat - bookingCloses (
string); booking close date and time inYYYY-MM-DD HH:mm:ssformat - bookingOpensRec (
string); recurring booking open rule,sameorcalculate - bookingClosesRec (
string); recurring booking close rule,sameorcalculate - recurring (
object); recurring configuration object - bringingAnyone (
boolean); allow extra people, defaultfalse - bookMultipleTimes (
boolean); allow multiple bookings per customer, defaultfalse - maxExtraPeople (
integer); max extra people per booking - tags (
array); tag objects withname - providers (
array); staff objects containing employee IDs - description (
string); event description - gallery (
array); gallery image paths - color (
string); HEX color - locationId (
integer); location ID - customLocation (
string); custom location text - settings (
string); JSON encoded event settings, default uses general settings - translations (
string); JSON encoded translations for name and description - depositPayment (
string);disabled,fixed,percentage - deposit (
integer); deposit amount - depositPerPerson (
boolean); multiply deposit by people, defaultfalse - fullPayment (
boolean); allow full payment option, defaultfalse - customPricing (
boolean); enable custom pricing tickets, defaultfalse - organizerId (
integer); organizer employee ID - closeAfterMin (
integer); close when minimum is reached - closeAfterMinBookings (
boolean); apply minimum to bookings or people per booking - customTickets (
array); ticket objects - maxCustomCapacity (
integer); combined maximum capacity across ticket types
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"parentId": null,
"name": "Wellness workshop",
"periods": [
{
"periodStart": "2026-03-10 14:00:00",
"periodEnd": "2026-03-10 22:30:00"
}
],
"bookingOpens": "2026-03-01 09:00:00",
"bookingCloses": "2026-03-10 12:00:00",
"bookingOpensRec": "same",
"bookingClosesRec": "same",
"recurring": {
"monthlyRepeat": "each",
"monthDate": null,
"monthlyOnRepeat": null,
"monthlyOnDay": null,
"cycleInterval": 1,
"cycle": "weekly",
"order": null,
"until": "2026-04-21 00:00:00"
},
"bringingAnyone": true,
"bookMultipleTimes": true,
"maxCapacity": 100,
"maxExtraPeople": null,
"price": 100,
"tags": [
{
"name": "workshop"
}
],
"providers": [
{ "id": 1 },
{ "id": 3 }
],
"description": "A guided workshop with practical exercises and a Q and A session.",
"gallery": [],
"color": "#1788FB",
"show": true,
"locationId": 2,
"customLocation": null,
"applyGlobally": true,
"settings": "{\"payments\":{\"paymentLinks\":{\"enabled\":true,\"changeBookingStatus\":false,\"redirectUrl\":null},\"onSite\":true,\"payPal\":{\"enabled\":true},\"stripe\":{\"enabled\":true},\"mollie\":{\"enabled\":false},\"razorpay\":{\"enabled\":false}},\"general\":{\"minimumTimeRequirementPriorToCanceling\":null,\"redirectUrlAfterAppointment\":null},\"zoom\":{\"enabled\":true},\"lessonSpace\":{\"enabled\":false}}",
"translations": null,
"deposit": 10,
"depositPayment": "fixed",
"depositPerPerson": true,
"fullPayment": true,
"customPricing": true,
"organizerId": 1,
"closeAfterMin": null,
"closeAfterMinBookings": false,
"customTickets": [
{
"name": "Standard ticket",
"price": 10,
"spots": 10,
"enabled": true,
"dateRanges": "[]"
},
{
"name": "VIP ticket",
"price": 20,
"spots": 20,
"enabled": true,
"dateRanges": "[]"
}
],
"maxCustomCapacity": null
}'
Response
{
"message": "Successfully added new event.",
"data": {
"events": [
{
"id": 122,
"name": "Wellness workshop",
"description": "A guided workshop with practical exercises and a Q and A session.",
"color": "#1788FB",
"price": 100,
"deposit": 10,
"depositPayment": "fixed",
"depositPerPerson": true,
"periods": [
{
"id": 125,
"eventId": 122,
"periodStart": "2026-03-10 14:00:00",
"periodEnd": "2026-03-10 22:30:00"
}
],
"bookingOpens": "2026-03-01 09:00:00",
"bookingCloses": "2026-03-10 12:00:00",
"bookingOpensRec": "same",
"bookingClosesRec": "same",
"status": "approved",
"recurring": {
"cycle": "weekly",
"order": 1,
"until": "2026-04-21 00:00:00",
"cycleInterval": 1,
"monthlyRepeat": "each",
"monthDate": null,
"monthlyOnRepeat": null,
"monthlyOnDay": null
},
"maxCapacity": 100,
"show": true,
"tags": [
{
"id": 45,
"eventId": 122,
"name": "workshop"
}
],
"customTickets": [
{
"id": 52,
"eventId": 122,
"name": "Standard ticket",
"enabled": true,
"price": 10,
"spots": 10,
"dateRanges": "[]",
"sold": 0
},
{
"id": 53,
"eventId": 122,
"name": "VIP ticket",
"enabled": true,
"price": 20,
"spots": 20,
"dateRanges": "[]",
"sold": 0
}
],
"providers": [
{
"id": 1,
"firstName": "Milica",
"lastName": "Nikolić",
"email": "milica.nikolic@example.test",
"type": "provider"
},
{
"id": 3,
"firstName": "Ana",
"lastName": "Jovanović",
"email": "ana.jovanovic@example.test",
"type": "provider"
}
],
"locationId": 2,
"organizerId": 1,
"type": "event",
"bringingAnyone": true,
"bookMultipleTimes": true,
"customPricing": true
}
]
}
}
How do I update an event with the Amelia API?
Use this endpoint to update an event and optionally apply changes to following recurring events by using applyGlobally.
- Method: POST
- Path:
/events/{{event_id}}
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Optional properties
- name (
string); event name - periods (
array); period objects withperiodStartandperiodEnd - maxCapacity (
integer); max capacity - price (
double); price - show (
boolean); show on front end - parentId (
integer); parent event ID - bookingOpens (
string); booking open inYYYY-MM-DD HH:mm:ssformat - bookingCloses (
string); booking close inYYYY-MM-DD HH:mm:ssformat - bookingOpensRec (
string);sameorcalculate - bookingClosesRec (
string);sameorcalculate - recurring (
object); recurring configuration - bringingAnyone (
boolean); allow extra people - bookMultipleTimes (
boolean); allow multiple bookings per customer - maxExtraPeople (
integer); max extra people - tags (
array); tag objects - providers (
array); staff objects, missing IDs will be removed - description (
string); description - gallery (
array); gallery paths - color (
string); HEX color - locationId (
integer); location ID - customLocation (
string); custom location text - settings (
string); JSON encoded settings - translations (
string); JSON encoded translations - depositPayment (
string); deposit type - deposit (
integer); deposit amount - depositPerPerson (
boolean); multiply deposit by persons - fullPayment (
boolean); allow full payment option - customPricing (
boolean); enable custom tickets - organizerId (
integer); organizer employee ID - closeAfterMin (
integer); close after minimum - closeAfterMinBookings (
boolean); apply minimum to bookings or people - customTickets (
array); ticket objects - maxCustomCapacity (
integer); combined ticket capacity - applyGlobally (
boolean); apply changes to following recurring events, defaultfalse
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/122' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"name": "Wellness workshop updated",
"applyGlobally": true,
"customTickets": []
}'
Response
{
"message": "Successfully updated event.",
"data": {
"events": {
"cloned": [
{
"id": 122,
"name": "Wellness workshop updated",
"status": "approved"
}
],
"edited": [],
"added": [],
"deleted": [],
"rescheduled": []
}
}
}
How do I update an event status with the Amelia API?
Use this endpoint to approve or reject an event and optionally apply the status change to following recurring events.
- Method: POST
- Path:
/events/status/{{event_id}}
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Required properties
- status (
string); possible values:approved,rejected - applyGlobally (
boolean); apply to following recurring events
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/status/122' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"applyGlobally": false,
"status": "rejected"
}'
Response
{
"message": "Successfully updated event status",
"data": {
"status": "rejected",
"message": "Booking status has been changed to rejected"
}
}
How do I update an event booking with the Amelia API?
Use this endpoint to update an existing event booking, including custom fields and ticket data.
- Method: POST
- Path:
/events/bookings/{{event_booking_id}}
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Required properties
- bookings (
array); booking objects to update
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/bookings/1145' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"bookings": [
{
"customFields": {
"7": { "label": "Address", "value": "", "type": "address" },
"13": { "label": "file", "value": "", "type": "file" }
},
"persons": 1,
"customerId": 10,
"ticketsData": [
{ "id": 62, "eventTicketId": 39, "customerBookingId": 1145, "persons": 2, "price": 20 },
{ "id": 63, "eventTicketId": 38, "customerBookingId": 1145, "persons": 2, "price": 10 }
]
}
],
"couponCode": null,
"createPaymentLinks": false
}'
Response
{
"message": "Successfully updated booking",
"data": {
"type": "event",
"paymentId": 1153,
"bookingStatusChanged": true
}
}
How do I retrieve an event with the Amelia API?
Use this endpoint to retrieve details for a single event.
- Method: GET
- Path:
/events/{{event_id}}
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/122' \
--header 'Amelia: YOUR_API_KEY'
Response
{
"message": "Successfully retrieved event",
"data": {
"event": {
"id": 122,
"name": "Wellness workshop updated",
"status": "approved"
}
}
}
How do I retrieve events with the Amelia API?
Use this endpoint to retrieve events. You can filter by search term, date range, page, and customer ID.
- Method: GET
- Path:
/events
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Optional query parameters
- search (
string); search term - page (
integer); page number - dates (
array); date range usingdates[0]for start anddates[1]for end inYYYY-MM-DDformat - customerId (
integer); customer ID that booked the events
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events&search=workshop&dates[0]=2026-05-01&dates[1]=2026-05-31&page=1' \
--header 'Amelia: YOUR_API_KEY'
Response
{
"message": "Successfully retrieved events",
"data": {
"events": [
{
"id": 16,
"name": "Spring wellness meetup",
"price": 20,
"status": "approved",
"maxCapacity": 70,
"show": true
}
],
"count": 1
}
}
How do I check for calendar conflicts when creating or updating events with the Amelia API?
Use this endpoint to check external calendars for conflicts for selected employees and periods. This helps detect overlaps in connected Google Calendar or Outlook Calendar events.
- Method: POST
- Path:
/events/calendar
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Required properties
- providers (
array); employees to check - periods (
array); periods to check
Other properties
- eventIds (
array); Amelia event IDs to exclude from calendar search - recurring (
object); recurring data for conflict checks
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/calendar' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"providers": [
{ "id": 1 }
],
"periods": [
{
"id": null,
"eventId": null,
"periodStart": "2026-03-05 12:30:00",
"periodEnd": "2026-03-05 23:30:00"
}
],
"eventIds": [82, 81],
"recurring": {
"cycle": null,
"order": null,
"until": null,
"cycleInterval": null
}
}'
Response
{
"message": "Conflict with the event in employee's google/outlook calendar",
"data": {
"calendarConflict": true
}
}
How do I check whether an event can be deleted with the Amelia API?
Use this endpoint to check whether an event can be deleted. If deletion is not allowed, the response message explains why.
- Method: GET
- Path:
/events/effect/{{event_id}}
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/effect/122' \
--header 'Amelia: YOUR_API_KEY'
Response
{
"message": "Successfully retrieved message.",
"data": {
"valid": false,
"message": "Please cancel the event first before deleting it."
}
}
How do I delete an event booking with the Amelia API?
Use this endpoint to delete a specific event booking.
- Method: POST
- Path:
/events/bookings/delete/{{event_booking_id}}
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Example
Request
curl --location --request POST 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/bookings/delete/1145' \
--header 'Amelia: YOUR_API_KEY'
Response
{
"message": "Successfully deleted event booking",
"data": {
"type": "event",
"appointmentStatusChanged": false
}
}
How do I delete an event with the Amelia API?
Use this endpoint to delete an event. For recurring events, you can choose whether to delete following events as well.
- Method: POST
- Path:
/events/delete/{{event_id}}
Base path
{{your_site_URL}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
Authorization
- All Amelia endpoints use API key authorization via a request header named Amelia.
Other properties
- applyGlobally (
boolean); delete following recurring events as well
Example
Request
curl --location 'https://example-site.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/delete/122' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"applyGlobally": false
}'
Response
{
"message": "Successfully deleted event",
"data": {
"event": {
"id": 122,
"name": "Wellness workshop updated",
"status": "approved"
}
}
}