• 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. Extend a deadline
HomeBlogDocumentationPricingContact

Extend a deadline

PreviousResume an enrollmentNextTransfer an enrollment
On this page
AuthorizationOrganization roleBusiness authorizationPath parametersRequest headersRequest bodyExampleResponseResponse fieldsExample responseAgent recipeNotesRelated

POST /api/v1/enrollments/{enrollmentId}/deadline-extensions

Grants one member extra time on one action of their program. The program rule does not move, and no other enrollment is affected: the exception is attached to this enrollment and this action only.

From the moment it is granted, the new date is the one everything reads — the member's plan, your work queue, the cohort dashboard, the current action and its reminder, and the deadline check that refuses a late deliverable. Cancel the extension and the program rule applies again.

Authorization

Organization role

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

Business authorization

RequirementRule for this endpoint
Business roleprogram_director scoped to the organization, or coach assigned to this enrollment
Resource scopeEnrollment of the organization attached to the API key
ParticipationAn assigned coach can grant and cancel an extension on their own enrollments
Resource stateThe enrollment must not be closed; the action must be published, dated and not yet completed

Giving someone more time is the gesture of whoever accompanies them, so it takes the same authorization as closing a participation: an assigned coach can do it, for their own enrollment and no other. A platform-wide role grants nothing here. An enrollment of another organization is refused without revealing whether it exists.

Path parameters

ParameterTypeRequiredDescription
enrollmentIdUUIDyesEnrollment visible from the key's organization

Request headers

HeaderRequiredDescription
x-api-keyyesAPI key created for this organization
Idempotency-KeyyesStable key for this extension intention
X-Correlation-IdnoCaller correlation id, returned or generated

Request body

FieldTypeRequiredNullableDescription
memberTaskIdUUIDyesnoProgram action to extend: published, with a deadline, not completed by this member
dueAtISO 8601 stringyesnoNew deadline. Must be in the future and strictly after the inherited deadline
reasonstringyesno1 to 2000 characters; visible to your team and in the enrollment history, not to the member

An action can be extended when all three hold:

  • it is published — a draft is not proposed to the member yet, an archived one no longer is;
  • it has a deadline, either a fixed date or a relative one. Granting a date where the program asks for none would invent a constraint instead of lifting one;
  • it is not completed by this member. The fact is acquired; pushing its deadline changes nothing.
json
{
  "memberTaskId": "3b0e51a4-0000-4000-8000-000000000000",
  "dueAt": "2026-09-20T18:00:00.000Z",
  "reason": "Short hospital stay, resumption agreed."
}

Example

bash
curl -X POST "$COHORTE_API_BASE_URL/api/v1/enrollments/ENROLLMENT_ID/deadline-extensions" \
  -H "x-api-key: $COHORTE_API_KEY" \
  -H "Idempotency-Key: extend-2026-09-05" \
  -H 'Content-Type: application/json' \
  -d '{"memberTaskId":"ACTION_ID","dueAt":"2026-09-20T18:00:00.000Z","reason":"Short hospital stay, resumption agreed."}'

Response

  • 201 Created — the member now has until the new date on that action.
  • 200 OK — the same Idempotency-Key replayed the original extension; nothing was written a second time.
  • 400 Bad Request — missing Idempotency-Key, invalid JSON, an empty reason, a date in the past, or a date that is not after the inherited deadline.
  • 401 Unauthorized — the key is missing, invalid, or no longer attached to a member.
  • 403 Forbidden — the bearer cannot extend deadlines for this enrollment.
  • 404 Not Found — the enrollment is unknown or belongs to another organization.
  • 409 Conflict — the participation is closed, or the action does not belong to this enrollment's program, has no deadline, or is already completed by this member.

Response fields

FieldTypeNullableDescription
successbooleannotrue for a successful request
replayedbooleannotrue when the idempotency key replayed an extension
data.idUUIDnoExtension identifier
data.enrollmentIdUUIDnoEnrollment the exception belongs to
data.memberTaskIdUUIDnoProgram action whose deadline moved
data.memberTaskTitlestringyesTitle of that action
data.dueAtISO 8601 stringnoDeadline granted to this member, in UTC
data.reasonstringnoReason given, for your team
data.createdByUUIDnoAccount that granted the extension
data.createdByNamestringyesDisplay name of that account
data.createdAtISO 8601 stringnoWhen the extension was recorded, in UTC
data.revokedAtISO 8601 stringyesWhen it was cancelled or replaced; null while it applies
data.revokedByUUIDyesAccount that cancelled it
data.revokedByNamestringyesDisplay name of that account
data.revokeReasonstringyesreplaced when a newer extension took over, otherwise null
data.activebooleannotrue while this extension is the one that applies
correlationIdUUIDnoCorrelation id for support

Example response

json
{
  "success": true,
  "replayed": false,
  "data": {
    "id": "7c1d9a20-0000-4000-8000-000000000000",
    "enrollmentId": "4af4cd8d-0000-4000-8000-000000000000",
    "memberTaskId": "3b0e51a4-0000-4000-8000-000000000000",
    "memberTaskTitle": "Record ten discovery calls",
    "dueAt": "2026-09-20T18:00:00.000Z",
    "reason": "Short hospital stay, resumption agreed.",
    "createdBy": "6d41ab55-0000-4000-8000-000000000000",
    "createdByName": "Ines Fabre",
    "createdAt": "2026-09-05T10:00:00.000Z",
    "revokedAt": null,
    "revokedBy": null,
    "revokedByName": null,
    "revokeReason": null,
    "active": true
  },
  "correlationId": "0f6b1d92-0000-4000-8000-000000000000"
}

Agent recipe

  1. Read the enrollment's program actions and pick the one the member needs time on.
  2. Grant the extension with a date after the current deadline and a reason your team will read later.
  3. Read the enrollment timeline to confirm — it now carries a "deadline extended" entry naming the action and both dates.
  4. Cancel it when the exception no longer applies; the program rule takes over again.

Notes

  • The date you grant is absolute. If the participation is paused and resumed later, the pause shifts the program rule for that member — it does not move the date you granted, and it does not move the reminder that follows it. Cancel the extension and the member lands on the shifted program rule.
  • Extending again replaces the previous extension. One POST on an action that already has one cancels it (revokeReason: "replaced") and writes the new one, in a single transaction. The whole history is kept.
  • The new date must be after the inherited one, which is computed from the program rule at the moment of the call — never from the extension currently in place. An extension never shortens a deadline.
  • The current action and its reminder follow. When the member's current action is the derived one for that program action, its deadline is updated and its reminder is rescheduled on the day before the new date, inside the same transaction.
  • The member sees the date, and only the date. Neither the reason, nor the author, nor the inherited deadline reaches their screens.
  • A deliverable becomes submittable again until the new deadline: the late-submission refusal reads the same date.
  • No notification, email or message is sent by this endpoint, to the member or to anyone else.
  • Retrying with the same Idempotency-Key returns the original extension and writes no second record, audit entry or event.
  • The extension, the current action update, the reminder events, the audit entry and the domain event are written in one transaction.

Related

  • List deadline extensions
  • Cancel a deadline extension
  • Pause an enrollment
  • Resume an enrollment
  • Close an enrollment
  • Read an enrollment timeline