{"message":"Welcome to the Calendar App!","info":"Use this app to manage your calendar and donations.","routes":[{"method":"GET","path":"/users","description":"Retrieve all users"},{"method":"GET","path":"/users/:id","description":"Retrieve a specific user by ID"},{"method":"POST","path":"/users","description":"Create a new user"},{"method":"PUT","path":"/users/:id","description":"Update an existing user"},{"method":"PATCH","path":"/users/:id","description":"Partially update an existing user"},{"method":"DELETE","path":"/users/:id","description":"Delete a user"},{"method":"POST","path":"/users/batch","description":"Batch insert users from a CSV file"},{"method":"GET","path":"/organizations","description":"Retrieve all organizations"},{"method":"GET","path":"/organizations/:id","description":"Retrieve a specific organization by ID"},{"method":"POST","path":"/organizations","description":"Create a new organization"},{"method":"PUT","path":"/organizations/:id","description":"Update an existing organization"},{"method":"PATCH","path":"/organizations/:id","description":"Partially update an existing organization"},{"method":"DELETE","path":"/organizations/:id","description":"Delete an organization"},{"method":"GET","path":"/calendars","description":"Retrieve all calendars"},{"method":"GET","path":"/calendars/:id","description":"Retrieve a specific calendar by ID"},{"method":"POST","path":"/calendars","description":"Create a new calendar"},{"method":"PUT","path":"/calendars/:id","description":"Update an existing calendar"},{"method":"PATCH","path":"/calendars/:id","description":"Partially update an existing calendar"},{"method":"DELETE","path":"/calendars/:id","description":"Delete a calendar (cannot delete if there are active donations)"},{"method":"GET","path":"/donations","description":"Retrieve all donations"},{"method":"GET","path":"/donations/:id","description":"Retrieve a specific donation by ID"},{"method":"POST","path":"/donations","description":"Create a new donation"},{"method":"POST","path":"/donations/batch","description":"Create multiple new donations"},{"method":"PUT","path":"/donations/:id","description":"Update an existing donation"},{"method":"PATCH","path":"/donations/:id","description":"Partially update an existing donation"},{"method":"DELETE","path":"/donations/:id","description":"Delete a donation"},{"method":"GET","path":"/events","description":"Retrieve all events"},{"method":"GET","path":"/events/:id","description":"Retrieve a specific event by ID"},{"method":"POST","path":"/events","description":"Create a new event"},{"method":"PUT","path":"/events/:id","description":"Update an existing event"},{"method":"PATCH","path":"/events/:id","description":"Partially update an existing event"},{"method":"DELETE","path":"/events/:id","description":"Delete an event"},{"method":"GET","path":"/fees","description":"Retrieve all fees"},{"method":"GET","path":"/fees/:id","description":"Retrieve a specific fee by ID"},{"method":"POST","path":"/fees","description":"Create a new fee"},{"method":"PUT","path":"/fees/:id","description":"Update an existing fee"},{"method":"PATCH","path":"/fees/:id","description":"Partially update an existing fee"},{"method":"DELETE","path":"/fees/:id","description":"Delete a fee"},{"method":"GET","path":"/campaigns","description":"Retrieve all campaigns"},{"method":"GET","path":"/campaigns/:id","description":"Retrieve a specific campaign by ID"},{"method":"POST","path":"/campaigns","description":"Create a new campaign"},{"method":"PUT","path":"/campaigns/:id","description":"Update an existing campaign"},{"method":"PATCH","path":"/campaigns/:id","description":"Partially update an existing campaign"},{"method":"DELETE","path":"/campaigns/:id","description":"Delete a campaign (cannot delete if there are donations)"},{"method":"GET","path":"/campaigns/:id/fee","description":"Retrieve the fee for a specific campaign"},{"method":"POST","path":"/campaigns/:id/hide","description":"Hide a campaign and all associated calendars"},{"method":"POST","path":"/campaigns/copy/:id","description":"Copy a campaign with basic information"},{"method":"GET","path":"/user-groups","description":"Retrieve all user groups"},{"method":"POST","path":"/user-groups/assign","description":"Assign users to groups"},{"method":"GET","path":"/user-groups/:userId/:groupId","description":"Retrieve a specific user group by user ID and group ID"},{"method":"PUT","path":"/user-groups/:userId/:groupId","description":"Update an existing user group"},{"method":"PATCH","path":"/user-groups/:userId/:groupId","description":"Partially update an existing user group"},{"method":"DELETE","path":"/user-groups/:userId/:groupId","description":"Delete a user group"},{"method":"GET","path":"/progress","description":"Retrieve all campaign donation progress"},{"method":"GET","path":"/progress/campaign/:campaign_id","description":"Retrieve donation progress for a specific campaign by campaign ID"},{"method":"GET","path":"/progress/org/:org_id","description":"Retrieve donation progress for a specific organization by organization ID"},{"method":"GET","path":"/group-calendars","description":"Retrieve all group calendars"},{"method":"GET","path":"/calendar-campaigns","description":"Retrieve all calendar campaigns"},{"method":"GET","path":"/user-group-calendars","description":"Retrieve all user group calendars"},{"method":"GET","path":"/user-group-permissions","description":"Retrieve all user group permissions"},{"method":"GET","path":"/ein-info","description":"Retrieve EIN information"},{"method":"GET","path":"/org-campaign-fees","description":"Retrieve all organization campaign fees"},{"method":"GET","path":"/campaign-fees","description":"Retrieve all campaign fees"},{"method":"GET","path":"/organization-brand-options","description":"Retrieve all organization brand options"},{"method":"GET","path":"/organization-brand-options/:id","description":"Retrieve a specific organization brand option by ID"},{"method":"POST","path":"/organization-brand-options","description":"Create a new organization brand option"},{"method":"PUT","path":"/organization-brand-options/:id","description":"Update an existing organization brand option"},{"method":"DELETE","path":"/organization-brand-options/:id","description":"Delete an organization brand option"},{"method":"GET","path":"/images/:organizationId/:campaignId/:calendarId/:participantId/:imageName?","description":"Retrieve an image from S3 bucket"},{"method":"POST","path":"/send-donation-confirmation","description":"Send a donation confirmation email"},{"method":"GET","path":"/","description":"Retrieve a welcome message with basic information about the API"},{"method":"POST","path":"/enable-rls","description":"Enable Row Level Security on all tables"},{"method":"POST","path":"/create-policies","description":"Create RLS policies for all tables"},{"method":"POST","path":"/drop-policies","description":"Drop RLS policies from all tables"},{"method":"POST","path":"/user-organization-upload-csv","description":"Upload a CSV file to add user-organization transactions"},{"method":"POST","path":"/user-organization-batch-transactions","description":"Add multiple user-organization transactions"},{"method":"POST","path":"/generate-jwt-token","description":"Generate a JWT token"}]}