MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Obtain a bearer token via the OIDC login flow and send it as Authorization: Bearer <token>.

Endpoints

GET api/v1

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "ORBIT API v1"
}
 

Request      

GET api/v1

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get all event types.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/enums/event-types" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/enums/event-types"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "status": 200,
    "message": null,
    "data": [
        {
            "value": "conference",
            "label": "Conference"
        },
        {
            "value": "workshop",
            "label": "Workshop"
        },
        {
            "value": "lecture",
            "label": "Lecture"
        },
        {
            "value": "seminar",
            "label": "Seminar"
        },
        {
            "value": "meeting",
            "label": "Meeting"
        },
        {
            "value": "panel",
            "label": "Panel"
        },
        {
            "value": "exhibition",
            "label": "Exhibition"
        },
        {
            "value": "performance",
            "label": "Performance"
        },
        {
            "value": "other",
            "label": "Other"
        }
    ]
}
 

Request      

GET api/v1/enums/event-types

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get all event formats.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/enums/event-formats" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/enums/event-formats"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "status": 200,
    "message": null,
    "data": [
        {
            "value": "in_person",
            "label": "In Person"
        },
        {
            "value": "online",
            "label": "Online"
        },
        {
            "value": "hybrid",
            "label": "Hybrid"
        }
    ]
}
 

Request      

GET api/v1/enums/event-formats

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get all seating types.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/enums/seating-types" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/enums/seating-types"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "status": 200,
    "message": null,
    "data": [
        {
            "value": "theater",
            "label": "Theater"
        },
        {
            "value": "classroom",
            "label": "Classroom"
        },
        {
            "value": "boardroom",
            "label": "Boardroom"
        },
        {
            "value": "u_shape",
            "label": "U Shape"
        },
        {
            "value": "banquet",
            "label": "Banquet"
        },
        {
            "value": "reception",
            "label": "Reception"
        },
        {
            "value": "hollow_square",
            "label": "Hollow Square"
        },
        {
            "value": "cinema",
            "label": "Cinema"
        },
        {
            "value": "podium",
            "label": "Podium"
        },
        {
            "value": "horseshoe",
            "label": "Horseshoe"
        },
        {
            "value": "other",
            "label": "Other"
        }
    ]
}
 

Request      

GET api/v1/enums/seating-types

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Display a listing of institutions.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/institutions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/institutions"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "status": 200,
    "message": null,
    "data": []
}
 

Request      

GET api/v1/institutions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Export all events as iCal format.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/calendar.ics" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/calendar.ics"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 59
vary: Origin
 

{
    "message": "Token required"
}
 

Request      

GET api/v1/calendar.ics

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Export events for a specific room as iCal format.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/calendar/rooms/architecto.ics" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/calendar/rooms/architecto.ics"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 58
vary: Origin
 

{
    "message": "Token required"
}
 

Request      

GET api/v1/calendar/rooms/{room}.ics

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

room   string     

Example: architecto

Get the current authenticated user info.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/me" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/me"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/me

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Log the user out - invalidates the session.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/auth/logout" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/auth/logout"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/auth/logout

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get pending events (for managers).

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/events/pending" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/pending"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/events/pending

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Batch approve multiple events.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/batch-approve" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"event_ids\": [
        \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\"
    ],
    \"comment\": \"g\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/batch-approve"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "event_ids": [
        "6ff8f7f6-1eb3-3525-be4a-3932c805afed"
    ],
    "comment": "g"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/events/batch-approve

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

event_ids   string[]     

Must be a valid UUID.

comment   string  optional    

Must not be greater than 1000 characters. Example: g

Batch reject multiple events.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/batch-reject" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"event_ids\": [
        \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\"
    ],
    \"comment\": \"g\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/batch-reject"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "event_ids": [
        "6ff8f7f6-1eb3-3525-be4a-3932c805afed"
    ],
    "comment": "g"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/events/batch-reject

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

event_ids   string[]     

Must be a valid UUID.

comment   string  optional    

Must not be greater than 1000 characters. Example: g

List notifications for the current user.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/notifications" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/notifications"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/notifications

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get unread notification count for the current user.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/notifications/unread-count" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/notifications/unread-count"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/notifications/unread-count

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Mark a single notification as read.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/notifications/architecto/read" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/notifications/architecto/read"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/notifications/{id}/read

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the notification. Example: architecto

