• Documentation
  • Introduction
    • The member journey
  • Training
    • Create a program
    • Courses and sections
    • Lessons, media and publication
    • Milestones and paths
    • Tasks and deliverables
    • Cohorts and groups
  • Student & Community
    • Joining a school
    • Learning and resuming
    • Submitting and revising work
    • Calendar and lives
    • Spaces and questions
    • Reading progress
  • Coaching
    • Roles and assignments
    • Member context and work queue
    • Reviews and feedback
    • Sessions and interventions
    • Cohort cockpit and live operations
  • Leads & Qualification
    • People, leads and applications
    • Contacts and import
    • Qualification forms
    • Application triage
  • Setting & Booking
    • Setter scope
    • Sales availability
    • Share a booking link
    • Prospect booking
    • Agenda and booking management
    • Prepare a call and share its meeting link
  • Closing, Offers & Payments
    • Closer scope
    • Compose an offer
    • Share a nominal payment link
    • Buyer checkout and access
    • Instalments
    • Offline payment
    • Track payment and access failures
    • Stripe school account
  • Administration & Integrations
    • Organization roles and domains
    • API keys and tenant binding
    • Webhooks
    • Payment setup
  • API quickstart
  • API reference
    • Connect with MCP
    • Enrollments
      • GETGet the enrollment timeline
      • GETGet the coaching briefing
      • POSTPause an enrollment
      • POSTResume an enrollment
      • POSTExtend a deadline
      • POSTTransfer an enrollment
      • POSTClose an enrollment
      • POSTSubmit an outcome measure
      • GETList outcome measures
      • GETList deadline extensions
      • DELETECancel a deadline extension
      • GETList enrollments
      • POSTEnroll a person
    • Cohorts
      • GETGet the cohort cockpit
      • GETList the enrollments behind a cockpit signal
      • PATCHConfigure a cohort
      • POSTMove a cohort to another phase
      • POSTCreate a cohort
      • POSTChange a cohort's status
    • Coaching sessions
      • GETList coaching sessions
      • GETGet a coaching session
      • POSTRecord a coaching session
      • POSTAppend coaching session entries
    • Interventions
      • GETList interventions
      • POSTPlan an intervention
      • POSTClose an intervention
    • Live sessions
      • PATCHRecord live attendance
      • GETList live attendance
      • GETRead one enrollment's attendance
      • GETList live sessions
      • POSTSchedule a live session
      • PATCHUpdate a live session
      • POSTCancel a live session
      • GETGet live session
    • Programs
      • GETList programs
      • POSTCreate a program
      • GETRead a program
      • PATCHUpdate a program
      • POSTArchive a program
      • POSTRestore a program
    • Courses
      • GETList the courses of a program
      • POSTCreate a course
      • PATCHUpdate a course
      • POSTRename a course
      • POSTArchive a course
      • POSTReorder the courses of a program
      • POSTUpload a course cover
    • Sections
      • GETList the sections of a course
      • POSTCreate a section
      • POSTRename a section
      • POSTDissolve a section
      • POSTReorder the sections of a course
      • POSTMove a lesson into a section
      • DELETETake a lesson out of its section
    • Lessons
      • GETList the lessons of a program
      • POSTCreate a lesson
      • GETRead a lesson
      • PATCHUpdate a lesson
      • POSTPublish a lesson
      • POSTArchive a lesson
      • POSTMove a lesson to another course
      • POSTReorder the lessons of a program
      • POSTAttach a resource
      • DELETEDetach a resource
      • POSTReorder the resources of a lesson
      • POSTUpload a lesson resource
      • POSTUpload a lesson video
      • GETRead a lesson by its identifier
      • PATCHUpdate a lesson by its identifier
      • GETRead the discussion of a lesson
      • POSTComment on a lesson
    • Milestones
      • GETList the milestones of a program
      • POSTCreate a milestone
      • PATCHUpdate a milestone
      • POSTArchive a milestone
      • POSTReorder the milestones of a program
      • GETList the contributions of a milestone
      • POSTAttach a contribution
      • DELETEDetach a contribution
    • People
      • POSTImport people
      • POSTLink a duplicate person
      • DELETEUnlink a duplicate person
    • Delivery analytics
      • GETGet delivery analytics
    • Sales availability
      • GETRead sales availability
      • GETPreview sales slots
      • PUTReplace sales availability
      • GETList eligible sales closers
    • Community
      • POSTUpload an attachment
      • POSTAttach to a thread
      • POSTCreate a space
      • POSTPost a thread
      • POSTReply to a thread
      • POSTLink a thread
      • GETList spaces
      • GETRead a thread
      • GETSearch the community
    • Offer payments
      • POSTPause automatic charging
      • DELETEResume automatic charging
      • POSTCharge an instalment now
      • GETGet collections dashboard
    • Member tasks
      • POSTCreate a member task
      • GETList the tasks of a milestone
      • PUTUpdate a member task
      • POSTArchive a member task
      • POSTReorder the tasks of a milestone
      • GETRead a task
      • GETList program tasks
    • Deliverables
      • POSTCreate a deliverable
      • GETList the deliverables of a task
      • GETGet a deliverable
      • PUTUpdate a deliverable
      • POSTArchive a deliverable
    • Groups
      • GETList groups
      • POSTCreate a group
      • GETGet a group
      • PATCHUpdate a group
      • POSTAdd a Group membership
      • DELETERemove a Group membership
    • Paths
      • GETList program paths
      • POSTCreate a path
      • GETGet a path
      • PATCHVersion or promote a path
    • Webhooks
      • GETList webhook subscriptions
      • POSTCreate a webhook subscription
      • GETGet a webhook subscription
      • PATCHUpdate a webhook subscription
      • DELETEDelete a webhook subscription
      • POSTVerify a webhook subscription
      • POSTRotate a webhook secret
      • POSTPause or reactivate a webhook subscription
      • GETList webhook deliveries
      • GETGet a webhook delivery
      • POSTReplay a webhook delivery
    • Media
      • GETList media
      • POSTUpload a media
      • PATCHRename a media
      • DELETEDelete a media
    • Bookings
      • GETList the open slots of a booking link
      • POSTSave a booking lead
      • POSTBook a call for a prospect
      • GETGet booking details
      • GETList bookings
      • GETGet booking
      • PATCHUpdate booking details
      • GETGet booking agenda
      • GETGet closer meeting link
      • GETList person bookings
      • PUTSet closer meeting link
      • GETList booking links
      • POSTSend a booking email
      • GETRead booking follow-up
      • POSTCreate booking link
      • GETGet booking link
      • PUTRecord booking attendance
      • GETRead booking reminder settings
      • PATCHUpdate booking link
      • POSTReschedule booking
      • PUTSet booking reminder settings
      • POSTCancel booking
      • GETList booking reassignment candidates
      • POSTReassign booking
      • GETList booking reschedule slots
      • GETList booking reassignment slots
    • My learning
      • GETList my enrollments
      • GETGet my learning context
      • GETList my lessons
      • GETGet one of my lessons
      • GETList my agenda
      • GETGet my lesson note
      • PUTSave my lesson note
      • DELETEDelete my lesson note
      • GETList my lesson notes
      • GETGet my lesson's agent section
      • GETList my tasks
      • GETRead my submission
      • POSTOpen my submission draft
      • PUTSave my submission draft
      • POSTSubmit my work
      • POSTResubmit my work
    • Forms
      • GETList forms
      • POSTCreate a form
      • GETGet a form
      • PATCHUpdate form identity
      • DELETEDelete a form
      • PUTSave form definition
      • PUTSet form theme
      • PUTSet form qualification
      • PUTSet submission mode
      • PUTOpen or close a form
      • POSTPublish a form
      • POSTUnpublish a form
      • GETList form responses
      • GETGet a form response
      • GETRead form statistics
      • POSTRetry response qualification
      • GETRead form definition
      • GETRead form theme
      • GETRead form qualification
      • GETRead form submission-settings
      • GETRead form identity fields
      • PUTSet form identity fields
    • Calendar connections
      • GETList calendar connections
      • GETRead a calendar connection
      • POSTRequest calendar consent
      • GETList writable calendars
      • PUTSelect a calendar
      • DELETEDisconnect a calendar
    • Offers
      • GETList offers
      • POSTCreate an offer
      • GETGet an offer
      • PATCHUpdate an offer
      • GETGet composer options
    • Responsibilities
      • GETList responsibilities
      • POSTAssign a responsibility
      • DELETERemove a responsibility
    • Submission reviews
      • GETList submission reviews
      • GETRead a submission review
      • POSTTake a submission in review
      • POSTDecide a submission review
    • Closers
      • GETList closer invitations
      • POSTInvite a closer
      • POSTResend a closer invitation
      • DELETECancel a closer invitation
      • GETRead commercial responsibility
      • PUTAssign commercial responsibility
      • GETRead my sales availability
      • PUTUpdate my sales availability
      • GETRead my closer setup
    • Personal preparation
      • GETRead my work profile
      • PATCHUpdate my work profile
      • GETRead my preparation
    • Video library
      • GETList video resources
      • GETGet a video resource
      • POSTPublish a video resource
      • PATCHUpdate a video resource
      • POSTUnpublish a video resource
      • POSTRepublish a video resource
    • Video questions
      • POSTAsk a question
      • GETList my questions
      • GETGet my question
      • GETList received questions
      • PATCHAssign a question
      • POSTAnswer a question
      • POSTCancel a question
  1. Documentation
  2. API reference
  3. Enrollments
  4. Get the enrollment timeline
