Yeda Client Integration Guide
v1.0 · 2026-04-20

Yeda LMS — Client Integration Guide

A practical, task-oriented guide for partners and integrators who want to connect their product to Yeda LMS.

v1.0 · Last updated 2026-04-20

This document answers two questions:

  1. What can I do through the Yeda API? — concrete capabilities you can build on top of.
  2. How do I get started? — connection steps, authentication, first calls, and copy-paste examples.

1. Getting started

1.1 What you need from Yeda

Before writing any code, request the following from your Yeda account manager:

ItemRequired for
Base API URL for your collegeAll requests (https://<college-domain>/api)
college_id and current_college_idEvery login / registration call
Admin or super-admin username + password (for server-to-server integrations only)Admin-authenticated flows and College JWT issuance
Terminal / merchant configuration (if you process payments) (Optional)Tranzila or Cardcom integration
Vimeo OAuth credentials (if you want custom video hosting) (Optional)Vimeo integration

1.2 Access modes and authentication

Pick the one that matches your use-case:

ScenarioAuth method
Mobile / web app acting on behalf of a logged-in studentUser access token (POST /api/auth/login)
Admin integration endpoints that explicitly support College JWTCollege JWT (POST /api/auth/colleges/{college}/jwt/byAdmin)
White-label website or portal flows/api/wl/* endpoints; some are public, protected ones use the same user Bearer token

Details of each are in §2.

1.3 First call: health check

Verify you can reach the API:

curl -s https://your-college.yeda.ai/api/health
# → {"status":"ok"}

1.4 Second call: log a student in

curl -s https://your-college.yeda.ai/api/auth/login \
  -H 'Content-Type: application/json' \
  -d '{
    "fieldname":  "email",
    "username":   "student@example.com",
    "password":   "…",
    "college_id": 40
  }'

Successful response returns auth.access_token, auth.expires_at, user, and isDocumentChecked. Use auth.access_token as a Bearer token for protected calls.

1.5 Third call: fetch the current user

curl -s https://<college-domain>/api/current-user \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'

2. Authentication

2.1 User access tokens

Yeda issues OAuth2 personal access tokens (Laravel Passport). Present them as:

Authorization: Bearer <access_token>
SettingValue
Access token lifetime15 days

Log in

POST /api/auth/login
Content-Type: application/json

{
  "fieldname":          "email",          // or "username"
  "username":           "student@ex.com",
  "password":           "…",
  "college_id":         40,
  "current_college_id": 40
}

Response (AuthResource):

{
  "auth": {
    "access_token":   "eyJ0eXAiOiJKV1Qi…",
    "firebase_token": "eyJhbGciOi…",
    "expires_at":     "2026-05-05 14:30:00",
    "suspended":      0
  },
  "user":              { /* current user — see §4.2 */ },
  "isDocumentChecked": 1
}

Alternative login flows

EndpointUse-case
POST/api/auth/login-by-emailLogin with an explicit email field
POST/api/auth/auto-loginExchange a stored refresh token for a fresh access token
POST/api/auth/firebaseSign in with a Firebase ID token (iOS / Android social sign-in)
POST/api/auth/googleSign in with a Google OAuth access token
POST/api/sign-in-via-phone-number/request…/sign-inSMS-based registration and login

Register

POST /api/auth/register
Content-Type: application/json

{
  "college_id": 40,
  "email":      "new@example.com",
  "phone":      "+972501234567",   // optional, Israeli E.164
  "password":   "verys3cret!"
}

Forgot / reset password

POST /api/auth/forgot            # request reset email
POST /api/website/auth/reset     # complete reset
#   body: token, email, college_id, password, password_confirmation

Verify email / phone

After registration, Yeda may require verification before allowing further actions.

⚠ Important: all four verification endpoints below require a valid user access token (Authorization: Bearer <access_token> — i.e. the auth:api middleware). The user must already be logged in.

