## Autogenerated by Scribe. DO NOT MODIFY. name: Endpoints description: '' endpoints: - custom: [] httpMethods: - GET uri: api/user metadata: custom: [] groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' title: '' description: '' authenticated: false deprecated: false headers: Content-Type: application/json Accept: application/json urlParameters: [] cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: [] cleanBodyParameters: [] fileParameters: [] responses: - custom: [] status: 401 content: '{"message":"Authentication required"}' headers: cache-control: 'no-cache, private' content-type: application/json access-control-allow-origin: '*' description: null responseFields: [] auth: [] controller: null method: null route: null - custom: [] httpMethods: - GET uri: api/project-month-plans metadata: custom: [] groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' title: |- GET /api/project-month-plans?year=2026 Returns month-plan grid payload by project/month for the year. description: '' authenticated: false deprecated: false headers: Content-Type: application/json Accept: application/json urlParameters: [] cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: [] cleanBodyParameters: [] fileParameters: [] responses: - custom: [] status: 401 content: '{"message":"Authentication required"}' headers: cache-control: 'no-cache, private' content-type: application/json access-control-allow-origin: '*' description: null responseFields: [] auth: [] controller: null method: null route: null - custom: [] httpMethods: - PUT uri: api/project-month-plans/bulk metadata: custom: [] groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' title: |- PUT /api/project-month-plans/bulk Bulk upsert month plan cells. description: '' authenticated: false deprecated: false headers: Content-Type: application/json Accept: application/json urlParameters: [] cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: year: custom: [] name: year description: 'Must be at least 2020. Must not be greater than 2100.' required: true example: 1 type: integer enumValues: [] exampleWasSpecified: false nullable: false deprecated: false items: custom: [] name: items description: '' required: true example: - [] type: 'object[]' enumValues: [] exampleWasSpecified: false nullable: false deprecated: false 'items[].project_id': custom: [] name: 'items[].project_id' description: 'Must be a valid UUID. The id of an existing record in the projects table.' required: true example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed type: string enumValues: [] exampleWasSpecified: false nullable: false deprecated: false 'items[].month': custom: [] name: 'items[].month' description: 'Must be a valid date in the format Y-m.' required: true example: 2026-02 type: string enumValues: [] exampleWasSpecified: false nullable: false deprecated: false 'items[].planned_hours': custom: [] name: 'items[].planned_hours' description: 'Must be at least 0.' required: false example: 84 type: number enumValues: [] exampleWasSpecified: false nullable: true deprecated: false cleanBodyParameters: year: 1 items: - project_id: 6ff8f7f6-1eb3-3525-be4a-3932c805afed month: 2026-02 planned_hours: 84 fileParameters: [] responses: [] responseFields: [] auth: [] controller: null method: null route: null - custom: [] httpMethods: - DELETE uri: 'api/ptos/{id}' metadata: custom: [] groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' title: '' description: '' authenticated: false deprecated: false headers: Content-Type: application/json Accept: application/json urlParameters: id: custom: [] name: id description: 'The ID of the pto.' required: true example: architecto type: string enumValues: [] exampleWasSpecified: false nullable: false deprecated: false cleanUrlParameters: id: architecto queryParameters: [] cleanQueryParameters: [] bodyParameters: [] cleanBodyParameters: [] fileParameters: [] responses: [] responseFields: [] auth: [] controller: null method: null route: null