Skip to main content
View as Markdown

Events API - Events Platform

Events API​

5.1 Create an Event​

POST /api/v1/events/create
Content-Type: application/json
Authorization: Bearer <KS>
{
"name": "Q4 All-Hands Town Hall",
"templateId": "tm2000",
"startDate": "2024-12-15T14:00:00.000Z",
"endDate": "2024-12-15T16:00:00.000Z",
"timezone": "America/New_York",
"description": "Quarterly company update and Q&A"
}
FieldTypeRequiredDescription
namestringYesEvent display name
templateIdstringYesTemplate to use (see section 8)
startDatestringYesISO 8601 start date
endDatestringYesISO 8601 end date
timezonestringYesIANA timezone (e.g., America/New_York, Europe/London)
descriptionstringNoEvent description

Set doorsOpenDate via events/update after the event is created.

Resilience: If events/create returns HTTP 500, the event may still have been created server-side. Verify by calling events/list with a searchTerm matching your event name.

Response example:

{
"id": 56789,
"name": "API Demo Webinar",
"status": "draft",
"templateId": "tm2000",
"startDate": "2024-12-20T15:00:00.000Z",
"endDate": "2024-12-20T16:00:00.000Z",
"timezone": "America/New_York",
"description": "Created via Events Platform API",
"labels": [],
"createdAt": "2024-11-01T10:00:00.000Z",
"updatedAt": "2024-11-01T10:00:00.000Z"
}

The response contains the full event object. Save the id field (integer) for subsequent API calls.

curl -X POST "$KALTURA_EVENTS_API_URL/events/create" \
-H "Authorization: Bearer $KALTURA_KS" \
-H "Content-Type: application/json" \
-d '{
"name": "API Demo Webinar",
"templateId": "tm2000",
"startDate": "2024-12-20T15:00:00.000Z",
"endDate": "2024-12-20T16:00:00.000Z",
"timezone": "America/New_York",
"description": "Created via Events Platform API"
}'

Save the id from the response as EVENT_ID.

5.2 List Events​

POST /api/v1/events/list

All parameters are optional per the API specification. To reliably retrieve all events, include a single-space searchTerm filter which matches all event names.

{
"filter": {
"searchTerm": "town hall",
"labels": ["quarterly"],
"idIn": [12345, 67890]
},
"pager": {
"offset": 0,
"limit": 15
},
"orderBy": "-startDate"
}
Filter FieldTypeDescription
searchTermstringFree-text search by event name
labelsarrayFilter by label tags (matches events containing any listed label)
idInarrayFilter by specific event IDs (integers)
templateIdInarrayFilter by template IDs (e.g., ["tm0000", "tm2000"])
startDateGreaterThanOrEqualstringISO 8601 — events starting on or after this date
startDateLessOrEqualThanstringISO 8601 — events starting on or before this date
endDateGreaterThanOrEqualstringISO 8601 — events ending on or after this date
endDateLessOrEqualThanstringISO 8601 — events ending on or before this date
Pager FieldTypeDefaultDescription
offsetint0Number of results to skip
limitint5Max results to return (max 15)
orderByDescription
+name / -nameAlphabetical by event name
+createdAt / -createdAtBy creation date
+startDate / -startDateBy event start date

Response:

{
"events": [
{
"id": 56789,
"name": "Q4 All-Hands Town Hall",
"startDate": "2024-12-15T14:00:00.000Z",
"endDate": "2024-12-15T16:00:00.000Z",
"timezone": "America/New_York",
"labels": ["quarterly"],
"publicDomain": "https://1234567-5.events.kaltura.com",
"templateId": "tm2000",
"createdAt": "2024-11-01T10:00:00.000Z"
}
],
"totalCount": 1,
"status": "ok"
}

List all events sorted by start date (descending):

curl -X POST "$KALTURA_EVENTS_API_URL/events/list" \
-H "Authorization: Bearer $KALTURA_KS" \
-H "Content-Type: application/json" \
-d '{
"filter": {"searchTerm": " "},
"orderBy": "-startDate",
"pager": {"offset": 0, "limit": 15}
}'

