COR

COR Resource Allocation API

The Resource Allocation API from COR — 4 operation(s) for resource allocation.

OpenAPI Specification

cor-resource-allocation-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: COR Attachments Resource Allocation 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: Resource Allocation
paths:
  /allocation/saveAllocation:
    post:
      tags:
      - Resource Allocation
      summary: Save Allocation
      description: "Creates a new resource allocation for a user on a project.\n\n**Request Body Requirements:**\nAll values in the object are required.\n\n**Known Errors:**\n- `InvalidAllocationError` — The allocation is invalid:\n  - Empty `allocatedHours` field\n  - The `from` date is greater than or equal to the `to` date\n  - The date range exceeds 12 months\n- `AllocationAlreadyExistInDatesRangeError` — An allocation already exists within the specified date range\n- `UserNotFoundError` — The specified user cannot be found\n- `UserNotHaveWorkDaysError` — The user does not have any work days configured\n- `ProjectNotFoundError` — The specified project cannot be found"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AllocationInput'
            example:
              userId: 1111
              companyId: 1111
              email: email@email.com
              resource:
                typeId: Project
                entityId: 1111
              from: '2024-06-01'
              to: '2024-10-31'
              assignedByUserId: 11111
              allocatedHours: 20
      responses:
        '200':
          description: Allocation saved successfully
        '400':
          description: Invalid allocation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllocationError'
              examples:
                invalid_allocation:
                  summary: Invalid allocation data
                  value:
                    error: InvalidAllocationError
                    message: Empty allocated hours field
                user_not_found:
                  summary: User not found
                  value:
                    error: UserNotFoundError
                    message: The specified user cannot be found
                allocation_exists:
                  summary: Allocation already exists
                  value:
                    error: AllocationAlreadyExistInDatesRangeError
                    message: An allocation already exists within the specified date range
  /allocation/updateAllocation:
    put:
      tags:
      - Resource Allocation
      summary: Update Allocation
      description: "Updates an existing resource allocation. Requires both the old allocation data and the new allocation data.\n\n**Known Errors:**\n- `InvalidAllocationError` — The new allocation is invalid:\n  - Empty `allocatedHours` field\n  - The `from` date is greater than or equal to the `to` date\n  - The date range exceeds 12 months\n- `AllocationNotFoundError` — The specified old allocation cannot be found\n- `AllocationAlreadyExistInDatesRangeError` — The new allocation already exists within the specified date range\n- `UserNotFoundError` — The specified user in new allocation cannot be found\n- `UserNotHaveWorkDaysError` — The user does not have any work days in the new allocation dates range\n- `ProjectNotFoundError` — The specified project in new allocation cannot be found\n\n**Note:** You can use this endpoint to change a project allocation, as long as there isn't an existing allocation for the same user in the target project for any date within the range of the new allocation."
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AllocationUpdateInput'
            example:
              oldAllocation:
                userId: 1111
                companyId: 11
                resource:
                  entityId: 11111
                  typeId: Project
                from: '2024-01-01'
                to: '2024-03-31'
                assignedByUserId: 1111
                allocatedHours: 0
              newAllocation:
                userId: 1111
                companyId: 11
                resource:
                  entityId: 11111
                  typeId: Project
                from: '2024-01-01'
                to: '2024-03-31'
                assignedByUserId: 1111
                allocatedHours: 10
      responses:
        '200':
          description: Allocation updated successfully
        '400':
          description: Invalid allocation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllocationError'
              examples:
                allocation_not_found:
                  summary: Old allocation not found
                  value:
                    error: AllocationNotFoundError
                    message: The specified allocation cannot be found
  /allocation/removeAllocation:
    delete:
      tags:
      - Resource Allocation
      summary: Delete Allocation
      description: 'Removes an existing resource allocation.


        **Request Body Requirements:**

        All values in the object are required.


        **Known Errors:**

        - `AllocationNotFoundError` — The specified allocation cannot be found

        - `ProjectNotFoundError` — The specified project cannot be found


        Please ensure that your request is valid and all specified resources exist to avoid these errors.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AllocationInput'
            example:
              userId: 1111
              companyId: 111
              resource:
                typeId: Project
                entityId: 1111
              from: '2024-01-01'
              to: '2024-03-31'
              assignedByUserId: 11111
              allocatedHours: 20
      responses:
        '200':
          description: Allocation deleted successfully
        '400':
          description: Allocation not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllocationError'
              example:
                error: AllocationNotFoundError
                message: The specified allocation cannot be found
  /allocation/getAllocations/{projectId}:
    get:
      tags:
      - Resource Allocation
      summary: Get Allocations By Project
      description: Gets information about user allocations for a given project. Returns all users allocated to the project along with their allocation details and allocations in other projects.
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: integer
        description: Project ID to get allocations for
        example: 12345
      responses:
        '200':
          description: List of user allocations for the project
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectAllocationsResponse'
              example:
                users:
                - userId: 1234
                  firstName: John
                  lastName: Doe
                  positionName: Developer
                  categoryName: Engineering
                  categoryId: '10'
                  picture: ''
                  userPositionId: '5'
                  companyId: 41195
                  hidden: false
                  isDeleted: false
                  labelsByCategory: []
                  createdAt: '2024-01-15T10:00:00'
                  allocations:
                  - primaryKey: '00000001'
                    from: '2024-06-01T00:00:00'
                    to: '2024-08-31T00:00:00'
                    allocatedHours: 20
                    capacity: 160
                    availabilityLeft: 140
                    createdAt: '2024-05-20T14:30:00'
                    allocationUserAnotherProjects:
                    - projectId: 5678
                      projectName: Project Alpha
                      clientName: Client ABC
                      allocatedHours: 15
                    - projectId: 5679
                      projectName: Project Beta
                      clientName: Client XYZ
                      allocatedHours: 5
                  totalAllocatedHours: 20