POST /api/auth/email-verification/send-code
POST /api/auth/email-verification/check-code   { "email_verification_code": 1234 }
GET  /api/auth/user/send-sms-code
POST /api/auth/user/check-sms-code             { "sms_code": "1234" }

2.2 College JWT (server-to-server)

For back-office automation that acts on behalf of your organisation (rather than a logged-in user), obtain a short-lived JWT:

POST /api/auth/colleges/{college}/jwt/byAdmin
Content-Type: application/json

{ "login": "admin@your-college.co.il", "password": "…" }
{ "token": "eyJhbGciOi…" }

Use this token like a Bearer access token (Authorization: Bearer <jwt>), but only on endpoints that support the college-jwt-or-api middleware — not on all API routes. Endpoints that accept the College JWT are listed in §4.13. On other endpoints the JWT will be rejected — those require a regular user access token from §2.1.

2.3 Logout

Discard the token client-side, and optionally call:

POST /api/user-devices/{deviceId}/close

to terminate the device session server-side.

3. Conventions

3.1 Base URL and prefix

All endpoints live under /api on your college domain:

https://your-college.yeda.ai/api/...

3.2 College context

Yeda is multi-tenant. Nearly every endpoint expects current_college_id as a query-string or body parameter. Always include it.

3.3 Content types

3.4 Pagination

List endpoints return a Laravel pagination envelope:

{
  "data": [ /* items */ ],
  "meta": { "total": 421, "per_page": 15, "current_page": 1, "total_pages": 29 }
}

A few category endpoints use cursor pagination and return a next_cursor field instead.

3.5 Timestamps

ISO-8601 UTC (2026-04-20T14:30:00Z). Fields ending in _date are date-only (YYYY-MM-DD); fields ending in _time are time-only (HH:MM).

3.6 Error model

Laravel's standard envelope:

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json

{
  "message": "The given data was invalid.",
  "errors":  { "email": [ "The email field is required." ] }
}
StatusMeaning
200 / 201 / 204Success
400Business error (e.g., email already registered)
401Missing / invalid / expired token
403Authenticated but not allowed (suspended, role mismatch, pending approval)
404Resource not found
422Validation error — inspect errors map
429Rate limit exceeded

Some endpoints use {"status":"success"} / {"status":"error","message":"…"} envelopes instead of 4xx codes. Treat them equivalently.

3.7 Rate limits

600 requests per minute per token (or per IP for unauthenticated traffic). Beyond that, you will receive 429 Too Many Requests.

3.8 Maintenance mode

GET /api/maintenance-mode
# → {"maintenance": false, "future_maintenance": "Sunday 20:00 UTC"}

Poll this to warn users before read-only windows.

4. What you can do — capabilities by use-case

Each section lists the endpoints you call, grouped by business outcome.

4.1 Browse the catalogue (no login required)

OutcomeEndpoint
List all public courses for the collegeGET/api/website/college/courses?college_id=…
Get one course by id / slugGET/api/website/college/course?course_id=… · /api/courses/{coursePointer}/about · /api/courses/{coursePointer}/info
Search coursesGET/api/website/college/courses/search?s=…&college_id=…
Search everything (courses, teachers, articles)GET/api/search-bar?q=…&college_id=…
List categoriesGET/api/categories?current_college_id=…
Pinned categories for homepageGET/api/categories/pinned?current_college_id=…
List teachersGET/api/website/college/teachers?college_id=…
Teacher profileGET/api/website/college/teacher?teacher_id=…
A teacher's coursesGET/api/website/college/teacher/courses?teacher_id=…
Bundle infoGET/api/bundles/{bundlePointer}/info
Can the current user buy this course?GET/api/courses/{courseSlug}/can-pay
Has the current user got access?GET/api/courses/{course}/has-access
College subjectsGET/api/website/college/subjects?college_id=…
About / Contacts pageGET/api/colleges/about · /api/colleges/contacts
Footer links, theme colours, i18n bootstrapGET/api/colors · /api/all-translations
Resolve domain to college_idGET/api/colleges/getCollegeIdByDomain?domain=…
SSR bootstrap (user + college + settings in one call)GET/api/colleges/ssr-init?domain=…
SEO metadata for any URLGET/api/simple-seo?url=…
XML sitemapGET/api/sitemaps