Filter by search term:

curl -X POST "$KALTURA_EVENTS_API_URL/events/list" \
-H "Authorization: Bearer $KALTURA_KS" \
-H "Content-Type: application/json" \
-d '{
"filter": {"searchTerm": "town hall"},
"pager": {"offset": 0, "limit": 10}
}'

5.3 Update an Event​

POST /api/v1/events/update
{
"id": 12345,
"name": "Updated Event Name",
"description": "Updated description",
"startDate": "2024-12-15T15:00:00.000Z",
"endDate": "2024-12-15T17:00:00.000Z",
"doorsOpenDate": "2024-12-15T14:45:00.000Z",
"timezone": "America/New_York",
"labels": ["updated", "quarterly"],
"logoEntryId": "0_abc123",
"bannerEntryId": "0_def456"
}
FieldTypeDescription
idintegerRequired. Event ID to update
namestringUpdated name
descriptionstringUpdated description
startDatestringUpdated start date
endDatestringUpdated end date
doorsOpenDatestringUpdated doors-open time
timezonestringUpdated timezone
labelsarrayUpdated labels/tags
logoEntryIdstringKaltura entry ID for event logo image
bannerEntryIdstringKaltura entry ID for event banner image

Only include the fields you want to change. Fields not included remain unchanged.

Response: The updated event object.

curl -X POST "$KALTURA_EVENTS_API_URL/events/update" \
-H "Authorization: Bearer $KALTURA_KS" \
-H "Content-Type: application/json" \
-d "{
\"id\": $EVENT_ID,
\"name\": \"Updated Event Name\",
\"labels\": [\"updated\", \"quarterly\"]
}"

5.4 Delete an Event​

POST /api/v1/events/delete
{
"id": 12345
}
FieldTypeRequiredDescription
idintegerYesEvent ID to delete

Permanently deletes the event and all its sessions. Returns an empty response on success (HTTP 200).

Category cleanup: The Events Platform auto-creates root categories for each event (e.g., {eventId}EP{hex}, ep_agenda_{eventId}, ep_private_{eventId}). Deleting an event removes the event record and its sessions, but does not cascade-delete these categories. Clean them up separately via category.delete using the category IDs, or list root categories filtered by the event ID pattern.

curl -X POST "$KALTURA_EVENTS_API_URL/events/delete" \
-H "Authorization: Bearer $KALTURA_KS" \
-H "Content-Type: application/json" \
-d "{\"id\": $EVENT_ID}"

5.5 Duplicate an Event​

POST /api/v1/events/duplicate
{
"sourceEventId": 12345
}
FieldTypeRequiredDescription
sourceEventIdintegerYesThe numeric ID of the event to duplicate

Creates a copy of the event with all its configuration. Returns a job object with a jobId.

Response:

{
"jobId": "job_xyz789"
}

5.6 Check Duplication Status​

POST /api/v1/events/duplicateStatus
{
"jobId": "job_xyz789"
}
FieldTypeRequiredDescription
jobIdstringYesJob ID returned by events/duplicate

Response: Contains status (see table below) and, on completion, eventId with the new event's integer ID.

StatusDescription
completedDuplication finished successfully
failedDuplication failed
pausedJob paused
repeatJob being retried
waitJob queued, waiting to start
unknownStatus cannot be determined
# Start duplication
curl -X POST "$KALTURA_EVENTS_API_URL/events/duplicate" \
-H "Authorization: Bearer $KALTURA_KS" \
-H "Content-Type: application/json" \
-d '{"sourceEventId": 12345}'
# Save the "jobId" from the response as JOB_ID

# Poll for completion
curl -X POST "$KALTURA_EVENTS_API_URL/events/duplicateStatus" \
-H "Authorization: Bearer $KALTURA_KS" \
-H "Content-Type: application/json" \
-d "{\"jobId\": \"$JOB_ID\"}"
# Repeat until "status" is "completed" or "failed"