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

# Create Upskill Plan Assignment

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

## Request

- Base URL: `https://apiv2.eightfold.ai`
- URL: `https://apiv2.eightfold.ai/api/v2/careerhub/{profileEncId}/upskill-plan-assignment`
- 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/post.ts> (a function with typed inputs; its response is checked against the schema)

Create an assigned upskilling plan for the given employee from an external system. 409 with the existing planId if externalId already exists for this profile. `sections` is optional. When it is omitted, the plan is created with one empty section.

## Path parameters

- `profileEncId` string, required

## Headers

- `Authorization` string, required

## Request body

- UpskillingPlanAssignmentCreateSchema
  - `externalId` string, nullable: Your external record id, unique per assignee. Addresses the plan in the /ext/<externalId> paths.
  - `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 is created with one empty 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.
  - `creatorProfileId` string, nullable: Encoded profile id of the plan creator, from GET /api/v2/core/employees. Must be a user who can sign in; the creator can edit the plan. Required for API-key callers. A signed-in caller is the creator: omit it, or send your own id.
  - `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/post.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)
