# underlayerhq-com API

**Canonical:** https://apis.io/apis/underlayerhq-com/underlayerhq-com-api/  
**Provider:** underlayerhq-com — https://apis.io/providers/underlayerhq-com/  
**Documentation:** https://underlayerhq.com/docs/api

underlayerhq-com API is one of 2 APIs that [underlayerhq-com](https://apis.io/providers/underlayerhq-com/) publishes on the [APIs.io](https://apis.io/) network, described by a machine-readable OpenAPI specification. This API exposes 6 JSON Schema definitions. The published artifact set on APIs.io includes an OpenAPI specification and 6 JSON Schemas.

underlayerhq-com API as documented publicly: 61 operations. Contract generated from the documentation by API Evangelist (2026-10-31); not the provider's own document.

## Operations (60 of 61)

| Method | Path | Summary |
|---|---|---|
| GET | `/api/v1/completions` | Get course completion records for learners. |
| POST | `/api/v1/courses` | Create an empty course with a required title. |
| PATCH | `/api/v1/courses/c_123` | Update a course with screens, passing score, quiz feedback, or status. |
| POST | `/api/v1/courses/{courseid}/scorm` | POST /api/v1/courses/{courseId}/scorm |
| GET | `/api/v1/me` | Get the API key holder's workspace and plan information. |
| POST | `/api/v1/me` | POST /api/v1/me |
| GET | `/certificates` | Lists certificate templates. |
| POST | `/certificates` | Creates a template. |
| DELETE | `/certificates/{id}` | Deletes a template. |
| GET | `/certificates/{id}` | Fetches one template by id. |
| PATCH | `/certificates/{id}` | Updates a template. |
| GET | `/collections` | Lists every collection in your workspace. |
| POST | `/collections` | Creates a collection. |
| DELETE | `/collections/{id}` | Deletes a collection. |
| GET | `/collections/{id}` | Fetches one collection, including its courses in display order. |
| PATCH | `/collections/{id}` | Renames or updates a collection's description. |
| POST | `/collections/{id}/courses` | Adds a course to the end of the collection. |
| DELETE | `/collections/{id}/courses/{courseid}` | Removes a course from the collection (the course itself isn't deleted). |
| PATCH | `/collections/{id}/courses/{courseid}` | Moves a course one position earlier or later in the collection. |
| GET | `/completions` | Lists runs, newest first. |
| GET | `/completions/{id}` | One run, plus an answers object keyed by block id. |
| GET | `/completions/{id}/attempts` | Every finish of this course by this learner, newest first. |
| GET | `/courses` | Lists every course in your workspace, newest first. |
| POST | `/courses` | Creates a draft course. |
| DELETE | `/courses/{id}` | Deletes a course. |
| GET | `/courses/{id}` | Fetches one course by id. |
| PATCH | `/courses/{id}` | Partially updates a course. |
| GET | `/courses/{id}/scorm` | GET /courses/{id}/scorm |
| GET | `/courses/{id}/translatable` | Every string in the course that can be translated, with the text it currently says — the same set the dashboard's own translation editor is built from, so th... |
| GET | `/courses/{id}/translations` | Lists every locale translated for a course. |
| POST | `/courses/{id}/translations` | Starts a new (initially empty) locale for a course. |
| DELETE | `/courses/{id}/translations/{translationid}` | Deletes a locale entirely. |
| GET | `/courses/{id}/translations/{translationid}` | Fetches one locale's translated fields. |
| PATCH | `/courses/{id}/translations/{translationid}` | Merges the given path/value pairs into the locale's content. |
| POST | `/courses/import/csv` | Creates a course from a CSV, using the same parser as the dashboard's importer. |
| POST | `/courses/import/scorm` | POST /courses/import/scorm |
| POST | `/generate` | Writes a draft course from a prompt, optionally grounded in a URL you point it at. |
| GET | `/generate/{id}` | A job moves queued → processing → completed (with a courseId) or failed (with an error). |
| GET | `/identities` | Lists learners, newest first. |
| POST | `/identities` | Upserts a learner by externalId — call this every time you know who the learner is, as often as you like. |
| DELETE | `/identities/{id}` | Deletes a learner identity. |
| GET | `/identities/{id}` | Fetches one identity by id. |
| POST | `/identities/bulk` | Creates or updates up to 500 learners in one call, upserting by externalId exactly as the single endpoint does — so re-sending a list that is mostly already ... |
| GET | `/issued-certificates` | Lists what your workspace has issued, newest first. |
| GET | `/issued-certificates/{serial}` | Looks one up by the serial printed on the PDF — the identifier the holder actually has. |
| GET | `/me` | Confirms which workspace and plan a key belongs to. |
| POST | `/media` | Uploads one file as multipart/form-data. |
| GET | `/themes` | Lists every theme in your workspace. |
| POST | `/themes` | Creates a theme. |
| DELETE | `/themes/{id}` | Deletes a theme. |
| GET | `/themes/{id}` | Fetches one theme by id. |
| PATCH | `/themes/{id}` | Partially updates a theme. |
| GET | `/v1/completions` | Retrieve completion records including position, progress percent and last seen time for learners. |
| POST | `/v1/identities` | Attach or update a learner identity with name and email. |
| GET | `/v1/issued-certificates` | List all issued certificates for learners. |
| POST | `/v1/media` | Upload a file to your workspace for use in course blocks. |
| GET | `/webhooks` | Lists every webhook endpoint in your workspace. |
| POST | `/webhooks` | Registers a webhook endpoint. |
| DELETE | `/webhooks/{id}` | Deletes a webhook endpoint. |
| GET | `/webhooks/{id}` | Fetches one webhook endpoint by id (no secret included). |

…and 1 more operations. They are listed in full on the page.

## Machine-readable artifacts (7)

- **OpenAPI** — https://artifacts.apis.io/underlayerhq-com/openapi/_ae-authored/underlayerhq-com-openapi-generated.yml
- **JSONSchema** — https://artifacts.apis.io/underlayerhq-com/json-schema/underlayerhq-com-get-issued-certificates-serial-response-schema.json
- **JSONSchema** — https://artifacts.apis.io/underlayerhq-com/json-schema/underlayerhq-com-get-courses-id-translatable-response-schema.json
- **JSONSchema** — https://artifacts.apis.io/underlayerhq-com/json-schema/underlayerhq-com-get-courses-response-schema.json
- **JSONSchema** — https://artifacts.apis.io/underlayerhq-com/json-schema/underlayerhq-com-patch-api-v1-courses-c123-request-schema.json
- **JSONSchema** — https://artifacts.apis.io/underlayerhq-com/json-schema/underlayerhq-com-get-collections-id-response-schema.json
- **JSONSchema** — https://artifacts.apis.io/underlayerhq-com/json-schema/underlayerhq-com-post-api-v1-courses-courseid-scorm-response-schema.json

## Other underlayerhq-com APIs (1)

- [Underlayer API](https://apis.io/apis/underlayerhq-com/underlayer-api/)

---

Profiled by [API Evangelist](https://apievangelist.com) and published on [APIs.io](https://apis.io/apis/underlayerhq-com/underlayerhq-com-api/). The API's provider profile, Kin Score and agent-readiness rating are at https://apis.io/providers/underlayerhq-com/.
