openapi: 3.1.0 info: title: COR Attachments Hours API description: The COR API lets you integrate with projectcor.com applications using simple HTTP methods, in either XML or JSON formats, making this an ideal API for developing integrations with other softwares, external clients or mobile applications version: 1.0.0 servers: - url: https://api.projectcor.com/v1 description: Production server security: - bearerAuth: [] tags: - name: Hours paths: /hours: get: tags: - Hours summary: Get Hours description: Retrieves a paginated list of time entries. By default, responses are paginated with 20 items per page. parameters: - name: page in: query schema: type: - integer - boolean default: 1 description: 'Page number (default: 1). Set to `false` to disable pagination.' - name: perPage in: query schema: type: integer default: 20 description: 'Number of items per page (default: 20).' - name: filters in: query schema: type: string description: 'URL-encoded JSON object with filter criteria. Available fields: `dateStart` (YYYY-MM-DD), `dateDeadline` (YYYY-MM-DD), `clients` (array), `projects` (array), `users` (array), `labels` (array), `teams` (array).' - name: orderBy in: query schema: type: string description: 'URL-encoded JSON object for sorting. Example: {"by":"start","order":"ASC"}.' responses: '200': description: Paginated list of time entries content: application/json: schema: $ref: '#/components/schemas/PaginatedHoursResponse' example: total_hours: '4.0000000000000000' total_cost: 4714.285714285714 data: - id: 39517591 start: '2026-02-06 00:00:00' stop: '2026-02-06 02:00:00' duration: '2.0000000000000000' cost: 2357.142857142857 user_id: 8546 task_log_id: 11122850 project_id: null client_id: null created_at: '2026-02-06 12:50:12' status: pending status_changed_by: null status_changed_at: null type: TASK task_log_rework_id: null comments: null user: id: 8546 first_name: Daniel last_name: Guzman picture: https://user-images.projectcor.com/production/Upload/ProfilePictures/50x50/c-2336-248213441263.jpeg remaining_hours: 88 timezone: America/Buenos_Aires gmt: -03:00 client: null project: null task: id: 11122850 title: Armado de contenido v1 project_id: 878491 task_father: null status: nueva father: null project: id: 878491 name: Creacion de Contenido client_id: 31405 contract_id: null client: id: 31405 name: Cloud Solution client_status_id: 1 has_expired_contract: false labels: [] userPosition: null billInput: null total: '1' perPage: 20 page: '1' lastPage: 1 post: tags: - Hours summary: Post hours requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/HourInput' responses: '200': description: Hours logged successfully content: application/json: schema: $ref: '#/components/schemas/Hour' /hours/status-change: post: tags: - Hours summary: Change status requestBody: required: true content: application/json: schema: type: object required: - status - counters properties: status: type: string enum: - pending - approved - discarded - under_review - invoiced - paid description: Hour status counters: type: array items: type: integer description: Array of counter IDs responses: '200': description: Status changed successfully /hours/status-bills-change: post: tags: - Hours summary: Status bill change requestBody: required: true content: application/json: schema: type: object required: - receiptNumber - counters properties: receiptNumber: type: integer description: Receipt Number counters: type: array items: type: integer description: Array of counters responses: '200': description: Status changed successfully /hours/by-day/{datetime}: get: tags: - Hours summary: Get Hours By Date description: 'datetime: datetime in unix format' parameters: - name: datetime in: path required: true schema: type: integer format: int64 description: In UNIX Time responses: '200': description: Hours for the specified date content: application/json: schema: type: array items: $ref: '#/components/schemas/Hour' /hours/by-day/weigh: post: tags: - Hours summary: Update status of weigh hours requestBody: required: true content: application/json: schema: type: object required: - task_log_id - start properties: task_log_id: type: integer description: Task ID start: type: string format: date-time description: Start Timestamp responses: '200': description: Status updated successfully /hours/accept-suggested/{datetime}: post: tags: - Hours summary: Accept suggested hours description: 'datetime: datetime in unix format' parameters: - name: datetime in: path required: true schema: type: integer format: int64 description: In Unix Time responses: '200': description: Suggested hours accepted successfully components: schemas: Hour: type: object properties: id: type: integer description: Unique identifier of the time entry start: type: string format: date-time description: Start timestamp of the time entry stop: type: string format: date-time description: Stop timestamp of the time entry duration: type: string description: Duration of the time entry in hours cost: type: number description: Calculated cost for this time entry user_id: type: integer description: ID of the user who logged the hours task_log_id: type: integer description: ID of the task this time entry is logged against project_id: type: - integer - 'null' description: Project ID (null when the task has no associated project) client_id: type: - integer - 'null' description: Client ID (null when the task has no associated client) created_at: type: string format: date-time description: Timestamp when the time entry was created status: type: string enum: - pending - approved - rejected - paid description: Current approval status of the time entry status_changed_by: type: - integer - 'null' description: ID of the user who last changed the status (null if status has not been changed) status_changed_at: type: - string - 'null' format: date-time description: Timestamp when the status was last changed (null if status has not been changed) type: type: string description: Type of time entry (e.g. `TASK`) task_log_rework_id: type: - integer - 'null' description: Rework ID if this time entry is associated with a rework, otherwise null comments: type: - string - 'null' description: Optional comments on the time entry user: type: object description: Summary of the user who logged the time entry properties: id: type: integer first_name: type: string last_name: type: string picture: type: string description: URL to the user's profile picture remaining_hours: type: number description: Remaining available hours for the user timezone: type: string description: User's timezone (e.g. `America/Buenos_Aires`) gmt: type: string description: GMT offset (e.g. `-03:00`) client: type: - object - 'null' description: Client information (null when the task has no associated client) project: type: - object - 'null' description: Project information (null when the task has no associated project) task: type: object description: Task this time entry is logged against properties: id: type: integer description: Task ID title: type: string description: Task title project_id: type: - integer - 'null' description: ID of the project this task belongs to task_father: type: - integer - 'null' description: ID of the parent task, if any status: type: string description: Current status of the task father: type: - object - 'null' description: Parent task summary (null if no parent task) properties: id: type: integer title: type: string project: type: - object - 'null' description: Project this task belongs to (null if no project) properties: id: type: integer name: type: string client_id: type: integer contract_id: type: - integer - 'null' client: type: object description: Client that owns the project properties: id: type: integer name: type: string client_status_id: type: integer has_expired_contract: type: boolean labels: type: array description: Labels assigned to the task items: type: object properties: id: type: integer hex: type: string description: Hex color code for the label names: type: array description: Localized label names items: type: object properties: name: type: string lang: type: string description: Language code (e.g. `en`, `es`, `pt`, `fr`) userPosition: type: - object - 'null' description: User's position information (null if not set) billInput: type: - object - 'null' description: Billing information, present when the time entry has been invoiced (status `paid`) properties: id: type: integer description: Bill input ID entity_id: type: integer description: ID of the time entry this billing relates to bill_id: type: integer description: ID of the associated bill updated_at: type: string format: date-time description: Last update timestamp bill: type: object description: Associated bill details properties: id: type: integer receipt_number: type: string description: Receipt or invoice number rework_hour: type: - object - 'null' description: Rework details, present when `task_log_rework_id` is set properties: requested_by: type: string description: Source of the rework request (e.g. `internal`) description: type: string description: Description of the rework 'on': type: string format: date-time description: Date the rework was requested HourInput: type: object required: - task_log_id - start properties: task_log_id: type: integer description: Task ID start: type: string format: date-time description: Start Timestamp stop: type: string format: date-time description: Stop Timestamp PaginatedHoursResponse: type: object description: Paginated response for time entries list properties: total_hours: type: string description: Total hours summed across all entries matching the query total_cost: type: number description: Total cost summed across all entries matching the query total: type: - string - integer description: Total number of time entries perPage: type: - string - integer description: Number of items per page page: type: - string - integer description: Current page number lastPage: type: integer description: Last available page number data: type: array description: Array of time entries for the current page items: $ref: '#/components/schemas/Hour' securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT basicAuth: type: http scheme: basic