Oracle Primavera P6 EPPM REST API

Oracle Primavera P6 EPPM REST API provides programmatic access to enterprise project portfolio management data including WBS structures, activity schedules, resource assignments, critical path analysis, and portfolio dashboards. Available for both cloud and on-premises deployments. Documentation covers version 6.2.1 through version 26 (2026).

OpenAPI Specification

oracle-primavera-p6-eppm-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Oracle Primavera P6 EPPM REST API
  description: >-
    Oracle Primavera P6 EPPM REST API provides programmatic access to enterprise
    project portfolio management data including WBS structures, activity schedules,
    resource assignments, critical path analysis, and portfolio dashboards. Available
    for both cloud and on-premises deployments.
  version: 26.0.0
  contact:
    name: Oracle Support
    url: https://support.oracle.com
  license:
    name: Oracle Technology Network License
    url: https://www.oracle.com/legal/terms/
servers:
  - url: https://{host}/p6ws/rest/v1
    description: P6 EPPM REST API
    variables:
      host:
        default: primavera.example.com
        description: P6 EPPM server hostname

security:
  - basicAuth: []
  - oauth2: []

tags:
  - name: Activities
    description: Activity scheduling and management
  - name: Baselines
    description: Project baseline operations
  - name: Projects
    description: Project management operations
  - name: ResourceAssignments
    description: Resource assignment operations
  - name: Resources
    description: Resource and role management
  - name: WBS
    description: Work Breakdown Structure management
paths:
  /projects:
    get:
      operationId: listProjects
      summary: List projects
      description: Returns a collection of projects accessible to the authenticated user, with optional field filtering.
      tags:
        - Projects
      parameters:
        - name: Fields
          in: query
          description: Comma-separated list of fields to return
          schema:
            type: string
            example: ObjectId,Id,Name,Status,StartDate,FinishDate
        - name: Filter
          in: query
          description: RSQL filter expression
          schema:
            type: string
        - name: OrderBy
          in: query
          description: Field to sort by
          schema:
            type: string
        - name: offset
          in: query
          description: Pagination offset
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          description: Maximum records to return
          schema:
            type: integer
            default: 100
            maximum: 1000
      responses:
        '200':
          description: List of projects
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createProject
      summary: Create a project
      description: Creates a new project in the P6 EPPM system.
      tags:
        - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectCreate'
      responses:
        '200':
          description: Created project object IDs
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    ObjectId:
                      type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /projects/{objectId}:
    get:
      operationId: getProject
      summary: Get a project
      description: Returns a single project by its ObjectId.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/ObjectId'
        - name: Fields
          in: query
          description: Comma-separated list of fields to return
          schema:
            type: string
      responses:
        '200':
          description: Project details
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateProject
      summary: Update a project
      description: Updates fields on an existing project.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/ObjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectUpdate'
      responses:
        '200':
          description: Update confirmation
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteProject
      summary: Delete a project
      description: Permanently deletes a project and all its child objects.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/ObjectId'
      responses:
        '200':
          description: Delete confirmation
        '404':
          $ref: '#/components/responses/NotFound'

  /activities:
    get:
      operationId: listActivities
      summary: List activities
      description: Returns activities with scheduling data including planned dates, durations, and relationships.
      tags:
        - Activities
      parameters:
        - name: Fields
          in: query
          schema:
            type: string
            example: ObjectId,Id,Name,PlannedStartDate,PlannedFinishDate,ActualStartDate,ActualFinishDate,Status,PercentComplete
        - name: Filter
          in: query
          description: Filter by project or WBS; e.g. ProjectObjectId eq 12345
          schema:
            type: string
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          schema:
            type: integer
            default: 100
      responses:
        '200':
          description: List of activities
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Activity'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createActivity
      summary: Create an activity
      description: Creates a new activity within a project.
      tags:
        - Activities
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActivityCreate'
      responses:
        '200':
          description: Created activity ObjectId
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    ObjectId:
                      type: integer
        '400':
          $ref: '#/components/responses/BadRequest'

  /activities/{objectId}:
    get:
      operationId: getActivity
      summary: Get an activity
      description: Returns details for a single activity.
      tags:
        - Activities
      parameters:
        - $ref: '#/components/parameters/ObjectId'
        - name: Fields
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Activity details
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Activity'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateActivity
      summary: Update an activity
      description: Updates scheduling fields on an activity.
      tags:
        - Activities
      parameters:
        - $ref: '#/components/parameters/ObjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActivityUpdate'
      responses:
        '200':
          description: Update confirmation
        '404':
          $ref: '#/components/responses/NotFound'

  /wbss:
    get:
      operationId: listWBS
      summary: List WBS elements
      description: Returns Work Breakdown Structure elements for projects.
      tags:
        - WBS
      parameters:
        - name: Fields
          in: query
          schema:
            type: string
            example: ObjectId,Code,Name,ProjectObjectId,ParentObjectId,SequenceNumber
        - name: Filter
          in: query
          schema:
            type: string
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          schema:
            type: integer
            default: 100
      responses:
        '200':
          description: List of WBS elements
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WBSElement'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /resources:
    get:
      operationId: listResources
      summary: List resources
      description: Returns labor, non-labor, and material resources.
      tags:
        - Resources
      parameters:
        - name: Fields
          in: query
          schema:
            type: string
            example: ObjectId,Id,Name,ResourceType,UnitOfMeasure,PricePerUnit
        - name: Filter
          in: query
          schema:
            type: string
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          schema:
            type: integer
            default: 100
      responses:
        '200':
          description: List of resources
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Resource'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /resourceassignments:
    get:
      operationId: listResourceAssignments
      summary: List resource assignments
      description: Returns resource-to-activity assignments with planned and actual units.
      tags:
        - ResourceAssignments
      parameters:
        - name: Fields
          in: query
          schema:
            type: string
            example: ObjectId,ActivityObjectId,ResourceObjectId,PlannedUnits,ActualUnits,PlannedCost,ActualCost
        - name: Filter
          in: query
          schema:
            type: string
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          schema:
            type: integer
            default: 100
      responses:
        '200':
          description: List of resource assignments
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ResourceAssignment'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /baselines:
    get:
      operationId: listBaselines
      summary: List baselines
      description: Returns project baselines including planned dates and costs.
      tags:
        - Baselines
      parameters:
        - name: Fields
          in: query
          schema:
            type: string
            example: ObjectId,Name,ProjectObjectId,BaselineType,LastUpdateDate
        - name: Filter
          in: query
          schema:
            type: string
      responses:
        '200':
          description: List of baselines
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Baseline'
        '401':
          $ref: '#/components/responses/Unauthorized'

