← Changelog

Courses, careers, contact, FAQ and legal: enrolment, applications, inboxes, follows and editions

2026.10.14-api-types
The Forumulate team
3 min read
apicoursescareers+3

Courses

Enrolment and progress.

  • PUT …/course/enrolment enrols a learner and records their last lesson.

  • POST …/course/progress/merge adds progress a learner made while signed out.

  • GET /orgs/{orgId}/me/courses returns "My learning".

  • The outline carries enrolment, course (instructors, prerequisites, length), access, and per-lesson locked.

  • …/course/lessons/{slug}/media saves where a learner stopped in a video, across devices.

  • GET …/course/me/stats?tz= returns the learner's streak and XP.

Access and pacing. Set rules with GET/PUT …/course/authoring/access: audience, linear order, prerequisites, and drip by module. A locked lesson answers 403 course.locked, the same on the page, its .md, its PDF and its comments. Free-preview lessons are always open.

Owner tools.

  • …/course/authoring/details and …/authoring/learning (mail, nudges, XP).

  • GET …/learners, learners.csv and funnel. These need the new courses.manage capability (PAT scope courses:manage).

  • PUT …/learners/{userId}/certificate revokes or restores a certificate. Verifying a revoked certificate answers 410.

Catalogue and paths. GET /public/orgs/{orgId}/courses lists the org's public courses, and ?path= narrows it to one path. Learning paths: CRUD at /orgs/{orgId}/course-paths, public reads at /public/orgs/{orgId}/course-paths, and a learner's progress at /orgs/{orgId}/me/course-paths.

Webhooks: course.enrolled, lesson.completed, quiz.passed, course.completed, certificate.issued.

Careers

Applying is checked. An application to a page that is not a role answers 422. An application to a closed role answers 410. A page's metadata.kind (role or page) decides which it is. GET /space-types publishes each type's pageKinds.

Application forms and pipeline.

  • GET/PATCH …/careers/form sets the default questions, questions per role, EEO, consent text, retention and what happens after a reader applies. The public form for a role is at GET /public/…/careers/form?pageId=.

  • Applications take answers, eeo, consent and source.

  • EEO answers are stored on their own and never appear in the inbox, the CSV or the webhook. GET …/eeo-summary returns counts only.

  • Also new: applications.csv, a custom pipeline, and per-application notes and rating.

  • Webhook: application.created.

Integrations.

  • …/careers/ats imports roles from Greenhouse, Lever or Ashby and syncs them every hour.

  • /orgs/{orgId}/google-indexing and …/careers/indexing submit roles to Google's Indexing API with your own key.

  • The careers feeds and job alerts are covered in the feeds release.

Contact

Form and topics.

  • GET/PATCH …/contact/form sets the form's fields, wording, successMessage, redirectUrl, spamFilter, workEmailOnly and bookingUrl.

  • Departments become topics, with a description, an icon, their own fields, a redirect, an auto-assignee and an auto-reply. The old {name, email} shape is still accepted.

  • The public contact read adds topics (without addresses) and channels.

  • A 422 on submit names each field that failed.

  • POST /public/…/contact/submissions accepts a form post that works without JavaScript.

Inbox.

  • The list takes ?folder= (inbox, unread, archived, spam or all).

  • Without folder, the list leaves out spam. A message the spam filter flags never fires contact.submitted, an alert or an auto-reply.

  • PATCH …/contact/{id}/status moves a message between folders, and GET …/contact/export.csv exports them.

  • GET/DELETE /orgs/{orgId}/contact-submissions?email= finds or erases one sender's data.

  • Webhook: contact.submitted.

FAQ

  • GET /public/…/faq takes ?locale= and returns locale and locales.

  • Questions carry featured, views, helpful and audience. Sections carry slug, description and icon.

  • Feeds can be sorted by helpful and views.

  • POST /public/…/faq/search-events records the searches that found nothing, for the no-result report.

  • Following a section is covered in the feeds release.

Editions.

  • GET /public/orgs/{orgId}/legal/{kind}/versions/{n|current|next} reads one edition, and …/{kind}/diff?from=&to= compares two.

  • /versions adds status, effectiveAt, changeNote and upcoming.

  • Give an edition a future effective date to schedule it. Public surfaces serve the edition in force until that date.

  • PUT /orgs/{orgId}/legal/{kind}/editions/{n} corrects an edition's change note, and the correction is audited.

More public reads.

  • GET /public/orgs/{orgId}/legal/{kind}/subprocessors: the subprocessor table, with changes.

  • GET /public/orgs/{orgId}/legal/trust.json: the org's trust-centre links.

  • Document feeds and subscribe are covered in the feeds release.