HomeBlogDocumentationPricingContact

Get the enrollment timeline

PreviousEnrollmentsNextGet the coaching briefing
On this page
AuthorizationOrganization roleBusiness authorizationPath parametersQuery parametersExampleResponseResponse fieldsExample responseNotesRelated

GET /api/v1/enrollments/{enrollmentId}/timeline

Returns what changed on one enrollment, most recent first: actions, blockers, notes, coaching sessions, attendance, lesson and task completions, submissions and reviews. Each line is a dated fact, enriched with its event log entry when one exists — actor, correlation id and sequence. Nothing is stored: the timeline is recomputed on read over the caller's own scope.

Authorization

Organization role

Role in the organizationThis endpoint
OWNERAllowed — the whole history
ADMINAllowed — the whole history
MEMBERConditional — only with a business role below

Business authorization

RequirementRule for this endpoint
Business roleprogram_director scoped to the organization, or coach scoped to this enrollment
Resource scopeEnrollment of the organization attached to the API key
ParticipationA coach reads only the enrollments they are assigned to
Resource stateNone — an enrollment in any status can be read

A bearer with no scope on this enrollment receives 404, exactly like an unknown enrollment: the endpoint never confirms that an enrollment exists.

Path parameters

ParameterTypeRequiredDescription
enrollmentIdUUIDyesEnrollment visible from the key's organization