4.2 Current user self-service

All of these require a user bearer token.

OutcomeEndpoint
Fetch the authenticated userGET/api/current-user
Update profilePOST/api/website/profile/update
Change passwordPOST/api/website/profile/change-password
Show / hide CV on public profilePOST/api/website/profile/show-cv · /hide-cv
Change emailPUT/api/me/email
Send / verify email-change codePOST/api/me/send-email-verification-code · /api/me/verify-email-code
Upload / delete user avatarPOST/api/wl/me/image · DELETE/api/wl/me/image
Upload / delete user filesPOST/api/wl/me/files · DELETE/api/wl/me/files
Check privacy settingsGET/api/wl/me/privacy · PUT/api/wl/me/privacy
List / close device sessionsGET/api/user-devices/devices · POST/api/user-devices/{id}/close

Example — current-user response (simplified):

{
  "id":                 12345,
  "name":               "Ivan Ivanov",
  "email":              "ivan@example.com",
  "username":           "ivanivanov",
  "phone":              "+972501234567",
  "role":               "student",
  "college_id":         40,
  "current_college_id": 40,
  "email_confirmed_at": "2026-03-01T08:12:55Z",
  "is_active":          true,
  "image_url":          "https://cdn.example.com/users/12345.jpg",
  "locale":             "he"
}

4.3 List the user's enrolments

OutcomeEndpoint
My coursesGET/api/website/college/my-courses?college_id=…
My bundlesGET/api/website/college/my-bundles?college_id=…
My ordersGET/api/my-orders?current_college_id=…
My subscription ordersGET/api/my-orders-subscriptions?current_college_id=…
My forum threadsGET/api/wl/me/threads

4.4 Learning: consume course content

OutcomeEndpoint
Full course with sections & itemsGET/api/auth/website/college/course?course_id=…
One lessonGET/api/website/college/course/lesson?course_id=…&lesson_id=…
One lesson part (video, file, etc.)GET/api/website/college/course/lesson/part?…
Is this item unlocked for me?GET/api/website/section/item/is-accessable
Mark section item as openedPOST/api/website/college/course/section-item-opened/{itemId}
Save video time-pointPOST/api/website/video/update
Save lesson video percent progressPOST/api/website/college/course/lesson/video/update
Mark video as watchedPOST/api/course/lesson/part/watched-video
Is the lesson finished?GET/api/courses/is-lesson-finished
Is a set of lessons finished?GET/api/courses/is-lessons-finished
"Continue where you left off" URLGET/api/courses/continue-training
Course gradesGET/api/website/college/course/grades
Course announcementsGET/api/website/college/course/messages
Count of unread announcementsGET/api/website/college/messages/unread
Protected file download (logged-in)GET/api/website/lesson/file-show · /website/course/file-show
Public (preview) file downloadGET/api/website/lesson/file · /website/course/file

4.5 Practices, exams, surveys

Same flow for all three: start → answer → close → view results.

KindStartAnswerCloseResults
PracticePOST/api/website/practice/startPOST/api/website/practice/answerPOST/api/website/course/practice/closeGET/api/website/college/course/practice/results
ExamPOST/api/website/exam/startPOST/api/website/exam/answerPOST/api/website/course/exam/closeGET/api/website/college/course/exam/results
SurveyPOST/api/survey/startPOST/api/survey/answerPOST/api/survey/finish(inline)

Solutions for any question: POST/api/website/solution.

4.6 Enroll the user