components:
  schemas:
    AllocationUpdateInput:
      type: object
      required:
      - oldAllocation
      - newAllocation
      properties:
        oldAllocation:
          $ref: '#/components/schemas/AllocationInput'
          description: The existing allocation to be updated
        newAllocation:
          $ref: '#/components/schemas/AllocationInput'
          description: The new allocation data
    AllocationResource:
      type: object
      required:
      - typeId
      - entityId
      properties:
        typeId:
          type: string
          enum:
          - Project
          description: Type of resource (currently only Project is supported)
        entityId:
          type: integer
          description: Project ID
    UserAllocation:
      type: object
      properties:
        primaryKey:
          type: string
          description: Unique identifier for the allocation
        from:
          type: string
          format: date-time
          description: Start date of the allocation
        to:
          type: string
          format: date-time
          description: End date of the allocation
        allocatedHours:
          type: number
          description: Number of hours allocated
        capacity:
          type: number
          description: Total capacity in hours
        availabilityLeft:
          type: number
          description: Remaining availability (can be negative if overallocated)
        createdAt:
          type: string
          format: date-time
          description: When the allocation was created
        allocationUserAnotherProjects:
          type: array
          description: Other project allocations for this user in the same period
          items:
            type: object
            properties:
              projectId:
                type: integer
                description: Project ID
              projectName:
                type: string
                description: Name of the project
              clientName:
                type: string
                description: Name of the client
              allocatedHours:
                type: number
                description: Hours allocated to this project
    ProjectAllocationsResponse:
      type: object
      properties:
        users:
          type: array
          description: List of users allocated to the project
          items:
            $ref: '#/components/schemas/AllocatedUser'
    AllocationInput:
      type: object
      required:
      - userId
      - companyId
      - resource
      - from
      - to
      - assignedByUserId
      - allocatedHours
      properties:
        userId:
          type: integer
          description: ID of the user being allocated
        companyId:
          type: integer
          description: Company ID
        email:
          type: string
          format: email
          description: User email (optional)
        resource:
          $ref: '#/components/schemas/AllocationResource'
        from:
          type: string
          format: date
          description: Start date (YYYY-MM-DD)
        to:
          type: string
          format: date
          description: End date (YYYY-MM-DD). Must be after 'from' date and within 12 months.
        assignedByUserId:
          type: integer
          description: ID of the user who assigned the allocation
        allocatedHours:
          type: number
          description: Number of hours allocated
    AllocationError:
      type: object
      properties:
        error:
          type: string
          description: Error type
          enum:
          - InvalidAllocationError
          - AllocationAlreadyExistInDatesRangeError
          - UserNotFoundError
          - UserNotHaveWorkDaysError
          - ProjectNotFoundError
          - AllocationNotFoundError
        message:
          type: string
          description: Error description
    AllocatedUser:
      type: object
      properties:
        userId:
          type: integer
          description: User ID
        firstName:
          type: string
          description: User's first name
        lastName:
          type: string
          description: User's last name
        positionName:
          type: string
          description: User's position name
        categoryName:
          type: string
          description: User's category name
        categoryId:
          type: string
          description: User's category ID
        picture:
          type: string
          description: URL to user's profile picture
        userPositionId:
          type: string
          description: User's position ID
        companyId:
          type: integer
          description: Company ID
        hidden:
          type: boolean
          description: Whether the user is hidden
        isDeleted:
          type: boolean
          description: Whether the user is deleted
        labelsByCategory:
          type: array
          description: Labels assigned to the user grouped by category
          items:
            type: object
        createdAt:
          type: string
          format: date-time
          description: When the user was created
        allocations:
          type: array
          description: User's allocations for this project
          items:
            $ref: '#/components/schemas/UserAllocation'
        totalAllocatedHours:
          type: number
          description: Total hours allocated to this user for the project
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    basicAuth:
      type: http
      scheme: basic