Mark all notifications as read.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/notifications/read-all" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/notifications/read-all"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/notifications/read-all

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Display a listing of events.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/events" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/events

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Store a newly created event.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"title\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"start_at\": \"2026-03-07T17:27:32\",
    \"end_at\": \"2052-03-30\",
    \"is_recurring\": false,
    \"recurrence_rule\": \"n\",
    \"recurrence_ends_at\": \"2052-03-30\",
    \"recurrence_count\": 22,
    \"recurrence_timezone\": \"Antarctica\\/Rothera\",
    \"prep_before_minutes\": 12,
    \"cleanup_after_minutes\": 77,
    \"room_id\": \"a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f\",
    \"notes\": \"architecto\",
    \"website\": \"n\",
    \"contact_email\": \"ashly64@example.com\",
    \"status\": \"approved\",
    \"category\": {
        \"event_type\": \"conference\",
        \"format\": \"hybrid\",
        \"institution_id\": \"21c4122b-d554-3723-966c-6d723ea5293f\",
        \"institution\": \"l\"
    },
    \"roles\": [
        {
            \"user_name\": \"j\",
            \"user_email\": \"lafayette.considine@example.com\",
            \"role\": \"room_user\"
        }
    ],
    \"requirements\": [
        {
            \"kind\": \"pr\",
            \"is_required\": false,
            \"details\": \"architecto\"
        }
    ]
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "title": "b",
    "description": "Eius et animi quos velit et.",
    "start_at": "2026-03-07T17:27:32",
    "end_at": "2052-03-30",
    "is_recurring": false,
    "recurrence_rule": "n",
    "recurrence_ends_at": "2052-03-30",
    "recurrence_count": 22,
    "recurrence_timezone": "Antarctica\/Rothera",
    "prep_before_minutes": 12,
    "cleanup_after_minutes": 77,
    "room_id": "a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f",
    "notes": "architecto",
    "website": "n",
    "contact_email": "ashly64@example.com",
    "status": "approved",
    "category": {
        "event_type": "conference",
        "format": "hybrid",
        "institution_id": "21c4122b-d554-3723-966c-6d723ea5293f",
        "institution": "l"
    },
    "roles": [
        {
            "user_name": "j",
            "user_email": "lafayette.considine@example.com",
            "role": "room_user"
        }
    ],
    "requirements": [
        {
            "kind": "pr",
            "is_required": false,
            "details": "architecto"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/events

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

title   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

start_at   string     

Must be a valid date. Example: 2026-03-07T17:27:32

end_at   string     

Must be a valid date. Must be a date after start_at. Example: 2052-03-30

is_recurring   boolean  optional    

Example: false

recurrence_rule   string  optional    

This field is required when is_recurring is true. Must not be greater than 2000 characters. Example: n

recurrence_ends_at   string  optional    

Must be a valid date. Must be a date after start_at. Example: 2052-03-30

recurrence_count   integer  optional    

Must be at least 1. Must not be greater than 1000. Example: 22

recurrence_timezone   string  optional    

Must be a valid time zone, such as Africa/Accra. Must not be greater than 64 characters. Example: Antarctica/Rothera

prep_before_minutes   integer  optional    

Must be at least 0. Example: 12

cleanup_after_minutes   integer  optional    

Must be at least 0. Example: 77

room_id   string     

Must be a valid UUID. The id of an existing record in the rooms table. Example: a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f

notes   string  optional    

Example: architecto

website   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: n

contact_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: ashly64@example.com

attachments   object  optional    
status   string  optional    

Example: approved

Must be one of:
  • draft
  • pending
  • approved
  • cancelled
category   object  optional    
event_type   string  optional    

Example: conference

Must be one of:
  • conference
  • workshop
  • lecture
  • seminar
  • meeting
  • panel
  • exhibition
  • performance
  • other
format   string  optional    

Example: hybrid

Must be one of:
  • in_person
  • online
  • hybrid
institution_id   string  optional    

Must be a valid UUID. The id of an existing record in the institutions table. Example: 21c4122b-d554-3723-966c-6d723ea5293f

institution   string  optional    

Must not be greater than 255 characters. Example: l

roles   object[]  optional    
user_name   string     

Must not be greater than 255 characters. Example: j

user_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: lafayette.considine@example.com

role   string     

Example: room_user

Must be one of:
  • core_responsible
  • extra_responsible
  • room_responsible
  • room_user
requirements   object[]  optional    
kind   string     

Example: pr

Must be one of:
  • media
  • pr
  • setup
  • catering
is_required   boolean  optional    

Example: false

details   string  optional    

Example: architecto

Display the specified event.

requires authentication

If $id contains '::' it is an occurrence ID in format {series_id}::{occurrence_date}.

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/events/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/events/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the event. Example: architecto

Update the specified event.

requires authentication

Example request:
curl --request PUT \
    "https://orbit.ddev.site/api/v1/events/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"title\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"start_at\": \"2026-03-07T17:27:32\",
    \"end_at\": \"2052-03-30\",
    \"is_recurring\": false,
    \"recurrence_rule\": \"n\",
    \"recurrence_ends_at\": \"2026-03-07T17:27:32\",
    \"recurrence_count\": 7,
    \"recurrence_timezone\": \"America\\/Bahia_Banderas\",
    \"prep_before_minutes\": 77,
    \"cleanup_after_minutes\": 8,
    \"room_id\": \"d6fa562b-acd5-35ff-babb-d11194d3737b\",
    \"notes\": \"architecto\",
    \"website\": \"n\",
    \"contact_email\": \"ashly64@example.com\",
    \"category\": {
        \"event_type\": \"panel\",
        \"format\": \"online\",
        \"institution_id\": \"21c4122b-d554-3723-966c-6d723ea5293f\",
        \"institution\": \"l\"
    }
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "title": "b",
    "description": "Eius et animi quos velit et.",
    "start_at": "2026-03-07T17:27:32",
    "end_at": "2052-03-30",
    "is_recurring": false,
    "recurrence_rule": "n",
    "recurrence_ends_at": "2026-03-07T17:27:32",
    "recurrence_count": 7,
    "recurrence_timezone": "America\/Bahia_Banderas",
    "prep_before_minutes": 77,
    "cleanup_after_minutes": 8,
    "room_id": "d6fa562b-acd5-35ff-babb-d11194d3737b",
    "notes": "architecto",
    "website": "n",
    "contact_email": "ashly64@example.com",
    "category": {
        "event_type": "panel",
        "format": "online",
        "institution_id": "21c4122b-d554-3723-966c-6d723ea5293f",
        "institution": "l"
    }
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/events/{id}

PATCH api/v1/events/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the event. Example: architecto

Body Parameters

title   string  optional    

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

start_at   string  optional    

Must be a valid date. Example: 2026-03-07T17:27:32

end_at   string  optional    

Must be a valid date. Must be a date after start_at. Example: 2052-03-30

is_recurring   boolean  optional    

Example: false

recurrence_rule   string  optional    

Must not be greater than 2000 characters. Example: n

recurrence_ends_at   string  optional    

Must be a valid date. Example: 2026-03-07T17:27:32

recurrence_count   integer  optional    

Must be at least 1. Must not be greater than 1000. Example: 7

recurrence_timezone   string  optional    

Must be a valid time zone, such as Africa/Accra. Must not be greater than 64 characters. Example: America/Bahia_Banderas

prep_before_minutes   integer  optional    

Must be at least 0. Example: 77

cleanup_after_minutes   integer  optional    

Must be at least 0. Example: 8

room_id   string  optional    

Must be a valid UUID. The id of an existing record in the rooms table. Example: d6fa562b-acd5-35ff-babb-d11194d3737b

notes   string  optional    

Example: architecto

website   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: n

contact_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: ashly64@example.com

attachments   object  optional    
category   object  optional    
event_type   string  optional    

Example: panel

Must be one of:
  • conference
  • workshop
  • lecture
  • seminar
  • meeting
  • panel
  • exhibition
  • performance
  • other
format   string  optional    

Example: online

Must be one of:
  • in_person
  • online
  • hybrid
institution_id   string  optional    

Must be a valid UUID. The id of an existing record in the institutions table. Example: 21c4122b-d554-3723-966c-6d723ea5293f

institution   string  optional    

Must not be greater than 255 characters. Example: l

Remove the specified event.

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/events/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/events/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the event. Example: architecto

Display a listing of event templates for the current user.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/event-templates" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/event-templates"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/event-templates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Store a newly created event template.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/event-templates" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"template\": {
        \"title\": \"b\",
        \"description\": \"Eius et animi quos velit et.\",
        \"room_id\": \"21c4122b-d554-3723-966c-6d723ea5293f\",
        \"notes\": \"architecto\",
        \"website\": \"n\",
        \"contact_email\": \"ashly64@example.com\",
        \"prep_before_minutes\": 60,
        \"cleanup_after_minutes\": 42,
        \"category\": {
            \"event_type\": \"performance\",
            \"format\": \"online\",
            \"institution_id\": \"add3503c-ebff-3875-93af-b8c6a695762b\"
        },
        \"roles\": [
            {
                \"user_name\": \"n\",
                \"user_email\": \"cecil42@example.com\",
                \"role\": \"extra_responsible\"
            }
        ],
        \"requirements\": [
            {
                \"kind\": \"catering\",
                \"is_required\": true,
                \"details\": \"architecto\"
            }
        ]
    }
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/event-templates"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "template": {
        "title": "b",
        "description": "Eius et animi quos velit et.",
        "room_id": "21c4122b-d554-3723-966c-6d723ea5293f",
        "notes": "architecto",
        "website": "n",
        "contact_email": "ashly64@example.com",
        "prep_before_minutes": 60,
        "cleanup_after_minutes": 42,
        "category": {
            "event_type": "performance",
            "format": "online",
            "institution_id": "add3503c-ebff-3875-93af-b8c6a695762b"
        },
        "roles": [
            {
                "user_name": "n",
                "user_email": "cecil42@example.com",
                "role": "extra_responsible"
            }
        ],
        "requirements": [
            {
                "kind": "catering",
                "is_required": true,
                "details": "architecto"
            }
        ]
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/event-templates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 120 characters. Example: b