OutcomeEndpoint
Enroll in a free coursePOST/api/website/course/enroll
Request enrollment (manual approval)POST/api/website/college/course/request
Mark enrollment request as readPOST/api/website/college/course/request/read
White-label one-click approval linkGET/api/wl/enrollments/approve/{token}
White-label one-click decline linkGET/api/wl/enrollments/decline/{token}
White-label bundle enrollPOST/api/wl/colleges/{college}/bundle/{bundle}/enroll

4.7 Payments, subscriptions, coupons

4.7.1 Checkout

OutcomeEndpoint
Pay for a course (logged-in user)POST/api/payments/courses/{course}
Pay for a bundle (logged-in user)POST/api/payments/bundles/{bundle}
Landing-page purchase (creates a user if missing)POST/api/lp/payments/courses/{course} · /api/lp/payments/bundles/{bundle}
Does this email already have an account?GET/api/lp/check/email?email=…&college_id=…

4.7.2 Payment-page iframe (Tranzila)

OutcomeEndpoint
Create or fetch an empty orderPOST/api/payment-page/get-empty-order
Attach user to the orderPOST/api/payment-page/set-user-to-order
Poll order statusGET/api/payment-page/check-payment-status?order_id=…

4.7.3 Subscriptions

OutcomeEndpoint
Cancel a recurring subscriptionPOST/api/subscriptions/deactivate

4.7.4 Coupons

OutcomeEndpoint
Redeem an Alljobs voucher for a coursePOST/api/courses/{course}/activate-alljobs-coupon
Redeem a Multipass voucherPOST/api/activate-multipass-coupon
Cancel the Multipass subscription linked to an orderPOST/api/orders/deactivate-multipass-coupon

4.7.5 Refund requests

Customers can file a refund request themselves (no login required):

POST /api/orders/refund-request
Content-Type: application/json

{
  "name":    "…",
  "email":   "…",
  "phone":   "…",
  "order":   "…",
  "message": "…"
}

4.8 Teachers & ratings

OutcomeEndpoint
Teacher rating summaryGET/api/teachers/{teacher}/ratings?current_college_id=…
Paginated teacher reviewsGET/api/teachers/{teacher}/reviews?current_college_id=…
Post a review (50–400 chars)POST/api/teachers/reviews
Edit my reviewPUT/api/teachers/reviews/{review}
Delete my reviewDELETE/api/teachers/reviews/{review}
Send a message to a teacher (CAPTCHA-protected)POST/api/website/teacher/message

4.9 Forums

OutcomeEndpoint
List threads for a courseGET/api/website/college/course/forums?course_id=…
Search threadsGET/api/website/college/course/forums/search?s=…
Create threadPOST/api/website/forum/add
Reply to threadPOST/api/website/forum/reply/add
Update thread textPUT/api/forums/threads/{thread}
Toggle thread notificationsPOST/api/website/forum/thread/notifications
Count unread thread commentsGET/api/website/college/course/forums/unread-count

4.10 Certificates & terms

OutcomeEndpoint
Accept T&Cs (signed)POST/api/terms/accept
Get current T&Cs textGET/api/terms?current_college_id=…
Sample certificate PDF (template preview)GET/user/certificate.pdf

4.11 Offline calendar (live classes)

Lets you create scheduled events that can be tied to a Zoom meeting.

OutcomeEndpoint
Month view for collegeGET/api/offline-calendar/events?current_college_id=…&year=…&month=…
My eventsGET/api/offline-calendar/my-events?current_college_id=…&year=…&month=…
Single eventGET/api/offline-calendar/events/{event}
Zoom meeting info for an eventGET/api/offline-calendar/events/zoom-data/{eventId}
Create event (optionally auto-create Zoom meeting)POST/api/offline-calendar/events
Update eventPUT/api/offline-calendar/events/{event}
Delete eventDELETE/api/offline-calendar/events/{event}
Schedulable items for a courseGET/api/offline-calendar/course-items?course_id=…&current_college_id=…
Detect conflictsGET/api/offline-calendar/course-events-in-the-same-time

