All developer docs
API reference
Every action an app can take on Sikhami. Each one is a REST route and an MCP tool with the same name, input and answer, so what you build with the API works the same in Claude, ChatGPT, Zapier or your own code.
Introduction
The base address is https://sikhami.com/api/v1. Requests and answers are UTF-8 JSON. Times are milliseconds since 1970 (UTC) and prices are in rupees. Course and notes actions give the item's page url, where people buy or enrol; no action ever gives a checkout link.
Inputs go in the path and the query string for GET and DELETE, and in a JSON body for POST. Unknown inputs are refused, so a typo answers 400 rather than being ignored.
https://sikhami.com/api/v1curl "https://sikhami.com/api/v1/search?q=gst&limit=5" \
-H "Authorization: Bearer skh_pat_..."Authentication
Send Authorization: Bearer <token> on every request, never a token in the address. The token is one of:
- A personal access token (
skh_pat_…), made in Settings, Connected apps with the scopes you choose. It works until you delete it. Best for your own scripts, n8n and Make's HTTP module. - An OAuth access token (
skh_at_…), for an app other people connect. It lasts an hour; see Sign-in (OAuth 2.1).
A missing, expired or revoked token answers 401 with a WWW-Authenticate header that points to the sign-in details. A token without the scope an action needs answers 403 insufficient_scope, naming the scope.
readSee your Sikhami account
writeAct for you
lmsYour institute's admissions
curl "https://sikhami.com/api/v1/me" \
-H "Authorization: Bearer skh_pat_..."Errors
A failed request answers with an HTTP status and {"error":{"code":"…","message":"…"}}. The message is a sentence a person can act on.
| Status | code | When |
|---|---|---|
| 400 | invalid_request | Bad or missing input; the message names the field |
| 401 | invalid_token | Missing, expired or revoked token: sign in again |
| 403 | insufficient_scope | The token lacks the scope |
| 403 | forbidden | Allowed scope, but not your item (not on that institute's team) |
| 404 | not_found | Missing, unpublished or private |
| 409 | conflict | Cannot right now: already joined, full, already started, paid |
| 429 | rate_limited | Too many requests; wait the seconds in Retry-After |
| 500 | server_error | Our fault; reads are safe to retry |
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": {
"code": "not_found",
"message": "This meetup is not available."
}
}Rate limits
Each token may make 120 requests a minute, of which 20 may change something, and publish 30 posts a day.
Over a limit, the answer is 429 with Retry-After in seconds. Wait that long and try again.
HTTP/1.1 429 Too Many Requests
Retry-After: 12
{
"error": { "code": "rate_limited", "message": "…" }
}Lists and paging
Lists take limit, from 1 to 50 (20 when left out). Lists that page also answer next_cursor: pass it back as cursor for the next page. It is null on the last page.
New followers, meetup attendees, course enrolments and admission enquiries come newest first, and each item keeps the same id and a created_at, so they work as polling triggers: keep the ids you have seen and act on the new ones.
GET https://sikhami.com/api/v1/meetups?city=Delhi&limit=20
{
"meetups": [ ... ],
"next_cursor": "MjA"
}
GET https://sikhami.com/api/v1/meetups?city=Delhi&limit=20&cursor=MjASafe retries
A POST may carry an Idempotency-Key header of up to 200 characters. Sending the same key again within 24 hours returns the first answer, with Idempotent-Replayed: true, instead of acting twice. Use it when a network error leaves you unsure whether a post or an enquiry was made.
curl -X POST "https://sikhami.com/api/v1/lms/enquiries" \
-H "Authorization: Bearer skh_pat_..." \
-H "Idempotency-Key: enquiry-2026-11-08-0042" \
-H "Content-Type: application/json" \
-d '{"institute_id":"INSTITUTE_ID","name":"Asha Verma","phone":"9876543210"}'Webhooks
Instead of asking for new items every few minutes, a tool can have Sikhami call it the moment something happens. Today this works for new admission enquiries (admission_enquiry.created).
The easiest way needs no code: in Sikhami LMS, open Admissions, then Send to apps, and paste the tool's webhook address. Apps can also subscribe through the API, with scope lms, for an institute's owner and admins:
POST /api/v1/webhookswithevent,urlandinstitute_id. The answer carries asecret, shown only once. Subscribing the same address to the same event again returns the existing webhook.GET /api/v1/webhookslists yours, without secrets.DELETE /api/v1/webhooks/{id}stops one.
Each delivery is a JSON POST with the headers X-Sikhami-Timestamp and X-Sikhami-Signature: sha256=…, the hex HMAC-SHA256 of timestamp.body with your secret. Check it before you trust the call.
- Addresses must be public
https; each person may have up to 25 webhooks. - Sikhami tries once and waits up to 4 seconds, with no retries. Any 2xx answer counts as delivered.
- Answer
410to stop a webhook. After 50 failures in a row it is switched off; subscribing again switches it back on. - A webhook stops when the app or token that made it is disconnected.
POST https://sikhami.com/api/v1/webhooks
{
"event": "admission_enquiry.created",
"url": "https://your-tool.example/hook",
"institute_id": "INSTITUTE_ID"
}
201 Created
{
"id": "...",
"event": "admission_enquiry.created",
"secret": "skh_whsec_...",
...
}POST https://your-tool.example/hook
Content-Type: application/json
X-Sikhami-Event: admission_enquiry.created
X-Sikhami-Delivery: <delivery id>
X-Sikhami-Timestamp: <seconds since 1970>
X-Sikhami-Signature: sha256=<hex>
{
"id": "<delivery id>",
"event": "admission_enquiry.created",
"created_at": <milliseconds>,
"webhook_id": "...",
"data": { <the enquiry> }
}import crypto from "node:crypto";
// rawBody: the request body exactly as it arrived (a string or Buffer).
function fromSikhami(rawBody, headers, secret) {
const ts = headers["x-sikhami-timestamp"];
const sent = String(headers["x-sikhami-signature"] ?? "").replace(/^sha256=/, "");
const expected = crypto.createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
return sent.length === expected.length && crypto.timingSafeEqual(Buffer.from(sent), Buffer.from(expected));
}Sign-in (OAuth 2.1)
For an app that other people connect, Sikhami is an OAuth 2.1 server. The person logs in on Sikhami's own page and picks what the app may do.
- Metadata:
/.well-known/oauth-authorization-serverand/.well-known/oauth-protected-resource/mcp - Authorize
/oauth/authorize, token/oauth/token, revoke/oauth/revoke, dynamic client registration/oauth/register - Authorization code with PKCE (S256; required for apps without a secret). Access tokens last an hour; refresh tokens 90 days and change on every use.
- Scopes
read,writeandlms, separated by spaces; an app that asks for none getsread. The token answer'sscopesays what the person allowed. - Developer Apps (a client id and a secret, shown once) are made in Settings, Connected apps. MCP clients register themselves.
GET https://sikhami.com/.well-known/oauth-authorization-server
GET https://sikhami.com/oauth/authorize
?response_type=code
&client_id=skh_ci_...
&redirect_uri=https://your-app.example/callback
&scope=read%20write
&state=...
&code_challenge=...
&code_challenge_method=S256
POST https://sikhami.com/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=...&redirect_uri=...&client_id=skh_ci_...&code_verifier=...
{"access_token":"skh_at_...","token_type":"Bearer","expires_in":3600,"refresh_token":"skh_rt_...","scope":"read write"}MCP server
The MCP server is at https://sikhami.com/mcp (Streamable HTTP, JSON answers). Every action below is one of its tools, with the same name. A tool lists only when the token's scopes allow it.
Each tool has a title, an input schema and an output schema, and answers with both structured content and a text copy. A failed tool call answers with isError: true and a sentence a person can act on.
Step-by-step guides for each assistant are in Platform guides.
# Claude Code
claude mcp add --transport http sikhami https://sikhami.com/mcp
# Any MCP client: a remote (Streamable HTTP) server at
https://sikhami.com/mcp{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}Find and read
Everything public on Sikhami: courses, notes, meetups, profiles and quizzes.
search
Search Sikhami
/api/v1/searchscope readRead onlySearch Sikhami's public courses, notes, upcoming meetups, teachers, institutes and study clubs by words in their names (for example 'GST', 'class 10 maths', 'UPSC prelims'). Optionally limit to one type. Returns links to each item's page.
Parameters
qstringRequiredin queryWords to look for, 2 to 100 characters.
2 to 100 characters
typestringin queryOnly this kind of item.
One of: course, note, meetup, teacher, institute, club
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
Returns
resultsarray of objectsShow 6 fieldsHide fields
idstringtypestringnamestringsubtitlestringimagestring or nullurlstring
curl "https://sikhami.com/api/v1/search?q=gst&limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"results": [
{
"id": "string",
"type": "course | note | meetup | teacher | institute | club",
"name": "string",
"subtitle": "string",
"image": "string | null",
"url": "string"
}
]
}get_course
Get a course
/api/v1/courses/{id}scope readRead onlyDetails of a published Sikhami course: what it covers, language, price in rupees, number of lectures and hours, students, rating, institute, and its page link (where people enrol).
Parameters
idstringRequiredin pathThe course id (from search).
Returns
idstringnamestringdescriptionstring or nullcategorystring or nullsub_categorystring or nulllanguagestring or nullprice_rupeesnumberfreebooleanlecturesintegerhoursnumberstudentsintegerratingobject or nullShow 2 fieldsHide fields
valuenumbercountinteger
instituteobject or nullShow 3 fieldsHide fields
idstringnamestringurlstring
imagestring or nullurlstringThe course page on sikhami.com.
curl "https://sikhami.com/api/v1/courses/COURSE_ID" \
-H "Authorization: Bearer skh_pat_..."{
"id": "string",
"name": "string",
"description": "string | null",
"category": "string | null",
"sub_category": "string | null",
"language": "string | null",
"price_rupees": "number",
"free": "boolean",
"lectures": "integer",
"hours": "number",
"students": "integer",
"rating": {
"value": "number",
"count": "integer"
},
"institute": {
"id": "string",
"name": "string",
"url": "string"
},
"image": "string | null",
"url": "string"
}get_note
Get study notes
/api/v1/notes/{id}scope readRead onlyDetails of published study notes on Sikhami (a book, notes PDF or question bank): subject, exams, pages, language, rating, price in rupees or free, and the page link where they can be opened.
Parameters
idstringRequiredin pathThe notes id (from search).
Returns
idstringnamestringdescriptionstring or nullcategorystring or nullsub_categorystring or nulllanguagestring or nullsubjectsarray of stringsexamsarray of stringslevelsarray of stringsformatstring or nullpagesintegerprice_rupeesnumberfreebooleanratingobject or nullShow 2 fieldsHide fields
valuenumbercountinteger
ownerobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
Show 5 fieldsHide fields
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or null
imagestring or nullurlstringcreated_atnumber or null
curl "https://sikhami.com/api/v1/notes/NOTE_ID" \
-H "Authorization: Bearer skh_pat_..."{
"id": "string",
"name": "string",
"description": "string | null",
"category": "string | null",
"sub_category": "string | null",
"language": "string | null",
"subjects": [
"string"
],
"exams": [
"string"
],
"levels": [
"string"
],
"format": "string | null",
"pages": "integer",
"price_rupees": "number",
"free": "boolean",
"rating": {
"value": "number",
"count": "integer"
},
"owner": {
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null"
},
"image": "string | null",
"url": "string",
"created_at": "number | null"
}list_upcoming_meetups
List upcoming meetups
/api/v1/meetupsscope readRead onlyUpcoming public study meetups on Sikhami, soonest first, online and in person. Filter by city name (for example 'Delhi'), by words in the name or topic, or to free meetups only. Addresses and joining links are never shown; people see them in the app after joining.
Parameters
citystringin queryA city name, such as Delhi or Pune.
Up to 60 characters
qstringin queryWords in the meetup's name, topic, exam or subject.
Up to 100 characters
free_onlybooleanin queryOnly meetups with no joining fee.
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
cursorstringin queryThe next_cursor from the previous page, to continue.
Up to 200 characters
Returns
meetupsarray of objectsShow 20 fieldsHide fields
idstringnamestringdescriptionstring or nullcategorystring or nulllanguagestring or nullexamsarray of stringssubjectsarray of stringsonlinebooleancitystring or nullstarts_atnumber or nullStart time in milliseconds since 1970 (UTC).
date_textstring or nulltime_textstring or nulldurationstring or nullgoingintegercapacityinteger0 means no limit.
price_rupeesnumberfreebooleanhostobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
Show 5 fieldsHide fields
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or null
imagestring or nullurlstring
next_cursorstring or nullPass back as cursor for the next page; null on the last page.
curl "https://sikhami.com/api/v1/meetups?limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"meetups": [
{
"id": "string",
"name": "string",
"description": "string | null",
"category": "string | null",
"language": "string | null",
"exams": [
"string"
],
"subjects": [
"string"
],
"online": "boolean",
"city": "string | null",
"starts_at": "number | null",
"date_text": "string | null",
"time_text": "string | null",
"duration": "string | null",
"going": "integer",
"capacity": "integer",
"price_rupees": "number",
"free": "boolean",
"host": {
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null"
},
"image": "string | null",
"url": "string"
}
],
"next_cursor": "string | null"
}get_meetup
Get a meetup
/api/v1/meetups/{id}scope readRead onlyDetails of a public Sikhami meetup: what it is about, when, online or which city, how many are going, the joining fee in rupees, the host, and its page link.
Parameters
idstringRequiredin pathThe meetup id.
Returns
idstringnamestringdescriptionstring or nullcategorystring or nulllanguagestring or nullexamsarray of stringssubjectsarray of stringsonlinebooleancitystring or nullstarts_atnumber or nullStart time in milliseconds since 1970 (UTC).
date_textstring or nulltime_textstring or nulldurationstring or nullgoingintegercapacityinteger0 means no limit.
price_rupeesnumberfreebooleanhostobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
Show 5 fieldsHide fields
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or null
imagestring or nullurlstring
curl "https://sikhami.com/api/v1/meetups/MEETUP_ID" \
-H "Authorization: Bearer skh_pat_..."{
"id": "string",
"name": "string",
"description": "string | null",
"category": "string | null",
"language": "string | null",
"exams": [
"string"
],
"subjects": [
"string"
],
"online": "boolean",
"city": "string | null",
"starts_at": "number | null",
"date_text": "string | null",
"time_text": "string | null",
"duration": "string | null",
"going": "integer",
"capacity": "integer",
"price_rupees": "number",
"free": "boolean",
"host": {
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null"
},
"image": "string | null",
"url": "string"
}get_profile
Get a profile
/api/v1/profiles/{username}scope readRead onlyA learner's or teacher's public Sikhami profile by username: bio, college, level, exams, subjects, languages, followers, following and posts. Private profiles and under-18s are not available.
Parameters
usernamestringRequiredin pathThe username, without @.
Returns
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or nullbiostring or nullcollegestring or nulllevelstring or nullexamsarray of stringssubjectsarray of stringslanguagesarray of stringsfollowersintegerfollowingintegerpostsintegerjoined_atnumber or null
curl "https://sikhami.com/api/v1/profiles/sikhami" \
-H "Authorization: Bearer skh_pat_..."{
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null",
"bio": "string | null",
"college": "string | null",
"level": "string | null",
"exams": [
"string"
],
"subjects": [
"string"
],
"languages": [
"string"
],
"followers": "integer",
"following": "integer",
"posts": "integer",
"joined_at": "number | null"
}list_quiz_topics
List quiz topics
/api/v1/quizzesscope readRead onlySikhami's free practice quiz topics (maths, reasoning, English, general knowledge and more), each with how many 10-question quizzes it has. Filter by words. Use get_quiz with a topic id to fetch a quiz.
Parameters
qstringin queryWords in the subject or topic, such as 'percentage' or 'polity'.
Up to 100 characters
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
cursorstringin queryThe next_cursor from the previous page, to continue.
Up to 200 characters
Returns
topicsarray of objectsShow 6 fieldsHide fields
idstringsubjectstringtopicstringsetsintegerquestionsintegerurlstring
next_cursorstring or nullPass back as cursor for the next page; null on the last page.
curl "https://sikhami.com/api/v1/quizzes?limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"topics": [
{
"id": "string",
"subject": "string",
"topic": "string",
"sets": "integer",
"questions": "integer",
"url": "string"
}
],
"next_cursor": "string | null"
}get_quiz
Get a quiz
/api/v1/quizzes/{id}scope readRead onlyA 10-question practice quiz with its options, the right answer for each (answer_index, counting from 0) and the time allowed per question. Give a quiz id such as 'profit-and-loss-3', or a topic id from list_quiz_topics for its first quiz. When quizzing someone, do not reveal answer_index until they answer.
Parameters
idstringRequiredin pathA quiz id ('profit-and-loss-3') or a topic id ('profit-and-loss').
Up to 120 characters
Returns
idstringtitlestringsubjectstringtopicstringseconds_per_questionintegerurlstringnext_quiz_idstring or nullquestionsarray of objectsShow 5 fieldsHide fields
idstringquestionstringoptionsarray of stringsanswer_indexintegerexplanationstring or null
curl "https://sikhami.com/api/v1/quizzes/profit-and-loss-3" \
-H "Authorization: Bearer skh_pat_..."{
"id": "string",
"title": "string",
"subject": "string",
"topic": "string",
"seconds_per_question": "integer",
"url": "string",
"next_quiz_id": "string | null",
"questions": [
{
"id": "string",
"question": "string",
"options": [
"string"
],
"answer_index": "integer",
"explanation": "string | null"
}
]
}Your account
The connected person's profile, courses, meetups, notifications and new followers.
get_my_profile
Get my profile
/api/v1/mescope readRead onlyThe connected Sikhami account: name, username, picture, bio, profile link, sign-in email, whether the profile is private, and its follower, following and post counts (these work even when the profile is private).
Parameters
None.
Returns
idstringA permanent id for the account; it never changes, unlike the username.
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or nullbiostring or nullemailstring or nullprivatebooleanTrue when only approved followers see the profile; others then see it as 'A Sikhami learner'.
followersintegerfollowingintegerpostsinteger
curl "https://sikhami.com/api/v1/me" \
-H "Authorization: Bearer skh_pat_..."{
"id": "string",
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null",
"bio": "string | null",
"email": "string | null",
"private": "boolean",
"followers": "integer",
"following": "integer",
"posts": "integer"
}list_my_courses
List my courses
/api/v1/me/coursesscope readRead onlyCourses the connected learner is enrolled in (with live access), newest first, with how far through they are and a link to continue watching.
Parameters
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
Returns
coursesarray of objectsShow 5 fieldsHide fields
courseobjectShow 15 fieldsHide fields
idstringnamestringdescriptionstring or nullcategorystring or nullsub_categorystring or nulllanguagestring or nullprice_rupeesnumberfreebooleanlecturesintegerhoursnumberstudentsintegerratingobject or nullinstituteobject or nullimagestring or nullurlstringThe course page on sikhami.com.
progress_percentintegerenrolled_atnumberaccess_expires_atnumber or nullcontinue_urlstring
curl "https://sikhami.com/api/v1/me/courses?limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"courses": [
{
"course": {
"id": "string",
"name": "string",
"description": "string | null",
"category": "string | null",
"sub_category": "string | null",
"language": "string | null",
"price_rupees": "number",
"free": "boolean",
"lectures": "integer",
"hours": "number",
"students": "integer",
"rating": {},
"institute": {},
"image": "string | null",
"url": "string"
},
"progress_percent": "integer",
"enrolled_at": "number",
"access_expires_at": "number | null",
"continue_url": "string"
}
]
}list_my_meetups
List my meetups
/api/v1/me/meetupsscope readRead onlyMeetups the connected person joined or hosts: upcoming ones soonest first (and past ones too if asked), each with the time it was joined and whether they are the host.
Parameters
include_pastbooleanin queryAlso list meetups that are over.
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
Returns
meetupsarray of objectsShow 3 fieldsHide fields
meetupobjectShow 20 fieldsHide fields
idstringnamestringdescriptionstring or nullcategorystring or nulllanguagestring or nullexamsarray of stringssubjectsarray of stringsonlinebooleancitystring or nullstarts_atnumber or nullStart time in milliseconds since 1970 (UTC).
date_textstring or nulltime_textstring or nulldurationstring or nullgoingintegercapacityinteger0 means no limit.
price_rupeesnumberfreebooleanhostobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
imagestring or nullurlstring
joined_atnumber or nullhostingboolean
curl "https://sikhami.com/api/v1/me/meetups?limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"meetups": [
{
"meetup": {
"id": "string",
"name": "string",
"description": "string | null",
"category": "string | null",
"language": "string | null",
"exams": [
"string"
],
"subjects": [
"string"
],
"online": "boolean",
"city": "string | null",
"starts_at": "number | null",
"date_text": "string | null",
"time_text": "string | null",
"duration": "string | null",
"going": "integer",
"capacity": "integer",
"price_rupees": "number",
"free": "boolean",
"host": {},
"image": "string | null",
"url": "string"
},
"joined_at": "number | null",
"hosting": "boolean"
}
]
}list_my_notifications
List my notifications
/api/v1/me/notificationsscope readRead onlyThe connected person's latest Sikhami notifications (likes, comments, follows, meetup and course updates), newest first.
Parameters
unread_onlybooleanin queryOnly notifications not yet read.
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
Returns
notificationsarray of objectsShow 7 fieldsHide fields
idstringtypestringtextstringfromobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
Show 5 fieldsHide fields
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or null
urlstring or nullreadbooleancreated_atnumber
curl "https://sikhami.com/api/v1/me/notifications?limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"notifications": [
{
"id": "string",
"type": "string",
"text": "string",
"from": {
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null"
},
"url": "string | null",
"read": "boolean",
"created_at": "number"
}
]
}list_my_new_followers
List my new followers
/api/v1/me/followersscope readRead onlyPeople who started following the connected account, newest first. Works as a 'new follower' trigger: each item has a stable id.
Parameters
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
Returns
followersarray of objectsShow 3 fieldsHide fields
idstringfollowerobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
Show 5 fieldsHide fields
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or null
created_atnumber
curl "https://sikhami.com/api/v1/me/followers?limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"followers": [
{
"id": "string",
"follower": {
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null"
},
"created_at": "number"
}
]
}list_my_meetup_attendees
List people joining my meetups
/api/v1/me/meetup-attendeesscope readRead onlyPeople who joined meetups the connected person hosts, newest first (optionally for one meetup). Works as a 'new attendee' trigger.
Parameters
meetup_idstringin queryOnly this meetup (one you host).
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
Returns
attendeesarray of objectsShow 4 fieldsHide fields
idstringmeetupobjectShow 3 fieldsHide fields
idstringnamestringurlstring
attendeeobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
Show 5 fieldsHide fields
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or null
created_atnumber
curl "https://sikhami.com/api/v1/me/meetup-attendees?limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"attendees": [
{
"id": "string",
"meetup": {
"id": "string",
"name": "string",
"url": "string"
},
"attendee": {
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null"
},
"created_at": "number"
}
]
}list_my_course_enrolments
List enrolments in my courses
/api/v1/me/course-enrolmentsscope readRead onlyLearners who enrolled in courses the connected person owns, newest first (optionally for one course). Works as a 'new enrolment' trigger.
Parameters
course_idstringin queryOnly this course (one you own).
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
Returns
enrolmentsarray of objectsShow 5 fieldsHide fields
idstringcourseobjectShow 3 fieldsHide fields
idstringnamestringurlstring
studentobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
Show 5 fieldsHide fields
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or null
sourcestringcreated_atnumber
curl "https://sikhami.com/api/v1/me/course-enrolments?limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"enrolments": [
{
"id": "string",
"course": {
"id": "string",
"name": "string",
"url": "string"
},
"student": {
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null"
},
"source": "string",
"created_at": "number"
}
]
}Do things
Changes made as the person. Assistants are told to ask them first.
join_meetup
Join a meetup
/api/v1/meetups/{id}/joinscope writeChanges data · ask firstJoin a free, public Sikhami meetup as the connected person (it shows in their app with the joining details and reminders). Only for free meetups that have not started and are not full; paid meetups are joined on the meetup page. Ask the person before joining.
Parameters
idstringRequiredin pathThe meetup id.
Returns
joinedbooleanmeetupobjectShow 20 fieldsHide fields
idstringnamestringdescriptionstring or nullcategorystring or nulllanguagestring or nullexamsarray of stringssubjectsarray of stringsonlinebooleancitystring or nullstarts_atnumber or nullStart time in milliseconds since 1970 (UTC).
date_textstring or nulltime_textstring or nulldurationstring or nullgoingintegercapacityinteger0 means no limit.
price_rupeesnumberfreebooleanhostobjectA person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.
Show 5 fieldsHide fields
usernamestring or nullnamestringpicturestring or nullverifiedbooleanurlstring or null
imagestring or nullurlstring
curl -X POST "https://sikhami.com/api/v1/meetups/MEETUP_ID/join" \
-H "Authorization: Bearer skh_pat_..." \
-H "Content-Type: application/json" \
-d '{}'{
"joined": "boolean",
"meetup": {
"id": "string",
"name": "string",
"description": "string | null",
"category": "string | null",
"language": "string | null",
"exams": [
"string"
],
"subjects": [
"string"
],
"online": "boolean",
"city": "string | null",
"starts_at": "number | null",
"date_text": "string | null",
"time_text": "string | null",
"duration": "string | null",
"going": "integer",
"capacity": "integer",
"price_rupees": "number",
"free": "boolean",
"host": {
"username": "string | null",
"name": "string",
"picture": "string | null",
"verified": "boolean",
"url": "string | null"
},
"image": "string | null",
"url": "string"
}
}leave_meetup
Leave a meetup
/api/v1/meetups/{id}/joinscope writeChanges data · ask firstLeave a meetup the connected person joined (they lose their seat and the joining details). Ask the person before leaving.
Parameters
idstringRequiredin pathThe meetup id.
Returns
leftboolean
curl -X DELETE "https://sikhami.com/api/v1/meetups/MEETUP_ID/join" \
-H "Authorization: Bearer skh_pat_..."{
"left": "boolean"
}create_post
Publish a post
/api/v1/postsscope writeChanges data · ask firstPublish a public post on Sikhami as the connected person: 1 to 10 pictures (JPEG, PNG, WebP, GIF, up to 20 MB each) or MP4 videos (up to 100 MB), given as public https links, with an optional caption of up to 2,200 characters (#hashtags work). Everyone can see it. Show the person the caption and media and ask before publishing.
Parameters
media_urlsarray of stringsRequiredin body1 to 10 links, shown in this order.
1 to 10 items
textstringin bodyThe caption, up to 2,200 characters.
Up to 2,200 characters
Returns
idstringurlstringtextstringmediaarray of objectsShow 2 fieldsHide fields
typestringurlstring
created_atnumber
curl -X POST "https://sikhami.com/api/v1/posts" \
-H "Authorization: Bearer skh_pat_..." \
-H "Content-Type: application/json" \
-d '{"text":"Today'\''s notes on percentages #maths","media_urls":["https://example.com/notes.jpg"]}'{
"id": "string",
"url": "string",
"text": "string",
"media": [
{
"type": "string",
"url": "string"
}
],
"created_at": "number"
}Institutes on Sikhami LMS
Admission enquiries, for an institute's owner and admins.
list_my_institutes
List my institutes
/api/v1/lms/institutesscope lmsRead onlyInstitutes on Sikhami LMS that the connected person owns or runs as an admin, with their ids for the admission tools.
Parameters
None.
Returns
institutesarray of objectsShow 4 fieldsHide fields
idstringnamestringrolestringurlstring
curl "https://sikhami.com/api/v1/lms/institutes" \
-H "Authorization: Bearer skh_pat_..."{
"institutes": [
{
"id": "string",
"name": "string",
"role": "owner | admin",
"url": "string"
}
]
}list_admission_enquiries
List admission enquiries
/api/v1/lms/enquiriesscope lmsRead onlyAn institute's admission enquiries (name, phone, email, course of interest, stage), newest first. For the institute's owner and admins. Works as a 'new enquiry' trigger.
Parameters
institute_idstringRequiredin queryThe institute id (from list_my_institutes).
stagestringin queryOnly enquiries at this stage.
One of: new, contacted, demo, joined, lost
limitintegerin queryHow many to return, 1 to 50 (default 20).
1 to 50
Returns
enquiriesarray of objectsShow 13 fieldsHide fields
idstringinstitute_idstringnamestringphonestring or nullemailstring or nullintereststring or nullcourse_idstring or nullcourse_namestring or nullmessagestring or nullstagestringsourcestringcreated_atnumberupdated_atnumber
curl "https://sikhami.com/api/v1/lms/enquiries?institute_id=INSTITUTE_ID&limit=5" \
-H "Authorization: Bearer skh_pat_..."{
"enquiries": [
{
"id": "string",
"institute_id": "string",
"name": "string",
"phone": "string | null",
"email": "string | null",
"interest": "string | null",
"course_id": "string | null",
"course_name": "string | null",
"message": "string | null",
"stage": "string",
"source": "string",
"created_at": "number",
"updated_at": "number"
}
]
}add_admission_enquiry
Add an admission enquiry
/api/v1/lms/enquiriesscope lmsChanges data · ask firstAdd a new admission enquiry (a lead) to an institute's Sikhami LMS admissions list, for its owner or admins: name plus a phone number or email, and optionally the course or subject of interest and a note.
Parameters
institute_idstringRequiredin bodyThe institute id (from list_my_institutes).
namestringRequiredin bodyThe person's name.
1 to 100 characters
phonestringin bodyPhone number.
Up to 20 characters
emailstringin bodyEmail address.
Up to 200 characters
intereststringin bodyWhat they are interested in, such as 'Class 11 JEE batch'.
Up to 200 characters
course_idstringin bodyA course of the institute they asked about.
notestringin bodyA note for the team.
Up to 1,000 characters
Returns
idstringinstitute_idstringnamestringphonestring or nullemailstring or nullintereststring or nullcourse_idstring or nullcourse_namestring or nullmessagestring or nullstagestringsourcestringcreated_atnumberupdated_atnumber
curl -X POST "https://sikhami.com/api/v1/lms/enquiries" \
-H "Authorization: Bearer skh_pat_..." \
-H "Content-Type: application/json" \
-d '{"institute_id":"INSTITUTE_ID","name":"Asha Verma","phone":"9876543210","interest":"Class 11 JEE"}'{
"id": "string",
"institute_id": "string",
"name": "string",
"phone": "string | null",
"email": "string | null",
"interest": "string | null",
"course_id": "string | null",
"course_name": "string | null",
"message": "string | null",
"stage": "string",
"source": "string",
"created_at": "number",
"updated_at": "number"
}The answers above show each field's type in place of a value. Questions or problems: help@sikhami.com.
Was this page helpful?