Learners

List, create, update and archive the learners in your team.

  • Scopeslearners:readlearners:write

Data requests act inside the key’s centre as the person who created the key: each needs the scope and that person’s current EduMark permission. See auth and pagination.

List learners

GET/v1/learners

Learners in your team, newest first. Requires learners:read, and the key's creator must be able to see people in EduMark. Email and phone are included when they can manage people.

Scope learners:read

Parameters

List learners: parameters
FieldDetails
limitintegerItems per page, 1 to 100.1 to 100Default 25
cursorstring, optionalThe next_cursor from the previous page.Up to 512 characters
updated_sincestring, optionalOnly learners created or changed since this ISO-8601 time.
statusenum, optionalOne of active, archived
cohort_idstring, optionalUp to 200 characters
emailstring, optionalExact email address (needs people management).Up to 254 characters
external_idstring, optionalYour organisation's identifier.Up to 160 characters

Headers

List learners: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Responses

StatusMeaning
200Successful Response
400Request rejected. Inspect error.code and request_id; failed work is not billed.
401Request rejected. Inspect error.code and request_id; failed work is not billed.
403Request rejected. Inspect error.code and request_id; failed work is not billed.
404Request rejected. Inspect error.code and request_id; failed work is not billed.
409Request rejected. Inspect error.code and request_id; failed work is not billed.
410Request rejected. Inspect error.code and request_id; failed work is not billed.
413Request rejected. Inspect error.code and request_id; failed work is not billed.
415Request rejected. Inspect error.code and request_id; failed work is not billed.
422Validation Error
429Request rejected. Inspect error.code and request_id; failed work is not billed.
503Request rejected. Inspect error.code and request_id; failed work is not billed.

Create a learner

POST/v1/learners

Creates the learner's record. An invitation to sign in is sent only when send_invitation is true (an email is then required). Without an email, give an external_id or unique_learner_number. Send a unique Idempotency-Key.

Scope learners:write

Headers

Create a learner: headers
FieldDetails
Idempotency-KeystringRequiredA unique key per new learner.
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Create a learner: request body
FieldDetails
first_namestringRequiredUp to 80 characters
last_namestringUp to 80 charactersDefault ""
emailstring (email), optionalNeeded to invite the learner. Without one the learner is a record only.
phonestring, optionalUp to 50 characters
preferred_namestring, optionalUp to 160 characters
external_idstring, optionalYour identifier, e.g. a student number.Up to 160 characters
unique_learner_numberstring, optionalUp to 160 characters
cohort_idsarray of stringUp to 100 items
send_invitationbooleanEmail the learner an invitation to sign in now. Needs email.Default false

Responses

StatusMeaning
201Successful Response
400Request rejected. Inspect error.code and request_id; failed work is not billed.
401Request rejected. Inspect error.code and request_id; failed work is not billed.
403Request rejected. Inspect error.code and request_id; failed work is not billed.
404Request rejected. Inspect error.code and request_id; failed work is not billed.
409Request rejected. Inspect error.code and request_id; failed work is not billed.
410Request rejected. Inspect error.code and request_id; failed work is not billed.
413Request rejected. Inspect error.code and request_id; failed work is not billed.
415Request rejected. Inspect error.code and request_id; failed work is not billed.
422Validation Error
429Request rejected. Inspect error.code and request_id; failed work is not billed.
503Request rejected. Inspect error.code and request_id; failed work is not billed.

Get a learner

GET/v1/learners/{learner_id}

Scope learners:read

Parameters

Get a learner: parameters
FieldDetails
learner_idstringRequired

Headers

Get a learner: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Responses

StatusMeaning
200Successful Response
400Request rejected. Inspect error.code and request_id; failed work is not billed.
401Request rejected. Inspect error.code and request_id; failed work is not billed.
403Request rejected. Inspect error.code and request_id; failed work is not billed.
404Request rejected. Inspect error.code and request_id; failed work is not billed.
409Request rejected. Inspect error.code and request_id; failed work is not billed.
410Request rejected. Inspect error.code and request_id; failed work is not billed.
413Request rejected. Inspect error.code and request_id; failed work is not billed.
415Request rejected. Inspect error.code and request_id; failed work is not billed.
422Validation Error
429Request rejected. Inspect error.code and request_id; failed work is not billed.
503Request rejected. Inspect error.code and request_id; failed work is not billed.

Update a learner

PATCH/v1/learners/{learner_id}

Changes only the fields you send. For learners who sign in, identifiers and cohorts are managed in EduMark. Changing an email signs the learner out everywhere.

Scope learners:write

Parameters

Update a learner: parameters
FieldDetails
learner_idstringRequired

Headers

Update a learner: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Update a learner: request body
FieldDetails
first_namestring, optionalUp to 80 characters
last_namestring, optionalUp to 80 characters
emailstring (email), optional
phonestring, optionalUp to 50 characters
preferred_namestring, optionalUp to 160 characters
external_idstring, optionalUp to 160 characters
unique_learner_numberstring, optionalUp to 160 characters
cohort_idsarray of string, optionalReplaces the learner's cohorts.Up to 100 items

Responses

StatusMeaning
200Successful Response
400Request rejected. Inspect error.code and request_id; failed work is not billed.
401Request rejected. Inspect error.code and request_id; failed work is not billed.
403Request rejected. Inspect error.code and request_id; failed work is not billed.
404Request rejected. Inspect error.code and request_id; failed work is not billed.
409Request rejected. Inspect error.code and request_id; failed work is not billed.
410Request rejected. Inspect error.code and request_id; failed work is not billed.
413Request rejected. Inspect error.code and request_id; failed work is not billed.
415Request rejected. Inspect error.code and request_id; failed work is not billed.
422Validation Error
429Request rejected. Inspect error.code and request_id; failed work is not billed.
503Request rejected. Inspect error.code and request_id; failed work is not billed.

Archive a learner

POST/v1/learners/{learner_id}/archive

Stops the learner signing in and keeps their record, work and history. EduMark never deletes learners through the API.

Scope learners:write

Parameters

Archive a learner: parameters
FieldDetails
learner_idstringRequired

Headers

Archive a learner: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Responses

StatusMeaning
200Successful Response
400Request rejected. Inspect error.code and request_id; failed work is not billed.
401Request rejected. Inspect error.code and request_id; failed work is not billed.
403Request rejected. Inspect error.code and request_id; failed work is not billed.
404Request rejected. Inspect error.code and request_id; failed work is not billed.
409Request rejected. Inspect error.code and request_id; failed work is not billed.
410Request rejected. Inspect error.code and request_id; failed work is not billed.
413Request rejected. Inspect error.code and request_id; failed work is not billed.
415Request rejected. Inspect error.code and request_id; failed work is not billed.
422Validation Error
429Request rejected. Inspect error.code and request_id; failed work is not billed.
503Request rejected. Inspect error.code and request_id; failed work is not billed.