Introduction
This documentation aims to provide all the information you need to work with our API.
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.
You can retrieve your token by contacting Crescat on contact@crescat.no.
Group
GET Group Event List
requires authentication
Get array of all events for your group
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/calendar?start=blanditiis&end=dolor" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/calendar"
);
const params = {
"start": "blanditiis",
"end": "dolor",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
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):
{
[
{
"id": 1,
"name": "Event Name",
"start": 2000-01-01 12:00:00,
"end": 2000-01-01 15:00:00,
"event_type_id": 1,
"fields": [
{
"id": 1,
"show_time_id": 1,
"value": *,
}
for details on formatting: see event field format
],
"show_times": [
{
"id": 1,
"title": "Show Title",
"start": 2000-01-01 12:00:00,
"end": 2000-01-01 15:00:00,
"room_id": 1,
}
],
"rooms": [
{
"id": 1,
"name": "Room Name",
"title": "Show Title",
"start": 2000-01-01 12:00:00,
"end": 2000-01-01 15:00:00,
}
],
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET Group Event Response Format
requires authentication
Get format of events returned when requesting events
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/calendar/format" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/calendar/format"
);
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):
{
event_types [
{
"id": 1,
"name": "Event Type",
}
],
fields [
{
"id": 1,
"title": "Title of Your Field",
"format": String,
}
]
Formats of Fields:
String
Rich formatted Text
Date (2000-01-01)
Time (12:00:00)
Document url
Boolean
}
Example response (401, Festival Not Found: either not existing, or not your festival.):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Venue/Rooms
GET Venue Rooms List
requires authentication
Get array of all rooms on your venue
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/rooms" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/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 (200):
{
[
{
"id": 1,
"name": "Room Name",
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET Room Booking List
requires authentication
Get array of all bookings for room
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/rooms/1/calendar?start=qui&end=occaecati" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/rooms/1/calendar"
);
const params = {
"start": "qui",
"end": "occaecati",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
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):
{
[
{
"id": 1,
"name": "Event Name",
"start": 2000-01-01 12:00:00,
"end": 2000-01-01 15:00:00,
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Festival
APIs for managing public forms related to a specific festival.
GET Festival List
requires authentication
Array of all festivals for your organization.
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/festivals" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/festivals"
);
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):
{
Array of all festivals for your organization.
[
{
"id": 1,
"name": "Name of Your Festival",
"start": 2000-01-01 12:00:00,
"end": 2000-01-01 15:00:00,
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET Festival Performance List
requires authentication
Which fields are set on the token itself
Which Contacts are included is set on the token itself, either
- All Contacts
- Travel Party
- Primary
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/festivals/1/performances" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/festivals/1/performances"
);
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):
{
[
{
"id": 1,
"name": "Performance Name",
"type": "Performance Type",
"fields": [
{
"id": 1,
"value": *,
}
for details on formatting: see performance field format
],
"events": [
{
"id": 1,
"name": "Name of Event",
}
],
"contacts": [
{
"id": 1,
"name": "Name of Contact",
"first_name": "First Name of Contact",
"last_name": "Last Name of Contact",
"email": "Email of Contact",
"phone": "Phone of Contact",
"country_code": "Country Code of Contact",
"primary": "Is the contact primary or not",
"travel_party": "Is the contact part of travel party or not",
"role": "Role of Contact",
"type": "Type of Contact",
}
],
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET Festival Performance Response Format & Definitions
requires authentication
Get format of all performance fields that will be included when requesting performances
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/festivals/1/performances/format" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/festivals/1/performances/format"
);
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):
{
fields [
{
"id": 1,
"title": "Title of Your Field",
"format": String,
}
]
Formats of Fields:
String
Rich formatted Text
Date (2000-01-01)
Time (12:00:00)
Document url
Boolean
}
Example response (401, Festival Not Found: either not existing, or not your festival.):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET Festival Event List
requires authentication
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/festivals/1/events" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/festivals/1/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 (200):
{
[
{
"id": 1,
"name": "Event Name",
"start_date": 2000-01-01,
"end_date": 2000-01-01,
"production_period": [
"start": 2000-01-01 12:00:00,
"end": 2000-01-01 15:00:00,
],
"fields": [
{
"id": 1,
"show_time_id": 1,
"value": *,
}
for details on formatting: see event field format
],
"show_times": [
{
"id": 1,
"title": "Show Title",
"start": 2000-01-01 12:00:00,
"end": 2000-01-01 15:00:00,
"room_id": 1,
}
],
"festival_resources": [
{
"id": 1,
"name": "Festival Resource",
}
],
"rooms": [
{
"id": 1,
"title": "Show Title",
"start": 2000-01-01 12:00:00,
"end": 2000-01-01 15:00:00,
}
],
"performances": [
{
"id": 1,
"name": "Performance Name",
}
],
"venue": {
"id": 1,
"name": "Venue Name",
"address": "Venue Address",
"city": "Venue City",
"postal_code": "Postal Code",
"country": "Country",
"website": "Website",
"phone": "Phone",
},
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET Festival Event Response Format & Definitions
requires authentication
Get format and info from fields that will be included when requesting events
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/festivals/1/events/format" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/festivals/1/events/format"
);
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):
{
fields [
{
"id": 1,
"title": "Title of Your Field",
"format": String,
}
],
festival_event_types [
{
"id": 1,
"name": "Concert",
}
]
Formats of Fields:
String
Rich formatted Text
Date (2000-01-01)
Time (12:00:00)
Document url
Boolean
}
Example response (401, Festival Not Found: either not existing, or not your festival.):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
List Public Forms for Festival
requires authentication
Get an array of all public forms belonging to the specified festival that you own.
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/festivals/1/public-forms" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/festivals/1/public-forms"
);
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, Success):
[
{
"id": 1,
"name": "Name of Your Public Form"
},
{
"id": 2,
"name": "Another Public Form"
}
]
Example response (401, Unauthorized):
[]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Public Form Responders
requires authentication
Get an array of all responders (submissions) for a specific public form. You can optionally filter which custom form fields are included in the response.
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/festivals/1/public-forms/1?public_form_field_ids[]=1&public_form_field_ids[]=5&public_form_field_ids[]=10" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/festivals/1/public-forms/1"
);
const params = {
"public_form_field_ids[0]": "1",
"public_form_field_ids[1]": "5",
"public_form_field_ids[2]": "10",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
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, Success):
[
{
"id": 1,
"name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"accepted_at": "2024-01-15 10:00:00",
"declined_at": null,
"public_form_fields": [
{
"id": 1,
"value": "Value for custom field 1"
},
{
"id": 5,
"value": true
}
// Other fields included based on public_form_field_ids query param
// For details on value formatting: see 'Get Public Form Format' endpoint
]
}
]
Example response (401, Unauthorized):
[]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Public Form Format
requires authentication
Get the definition and format of standard fields and custom fields for a specific public form's responses. Useful for understanding the data structure returned by the "Get Public Form Responders" endpoint.
Example request:
curl --request GET \
--get "https://app.crescat.io/external/v1/festivals/1/public-forms/1/format" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.crescat.io/external/v1/festivals/1/public-forms/1/format"
);
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, Success):
{
"id": "Number",
"name": "String",
"first_name": "String",
"last_name": "String | null",
"phone": "String | null",
"country_code": "String | null",
"email": "String",
"created_at": "String (YYYY-MM-DD HH:MM:SS)",
"accepted_at": "String (YYYY-MM-DD HH:MM:SS) | null",
"declined_at": "String (YYYY-MM-DD HH:MM:SS) | null",
"assigned_work_minutes": "int",
"expected_work_minutes": "int",
"completed_work_minutes": "int",
"public_form_fields": [
{
"id": 1,
"title": "Title of Your Custom Field",
"format": "String | Rich formatted Text | Date (YYYY-MM-DD) | Time (HH:MM:SS) | Document url | Boolean",
"section": "Section Title | null"
}
]
}
Example response (401, Unauthorized):
[] Comment="Festival Not Found: either not existing, or not your festival, or the public form does not belong to this festival."
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.