Example — create event:

POST /api/offline-calendar/events
Authorization: Bearer <token>
Content-Type: application/json

{
  "title":              "Weekly lecture #3",
  "description":        "Trigonometry intro",
  "current_college_id": 40,
  "course_id":          128,
  "item_id":            5421,
  "event_date":         "2026-05-01",
  "event_time_start":   "09:00",
  "event_time_end":     "10:30",
  "color":              "#3B82F6",
  "teacher_email":      "teacher@school.co.il",
  "create_zoom_event":  true
}

4.12 Zoom (standalone)

OutcomeEndpoint
Create Zoom meetingPOST/api/zoom/events
Meeting detailsGET/api/zoom/events/{eventId}
Delete meetingDELETE/api/zoom/events/{eventId}
Get host join linkPOST/api/zoom/events/{eventId}/admin-link
Get participant join linkPOST/api/zoom/events/{eventId}/student-link

4.13 Server-to-server integration (College JWT)

These endpoints are designed for your backend to call Yeda's backend. Use the College JWT from §2.2.

OutcomeEndpoint
Grant a user access to a coursePOST/api/colleges/{college}/openAccessToCourse
Grant a user access to a bundlePOST/api/colleges/{college}/openAccessToBundle
Grant access to either (auto-detect)POST/api/colleges/{college}/openAccessToCourseOrBundle
Revoke ALL access for a userPOST/api/colleges/{college}/closeAccessToAllUserCoursesAndBundles
Change a user's passwordPOST/api/colleges/{college}/users/change-password
Send a password reset emailPOST/api/colleges/{college}/users/reset-password
Per-course statistics for a userGET/api/colleges/{college}/users/course-statistics?user_id=…&course_id=…
Profile-wide statistics for a userGET/api/colleges/{college}/users/profile-statistics?user_id=…&from=…&to=…
Sync users from your IdP (Microsoft / Okta)POST/api/colleges/{college}/directory-sync/users/sync
Post a course announcement on behalf of the collegePOST/api/colleges/{college}/courses/messages

Example — grant course access by email:

curl -s -X POST "https://your-college.yeda.ai/api/colleges/40/openAccessToCourse" \
  -H "Authorization: Bearer $COLLEGE_JWT" \
  -H 'Content-Type: application/json' \
  -d '{
    "course_id":      128,
    "user_email":     "buyer@example.com",
    "user_name":      "New Buyer",
    "user_birthdate": "1995-07-12"
  }'

If the user does not yet exist, Yeda will create it and send a welcome email.

4.14 YedaLabs partner integration

If you run the YedaLabs video platform, these endpoints let you sync videos and completion data. Authenticated with the YedaLabs token.

OutcomeEndpoint
List colleges on YedaGET/api/yedalabs/colleges
List coursesGET/api/yedalabs/colleges/courses
List videos per courseGET/api/yedalabs/colleges/courses/videos
Update a course (patch)PATCH/api/yedalabs/colleges/courses
Post completion statisticsPOST/api/yedalabs/course-completion-statistics
Update the Yeda ↔ YedaLabs video-id mappingPOST/api/yedalabs/update-video-id

Helper endpoints for migrating video sources:

4.15 Vimeo integration

OutcomeEndpoint
OAuth callback (called by Vimeo after the user authorises your app)GET/api/vimeo/auth-callback
Upload a video to Vimeo (admin token required)POST/api/vimeo/upload — multipart video=@file.mp4
Delete a Vimeo video (admin token required)DELETE/api/vimeo/{vimeoId}
Update the cached duration of a videoPOST/api/lessons/update-video-length

4.16 White-label embed

Trimmed "student-only" API for embedding Yeda into a partner site, scoped to a single college. Base prefix: /api/wl/colleges/{college}.

