Clone
1
API-Reference
Jonathan Miller edited this page 2026-05-10 19:15:01 +00:00

API Reference

Complete endpoint documentation for MokoDPCalendarAPI v03.01.00.

Base path: /api/index.php/v1

All requests require the Authorization: Bearer <token> header. Responses use JSON:API format (application/vnd.api+json) unless otherwise noted.


Events

GET /dpcalendar/events

List events with optional filtering, sorting, and pagination.

Query Parameters:

Parameter Type Default Description
page[limit] integer 20 Results per page (max 100)
page[offset] integer 0 Number of results to skip
sort string Sort field. Prefix with - for descending
filter[search] string Search by title or description
filter[start_date] string Events starting on or after this date (ISO 8601)
filter[end_date] string Events ending on or before this date (ISO 8601)
filter[catid] integer Filter by calendar/category ID
filter[featured] integer 1 = featured only, 0 = non-featured only
filter[access] integer Filter by Joomla access level
filter[language] string Filter by language tag (e.g., en-GB)
fields[events] string Comma-separated list of fields to return
expand string Include related data. Supported: locations

Supported sort fields: id, title, start_date, end_date, catid, created

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/events?filter[start_date]=2026-01-01&sort=-start_date&page[limit]=25"

Response: 200 OK with JSON:API collection


GET /dpcalendar/events/{id}

Get a single event by ID.

Path Parameters:

Parameter Type Description
id integer Event ID

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/events/42"

Response: 200 OK with JSON:API resource


POST /dpcalendar/events

Create a new event.

Request Body (JSON):

Field Type Required Description
title string Yes Event title
catid integer Yes Calendar/category ID
start_date string Yes Start date/time (YYYY-MM-DD HH:MM:SS)
end_date string Yes End date/time (YYYY-MM-DD HH:MM:SS)
description string No HTML description
all_day integer No 1 = all-day event
rrule string No RRULE recurrence string
location_ids array No Array of location IDs
color string No Hex color code

Example:

curl -s -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "title": "Monthly Meetup",
    "catid": 8,
    "start_date": "2026-06-15 18:00:00",
    "end_date": "2026-06-15 20:00:00",
    "description": "<p>Join us for the monthly meetup!</p>"
  }' \
  "https://example.com/api/index.php/v1/dpcalendar/events"

Response: 200 OK with created event


POST /dpcalendar/events/bulk

Create multiple events in a single request.

Request Body: JSON array of event objects (same fields as single create).

Example:

curl -s -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.api+json" \
  -d '[
    {"title": "Event A", "catid": 8, "start_date": "2026-07-01 10:00:00", "end_date": "2026-07-01 12:00:00"},
    {"title": "Event B", "catid": 8, "start_date": "2026-07-02 10:00:00", "end_date": "2026-07-02 12:00:00"}
  ]' \
  "https://example.com/api/index.php/v1/dpcalendar/events/bulk"

Response: 200 OK with array of created events


PATCH /dpcalendar/events/{id}

Update an existing event. Send only the fields you want to change.

Example:

curl -s -X PATCH \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.api+json" \
  -d '{"title": "Updated Title", "description": "<p>New description</p>"}' \
  "https://example.com/api/index.php/v1/dpcalendar/events/42"

Response: 200 OK with updated event


DELETE /dpcalendar/events/{id}

Trash an event (soft delete).

Example:

curl -s -X DELETE \
  -H "Authorization: Bearer YOUR_TOKEN" \
  "https://example.com/api/index.php/v1/dpcalendar/events/42"

Response: 204 No Content


GET /dpcalendar/events/{id}/ical

Export a single event as iCal format.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: text/calendar" \
  "https://example.com/api/index.php/v1/dpcalendar/events/42/ical"

Response: 200 OK with Content-Type: text/calendar


GET /dpcalendar/events/{id}/occurrences

List all occurrences of a recurring event. Expands the RRULE into individual dates, respecting EXDATE exclusions.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/events/42/occurrences"

Response: 200 OK with JSON:API collection of occurrence objects


Calendars

GET /dpcalendar/calendars

List all calendars.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/calendars"

GET /dpcalendar/calendars/{id}

Get a single calendar by ID.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/calendars/8"

GET /dpcalendar/calendars/{id}/ical

Export an entire calendar as iCal format.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: text/calendar" \
  "https://example.com/api/index.php/v1/dpcalendar/calendars/8/ical"

Response: 200 OK with Content-Type: text/calendar


Locations

GET /dpcalendar/locations

List all locations.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/locations"

GET /dpcalendar/locations/{id}

Get a single location by ID.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/locations/5"

Bookings

GET /dpcalendar/bookings

List all bookings.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/bookings"

GET /dpcalendar/bookings/{id}

Get a single booking by ID. Includes associated tickets in the response.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/bookings/12"

Tickets

GET /dpcalendar/tickets

List all tickets.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/tickets"

GET /dpcalendar/tickets/{id}

Get a single ticket by ID.

Example:

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/tickets/7"

Caching

The API supports ETag-based caching. Responses include an ETag header. Send the ETag value in subsequent requests via If-None-Match to receive a 304 Not Modified response when data has not changed.

# Note the ETag from response headers
curl -sI \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  "https://example.com/api/index.php/v1/dpcalendar/events"

# Conditional request
curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  -H 'If-None-Match: "etag-value"' \
  "https://example.com/api/index.php/v1/dpcalendar/events"

Error Responses

Status Description
400 Bad request (invalid parameters)
401 Unauthorized (missing or invalid token)
403 Forbidden (insufficient permissions)
404 Resource not found
304 Not Modified (ETag cache hit)

MokoStandards


Repo: MokoDPCalendarAPI . MokoStandards

Revision Date Author Description
1.0 2026-05-10 Moko Consulting Initial API reference