BusiVerse Network
BusiLearn

BusiLearn API v1

JSON over HTTPS. Public endpoints need no key and allow cross-origin GET. Authenticated endpoints take Authorization: Bearer <token>. Base URL: https://busi.info/. BusiLearn is the source of truth for courses; BusiMatch stores and BusiFind read from these endpoints instead of copying data.

Public

EndpointDescription
GET /api/search.php?q=&offset=&limit=Network search (BusiFind contract): {ok,total,items:[{kind,title,url,image,description,instructor,category,price_bt}]}. Also at /api/search.
GET /api/v1/coursesPublished courses. Filters: q, category, level, price=free|paid, certificate=1, provider, instructor, language, sort=newest|popular|rating|price_asc|price_desc, featured=1, offset, limit
GET /api/v1/courses/{slug}One course with objectives, tags and curriculum outline.
GET /api/v1/categoriesCategories with names in 15 languages and course counts.
GET /api/v1/providers, /api/v1/providers/{slug}, /api/v1/providers/{slug}/coursesSchools and training providers (with business_id for the BusiMatch link).
GET /api/v1/instructorsInstructors with published courses.
GET /api/v1/workshopsUpcoming workshops.
GET /api/v1/certificates/{code}Certificate verification: {valid, code, learner, course, provider, issued_at}.
GET /api/v1/healthLiveness: app version, database, last cron run.

Authenticated

EndpointDescription
POST /api/v1/auth/token form: email, password, deviceReturns a bearer token (90 days). With Busi ID enabled, mobile apps will use OpenID Connect instead.
GET /api/v1/meProfile, roles, membership, BT balance.
GET /api/v1/me/coursesEnrolled courses with progress.
GET /api/v1/me/progress/{slug}Curriculum with completion flags.
POST /api/v1/me/enroll/{slug}Enroll (free, entitlement or BT purchase).
POST /api/v1/me/lesson/{id}/completeMark a content lesson complete.

Example

curl "https://busi.info/api/v1/courses?limit=2"
curl -H "Authorization: Bearer blt_..." "https://busi.info/api/v1/me/courses"

Errors: {"ok":false,"error":"not_found|unauthenticated|forbidden|rate_limited|csrf"} with matching HTTP status. Rate limits apply per IP.