template   object     
title   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

room_id   string     

Must be a valid UUID. The id of an existing record in the rooms table. Example: 21c4122b-d554-3723-966c-6d723ea5293f

notes   string  optional    

Example: architecto

website   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: n

contact_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: ashly64@example.com

prep_before_minutes   integer  optional    

Must be at least 0. Example: 60

cleanup_after_minutes   integer  optional    

Must be at least 0. Example: 42

category   object  optional    
event_type   string  optional    

Example: performance

Must be one of:
  • conference
  • workshop
  • lecture
  • seminar
  • meeting
  • panel
  • exhibition
  • performance
  • other
format   string  optional    

Example: online

Must be one of:
  • in_person
  • online
  • hybrid
institution_id   string  optional    

Must be a valid UUID. The id of an existing record in the institutions table. Example: add3503c-ebff-3875-93af-b8c6a695762b

roles   object[]  optional    
user_name   string     

Must not be greater than 255 characters. Example: n

user_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: cecil42@example.com

role   string     

Example: extra_responsible

Must be one of:
  • core_responsible
  • extra_responsible
  • room_responsible
  • room_user
requirements   object[]  optional    
kind   string     

Example: catering

Must be one of:
  • media
  • pr
  • setup
  • catering
is_required   boolean  optional    

Example: true

