Table of Contents
Overview
Search for Events
Get Meetings
Create Meeting
Related Articles
Overview
This page captures example API queries pertaining to Events.
In each of the example API URLs:
“environment” = “staging” or “app”
“schoolid” = unique ID assigned to your school (an admin can find that at Admin > Settings > “School Unique ID”)
Search for Events
Overview | Known Limitations | Example 1 - Search on Event Name
Example 2 - Another Event Name Search | Example 3 - Search on Event Type
Example 4 - Multi-Word Queries
Overview
The Search For Events REST endpoint documented at https://coursedogeventsapi.docs.apiary.io/#reference/events/events/search-for-events takes a “searchQuery” parameter that is used for fuzzy text matching.
It will match on the name and type fields of the Event object.
The examples captured below query the following events.
Known Limitations
One query cannot match across both the name and type fields.
Example 1 - Search on Event Name
Query
https://environment.coursedog.com/api/v1/em/schoolid/events/search/searchterm
In the below search, “searchterm” was “signing”
Results
{
"numberOfResults": 1,
"numberOfEvents": 1,
"events": {
"pksJ7mQ00yFhA9BBgawd": {
"_id": "pksJ7mQ00yFhA9BBgawd",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396458247,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "pksJ7mQ00yFhA9BBgawd",
"lastEditedAt": 1692396458247,
"lastEditedBy": "peoplesoft@example.com",
"name": "Book Signing",
"organization": "e732746b-4a63-4372-a30b-f1c1957dd318",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2,
"meetings": [
{
"_id": "DzH0eBbIsXAugcUHwtko",
"endDate": "2023-09-14",
"endTime": 900,
"eventId": "pksJ7mQ00yFhA9BBgawd",
"featured": null,
"hidden": null,
"id": "DzH0eBbIsXAugcUHwtko",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-09-14",
"startTime": 800,
"status": "Confirmed"
}
]
}
}
}
Example 2 - Another Event Name Search
Query
https://environment.coursedog.com/api/v1/em/schoolid/events/search/searchterm
In the below search, “searchterm” was “author”
Results
{
"numberOfResults": 1,
"numberOfEvents": 1,
"events": {
"nHRvRkSh53u6neZaGpve": {
"_id": "nHRvRkSh53u6neZaGpve",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396412702,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "nHRvRkSh53u6neZaGpve",
"lastEditedAt": 1692396412702,
"lastEditedBy": "peoplesoft@example.com",
"name": "Meet the Author",
"organization": "26a76887-1022-41bc-a7f0-769cc5c30c50",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2,
"meetings": [
{
"_id": "hcjQBOaXrZ6BMlgJCw57",
"endDate": "2023-10-11",
"endTime": 900,
"eventId": "nHRvRkSh53u6neZaGpve",
"featured": null,
"hidden": null,
"id": "hcjQBOaXrZ6BMlgJCw57",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-10-11",
"startTime": 800,
"status": "Confirmed"
}
]
}
}
}
Example 3 - Search on Event Type
Query
https://environment.coursedog.com/api/v1/em/schoolid/events/search/searchterm
In the below search, “searchterm” was “fundraiser”
Results
{
"numberOfResults": 2,
"numberOfEvents": 2,
"events": {
"nHRvRkSh53u6neZaGpve": {
"_id": "nHRvRkSh53u6neZaGpve",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396412702,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "nHRvRkSh53u6neZaGpve",
"lastEditedAt": 1692396412702,
"lastEditedBy": "peoplesoft@example.com",
"name": "Meet the Author",
"organization": "26a76887-1022-41bc-a7f0-769cc5c30c50",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2,
"meetings": [
{
"_id": "hcjQBOaXrZ6BMlgJCw57",
"endDate": "2023-10-11",
"endTime": 900,
"eventId": "nHRvRkSh53u6neZaGpve",
"featured": null,
"hidden": null,
"id": "hcjQBOaXrZ6BMlgJCw57",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-10-11",
"startTime": 800,
"status": "Confirmed"
}
]
},
"pksJ7mQ00yFhA9BBgawd": {
"_id": "pksJ7mQ00yFhA9BBgawd",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396458247,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "pksJ7mQ00yFhA9BBgawd",
"lastEditedAt": 1692396458247,
"lastEditedBy": "peoplesoft@example.com",
"name": "Book Signing",
"organization": "e732746b-4a63-4372-a30b-f1c1957dd318",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2,
"meetings": [
{
"_id": "DzH0eBbIsXAugcUHwtko",
"endDate": "2023-09-14",
"endTime": 900,
"eventId": "pksJ7mQ00yFhA9BBgawd",
"featured": null,
"hidden": null,
"id": "DzH0eBbIsXAugcUHwtko",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-09-14",
"startTime": 800,
"status": "Confirmed"
}
]
}
}
}
Example 4 - Multi-Word Queries
Query
https://environment.coursedog.com/api/v1/em/schoolid/events/search/searchterm
In the below search, “searchterm” was “book+sign”
Results
{
"numberOfResults": 1,
"numberOfEvents": 1,
"events": {
"pksJ7mQ00yFhA9BBgawd": {
"_id": "pksJ7mQ00yFhA9BBgawd",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396458247,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "pksJ7mQ00yFhA9BBgawd",
"lastEditedAt": 1692396458247,
"lastEditedBy": "peoplesoft@example.com",
"name": "Book Signing",
"organization": "e732746b-4a63-4372-a30b-f1c1957dd318",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2,
"meetings": [
{
"_id": "DzH0eBbIsXAugcUHwtko",
"endDate": "2023-09-14",
"endTime": 900,
"eventId": "pksJ7mQ00yFhA9BBgawd",
"featured": null,
"hidden": null,
"id": "DzH0eBbIsXAugcUHwtko",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-09-14",
"startTime": 800,
"status": "Confirmed"
}
]
}
}
}
Get Meetings
Overview | Example 1 - Query by Start Date | Example 2 - Query by Date Range
Example 3 - Pagination | Example 4 - Returning a Subset of Fields | Example 5 - Returning a Subset of Fields
Overview
The Get Meetings endpoint documented at https://coursedogeventsapi.docs.apiary.io/#reference/meetings-calendar/meetings/get-meetings accepts a number of filters and returns all the meeting instances matching that filter.
The “startDate” and “endDate” parameters are used to filter by date range.
Note that the result structure for this API is inverted from the Search for Events API; rather than returning events containing a list of meetings, it returns meetings containing the parent event.
Example 1 - Query by Start Date
Query
https://environment.coursedog.com/api/v1/em/schoolid/meetings?startDate=XXXX-YY-ZZ
XXXX = Year
YY = Month (Numeral)
ZZ = Day (Numeral)
In the below search, “XXXX-YY-ZZ” was “2023-09-01” (September 1, 2023)
Result
{
"DzH0eBbIsXAugcUHwtko": {
"_id": "DzH0eBbIsXAugcUHwtko",
"endDate": "2023-09-14",
"endTime": 900,
"eventId": "pksJ7mQ00yFhA9BBgawd",
"featured": null,
"hidden": null,
"id": "DzH0eBbIsXAugcUHwtko",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-09-14",
"startTime": 800,
"status": "Confirmed",
"eventData": {
"_id": "pksJ7mQ00yFhA9BBgawd",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396458247,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "pksJ7mQ00yFhA9BBgawd",
"lastEditedAt": 1692396458247,
"lastEditedBy": "peoplesoft@example.com",
"name": "Book Signing",
"organization": "e732746b-4a63-4372-a30b-f1c1957dd318",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2
}
},
"hcjQBOaXrZ6BMlgJCw57": {
"_id": "hcjQBOaXrZ6BMlgJCw57",
"endDate": "2023-10-11",
"endTime": 900,
"eventId": "nHRvRkSh53u6neZaGpve",
"featured": null,
"hidden": null,
"id": "hcjQBOaXrZ6BMlgJCw57",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-10-11",
"startTime": 800,
"status": "Confirmed",
"eventData": {
"_id": "nHRvRkSh53u6neZaGpve",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396412702,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "nHRvRkSh53u6neZaGpve",
"lastEditedAt": 1692396412702,
"lastEditedBy": "peoplesoft@example.com",
"name": "Meet the Author",
"organization": "26a76887-1022-41bc-a7f0-769cc5c30c50",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2
}
}
}
Example 2 - Query by Date Range
Query
https://environment.coursedog.com/api/v1/em/schoolid/meetings?startDate=XXXX-YY-ZZ&endDate=XXXX-YY-ZZ
XXXX = Year
YY = Month (Numeral)
ZZ = Day (Numeral)
In the below search, the startDate was “2023-09-01” (September 1, 2023) and the endDate was “2023-09-30”.
Result
{
"DzH0eBbIsXAugcUHwtko": {
"_id": "DzH0eBbIsXAugcUHwtko",
"endDate": "2023-09-14",
"endTime": 900,
"eventId": "pksJ7mQ00yFhA9BBgawd",
"featured": null,
"hidden": null,
"id": "DzH0eBbIsXAugcUHwtko",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-09-14",
"startTime": 800,
"status": "Confirmed",
"eventData": {
"_id": "pksJ7mQ00yFhA9BBgawd",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396458247,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "pksJ7mQ00yFhA9BBgawd",
"lastEditedAt": 1692396458247,
"lastEditedBy": "peoplesoft@example.com",
"name": "Book Signing",
"organization": "e732746b-4a63-4372-a30b-f1c1957dd318",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2
}
}
}
Example 3 - Pagination
Query
Includes the “limit” and “skip” parameters to paginate results.
https://environment.coursedog.com/api/v1/em/schoolid/meetings?startDate=XXXX-YY-ZZ&skip=A&limit=B
XXXX = Year
YY = Month (Numeral)
ZZ = Day (Numeral)
A = Numeral
B = Numeral
This is our standard pagination API. So if you wanted to retrieve 3 pages of results and have 50 results in each page, you'd use the following arguments in sequence:
limit=50&skip=0
limit=50&skip=50
limit=50&skip=100
In the below search, the startDate was “2023-09-01” (September 1, 2023), “A” was “1” and “B” was “1”.
Result
{
"hcjQBOaXrZ6BMlgJCw57": {
"_id": "hcjQBOaXrZ6BMlgJCw57",
"endDate": "2023-10-11",
"endTime": 900,
"eventId": "nHRvRkSh53u6neZaGpve",
"featured": null,
"hidden": null,
"id": "hcjQBOaXrZ6BMlgJCw57",
"private": null,
"public": null,
"resources": [],
"startDate": "2023-10-11",
"startTime": 800,
"status": "Confirmed",
"eventData": {
"_id": "nHRvRkSh53u6neZaGpve",
"attachments": [],
"authorId": "peoplesoft@example.com",
"contacts": [],
"createdAt": 1692396412702,
"createdBy": "peoplesoft@example.com",
"description": "",
"id": "nHRvRkSh53u6neZaGpve",
"lastEditedAt": 1692396412702,
"lastEditedBy": "peoplesoft@example.com",
"name": "Meet the Author",
"organization": "26a76887-1022-41bc-a7f0-769cc5c30c50",
"owners": [
"peoplesoft@example.com"
],
"status": "Confirmed",
"type": "Fundraisers",
"version": 2
}
}
}
Example 4 - Returning a Subset of Fields
Query
Include the returnFields argument to only return a subset of object fields.
The field names are passed on as a comma-delimited list.
https://environment.coursedog.com/api/v1/em/schoolid/meetings?startDate=XXXX-YY-ZZ&returnFields=FieldId, FieldId, FieldId
XXXX = Year
YY = Month (Numeral)
ZZ = Day (Numeral)
FieldId = The Field/Question Id of the field(s) you would like to have returned.
In the below search, the startDate was “2023-09-01” (September 1, 2023), and the return fields are ID, startDate, and endDate.
Result
{
"DzH0eBbIsXAugcUHwtko": {
"_id": "DzH0eBbIsXAugcUHwtko",
"endDate": "2023-09-14",
"id": "DzH0eBbIsXAugcUHwtko",
"startDate": "2023-09-14",
"eventData": {}
},
"hcjQBOaXrZ6BMlgJCw57": {
"_id": "hcjQBOaXrZ6BMlgJCw57",
"endDate": "2023-10-11",
"id": "hcjQBOaXrZ6BMlgJCw57",
"startDate": "2023-10-11",
"eventData": {}
}
}
Example 5 - Returning a Subset of Fields
Query
This is a variation of Example 4.
In the below search, the startDate was “2023-09-01” (September 1, 2023), and the return fields are ID, startDate, endDate, startTime, endTime, eventData, name, eventData, and status (i.e. https://environment.coursedog.com/api/v1/em/schoolid/meetings?startDate=XXXX-YY-ZZ&returnFields=id,startDate,endDate,startTime,endTime,eventData.name,eventData.status
Result
{
"DzH0eBbIsXAugcUHwtko": {
"_id": "DzH0eBbIsXAugcUHwtko",
"endDate": "2023-09-14",
"endTime": 900,
"id": "DzH0eBbIsXAugcUHwtko",
"startDate": "2023-09-14",
"startTime": 800,
"eventData": {
"name": "Book Signing",
"status": "Confirmed"
}
},
"hcjQBOaXrZ6BMlgJCw57": {
"_id": "hcjQBOaXrZ6BMlgJCw57",
"endDate": "2023-10-11",
"endTime": 900,
"id": "hcjQBOaXrZ6BMlgJCw57",
"startDate": "2023-10-11",
"startTime": 800,
"eventData": {
"name": "Meet the Author",
"status": "Confirmed"
}
}
Create Meeting
Overview | Important Note | Example 1 - Creating a Meeting
Example 2 - Check for Meeting Conflicts | Example 3 - Create Multiple Meetings
Overview
The POST event endpoint documented at https://coursedogeventsapi.docs.apiary.io/#reference/events/events/post-an-event takes a JSON structure defining a single event and returns the id of the created event, if successful.
Important Note
Using this API directly bypasses the usual event validation logic used by Coursedog.
Thus, for example, it is possible to create events that would normally be disallowed due to conflicts, or even events that have invalid date/time ranges.
Example 1 - Creating a Meeting
Query
https://environment.coursedog.com/api/v1/em/schoolid/events?doPutMeetings=true
Post
{
"organization": "e732746b-4a63-4372-a30b-f1c1957dd318",
"type": "Lecture/Speaker 2",
"name": "Introductory Lecture",
"description": "Overview of the lecture series",
"status": "Confirmed",
"meetings": [
{
"resources": [],
"startDate": "2023-11-17",
"endDate": "2023-11-17",
"startTime": "0800",
"endTime": "0900",
"roomId": "1A-101C"
}
],
"contacts": [
{
"name": "John Doe",
"email": "peoplesoft@example.com",
"phone": "",
"notify": false
}
]
}
Response
"4KtFOyfD0bIM2lciZejz"
This POST request results in the following event:
Example 2 - Check for Meeting Conflicts
Overview
To explicitly invoke the meeting conflicts logic, use the meetingConflicts endpoint.
Query
https://environment.coursedog.com/api/v1/em/schoolid/meetingConflicts?eventId=new
Post
{
"organization": "e732746b-4a63-4372-a30b-f1c1957dd318",
"type": "Lecture/Speaker",
"name": "Introductory Lecture",
"description": "Overview of the lecture series",
"status": "Confirmed",
"meetings": [
{
"resources": [],
"startDate": "2023-11-08",
"endDate": "2023-11-08",
"startTime": "0800",
"endTime": "0900",
"roomId": "1A-101C"
}
],
"contacts": [
{
"name": "John Doe",
"email": "peoplesoft@example.com",
"phone": "",
"notify": false
}
]
}
Response
{
"cXlQb0R88aEwQaC8z58F": [
{
"conflictReason": "daysNoticeLimitConflict",
"meetingId": "cXlQb0R88aEwQaC8z58F",
"eventId": null,
"conflictText": "Lecture/Speaker events are not allowed to be scheduled within 7 days of the event.\n This event was created on 11/07/2023\n and should not have any meetings starting before 11/15/2023."
},
{
"conflictReason": "doubleBookedRoom",
"meetingId": "cXlQb0R88aEwQaC8z58F",
"eventId": null,
"conflictText": "Room <strong>CSI01 - 1A-101C</strong> is <strong>double booked</strong> with <strong>BIO 105 - 001</strong> on 11/08/2023."
},
{
"conflictReason": "doubleBookedRoom",
"meetingId": "cXlQb0R88aEwQaC8z58F",
"eventId": null,
"conflictText": "Room <strong>CSI01 - 1A-101C</strong> is <strong>double booked</strong> with <strong>Introductory Lecture</strong> on 11/08/2023."
}
]
}
Example 3 - Create Multiple Meetings
Overview
You can use the same endpoint to create multiple meetings for the same event.
In this example, the Query and response is the same as Example 1 (we only return the first id that was created).
Query
https://environment.coursedog.com/api/v1/em/schoolid/events?doPutMeetings=true
Post
{
"organization": "e732746b-4a63-4372-a30b-f1c1957dd318",
"type": "Lecture/Speaker",
"name": "Introductory Lectures",
"description": "Overview of the lecture series",
"status": "Confirmed",
"meetings": [
{
"resources": [],
"startDate": "2023-11-17",
"endDate": "2023-11-17",
"startTime": "0800",
"endTime": "0900",
"roomId": "1A-101C"
},
{
"resources": [],
"startDate": "2023-11-18",
"endDate": "2023-11-18",
"startTime": "0800",
"endTime": "0900",
"roomId": "1A-101C"
}
],
"contacts": [
{
"name": "John Doe",
"email": "peoplesoft@example.com",
"phone": "",
"notify": false
}
]
}