{"components":{"responses":{},"schemas":{"Activity":{"example":{"address":"Hoveniersberg 24","association":"dsa","description":"oooOOOoooOOOooo","end_time":"2020-03-30 16:30:00","infolink":"http://facebook.com","location":"Therminal in de Loggia","public":false,"start_time":"2020-03-30 15:30:00","terrain":"ugent","title":"geheim event","type":"Andere"},"properties":{"address":{"description":"Address of the activity. Should be findable on a map.","nullable":true,"type":"string"},"association":{"description":"The abbreviation of the association.","type":"string"},"description":{"description":"Longer description.","nullable":true,"type":"string"},"end_time":{"description":"When the activity ends.","format":"yyyy-MM-ddThh:mm:ssZ","type":"string"},"id":{"description":"Unique ID of the activity.","type":"integer"},"infolink":{"description":"Link to more information.","format":"uri","nullable":true,"type":"string"},"location":{"description":"Textual representation of the location.","type":"string"},"public":{"description":"If the activity is private or not.","type":"boolean"},"start_time":{"description":"When the activity starts.","format":"yyyy-MM-ddThh:mm:ssZ","type":"string"},"sync_data":{"description":"Field to store private data, for example for syncing.","maxLength":1000,"nullable":true,"type":"string"},"terrain":{"description":"The type of terrain on which the activity takes place: public, ugent, augent, home, online, abroad or other.","type":"string"},"title":{"description":"Title.","type":"string"},"type":{"description":"The kind of activity being organized: BBQ, Horeca, Cantus, Doop, Vergadering, Cultuur, ...","type":"string"}},"required":["title","location","start_time","end_time","public","terrain","type","association"],"title":"Activity","type":"object"},"ActivityCreate":{"description":"The request body for creating an activity","example":{"address":"Krijgslaan 281, Sterre S9","association":"weus","description":"gras?","end_time":"2025-03-30 16:30:00","location":"Kelder","public":false,"start_time":"2025-03-30 15:30:00","terrain":"ugent","title":"geheim event","type":"Andere"},"properties":{"address":{"description":"Address of the activity. Should be findable on a map.","nullable":true,"type":"string"},"association":{"description":"The abbreviation of the association.","type":"string"},"description":{"description":"Longer description.","nullable":true,"type":"string"},"end_time":{"description":"When the activity ends.","format":"yyyy-MM-ddThh:mm:ssZ","type":"string"},"english_description":{"description":"Optional english variant of the description.","nullable":true,"type":"string"},"english_title":{"description":"An optional english variant of the title","nullable":true,"type":"string"},"infolink":{"description":"Link to more information.","format":"uri","nullable":true,"type":"string"},"location":{"description":"Textual representation of the location.","type":"string"},"public":{"description":"If the activity is private or not.","type":"boolean"},"start_time":{"description":"When the activity starts.","format":"yyyy-MM-ddThh:mm:ssZ","type":"string"},"terrain":{"description":"The type of terrain on which the activity takes place: public, ugent, augent, home, abroad, online or other.","type":"string"},"title":{"description":"Title.","type":"string"},"type":{"description":"The kind of activity being organized: BBQ, Horeca, Cantus, Doop, Vergadering, Cultuur, ...","type":"string"}},"required":["association","title","start_time","end_time","description","location","terrain","public","type"],"title":"ActivityCreate","type":"object"},"ActivityPage":{"description":"Paginated list of activities","properties":{"meta":{"properties":{"authenticated":{"type":"boolean"},"authenticated_as":{"type":"string"},"authenticated_as_abv":{"type":"string"},"params":{"type":"object"}},"type":"object"},"page":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/Activity"},"type":"array"},"page_number":{"type":"integer"},"page_size":{"type":"integer"},"total_entries":{"type":"integer"},"total_pages":{"type":"integer"}},"type":"object"}},"required":["page","meta"],"title":"ActivityPage","type":"object"},"ActivityUpdate":{"description":"The request body for updating an activity","example":{"description":"gras gras?","location":"Kelder","title":"geheim event update"},"properties":{"address":{"description":"Address of the activity. Should be findable on a map.","nullable":true,"type":"string"},"association":{"description":"The abbreviation of the association.","type":"string"},"description":{"description":"Longer description.","nullable":true,"type":"string"},"end_time":{"description":"When the activity ends.","format":"yyyy-MM-ddThh:mm:ssZ","type":"string"},"english_description":{"description":"Optional english variant of the description.","nullable":true,"type":"string"},"english_title":{"description":"An optional english variant of the title","nullable":true,"type":"string"},"infolink":{"description":"Link to more information.","format":"uri","nullable":true,"type":"string"},"location":{"description":"Textual representation of the location.","type":"string"},"public":{"description":"If the activity is private or not.","type":"boolean"},"start_time":{"description":"When the activity starts.","format":"yyyy-MM-ddThh:mm:ssZ","type":"string"},"terrain":{"description":"The type of terrain on which the activity takes place: public, ugent, augent, home, abroad, online or other.","type":"string"},"title":{"description":"Title.","type":"string"},"type":{"description":"The kind of activity being organized: BBQ, Horeca, Cantus, Doop, Vergadering, Cultuur, ...","type":"string"}},"title":"ActivityUpdate","type":"object"},"Association":{"description":"An association.","example":{"abbreviation":"zeus","board_members":[{"cas_name":"cas::bob","email":"bob@ugent.be","function":"Voorzitter"}],"description":"The association of the gods","dutch_description":null,"email":"zeus@student.ugent.be","english_description":"The association of the gods","logo":"https://example.com/verenigingen/details/zeus/logo","name":"Zeus WerkgroeP Informatica","path":["dsa","wvk"],"suspended":false,"website":"https://zeus.ugent.be/"},"properties":{"abbreviation":{"description":"Unique abbreviation of the association. Use this as ID.","type":"string"},"board_members":{"description":"This will contain a list of board members if\n  1) an api token is provided and\n  2) the association is in the subtree of the owner of the api token\n","items":{"$ref":"#/components/schemas/BoardMember"},"nullable":true,"type":"array"},"description":{"description":"Optional description of the association in Dutch if it exists, otherwise in English. It is preferred to use this field instead of `dutch_description`, as it has a bigger chance of containing a value.","nullable":true,"type":"string"},"dutch_description":{"description":"Optional description in Dutch, or null if a Dutch description is not available.","nullable":true,"type":"string"},"email":{"description":"Email address of the association.","format":"email","type":"string"},"english_description":{"description":"Optional description in English, or null if an English description is not available.","nullable":true,"type":"string"},"logo":{"description":"Link to the logo of the association. This is a link to the logo API, see its description for\nmore information.\n","format":"uri","nullable":true,"type":"string"},"name":{"description":"Name of the association.","type":"string"},"path":{"description":"Hierarchy of the association.","items":{"type":"string"},"type":"array"},"suspended":{"description":"Whether or not the association is suspended at this moment.","type":"boolean"}},"title":"Association","type":"object"},"Associations":{"description":"List of associations.","properties":{"associations":{"items":{"$ref":"#/components/schemas/Association"},"type":"array"}},"required":["associations"],"title":"Associations","type":"object"},"BoardMember":{"description":"Schema containing a board member","properties":{"cas_name":{"description":"CAS name of the board member.","type":"string"},"email":{"description":"Official email of the board member.","type":"string"},"function":{"description":"Function of the board member.","type":"string"}},"title":"BoardMember","type":"object"},"Error":{"description":"Error object","properties":{"errors":{"additionalProperties":{"type":"string"},"description":"Human readable error messages. This are of the form key: message, where the key may be a field when there are validation errors.","type":"object"},"status":{"description":"Error status.","type":"string"}},"title":"Error","type":"object"},"Reservation":{"example":{"association":"weus","description":"oooOOOoooOOOooo","end_time":"2025-05-11 16:30:00","id":"1","location":"Turbinezaal","request_status":"approved","start_time":"2025-05-11 15:30:00","title":"Een reservatie voor een cool feestje"},"properties":{"association":{"description":"The abbreviation of the association.","type":"string"},"description":{"description":"Longer description.","nullable":true,"type":"string"},"end_time":{"description":"When the reservation ends.","format":"yyyy-MM-ddThh:mm:ssZ","type":"string"},"id":{"description":"Unique ID of the location reservation.","type":"integer"},"location":{"description":"Textual representation of the location.","type":"string"},"request_status":{"description":"Current reservation status","type":"string"},"start_time":{"description":"When the reservation starts.","format":"yyyy-MM-ddThh:mm:ssZ","type":"string"},"title":{"description":"Title.","type":"string"}},"required":["title","location","start_time","end_time","association","request_status"],"title":"Reservation","type":"object"},"ReservationPage":{"description":"Paginated list of reservations","properties":{"meta":{"properties":{"authenticated":{"type":"boolean"},"authenticated_as":{"type":"string"},"authenticated_as_abv":{"type":"string"},"params":{"type":"object"}},"type":"object"},"page":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/Reservation"},"type":"array"},"page_number":{"type":"integer"},"page_size":{"type":"integer"},"total_entries":{"type":"integer"},"total_pages":{"type":"integer"}},"type":"object"}},"required":["page","meta"],"title":"ReservationPage","type":"object"}},"securitySchemes":{"authorization":{"description":"For privileged operations, you will need an API key. This API key is linked to a\nspecific association: you need an API key of an association that has permission\nto execute the privileged operation.\n\nFor example, if you want to create an activity for Zeus, you will need the API\nkey for Zeus (or one of its parents, i.e. WVK or DSA). This allows konvents to\nuse their own key to create events for all their associations. For example, FK\ncan create activities for all their associations with their own key.\n\nYou can obtain a key by contacting DSA.\n\nNote! The API key is like a password -- don't share  it! If you do share\nyour API key by accident, contact DSA as soon as possible to obtain a new\nAPI key: you are responsible for the actions performed with your API key.\n\nDSA may revoke your API key at any time and refuse to give you a new one if\nwe notice abuse.\n","in":"header","name":"Authorization","type":"apiKey"}}},"info":{"description":"DSA API. Manage activities and get information about associations.\n\nSome operations may require authorization with an API key. See the description\nof the authorization method for more details (if using the Swagger UI, you can\nclick the green \"Authorize\" button on the left to view the description).\n","title":"DSA API","version":"1.2.0"},"openapi":"3.0.0","paths":{"/api/activiteiten":{"get":{"callbacks":{},"description":"If you are not authenticated, you will receive a list of the public activities.\nIf you are authenticated, you will receive the public activities, but also private\nactivities the association you are authenticated with has access to. This means\nyour own activities and those of child associations.\n\nYou can use the metadata to view which results you are receiving.\n","operationId":"DsaWeb.Api.ActivityController.index","parameters":[{"description":"Show only activities from this association. Use the abbreviation of the association.","in":"query","name":"association","required":false,"schema":{"type":"string"}},{"description":"Only includes activities that start before the given datetime.","in":"query","name":"end_time","required":false,"schema":{"format":"yyyy-MM-ddThh:mm:ssZ","type":"string"}},{"description":"Only includes activities that end after the given datetime. This defaults to the current datetime.","in":"query","name":"start_time","required":false,"schema":{"format":"yyyy-MM-ddThh:mm:ssZ","type":"string"}},{"description":"Number of activities per page","in":"query","name":"page_size","required":false,"schema":{"type":"integer"}},{"description":"Search activities where the description or title contain the given term.","in":"query","name":"search_string","required":false,"schema":{"type":"string"}},{"description":"Page number","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"Show only activities from these associations. This is fundamentally the same\nparameter as the `association` one, but using this notation, you can filter on one\nor more associations, for example:\n\n```\nGET /api/activiteiten?association[]=zeus&association[]=dsa\n```\n\nThis will get activities for both Zeus and DSA.\n","in":"query","name":"association[]","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityPage"}}},"description":"Activity Page"}},"security":[{"authorization":[]},{}],"summary":"Get a paginated and optionally filtered list of activities.","tags":["Activities"]},"post":{"callbacks":{},"description":"Has the same behaviour as creating a new activity manually through the browser.","operationId":"DsaWeb.Api.ActivityController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityCreate"}}},"description":"Activity Create Params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Activity"}}},"description":"Activity"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity"}},"security":[{"authorization":[]},{}],"summary":"Create a new activity","tags":["Activities"]}},"/api/activiteiten/{id}":{"delete":{"callbacks":{},"description":"Deleting an activity will not remove it from the database, but will essentially archive it and will not appear anymore on the website or elsewhere.","operationId":"DsaWeb.Api.ActivityController.delete","parameters":[{"description":"Activity ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Activity"}}},"description":"Activity"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found"}},"security":[{"authorization":[]},{}],"summary":"Delete an activity","tags":["Activities"]},"get":{"callbacks":{},"description":"Either the activity must be public, or you must be authenticated with an\n  authorized association.","operationId":"DsaWeb.Api.ActivityController.show","parameters":[{"description":"Activity ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Activity"}}},"description":"Activity"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found"}},"security":[{"authorization":[]},{}],"summary":"Show a single activity.","tags":["Activities"]},"patch":{"callbacks":{},"operationId":"DsaWeb.Api.ActivityController.update (2)","parameters":[{"description":"Activity ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityUpdate"}}},"description":"Activity update Params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Activity"}}},"description":"Activity"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity"}},"security":[{"authorization":[]},{}],"summary":"Update an activity","tags":["Activities"]},"put":{"callbacks":{},"operationId":"DsaWeb.Api.ActivityController.update","parameters":[{"description":"Activity ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityUpdate"}}},"description":"Activity update Params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Activity"}}},"description":"Activity"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity"}},"security":[{"authorization":[]},{}],"summary":"Update an activity","tags":["Activities"]}},"/api/verenigingen":{"get":{"callbacks":{},"operationId":"DsaWeb.Api.AssociationController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Associations"}}},"description":"Associations"}},"summary":"List all associations. Board members are only included for the subtree of the owner of the api token, if provided.","tags":["Associations"]}},"/api/verenigingen/{abbreviation}/logo":{"get":{"callbacks":{},"description":"Take care to use this API responsibly: don't spam the server, or you will get banned.\n\nOne way to reduce server load, which you should use, is caching. The API responds with a\n`Last-Modified` header, so you should always include the `If-Modified-Since` header in subsequent\nrequests for the same logo (browsers will do this automatically).\n","operationId":"DsaWeb.Api.AssociationController.logo","parameters":[{"description":"Specify the max size of the image. The default size is `huge`. This is only max 1000x1000, and because most shields compress very well, this won't result in huge filesizes (should be about 200 KB).","in":"query","name":"size","required":false,"schema":{"default":"huge","enum":["small","medium","big","huge"],"type":"string"}},{"description":"The abbreviation of the association you want the logo of.","in":"path","name":"abbreviation","required":true,"schema":{"type":"string"}},{"description":"Caching header.","in":"header","name":"if-modified-since","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"image/png":{"schema":{"format":"binary","type":"string"}}},"description":"The logo in the requested format."},"304":{"description":"The image is cached"},"404":{"description":"An empty response if the given association has no logo or the association does not exist."}},"summary":"Get the logo for one association.","tags":["Associations"]}},"/api/zaalreservaties":{"get":{"callbacks":{},"description":"You can use the metadata to view which results you are receiving.\n","operationId":"DsaWeb.Api.LocationReservationController.index","parameters":[{"description":"Show only reservations from this association. Use the abbreviation of the association.","in":"query","name":"association","required":false,"schema":{"type":"string"}},{"description":"Search reservations where the title contain the given term.","in":"query","name":"title","required":false,"schema":{"type":"string"}},{"description":"Only include reservations that start before the given datetime.","in":"query","name":"end_time","required":false,"schema":{"format":"yyyy-MM-ddThh:mm:ssZ","type":"string"}},{"description":"Only includes reservations that start after the given datetime. This defaults to the current datetime.","in":"query","name":"start_time","required":false,"schema":{"format":"yyyy-MM-ddThh:mm:ssZ","type":"string"}},{"description":"Number of reservations per page","in":"query","name":"page_size","required":false,"schema":{"type":"integer"}},{"description":"Page number","in":"query","name":"page","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReservationPage"}}},"description":"Reservation Page"}},"security":[{"authorization":[]},{}],"summary":"Get a paginated and optionally filtered list of location reservations.","tags":["Location Reservations"]}},"/api/zaalreservaties/{id}":{"get":{"callbacks":{},"description":"","operationId":"DsaWeb.Api.LocationReservationController.show","parameters":[{"description":"Location Reservation ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Activity"}}},"description":"Location Reservation"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found"}},"security":[{"authorization":[]},{}],"summary":"Show a single location reservation.","tags":["Location Reservations"]}}},"security":[],"servers":[{"url":"https://dsa.ugent.be","variables":{}}],"tags":[]}