Query parameters

ParameterTypeRequiredDescription
typestring listnoComma-separated families to keep. Omitted means every family
fromISO 8601 stringnoKeeps events at or after this instant, UTC
toISO 8601 stringnoKeeps events at or before this instant, UTC
cursorstringnoOpaque position returned as nextCursor by the previous page

Accepted type values: enrollment, next_action, blocker, note, coaching, attendance, lesson, member_task, submission. An unknown value is a 400, never a silent fallback to the full list. A cursor that does not decode is a 400 too; changing a filter invalidates the cursor, so request the first page again.

Example

bash
curl "$COHORTE_API_BASE_URL/api/v1/enrollments/ENROLLMENT_ID/timeline?type=blocker,coaching&from=2026-08-01T00:00:00.000Z" \
  -H "x-api-key: $COHORTE_API_KEY"

Response

  • 200 OK — one page of at most 20 events, most recent first.
  • 400 Bad Request — unknown type, unparseable from/to, or invalid cursor.
  • 401 Unauthorized — the key is missing, invalid, or no longer attached to a member.
  • 404 Not Found — the enrollment is unknown, belongs to another organization, or the bearer has no scope on it.

Response fields

FieldTypeNullableDescription
successbooleannotrue for a successful request
data.events[].idUUIDnoIdentifier of the underlying fact
data.events[].keystringnoStable line identity, type:id; also the second key of the cursor
data.events[].familystringnoOne of the nine families listed above
data.events[].typestringnoPrecise event name, for example blocker.opened
data.events[].occurredAtISO 8601 stringnoInstant of the fact, UTC
data.events[].subjectstringyesFree text of the fact: action title, blocker description, lesson name
data.events[].qualifierstringyesEnumerated value: blocker type, attendance status, review decision
data.events[].countsobjectyesCoaching sessions only: visible notes, decisions and commitments
data.events[].actorobjectno{kind} plus userId and name when kind is user
data.events[].correlationIdUUIDyesShared by every line a single command produced; null without an event
data.events[].sequencenumberyesEvent log order; null when the fact predates the log
data.events[].maskedEntriesnumbernoCoach-only entries removed for this reader
data.nextCursorstringyesPosition of the next page, null on the last one
data.appliedFiltersobjectnotypes, from and to as the server understood them
data.provenanceobjectnosource and the asOf instant of the computation

actor.kind is user, member, system or unknown. unknown means the fact predates the event log — it does not mean nobody acted. A member acting on their own enrollment is reported as member, without an account identifier.

Example response

json
{
  "success": true,
  "data": {
    "events": [
      {
        "id": "6f1c2b90-0000-4000-8000-000000000001",
        "key": "blocker.opened:6f1c2b90-0000-4000-8000-000000000001",
        "family": "blocker",
        "type": "blocker.opened",
        "occurredAt": "2026-09-01T16:05:00.000Z",
        "subject": "My local environment will not start after the install.",
        "qualifier": "technical",
        "counts": null,
        "actor": {"kind": "member"},
        "correlationId": null,
        "sequence": null,
        "maskedEntries": 0
      }
    ],
    "nextCursor": null,
    "appliedFilters": {"types": ["blocker"], "from": null, "to": null},
    "provenance": {
      "source": "timeline_projection",
      "asOf": "2026-09-02T10:00:00.000Z"
    }
  }
}

Notes

  • The endpoint is read-only: it emits no event, writes no audit entry and triggers no job.
  • One fact is one line. A command that produced several facts returns several lines sharing a correlationId; that is not a duplicate, and replaying an idempotent command never adds one.
  • Coaching entries restricted to coaches are masked, not removed, for a reader without write access: the session line stays, its counters cover only what that reader may see, and maskedEntries says how many were hidden.
  • A fact recorded before the event log carries correlationId: null, sequence: null and an unknown actor. It is still returned.
  • Page size is 20. Paginate with nextCursor; keep the same filters, since a cursor is only valid for the filtered set that produced it.

Related

  • List coaching sessions
  • Get the cohort cockpit
  • List the enrollments behind a cockpit signal