details   string  optional    

Example: architecto

Display a single event template for the current user.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/event-templates/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/event-templates/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/event-templates/{event_template}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event_template   string     

Example: architecto

Update an event template.

requires authentication

Example request:
curl --request PUT \
    "https://orbit.ddev.site/api/v1/event-templates/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"template\": {
        \"title\": \"b\",
        \"description\": \"Eius et animi quos velit et.\",
        \"room_id\": \"21c4122b-d554-3723-966c-6d723ea5293f\",
        \"notes\": \"architecto\",
        \"website\": \"n\",
        \"contact_email\": \"ashly64@example.com\",
        \"prep_before_minutes\": 60,
        \"cleanup_after_minutes\": 42,
        \"category\": {
            \"event_type\": \"performance\",
            \"format\": \"in_person\",
            \"institution_id\": \"add3503c-ebff-3875-93af-b8c6a695762b\"
        },
        \"roles\": [
            {
                \"user_name\": \"n\",
                \"user_email\": \"cecil42@example.com\",
                \"role\": \"extra_responsible\"
            }
        ],
        \"requirements\": [
            {
                \"kind\": \"setup\",
                \"is_required\": true,
                \"details\": \"architecto\"
            }
        ]
    }
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/event-templates/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "template": {
        "title": "b",
        "description": "Eius et animi quos velit et.",
        "room_id": "21c4122b-d554-3723-966c-6d723ea5293f",
        "notes": "architecto",
        "website": "n",
        "contact_email": "ashly64@example.com",
        "prep_before_minutes": 60,
        "cleanup_after_minutes": 42,
        "category": {
            "event_type": "performance",
            "format": "in_person",
            "institution_id": "add3503c-ebff-3875-93af-b8c6a695762b"
        },
        "roles": [
            {
                "user_name": "n",
                "user_email": "cecil42@example.com",
                "role": "extra_responsible"
            }
        ],
        "requirements": [
            {
                "kind": "setup",
                "is_required": true,
                "details": "architecto"
            }
        ]
    }
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/event-templates/{event_template}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event_template   string     

