## API Documentation --- **URL** https://meeting-planner-backend.herokuapp.com/ --- > Values required in **`bold`**. ### **Accounts** | `account` | field | data type | metadata | | :------------ | :--------------- | :-------------------------- | | id | unsigned integer | primary key, auto-increment | | username | string | required | | email | string | required, unique | | password | string | required | | timezone | string | | | earliest_time | string | | | latest_time | string | | | created_at | datetime | generated by database | | updated_at | datetime | generated by database | #### Add an account **`POST /api/accounts`** ##### Request A json object for the account to register with **`username`**, **`email`**, **`password`**, `timezone`, `earliest_time` and `latest_time`. ``` { "username": "jean", "email": "jean@example.com", "password": "really-strong-password", "timezone": "Europe/Brussels", "earliest_time":"09:30", "latest_time":"22:00" } ``` ##### Response `201` A json object for the registered account with `id`, `username`, `email`, `timezone`, `earliest_time` and `latest_time`. ``` { "user": { "id": 1, "username": "jean", "email": "jean@example.com", "timezone": "Europe/Brussels", "earliest_time":"09:30", "latest_time":"22:00" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1CJlbWFpbCI6ImphY2tAZXc2VybmFtZSI6ImphY2siLhhbXBsZS5jb20iLCJpYXQiOjE1OTg2MTc2MTksImV4cCI6MTYwMTIwOTYxOX0.s85ti_rzBVHJ6Gt1MY7seYfdcjB6sR939p2CexA40gI" } ``` #### Log in an account **`POST /api/accounts/login`** ##### Request A json object for the account to login with either **`email`** and **`password`** . ``` { "email": "jean@example.com", "password": "password" } ``` ##### Response `201` A json object for the logged in account with `id`, `username`, `email`, `timezone`, `earliest_time`, `latest_time` and `token`. ``` { "user": { "id": 1, "username": "jean", "email": "jean@example.com", "timezone": "Europe/Brussels", "earliest_time":"09:30", "latest_time":"22:00" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1CJlbWFpbCI6ImphY2tAZXc2VybmFtZSI6ImphY2siLhhbXBsZS5jb20iLCJpYXQiOjE1OTg2MTc2MTksImV4cCI6MTYwMTIwOTYxOX0.s85ti_rzBVHJ6Gt1MY7seYfdcjB6sR939p2CexA40gI" } ``` #### Update an account **`PUT /api/accounts/:id`** ##### Request A json object for the account to update with any of `username`, `email`, `password`, `timezone`, `earliest_time`, `latest_time`. ``` { "earliest_time": "08:30", "latest_time": "20:00" } ``` ##### Response `200` A json object for the updated account with `id`, `username`, `email`, `timezone`, `earliest_time` and `latest_time`. ``` { "id": 1, "username": "jean", "email": "jean@example.com", "timezone": "Europe/Brussels", "earliest_time": "09:30", "latest_time": "22:00" } ``` #### Delete an account **`DELETE /api/accounts/:id`** ##### Response `200` A json object for the deleted account with confirmation message. ``` { "message": "Account with id 15 successfully deleted." } ``` #### Get a list of meetings for an account **`GET /api/accounts/:id/meetings`** ##### Response `200` A json object for the specified account with an array of `meeting`. ``` [ { "id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c", "title": "Worldwide meeting I", "description": "Let's find the best ethical growth hacking technics together. Yeah, fun.", "start_time": "2025-05-05T10:30:00Z", "duration": 90, "status": "false" }, { "id": "2e8f3748-ea5a-4d20-b9a8-683ac65f5634", "title": "Worldwide meeting II", "description": "Let's find the best ethical growth hacking technics together. Yeah, fun.", "start_time": "2025-05-05T08:00:00Z", "duration": 90, "status": "false" }, { "id": "a8344a68-7961-4bff-bb3b-b288f3abcf1c", "title": "Worldwide meeting III", "description": "Let's find the best ethical growth hacking technics together. Yeah, fun.", "start_time": "2025-05-05T14:30:00Z", "duration": 90, "status": "false" } ] ``` ### **Meetings** | `meeting` | field | data type | metadata | | :---------- | :-------- | :------------------------------------------ | | id | uuid | primary key, auto-generated | | title | string | required | | description | string | | | start_time | datetime | UTC Timestamp | | duration | int | required | | status | boolean | required: `0` (proposed) or `1` (confirmed) | | password | string | | | created_at | datetime | generated by database | | updated_at | datetime | generated by database | #### Add a meeting **`POST /api/meetings`** ##### Request A json object for the meeting to add with **`title`**, `description`, `start_time`, **`duration`**, **status** and `password`. ``` { "title": "Worldwide strategy meeting for growth", "description": "Let's find the best ethical growth hacking technics together. Yeah, fun.", "start_time": "2025-05-05T10:00:00Z", "duration": 90, "status": 0 } ``` ##### Response `201` A json object for the added meeting with `id`, `title`, `description`, `start_time`, `duration`, `status` and `password`. ``` { "id": "f86983db-955e-43b8-be3e-bc92bbeb9b43", "title": "Worldwide strategy meeting for growth", "description": "Let's find the best ethical growth hacking technics together. Yeah, fun.", "start_time": "2025-05-05T10:00:00Z", "duration": 90, "status": 0 } ``` #### Update a meeting **`PUT /api/meetings/:id`** ##### Request A json object for the meeting to update with any of `title`, `description`, `start_time`, `duration`, `status` and `password`. ``` { "start_time": "2025-05-05T10:00:00Z", "status": 1 } ``` ##### Response `200` A json object for the updated meeting with `id`, `title`, `description`, `start_time`, `duration` and `status`. ``` { "id": "f86983db-955e-43b8-be3e-bc92bbeb9b43", "title": "Worldwide strategy meeting for growth", "description": "Let's find the best ethical growth hacking technics together.Yeah, fun.", "start_time": "2025-05-05T10:00:00Z", "duration: 90, "status": 1 } ``` #### Delete a meeting **`DELETE /api/meetings/:id`** ##### Response `200` A json object for the deleted meeting with `message`. ``` { "message": "Meeting with id f86983db-955e-43b8-be3e-bc92bbeb9b43 was successfully deleted." } ``` #### Get a list of all participants for a meeting **`GET /api/meetings/:id/participants`** ##### Response `200` A json object for the specified meeting with an array of `participant`. ``` [ { "id": "j8y9ta10-5g4f-46e8-bb55-8611e7e5bgtr", "email": "liza@example.com", "account_id": 1, "meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c", "quorum": "false", "mandatory": "false", "host": "false", "answered": "false" }, { "id": "gh59ta10-5g4f-46e8-bb55-8611e7eftg8t", "email": "toni@example.com", "account_id": 23, "meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c", "quorum": "false", "mandatory": "false", "host": "false", "answered": "false" } ] ``` #### Get a list of all possible dates for a meeting **`GET /api/meetings/:id/possible-dates`** ##### Response `200` A json object for the specified meeting with an array of `possible_date`. ``` [ { "id": 12, "meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43", "possible_date": "2020-02-18" }, { "id": 13, "meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43", "possible_date": "2020-02-19" }, { "id": 14, "meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43", "possible_date": "2020-02-22" } ] ``` #### Get a list of all availability for a meeting **`GET /api/meetings/:id/availability`** ##### Response `200` A json object for the specified meeting with an array of `availability`. ``` [ { "id": 1, "participant_id": "gt537a10-316f-46e8-bb55-8611e7e5b31c", "possible_date_id": 1, "preference": false, "start_time": "2025-05-05T09:00:00Z", "end_time": "2025-05-05T22:00:00Z" }, { "id": 2, "participant_id": "7a103ac0-316f-46e8-bb55-8611eb31c7e5", "possible_date_id": 1, "preference": false, "start_time": "2025-05-06T10:00:00Z", "end_time": "2025-05-06T20:00:00Z" }, { "id": 3, "participant_id": "7a1003ac7a10-316f-46e8-bb55-8611e7e5b31c11e7e", "possible_date_id": 2, "preference": false, "start_time": "2025-05-07T10:00:00Z", "end_time": "2025-05-07T10:00:00Z" } ] ``` ### **Participants** | `participant` | field | data type | metadata | | :--------- | :-------- | :------------------------------ | | id | uuid | required, primary key | | email | string | | | account_id | string | foreign key | | meeting_id | string | required, foreign key | | quorum | boolean | `0` (no) or `1` (yes) | | mandatory | boolean | `0` (no) or `1` (yes) | | host | boolean | required, `0` (no) or `1` (yes) | | answered | boolean | required, `0` (no) or `1` (yes) | | created_at | datetime | generated by database | | updated_at | datetime | generated by database | #### Invite a participant **`POST /api/participants`** ##### Request A json object for the participant to add with `email`, `account_id`, **`meeting_id`**, `quorum`, `mandatory`, **`host`** and **`answered`**. ``` { "email": "john@example.com", "account_id": 5, "meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43", "quorum": 0, "mandatory": 1, "host": 0, "answered": 0 } ``` ##### Response `201` A json object for the added participant with `id`, `email`, `account_id`, `meeting_id`, `quorum`, `mandatory`, `host` and `answered`. ``` { "id": "983dbf86-955e-43b8-be3e-b9b43bc92bbe", "email": "john@example.com", "account_id": 5, "meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43", "quorum": 0, "mandatory": 1, "host": 0, "answered": 0 } ``` #### Update a participant **`PUT /api/participants/:id`** ##### Request A json object for the participant to update with any of `quorum`, `mandatory`, `host` and `answered`. ``` { "quorum": 1, "host": 1, "answered": 1 } ``` ##### Response `200` A json object for the updated participant with `id`, `email`, `account_id`, `meeting_id`, `quorum`, `mandatory`, `host` and `answered`. ``` { "id": "983dbf86-955e-43b8-be3e-b9b43bc92bbe", "email": "john@example.com", "account_id": 5, "meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43", "quorum": 1, "mandatory": 1, "host": 1, "answered": 1 } ``` #### Delete a participant **`DELETE /api/participants/:id`** ##### Response A json object for the deleted participant with `message`. ``` { "message": "Participant with id 983dbf86-955e-43b8-be3e-b9b43bc92bbe was successfully deleted." } ``` ### **Possible Dates** | `possible_date` | field | data type | metadata | | :------------ | :-------- | :-------------------------- | | id | int | primary key, auto-increment | | meeting_id | string | foreign key, required | | possible_date | string | required | | created_at | datetime | generated by database | | updated_at | datetime | generated by database | #### Add a possible date **`POST /api/possible-dates`** ##### Request A json object for the meeting to add with **`meeting_id`** and **`possible_date`**. ``` { "meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c", "possible_date": "2025-02-27" } ``` ##### Response `201` A json object for the added meeting with `id`, `meeting_id` and `possible_date`. ``` { "id": 20, "meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c", "possible_date": "2025-02-26" } ``` #### Delete a possible date **`DELETE /api/possible-dates/:id`** ##### Response `200` A json object for the deleted possible date with `message`. ``` { "message": "Possible date with id 12 was successfully deleted." } ``` ### **Availability** | `availability` | field | data type | metadata | | :--------------- | :-------- | :--------------------------------- | | id | int | primary key, auto-increment | | participant_id | int | foreign, required | | possible_date_id | int | foreign key, required | | preference | boolean | `0` (ideal) or `1` (yes), required | | start_time | datetime | required, UTC timestamp | | end_time | datetime | required, UTC timestamp | | created_at | datetime | generated by database | | updated_at | datetime | generated by database | #### Add an availability **`POST /api/availability`** ##### Request A json object with the availability to add with **`participant_id`**, **`possible_date_id`**, **`preference`**, **`start_time`** and **`end_time`**. ``` { "participant_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c", "possible_date_id": 1, "preference": false, "start_time": "2025-05-05T10:00:00Z", "end_time": "2025-05-05T20:00:00Z" } ``` ##### Response `201` A json object with the availability added with `id`, `participant_id`, `possible_date_id`, `preference`, `start_time` and `end_time`. ``` { "id": 30, "participant_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c", "possible_date_id": 1, "preference": false, "start_time": "2025-05-05T10:00:00Z", "end_time": "2025-05-05T20:00:00Z" } ``` #### Delete an availability **`DELETE /api/availability/:id`** ##### Response `200` A json object for the deleted availability with `message`. ``` { "message": "Availability with id 30 was successfully deleted." } ```