OutcomeEndpoint
List coursesGET/api/wl/colleges/{college}/courses
Courses for homepageGET/api/wl/colleges/{college}/courses-main-page
Course categoriesGET/api/wl/colleges/{college}/courses/categories
One course (authenticated)GET/api/wl/colleges/{college}/courses/{coursePointer}
Lightweight course payloadGET/api/wl/colleges/{college}/courses/{coursePointer}/light
Has access?GET/api/wl/colleges/{college}/courses/{coursePointer}/has-access
List bundlesGET/api/wl/colleges/{college}/bundles
Single bundleGET/api/wl/colleges/{college}/bundle/{slug}
Download bundle fileGET/api/wl/colleges/{college}/bundle/files/download/{id}
Forum threadsGET/api/wl/colleges/{college}/forum/threads
Public user profileGET/api/wl/colleges/{college}/users/{username}
Public user's coursesGET/api/wl/colleges/{college}/users/{username}/courses
White-label enroll from course pagePOST/api/courses/{course}/enroll

Self-service "me" endpoints (user token required):

OutcomeEndpoint
MeGET/api/wl/me · PUT/api/wl/me
Change emailPUT/api/wl/me/change-email
My courses / threadsGET/api/wl/me/courses · /api/wl/me/threads
Reset passwordPUT/api/wl/me/reset-password
Privacy settingsGET/api/wl/me/privacy · PUT/api/wl/me/privacy
Upload / delete my image / filesPOST/api/wl/me/image · POST/api/wl/me/files · DELETE/api/wl/me/files
Check user documentPOST/api/wl/me/checkUserDocument · GET/api/wl/me/isDocumentChecked
Unread messagesGET/api/wl/messages/unread
Editor image upload (for forum posts)POST/api/wl/editor/file

4.17 Translations (i18n)

OutcomeEndpoint
Full i18n dictionaryGET/api/all-translations
Single keyGET/api/translations/getByKey/{key}
Batch lookupGET/api/combined-translations?keys[]=…
Available languagesGET/api/available-languages

4.18 Utility

OutcomeEndpoint
Generate / validate a slugPOST/api/slug/generate · /api/slug/validate
Resolve domain → college_idGET/api/colleges/getCollegeIdByDomain?domain=…
Check if a username is uniqueGET/api/website/is-unique/username?username=…&college_id=…
Check if an email is uniqueGET/api/website/is-unique/email?email=…&college_id=…
Generic file download by idGET/api/files/{file}/download
Report a frontend error to our teamPOST/api/telegram-error-log

5. Integration recipes

5.1 Log the user in and fetch their profile

TOKEN=$(curl -s https://your-college.yeda.ai/api/auth/login \
  -H 'Content-Type: application/json' \
  -d '{
    "fieldname":  "email",
    "username":   "student@example.com",
    "password":   "s3cret",
    "college_id": 40
  }' | jq -r '.auth.access_token')

curl -s https://your-college.yeda.ai/api/current-user \
  -H "Authorization: Bearer $TOKEN"

5.2 Sell a course from your own landing page

# Your marketing site posts the buyer's email; Yeda creates the account if missing
curl -s -X POST https://your-college.yeda.ai/api/lp/payments/courses/128 \
  -H 'Content-Type: application/json' \
  -d '{"email":"buyer@example.com","college_id":40}'

The response contains the next step (redirect to hosted payment, or confirmation for zero-price orders).

5.3 Grant access to a course / bundle from your back-office

# 1. One-time: obtain a College JWT
JWT=$(curl -s -X POST https://your-college.yeda.ai/api/auth/colleges/40/jwt/byAdmin \
  -H 'Content-Type: application/json' \
  -d '{"login":"admin@your-college.co.il","password":"…"}' | jq -r '.token')

