---
title: "Update Upskill Plan Assignment"
method: PATCH
path: "/api/v2/careerhub/{profileEncId}/upskill-plan-assignment/{planId}"
tags: ["Upskill Plan Assignment"]
---

# Update Upskill Plan Assignment

`PATCH /api/v2/careerhub/{profileEncId}/upskill-plan-assignment/{planId}`

## Request

- Base URL: `https://apiv2.eightfold.ai`
- URL: `https://apiv2.eightfold.ai/api/v2/careerhub/{profileEncId}/upskill-plan-assignment/{planId}`
- Auth: none declared. Required headers: `Authorization`
- TypeScript: <https://skmtc.dev/eightfold/apis/api-server-v2-service-service/docs/api/v2/careerhub/:profileEncId/upskill-plan-assignment/:planId/patch.ts> (a function with typed inputs; its response is checked against the schema)

Update an assigned upskilling plan. Fields in the body replace the stored ones; absent fields are left unchanged. `sections` is optional. When it is omitted, the plan's sections are unchanged. When it is sent, it replaces all of the plan's sections: afterwards the plan has exactly the sections, courses and tasks in the body. Send `[]` to remove every section.

## Path parameters

- `profileEncId` string, required
- `planId` string, required

## Headers

- `Authorization` string, required

## Request body

- UpskillingPlanAssignmentPatchSchema
  - `planSubtype` string, nullable: Plan subtype, one of the subtypes configured for your account. Defaults to general.
  - `sections` UpskillingPlanSectionSchema[]: `sections` is optional. When it is omitted, the plan's sections are unchanged. When it is sent, it replaces all of the plan's sections: afterwards the plan has exactly the sections, courses and tasks in the body. Send `[]` to remove every section.
    - `sectionName` string, nullable, required: Section heading
    - `entities` UpskillingPlanEntitySchema[], required: Ordered entities in this section
      - `entityType` string, nullable, required: Entity type: task | course
      - `progress` string, nullable: Entity progress: not_started | in_progress | completed. Assigned plans only; rejected on templates.
      - `courseId` string, nullable: EF course id, as returned in courseId by GET /api/v2/core/courses. Required for course, omit for task.
      - `skills` string[]: Skill names the task covers. Each must be one of the plan's skills, matched ignoring case. Omit for course.
      - `description` string, nullable: Task description. Omit for course.
      - `title` string, nullable: Task title. Required for task, omit for course. Identifies the task across updates.
  - `name` string, nullable, required: Plan title
  - `planDurationDays` integer, nullable: Plan duration in days. Rounded down to whole weeks, at most 693; values under 7 leave it unset.
  - `skills` string[]: Skill names the plan develops. A task's skills must come from this list.
  - `targetDate` integer, nullable: Target completion date (epoch seconds)
  - `description` string, nullable: Plan description
  - `associatedRoleIds` string[]: Role ids, as returned by GET /api/v2/JIE/roles.

## Response `200`

OK

- UpskillingPlanAssignmentSchema
  - `createdAt` integer, nullable: Created timestamp (epoch seconds)
  - `id` integer, nullable: Assignment id (profile_data primary key)
  - `planStatus` string, nullable: invited | in_progress | completed | archived
  - `externalId` string, nullable: Your external record id, unique per assignee. Addresses the plan in the /ext/<externalId> paths.
  - `entityStatuses` UpskillingPlanEntityStatus[], nullable: Per-entity progress
    - `completed` integer[], nullable: Entity ids completed
    - `notStarted` integer[], nullable: Entity ids not started
    - `inProgress` integer[], nullable: Entity ids in progress
    - `entityType` string, nullable: Entity type: task | course | project
  - `name` string, nullable, required: Plan display name
  - `userId` string, nullable: Plan creator user id
  - `completionPercentage` integer, nullable: Completion percentage 0-100 (derived)
  - `metadata` UpskillingPlanMetadata
    - `planSubtype` string, nullable: Plan subtype: general | role | skill
    - `visibility` string, nullable: public | private
    - `tasks` object, nullable: Tasks keyed by entity_id
    - `planDurationDays` integer, nullable: Plan duration in days
    - `planSections` object[], nullable: Ordered plan sections (entity_type + entity_data)
    - `planSectionsLayout` object[], nullable: Plan sections layout metadata
    - `planType` string, nullable: Plan type: profile | role
    - `permissions` object[], nullable: Per-entity permission rows
    - `lastUpdateProfileId` string, nullable: Profile id of last editor
    - `tPublish` integer, nullable: Publish timestamp (epoch seconds)
    - `description` string, nullable: Plan description
  - `profileId` integer, nullable: Assignee profile id
  - `startDate` integer, nullable: Start date (epoch seconds)
  - `lastProgressTs` integer, nullable: Last progress timestamp (epoch seconds, system-set)
  - `calibrationData` UpskillingPlanCalibrationData
    - `jobFunctions` string[], nullable: Job functions
    - `associatedRoleId` string[], nullable: Associated role ids
    - `skills` string[], nullable: Skills associated with this plan
    - `locations` string[], nullable: Locations
    - `businessUnits` string[], nullable: Business units
  - `groupId` string, nullable: Tenant group id
  - `updatedAt` integer, nullable: Updated timestamp (epoch seconds)
  - `lastNotifiedTs` integer, nullable: Last notification timestamp (epoch seconds, system-set)
  - `targetDate` integer, nullable: Target completion date (epoch seconds)
  - `parentPlanId` integer, nullable: Template plan id this assignment was cloned from

## Changes

- **2026-11-03** `9a8b3a927e93`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/eightfold/apis/api-server-v2-service-service/changes/api/v2/careerhub/:profileEncId/upskill-plan-assignment/:planId/patch.md)

---

[API](https://skmtc.dev/eightfold/apis/api-server-v2-service-service.md) - [All operations](https://skmtc.dev/eightfold/apis/api-server-v2-service-service/llms.txt) - [OpenAPI document](https://skmtc.dev/eightfold/apis/api-server-v2-service-service/revisions/9a8b3a927e93?raw)