Example: architecto

Body Parameters

name   string     

Must not be greater than 120 characters. Example: b

template   object     
title   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

room_id   string     

Must be a valid UUID. The id of an existing record in the rooms table. Example: 21c4122b-d554-3723-966c-6d723ea5293f

notes   string  optional    

Example: architecto

website   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: n

contact_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: ashly64@example.com

prep_before_minutes   integer  optional    

Must be at least 0. Example: 60

cleanup_after_minutes   integer  optional    

Must be at least 0. Example: 42

category   object  optional    
event_type   string  optional    

Example: performance

Must be one of:
  • conference
  • workshop
  • lecture
  • seminar
  • meeting
  • panel
  • exhibition
  • performance
  • other
format   string  optional    

Example: in_person

Must be one of:
  • in_person
  • online
  • hybrid
institution_id   string  optional    

Must be a valid UUID. The id of an existing record in the institutions table. Example: add3503c-ebff-3875-93af-b8c6a695762b

roles   object[]  optional    
user_name   string     

Must not be greater than 255 characters. Example: n

user_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: cecil42@example.com

role   string     

Example: extra_responsible

Must be one of:
  • core_responsible
  • extra_responsible
  • room_responsible
  • room_user
requirements   object[]  optional    
kind   string     

Example: setup

Must be one of:
  • media
  • pr
  • setup
  • catering
is_required   boolean  optional    

Example: true

details   string  optional    

Example: architecto

Delete an event template.

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/event-templates/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/event-templates/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/event-templates/{event_template}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event_template   string     

Example: architecto

Submit event for approval (DRAFT -> PENDING).

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/architecto/submit" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto/submit"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/events/{event}/submit

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: architecto

Approve event (PENDING -> APPROVED).

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/architecto/approve" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comment\": \"b\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto/approve"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comment": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/events/{event}/approve

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: architecto

Body Parameters

comment   string  optional    

Must not be greater than 1000 characters. Example: b

Reject event (PENDING -> DRAFT).

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/architecto/reject" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comment\": \"b\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto/reject"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comment": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/events/{event}/reject

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: architecto

Body Parameters

comment   string  optional    

Must not be greater than 1000 characters. Example: b

Return event in the approval flow.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/architecto/return" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comment\": \"b\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto/return"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comment": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/events/{event}/return

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: architecto

Body Parameters

comment   string     

Must not be greater than 1000 characters. Example: b

Discard event in the approval flow.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/architecto/discard" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comment\": \"b\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto/discard"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comment": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/events/{event}/discard

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: architecto

Body Parameters

comment   string     

Must not be greater than 1000 characters. Example: b

Cancel event (any -> CANCELLED).

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/architecto/cancel" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comment\": \"b\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto/cancel"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comment": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/events/{event}/cancel

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: architecto

Body Parameters

comment   string  optional    

Must not be greater than 1000 characters. Example: b

Get approval history for an event.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/events/architecto/approval-history" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto/approval-history"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/events/{event}/approval-history

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: architecto

Get approval summary steps for an event.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/events/architecto/approval-summary" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/architecto/approval-summary"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/events/{event}/approval-summary

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: architecto

Show the merged series + override data for a single occurrence.

requires authentication