components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic Authentication with P6 username and password
    oauth2:
      type: oauth2
      description: Oracle Identity Cloud Service OAuth2
      flows:
        authorizationCode:
          authorizationUrl: https://identity.oraclecloud.com/oauth2/v1/authorize
          tokenUrl: https://identity.oraclecloud.com/oauth2/v1/token
          scopes:
            read: Read access to P6 data
            write: Write access to P6 data

  parameters:
    ObjectId:
      name: objectId
      in: path
      required: true
      description: Unique numeric ObjectId
      schema:
        type: integer
        format: int64

  responses:
    BadRequest:
      description: Invalid request parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'

  schemas:
    Project:
      type: object
      description: An Oracle Primavera P6 project
      properties:
        ObjectId:
          type: integer
          description: Unique system-generated identifier
        Id:
          type: string
          description: User-defined project ID (up to 40 chars)
        Name:
          type: string
          description: Project name
        Status:
          type: string
          enum: [Active, Inactive, What-if, Planned]
        PlannedStartDate:
          type: string
          format: date-time
        PlannedFinishDate:
          type: string
          format: date-time
        ActualStartDate:
          type: string
          format: date-time
          nullable: true
        ActualFinishDate:
          type: string
          format: date-time
          nullable: true
        DataDate:
          type: string
          format: date-time
        PercentComplete:
          type: number
          format: double
          minimum: 0
          maximum: 100
        TotalBudgetCost:
          type: number
          format: double
        EarnedValueCost:
          type: number
          format: double
        PlannedTotalCost:
          type: number
          format: double
        RiskLevel:
          type: string
          enum: [Very High, High, Medium, Low, Very Low]
        WBSObjectId:
          type: integer
          description: Root WBS element ObjectId
        OBSObjectId:
          type: integer
          description: Responsible OBS element
        LastUpdateDate:
          type: string
          format: date-time
        CreateDate:
          type: string
          format: date-time

    ProjectCreate:
      type: object
      required:
        - Name
        - Id
        - WBSObjectId
      properties:
        Id:
          type: string
        Name:
          type: string
        Status:
          type: string
          enum: [Active, Inactive, What-if, Planned]
          default: Active
        PlannedStartDate:
          type: string
          format: date-time
        WBSObjectId:
          type: integer

    ProjectUpdate:
      type: object
      properties:
        ObjectId:
          type: integer
        Name:
          type: string
        Status:
          type: string
          enum: [Active, Inactive, What-if, Planned]
        DataDate:
          type: string
          format: date-time
        PercentComplete:
          type: number
          format: double

    Activity:
      type: object
      description: A project schedule activity
      properties:
        ObjectId:
          type: integer
        Id:
          type: string
        Name:
          type: string
        ProjectObjectId:
          type: integer
        WBSObjectId:
          type: integer
        Type:
          type: string
          enum: [Task Dependent, Resource Dependent, Level of Effort, Start Milestone, Finish Milestone, WBS Summary]
        Status:
          type: string
          enum: [Not Started, In Progress, Completed]
        PercentComplete:
          type: number
          format: double
        PercentCompleteType:
          type: string
          enum: [Physical, Duration, Units]
        PlannedStartDate:
          type: string
          format: date-time
        PlannedFinishDate:
          type: string
          format: date-time
        ActualStartDate:
          type: string
          format: date-time
          nullable: true
        ActualFinishDate:
          type: string
          format: date-time
          nullable: true
        RemainingStartDate:
          type: string
          format: date-time
          nullable: true
        RemainingFinishDate:
          type: string
          format: date-time
          nullable: true
        PlannedDuration:
          type: number
          format: double
          description: Planned duration in hours
        ActualDuration:
          type: number
          format: double
        RemainingDuration:
          type: number
          format: double
        TotalFloat:
          type: number
          format: double
          description: Total float in hours; negative indicates critical path
        FreeFloat:
          type: number
          format: double
        CriticalFlag:
          type: boolean
        CalendarObjectId:
          type: integer

    ActivityCreate:
      type: object
      required:
        - Name
        - Id
        - ProjectObjectId
        - WBSObjectId
      properties:
        Id:
          type: string
        Name:
          type: string
        ProjectObjectId:
          type: integer
        WBSObjectId:
          type: integer
        Type:
          type: string
          enum: [Task Dependent, Resource Dependent, Level of Effort, Start Milestone, Finish Milestone]
        PlannedStartDate:
          type: string
          format: date-time
        PlannedFinishDate:
          type: string
          format: date-time

    ActivityUpdate:
      type: object
      properties:
        ObjectId:
          type: integer
        PercentComplete:
          type: number
          format: double
        ActualStartDate:
          type: string
          format: date-time
        ActualFinishDate:
          type: string
          format: date-time
        RemainingDuration:
          type: number
          format: double

    WBSElement:
      type: object
      description: A Work Breakdown Structure element
      properties:
        ObjectId:
          type: integer
        Code:
          type: string
        Name:
          type: string
        ProjectObjectId:
          type: integer
        ParentObjectId:
          type: integer
          nullable: true
        SequenceNumber:
          type: integer
        StatusCode:
          type: string
          enum: [Active, Inactive]
        OBSObjectId:
          type: integer

    Resource:
      type: object
      description: A P6 resource (labor, non-labor, or material)
      properties:
        ObjectId:
          type: integer
        Id:
          type: string
        Name:
          type: string
        ResourceType:
          type: string
          enum: [Labor, Nonlabor, Material]
        UnitOfMeasure:
          type: string
        DefaultUnitsPerTime:
          type: number
          format: double
        PricePerUnit:
          type: number
          format: double
        CalendarObjectId:
          type: integer
        EmailAddress:
          type: string
        OfficePhone:
          type: string
        ParentObjectId:
          type: integer
          nullable: true

    ResourceAssignment:
      type: object
      description: An assignment of a resource to an activity
      properties:
        ObjectId:
          type: integer
        ActivityObjectId:
          type: integer
        ResourceObjectId:
          type: integer
        PlannedUnits:
          type: number
          format: double
        ActualUnits:
          type: number
          format: double
        RemainingUnits:
          type: number
          format: double
        PlannedCost:
          type: number
          format: double
        ActualCost:
          type: number
          format: double
        RemainingCost:
          type: number
          format: double
        PlannedStartDate:
          type: string
          format: date-time
        PlannedFinishDate:
          type: string
          format: date-time
        ActualStartDate:
          type: string
          format: date-time
          nullable: true
        ActualFinishDate:
          type: string
          format: date-time
          nullable: true
        RateSource:
          type: string
          enum: [Resource, Override, Role]

    Baseline:
      type: object
      description: A project baseline snapshot
      properties:
        ObjectId:
          type: integer
        Name:
          type: string
        ProjectObjectId:
          type: integer
        BaselineType:
          type: string
          enum: [Initial Planning Baseline, Mid-Project Baseline, Current Budget, Last Approved Budget]
        LastUpdateDate:
          type: string
          format: date-time

    Error:
      type: object
      properties:
        ErrorCode:
          type: integer
        ErrorMessage:
          type: string