---
title: "Get Upskill Plan Template by External Id"
method: GET
path: "/api/v2/careerhub/upskill-plan-templates/ext/{externalId}"
tags: ["Upskill Plan Template"]
---

# Get Upskill Plan Template by External Id

`GET /api/v2/careerhub/upskill-plan-templates/ext/{externalId}`

## Request

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

Fetch an upskilling plan template by the caller's externalId.

## Path parameters

- `externalId` string, required

## Query parameters

- `exclude` string
- `keyList` string

## Headers

- `Authorization` string, required

## Response `200`

OK

- UpskillingPlanTemplateSchema
  - `status` string, nullable: Template status: draft | published
  - `id` integer, nullable: Template plan id
  - `createdAt` integer, nullable: Created timestamp (epoch seconds)
  - `planSubtype` string, nullable: Plan subtype
  - `sections` UpskillingPlanSectionSchema[], nullable: Ordered sections with their entities; progress is not set on templates
    - `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: Plan title
  - `externalId` string, nullable: Your external record id, unique in the tenant. Addresses the plan in the /ext/<externalId> paths.
  - `userId` string, nullable: Plan creator user id
  - `planDurationDays` integer, nullable: Plan duration in days
  - `publishedAt` integer, nullable: Publish timestamp (epoch seconds)
  - `skills` string[], nullable: Skill names
  - `groupId` string, nullable: Tenant group id
  - `updatedAt` integer, nullable: Updated timestamp (epoch seconds)
  - `description` string, nullable: Plan description
  - `associatedRoleIds` string[], nullable: Role ids, as returned by GET /api/v2/JIE/roles

## 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/upskill-plan-templates/ext/:externalId/get.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)