# 2. Any time afterwards: grant access
curl -s -X POST "https://your-college.yeda.ai/api/colleges/40/openAccessToCourse" \
  -H "Authorization: Bearer $JWT" \
  -H 'Content-Type: application/json' \
  -d '{
    "course_id":      128,
    "user_email":     "buyer@example.com",
    "user_name":      "Buyer Name",
    "user_birthdate": "1995-07-12"
  }'

5.4 Schedule a live class with Zoom

curl -s -X POST https://your-college.yeda.ai/api/offline-calendar/events \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "title":              "Weekly lecture #3",
    "current_college_id": 40,
    "course_id":          128,
    "item_id":            5421,
    "event_date":         "2026-05-01",
    "event_time_start":   "09:00",
    "event_time_end":     "10:30",
    "create_zoom_event":  true
  }'

5.5 Upload a video to Vimeo

curl -s -X POST https://your-college.yeda.ai/api/vimeo/upload \
  -H "Authorization: Bearer $TOKEN" \
  -F 'video=@/path/to/lesson.mp4' \
  -F 'name=Introduction to Trig'

5.6 Sync users from your corporate directory

curl -s -X POST "https://your-college.yeda.ai/api/colleges/40/directory-sync/users/sync" \
  -H "Authorization: Bearer $COLLEGE_JWT" \
  -H 'Content-Type: application/json' \
  -d '{ "users": [ { "external_id": "…", "email": "…", "name": "…", "groups": [ "…" ] } ] }'

5.7 Fetch a user's progress in a course

curl -s "https://your-college.yeda.ai/api/colleges/40/users/course-statistics?user_id=12345&course_id=128" \
  -H "Authorization: Bearer $COLLEGE_JWT"

Returns a structure with seconds watched, percentage completed, average exam grade, etc.

6. Webhooks you need to handle

6.1 Payment notifications (Tranzila)

Your Yeda instance exposes an inbound webhook URL that Tranzila calls after each successful or failed payment:

POST https://your-college.yeda.ai/api/payment-page/tranzila-notify/{orderId}

Configure this URL in your Tranzila dashboard. Yeda handles signature validation automatically; you do not need to re-validate it.

Return 200 OK with body OK. No custom payload parsing is required on your side — Yeda updates the order, dispatches notification jobs, and exposes the result via GET /api/payment-page/check-payment-status?order_id=….

Similar flows exist for:

ANY /api/payments/callback/{payment_system}
ANY /api/payments/purchase/{payment_system}/success
ANY /api/payments/purchase/{payment_system}/fail

6.2 Enrollment approval (signed URLs)

When a manual-approval enrollment is created, Yeda sends your chosen admin an email with two links:

GET /api/wl/enrollments/approve/{token}
GET /api/wl/enrollments/decline/{token}

Both are public and single-use — the token is signed and expires. Open them in a browser or call them server-side to approve / decline.

6.3 Stripe / Cardcom / Multipass / Alljobs

When enabled for your college, Yeda can also:

Ask your account manager to configure the relevant secrets before you begin testing.

7. Glossary

TermMeaning
CollegeThe tenant. Yeda serves many colleges; users belong to one (college_id) but may have a different "active" college (current_college_id).
CourseThe top-level piece of content. Contains sections, which contain items (lessons, exams, practices, surveys, files).
BundleA collection of courses sold or granted together.
Interactive lessonA SCORM / cmi5 / iSpring package uploaded as a ZIP.
Section itemAny leaf piece of content inside a course — a lesson, exam, practice, survey, etc.
QuestionnaireUnderlying container that drives exams, practices and surveys.
Access typeA policy object describing how a user accesses a given course or bundle (bought, assigned, coupon-redeemed, branch-granted).
BranchOrganisational grouping inside a college — used for access overrides.
White-labelAn embeddable, college-scoped, trimmed subset of the student API under /api/wl/*.

Need help?

Reach out to your Yeda account manager with:

  1. The exact endpoint and HTTP method you're calling.
  2. A sample request (headers + body) — mask any tokens.
  3. The full response (status, headers, body).

Most questions get answered in a day or two.