openapi: 3.2.0 info: title: Purdue Menus API x-refined-note: - x-refined-note differs across the merged source definitions and was not carried version: '1.0' description: 'Operations tagged Menus across 2 of this provider''s published API definitions: purdue-rcac-api.json, purdue-menus-api-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://www.rcac.purdue.edu/api description: Production server - url: https://api.hfs.purdue.edu/menus/v2 description: Production - observed live, keyless, 2026-08-30 tags: - name: Menus paths: /menus/items: get: description: Display a listing of entries parameters: [] requestBody: content: '*/*': schema: type: object properties: state: description: Listener enabled/disabled state type: string default: null limit: description: Number of result per page. type: integer default: 20 page: description: Number of where to start returning results. type: string default: null search: description: A word or phrase to search for. type: string default: null order: description: Field to sort results by. type: string default: null order_dir: description: Direction to sort results by. type: string default: asc required: [] tags: - Menus summary: Get menus items x-summary-source: derived operationId: getMenusItems x-operation-id-source: derived post: description: Create a new entry parameters: [] responses: '201': description: Successful entry creation content: application/json: example: id: 9 menutype: about title: About Us alias: about note: '' path: about link: about type: module parent_id: 1 level: 1 state: 1 module_id: 22 ordering: 0 checked_out: 0 checked_out_time: null access: 1 params: [] lft: 23 rgt: 24 home: 0 language: '*' client_id: 0 editor: null componentname: pages access_level: Public name: pages published: 1 item_type: pages api: https://example.org/api/menus/items/9 '409': description: Invalid data requestBody: content: '*/*': schema: type: object properties: title: description: Menu item text type: string default: null type: description: Menu type type: string default: null parent_id: description: Parent menu item ID type: integer default: 0 required: - title tags: - Menus summary: Create menus items x-summary-source: derived operationId: postMenusItems x-operation-id-source: derived servers: - url: https://www.rcac.purdue.edu/api description: Production server /menus/items/{id}: get: description: Retrieve an entry parameters: - in: path name: id description: Entry identifier required: true schema: type: integer responses: '200': description: Successful entry read content: application/json: example: id: 9 menutype: about title: About Us alias: about note: '' path: about link: about type: module parent_id: 1 level: 1 state: 1 module_id: 22 ordering: 0 checked_out: 0 checked_out_time: null access: 1 params: [] lft: 23 rgt: 24 home: 0 language: '*' client_id: 0 editor: null componentname: pages access_level: Public name: pages published: 1 item_type: pages api: https://example.org/api/menus/items/9 '404': description: Record not found tags: - Menus summary: Get menus items by id x-summary-source: derived operationId: getMenusItemsById x-operation-id-source: derived put: description: Update an entry parameters: - in: path name: id description: Entry identifier required: true schema: type: integer responses: '202': description: Successful entry modification content: application/json: example: id: 9 menutype: about title: About Us alias: about note: '' path: about link: about type: module parent_id: 1 level: 1 state: 1 module_id: 22 ordering: 0 checked_out: 0 checked_out_time: null access: 1 params: [] lft: 23 rgt: 24 home: 0 language: '*' client_id: 0 editor: null componentname: pages access_level: Public name: pages published: 1 item_type: pages api: https://example.org/api/menus/items/9 '404': description: Record not found '409': description: Invalid data requestBody: content: '*/*': schema: type: object properties: title: description: Menu item text type: string default: null type: description: Menu type type: string default: null parent_id: description: Parent menu item ID type: integer default: 0 required: [] tags: - Menus summary: Replace menus items by id x-summary-source: derived operationId: putMenusItemsById x-operation-id-source: derived delete: description: Delete an entry parameters: - in: path name: id description: Entry identifier required: true schema: type: integer responses: '204': description: Successful entry deletion '404': description: Record not found tags: - Menus summary: Delete menus items by id x-summary-source: derived operationId: deleteMenusItemsById x-operation-id-source: derived servers: - url: https://www.rcac.purdue.edu/api description: Production server /menus/items/reorder: post: description: Save the order for items parameters: [] responses: '204': description: Successful entry updates requestBody: content: '*/*': schema: type: object properties: id: description: A list of ordering values type: array default: null required: - id - id tags: - Menus summary: Create menus items reorder x-summary-source: derived operationId: postMenusItemsReorder x-operation-id-source: derived servers: - url: https://www.rcac.purdue.edu/api description: Production server /menus: get: description: Display a listing of entries parameters: '0': in: query name: search description: A word or phrase to search for. required: false schema: type: string '2': in: query name: page description: Number of where to start returning results. required: false schema: type: integer default: 1 responses: '200': description: Successful list cread content: application/json: example: data: - id: 2 menutype: about title: About description: About Side Menu client_id: 0 created_at: null updated_at: null deleted_at: null items_count: 12 counts: published: 0 unpublished: 0 trashed: 0 api: https://example.org/api/menus/2 requestBody: content: '*/*': schema: type: object properties: limit: description: Number of result per page. type: integer default: 20 order: description: Field to sort results by. type: string default: menutype order_dir: description: Direction to sort results by. type: string default: asc required: [] tags: - Menus summary: Get menus x-summary-source: derived operationId: getMenus x-operation-id-source: derived post: description: Create a new entry parameters: [] responses: '201': description: Successful entry creation content: application/json: example: id: 2 menutype: about title: About description: About Side Menu client_id: 0 created_at: null updated_at: null deleted_at: null items_count: 12 counts: published: 0 unpublished: 0 trashed: 0 api: https://example.org/api/menus/2 '409': description: Invalid data requestBody: content: '*/*': schema: type: object properties: title: description: Menu title type: string default: null description: description: A description of the menu type: string default: null client_id: description: Client (admin = 1|site = 0) ID type: integer default: 0 menutype: description: A short alias for the menu. If none provided, one will be generated from the title. type: string default: null required: - title tags: - Menus summary: Create menus x-summary-source: derived operationId: postMenus x-operation-id-source: derived servers: - url: https://www.rcac.purdue.edu/api description: Production server /menus/{id}: get: description: Retrieve an entry parameters: - in: path name: id description: Entry identifier required: true schema: type: integer responses: '200': description: Successful entry read content: application/json: example: id: 2 menutype: about title: About description: About Side Menu client_id: 0 created_at: null updated_at: null deleted_at: null items_count: 12 counts: published: 0 unpublished: 0 trashed: 0 api: https://example.org/api/menus/2 '404': description: Record not found tags: - Menus summary: Get menus by id x-summary-source: derived operationId: getMenusById x-operation-id-source: derived put: description: Update an entry parameters: - in: path name: id description: Entry identifier required: true schema: type: integer responses: '202': description: Successful entry modification content: application/json: example: id: 2 menutype: about title: About description: About Side Menu client_id: 0 created_at: null updated_at: null deleted_at: null items_count: 12 counts: published: 0 unpublished: 0 trashed: 0 api: https://example.org/api/menus/2 '404': description: Record not found '409': description: Invalid data requestBody: content: '*/*': schema: type: object properties: title: description: Menu title type: string default: null description: description: A description of the menu type: string default: null client_id: description: Client (admin = 1|site = 0) ID type: integer default: 0 menutype: description: A short alias for the menu. If none provided, one will be generated from the title. type: string default: null required: [] tags: - Menus summary: Replace menus by id x-summary-source: derived operationId: putMenusById x-operation-id-source: derived delete: description: Delete an entry parameters: - in: path name: id description: Entry identifier required: true schema: type: integer responses: '204': description: Successful entry deletion '404': description: Record not found tags: - Menus summary: Delete menus by id x-summary-source: derived operationId: deleteMenusById x-operation-id-source: derived servers: - url: https://www.rcac.purdue.edu/api description: Production server /locations/{location}/{date}: servers: - url: https://api.hfs.purdue.edu/menus/v2 description: Production - observed live, keyless, 2026-08-30 get: tags: - Menus operationId: getLocationMenu summary: Get one location's published menu for one date description: Returns the meals, stations and items published for a location on a calendar date. `location` is the location Name (for example `Earhart`), not the LocationId. A location name that does not exist returns 500 with an ASP.NET exception body, not 404 - see the errors artifact. parameters: - name: location in: path required: true description: Location Name as returned by /locations, for example `Earhart`. schema: type: string example: Earhart - name: date in: path required: true description: Calendar date in YYYY-MM-DD form. schema: type: string format: date example: '2026-08-30' responses: '200': description: The published menu for that location and date. content: application/json: schema: $ref: '#/components/schemas/LocationMenu' '404': description: Observed when the date segment is omitted entirely. '500': description: Observed for an unknown location name - an unhandled System.InvalidOperationException is returned rather than a 404. components: schemas: LocationMenu: type: object properties: Location: type: string Date: type: string description: Observed as US M/D/YYYY in the response body, though the request takes YYYY-MM-DD. IsPublished: type: boolean Notes: type: - string - 'null' Meals: type: array items: $ref: '#/components/schemas/Meal' MenuItem: type: object properties: ID: type: string format: uuid Name: type: string IsVegetarian: type: boolean NutritionReady: type: boolean Allergens: type: array items: $ref: '#/components/schemas/Allergen' Allergen: type: object properties: Name: type: string Value: type: boolean Meal: type: object properties: ID: type: string format: uuid Name: type: string Order: type: integer Status: type: string description: Observed values include Open and Closed. Type: type: string Hours: type: - object - 'null' properties: StartTime: type: string EndTime: type: string Notes: type: - string - 'null' Stations: type: array items: $ref: '#/components/schemas/Station' Station: type: object properties: Name: type: string Items: type: array items: $ref: '#/components/schemas/MenuItem' securitySchemes: api_token: type: apiKey name: api_token in: header x-refined-from: - purdue-rcac-api.json - purdue-menus-api-openapi.yml