Returns the series event data merged with any non-null override fields. {occurrence} is a URL-encoded ISO 8601 datetime of the occurrence's original start_at.

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/occurrences/|{+" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/occurrences/|{+"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/events/{event_id}/occurrences/{occurrence}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event_id   string     

The ID of the event. Example: 019cbe49-8f1e-7039-9d27-a1875bc85179

occurrence   string     

The occurrence. Example: |{+

Upsert an override for a single occurrence.

requires authentication

Example request:
curl --request PUT \
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/occurrences/|{+" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"is_cancelled\": false,
    \"title\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"start_at\": \"2026-03-07T17:27:32\",
    \"end_at\": \"2052-03-30\",
    \"room_id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
    \"notes\": \"architecto\",
    \"website\": \"n\",
    \"contact_email\": \"ashly64@example.com\",
    \"prep_before_minutes\": 60,
    \"cleanup_after_minutes\": 42
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/occurrences/|{+"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "is_cancelled": false,
    "title": "b",
    "description": "Eius et animi quos velit et.",
    "start_at": "2026-03-07T17:27:32",
    "end_at": "2052-03-30",
    "room_id": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
    "notes": "architecto",
    "website": "n",
    "contact_email": "ashly64@example.com",
    "prep_before_minutes": 60,
    "cleanup_after_minutes": 42
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/events/{event_id}/occurrences/{occurrence}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event_id   string     

The ID of the event. Example: 019cbe49-8f1e-7039-9d27-a1875bc85179

occurrence   string     

The occurrence. Example: |{+

Body Parameters

is_cancelled   boolean  optional    

Example: false

title   string  optional    

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

start_at   string  optional    

Must be a valid date. Example: 2026-03-07T17:27:32

end_at   string  optional    

Must be a valid date. Must be a date after start_at. Example: 2052-03-30

room_id   string  optional    

Must be a valid UUID. The id of an existing record in the rooms table. Example: a4855dc5-0acb-33c3-b921-f4291f719ca0

notes   string  optional    

Example: architecto

website   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: n

contact_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: ashly64@example.com

prep_before_minutes   integer  optional    

Must be at least 0. Example: 60

cleanup_after_minutes   integer  optional    

Must be at least 0. Example: 42

Remove the override for a single occurrence (reverts to series defaults).

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/occurrences/|{+" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/occurrences/|{+"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/events/{event_id}/occurrences/{occurrence}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event_id   string     

The ID of the event. Example: 019cbe49-8f1e-7039-9d27-a1875bc85179

occurrence   string     

The occurrence. Example: |{+

Upload an attachment to an event.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/attachments" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "file=@/tmp/phptskgt1mlun5s6g2Q1Zi" 
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/attachments"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Request      

POST api/v1/events/{event}/attachments

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: 019cbe49-8f1e-7039-9d27-a1875bc85179

Body Parameters

file   file     

Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phptskgt1mlun5s6g2Q1Zi

Delete an event attachment.

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/attachments/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/events/019cbe49-8f1e-7039-9d27-a1875bc85179/attachments/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/events/{event}/attachments/{media}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: 019cbe49-8f1e-7039-9d27-a1875bc85179

media   string     

Example: architecto

Display a listing of rooms.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/rooms" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/rooms

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Store a newly created room.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/rooms" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"capacity\": 16,
    \"equipment\": \"architecto\",
    \"location\": \"n\",
    \"is_active\": true,
    \"venue_id\": \"6b72fe4a-5b40-307c-bc24-f79acf9a1bb9\",
    \"seating_type\": \"other\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Eius et animi quos velit et.",
    "capacity": 16,
    "equipment": "architecto",
    "location": "n",
    "is_active": true,
    "venue_id": "6b72fe4a-5b40-307c-bc24-f79acf9a1bb9",
    "seating_type": "other"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/rooms

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

capacity   integer  optional    

Must be at least 1. Example: 16

equipment   string  optional    

Example: architecto

location   string  optional    

Must not be greater than 255 characters. Example: n

is_active   boolean  optional    

Example: true

venue_id   string  optional    

Must be a valid UUID. The id of an existing record in the venues table. Example: 6b72fe4a-5b40-307c-bc24-f79acf9a1bb9

seating_type   string  optional    

Example: other

Must be one of:
  • theater
  • classroom
  • boardroom
  • u_shape
  • banquet
  • reception
  • hollow_square
  • cinema
  • podium
  • horseshoe
  • other

Display the specified room.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/rooms/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/rooms/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the room. Example: architecto

Update the specified room.

requires authentication

Example request:
curl --request PUT \
    "https://orbit.ddev.site/api/v1/rooms/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"description\": \"Eius et animi quos velit et.\",
    \"capacity\": 16,
    \"equipment\": \"architecto\",
    \"location\": \"n\",
    \"is_active\": true,
    \"venue_id\": \"6b72fe4a-5b40-307c-bc24-f79acf9a1bb9\",
    \"seating_type\": \"reception\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "description": "Eius et animi quos velit et.",
    "capacity": 16,
    "equipment": "architecto",
    "location": "n",
    "is_active": true,
    "venue_id": "6b72fe4a-5b40-307c-bc24-f79acf9a1bb9",
    "seating_type": "reception"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/rooms/{id}

PATCH api/v1/rooms/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the room. Example: architecto

Body Parameters

name   string  optional    
description   string  optional    

Example: Eius et animi quos velit et.

capacity   integer  optional    

Must be at least 1. Example: 16

equipment   string  optional    

Example: architecto

location   string  optional    

Must not be greater than 255 characters. Example: n

is_active   boolean  optional    

Example: true

venue_id   string  optional    

Must be a valid UUID. The id of an existing record in the venues table. Example: 6b72fe4a-5b40-307c-bc24-f79acf9a1bb9

seating_type   string  optional    

Example: reception

Must be one of:
  • theater
  • classroom
  • boardroom
  • u_shape
  • banquet
  • reception
  • hollow_square
  • cinema
  • podium
  • horseshoe
  • other

Remove the specified room (soft delete via is_active).

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/rooms/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/rooms/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the room. Example: architecto

Get availability schedules for a room.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/rooms/architecto/availability" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto/availability"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/rooms/{room}/availability

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

room   string     

The room. Example: architecto

Set availability for a room.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/rooms/architecto/availability" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"type\": \"blocked\",
    \"days\": [
        \"wednesday\"
    ],
    \"start_date\": \"2026-03-07\",
    \"end_date\": \"2052-03-30\",
    \"periods\": [
        {
            \"start\": \"17:27\",
            \"end\": \"2052-03-30\"
        }
    ]
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto/availability"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "type": "blocked",
    "days": [
        "wednesday"
    ],
    "start_date": "2026-03-07",
    "end_date": "2052-03-30",
    "periods": [
        {
            "start": "17:27",
            "end": "2052-03-30"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/rooms/{room}/availability

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

room   string     

The room. Example: architecto

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

type   string     

Example: blocked

Must be one of:
  • availability
  • blocked
days   string[]  optional    
Must be one of:
  • monday
  • tuesday
  • wednesday
  • thursday
  • friday
  • saturday
  • sunday
periods   object[]  optional    

This field is required when type is availability. Must have at least 1 items.

start   string     

Must be a valid date in the format H:i. Example: 17:27

end   string     

Must be a valid date in the format H:i. Must be a date after periods.*.start. Example: 2052-03-30

start_date   string     

Must be a valid date. Must be a valid date in the format Y-m-d. Example: 2026-03-07

end_date   string     

Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date. Example: 2052-03-30

Delete an availability schedule.

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/rooms/architecto/availability/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto/availability/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/rooms/{room}/availability/{schedule}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

room   string     

The room. Example: architecto

schedule   string     

Example: architecto

Get available time slots for a room.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/rooms/architecto/available-slots" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"from\": \"2026-03-07\",
    \"to\": \"2052-03-30\",
    \"duration\": 22
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto/available-slots"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "from": "2026-03-07",
    "to": "2052-03-30",
    "duration": 22
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/rooms/{room}/available-slots

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

room   string     

The room. Example: architecto

Body Parameters

from   string     

Must be a valid date. Must be a valid date in the format Y-m-d. Example: 2026-03-07

to   string     

Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to from. Example: 2052-03-30

duration   integer  optional    

Must be at least 15. Must not be greater than 480. Example: 22

Upload an image to a room.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/rooms/architecto/images" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "file=@/tmp/phpve47f520an410RMMm6e" 
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto/images"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Request      

POST api/v1/rooms/{room}/images

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

room   string     

The room. Example: architecto

Body Parameters

file   file     

Must be a file. Must not be greater than 5120 kilobytes. Example: /tmp/phpve47f520an410RMMm6e

Delete a room image.

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/rooms/architecto/images/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/rooms/architecto/images/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/rooms/{room}/images/{media}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

room   string     

The room. Example: architecto

media   string     

Example: architecto

Display a listing of venues.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/venues" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/venues"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/venues

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Store a newly created venue.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/venues" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"address\": \"architecto\",
    \"is_active\": false
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/venues"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "address": "architecto",
    "is_active": false
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/venues

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

address   string  optional    

Example: architecto

is_active   boolean  optional    

Example: false

Display the specified venue.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/venues/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/venues/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/venues/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the venue. Example: architecto

Update the specified venue.

requires authentication

Example request:
curl --request PUT \
    "https://orbit.ddev.site/api/v1/venues/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address\": \"architecto\",
    \"is_active\": true
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/venues/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "address": "architecto",
    "is_active": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/venues/{id}

PATCH api/v1/venues/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the venue. Example: architecto

Body Parameters

name   string  optional    
address   string  optional    

Example: architecto

is_active   boolean  optional    

Example: true

Remove the specified venue (soft delete via is_active).

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/venues/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/venues/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/venues/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the venue. Example: architecto

Get rooms for a specific venue.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/venues/architecto/rooms" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/venues/architecto/rooms"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/venues/{venue}/rooms

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

venue   string     

The venue. Example: architecto

Store a newly created institution.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/institutions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"code\": \"n\",
    \"description\": \"Eius et animi quos velit et.\",
    \"is_active\": false,
    \"sort_order\": 60
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/institutions"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "code": "n",
    "description": "Eius et animi quos velit et.",
    "is_active": false,
    "sort_order": 60
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/institutions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

code   string     

Must not be greater than 50 characters. Example: n

description   string  optional    

Example: Eius et animi quos velit et.

is_active   boolean  optional    

Example: false

sort_order   integer  optional    

Must be at least 0. Example: 60

Display the specified institution.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/institutions/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/institutions/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/institutions/{institution}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

institution   string     

The institution. Example: architecto

Update the specified institution.

requires authentication

Example request:
curl --request PUT \
    "https://orbit.ddev.site/api/v1/institutions/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"description\": \"Eius et animi quos velit et.\",
    \"is_active\": true,
    \"sort_order\": 60
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/institutions/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "description": "Eius et animi quos velit et.",
    "is_active": true,
    "sort_order": 60
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/institutions/{institution}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

institution   string     

The institution. Example: architecto

Body Parameters

name   string  optional    
code   string  optional    
description   string  optional    

Example: Eius et animi quos velit et.

is_active   boolean  optional    

Example: true

sort_order   integer  optional    

Must be at least 0. Example: 60

Remove the specified institution.

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/institutions/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/institutions/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/institutions/{institution}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

institution   string     

The institution. Example: architecto

Display a listing of the user's calendar tokens.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/calendar/tokens" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/calendar/tokens"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/calendar/tokens

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Store a newly created calendar token.

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/calendar/tokens" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"room_id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/calendar/tokens"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "room_id": "a4855dc5-0acb-33c3-b921-f4291f719ca0"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/calendar/tokens

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

room_id   string  optional    

Must be a valid UUID. The id of an existing record in the rooms table. Example: a4855dc5-0acb-33c3-b921-f4291f719ca0

Display the specified calendar token.

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/calendar/tokens/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/calendar/tokens/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/calendar/tokens/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the token. Example: architecto

Remove the specified calendar token.

requires authentication

Example request:
curl --request DELETE \
    "https://orbit.ddev.site/api/v1/calendar/tokens/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/calendar/tokens/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/calendar/tokens/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the token. Example: architecto

GET api/v1/admin/exports

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/admin/exports" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/admin/exports"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/admin/exports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/v1/admin/exports

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/admin/exports" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"room_schedule\",
    \"from_date\": \"2026-03-07T17:27:32\",
    \"to_date\": \"2052-03-30\",
    \"status\": \"cancelled\",
    \"room_id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
    \"venue_id\": \"c90237e9-ced5-3af6-88ea-84aeaa148878\"
}"
const url = new URL(
    "https://orbit.ddev.site/api/v1/admin/exports"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "type": "room_schedule",
    "from_date": "2026-03-07T17:27:32",
    "to_date": "2052-03-30",
    "status": "cancelled",
    "room_id": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
    "venue_id": "c90237e9-ced5-3af6-88ea-84aeaa148878"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/admin/exports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

type   string     

Example: room_schedule

Must be one of:
  • event_list
  • room_schedule
from_date   string     

Must be a valid date. Example: 2026-03-07T17:27:32

to_date   string     

Must be a valid date. Must be a date after or equal to from_date. Example: 2052-03-30

status   string  optional    

Example: cancelled

Must be one of:
  • draft
  • pending
  • approved
  • cancelled
room_id   string  optional    

Must be a valid UUID. The id of an existing record in the rooms table. Example: a4855dc5-0acb-33c3-b921-f4291f719ca0

venue_id   string  optional    

Must be a valid UUID. The id of an existing record in the venues table. Example: c90237e9-ced5-3af6-88ea-84aeaa148878

GET api/v1/admin/exports/{id}

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/admin/exports/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/admin/exports/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/admin/exports/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the export. Example: architecto

POST api/v1/admin/exports/{id}/run

requires authentication

Example request:
curl --request POST \
    "https://orbit.ddev.site/api/v1/admin/exports/architecto/run" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/admin/exports/architecto/run"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/admin/exports/{id}/run

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the export. Example: architecto

GET api/v1/admin/exports/{id}/download

requires authentication

Example request:
curl --request GET \
    --get "https://orbit.ddev.site/api/v1/admin/exports/architecto/download" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://orbit.ddev.site/api/v1/admin/exports/architecto/download"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/admin/exports/{id}/download

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the export. Example: architecto