Operators

REST API & webhooks

JSON API for Campus and Studio. Mint a Bearer token in Account. Paid enrollments are Stripe Checkout only — this API will not fake a charge.

Authentication

Header: Authorization: Bearer ch_live_…

Endpoints

  • GET /api/v1/courses — published catalog
  • GET /api/v1/courses/:slug — syllabus
  • GET /api/v1/me — profile + enrollments (token)
  • POST /api/v1/enrollments — free courses only. Paid courses return 402.
  • POST /api/webhooks/stripe — verified Stripe webhook; enrolls on checkout.session.completed

Enrollment workflow

  1. Student clicks Enroll
  2. Free course enrolls immediately
  3. Paid course redirects to Stripe Checkout when keys are set
  4. Stripe webhook (or success page) confirms payment_status=paid
  5. Enrollment row + DRM token stub + drip + welcome outbox
  6. If Stripe keys are missing, the UI says payments are not configured