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.

Base URL
https://sikhami.com/api/v1
GET /api/v1/search
curl "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.

read

See your Sikhami account

write

Act for you

lms

Your institute's admissions

GET /api/v1/me
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.

StatuscodeWhen
400invalid_requestBad or missing input; the message names the field
401invalid_tokenMissing, expired or revoked token: sign in again
403insufficient_scopeThe token lacks the scope
403forbiddenAllowed scope, but not your item (not on that institute's team)
404not_foundMissing, unpublished or private
409conflictCannot right now: already joined, full, already started, paid
429rate_limitedToo many requests; wait the seconds in Retry-After
500server_errorOur fault; reads are safe to retry
An error
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.

Too many requests
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.

Paging through meetups
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=MjA

Safe 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.

POST with an Idempotency-Key
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/webhooks with event, url and institute_id. The answer carries a secret, shown only once. Subscribing the same address to the same event again returns the existing webhook.
  • GET /api/v1/webhooks lists 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 410 to 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.
Subscribe
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_...",
  ...
}
What Sikhami sends
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> }
}
Check the signature
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-server and /.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, write and lms, separated by spaces; an app that asks for none gets read. The token answer's scope says what the person allowed.
  • Developer Apps (a client id and a secret, shown once) are made in Settings, Connected apps. MCP clients register themselves.
Authorization code with PKCE
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.

Connect
# 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
List the tools
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}

Find and read

Everything public on Sikhami: courses, notes, meetups, profiles and quizzes.

Search Sikhami

GET/api/v1/searchscope readRead only

Search 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 query

    Words to look for, 2 to 100 characters.

    2 to 100 characters

  • typestringin query

    Only this kind of item.

    One of: course, note, meetup, teacher, institute, club

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

Returns

  • resultsarray of objects
    Show 6 fields
    • idstring
    • typestring
    • namestring
    • subtitlestring
    • imagestring or null
    • urlstring
GET /api/v1/search
curl "https://sikhami.com/api/v1/search?q=gst&limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "results": [
    {
      "id": "string",
      "type": "course | note | meetup | teacher | institute | club",
      "name": "string",
      "subtitle": "string",
      "image": "string | null",
      "url": "string"
    }
  ]
}

get_course

Get a course

GET/api/v1/courses/{id}scope readRead only

Details 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 path

    The course id (from search).

Returns

  • idstring
  • namestring
  • descriptionstring or null
  • categorystring or null
  • sub_categorystring or null
  • languagestring or null
  • price_rupeesnumber
  • freeboolean
  • lecturesinteger
  • hoursnumber
  • studentsinteger
  • ratingobject or null
    Show 2 fields
    • valuenumber
    • countinteger
  • instituteobject or null
    Show 3 fields
    • idstring
    • namestring
    • urlstring
  • imagestring or null
  • urlstring

    The course page on sikhami.com.

GET /api/v1/courses/{id}
curl "https://sikhami.com/api/v1/courses/COURSE_ID" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/notes/{id}scope readRead only

Details 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 path

    The notes id (from search).

Returns

  • idstring
  • namestring
  • descriptionstring or null
  • categorystring or null
  • sub_categorystring or null
  • languagestring or null
  • subjectsarray of strings
  • examsarray of strings
  • levelsarray of strings
  • formatstring or null
  • pagesinteger
  • price_rupeesnumber
  • freeboolean
  • ratingobject or null
    Show 2 fields
    • valuenumber
    • countinteger
  • ownerobject

    A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

    Show 5 fields
    • usernamestring or null
    • namestring
    • picturestring or null
    • verifiedboolean
    • urlstring or null
  • imagestring or null
  • urlstring
  • created_atnumber or null
GET /api/v1/notes/{id}
curl "https://sikhami.com/api/v1/notes/NOTE_ID" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/meetupsscope readRead only

Upcoming 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 query

    A city name, such as Delhi or Pune.

    Up to 60 characters

  • qstringin query

    Words in the meetup's name, topic, exam or subject.

    Up to 100 characters

  • free_onlybooleanin query

    Only meetups with no joining fee.

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

  • cursorstringin query

    The next_cursor from the previous page, to continue.

    Up to 200 characters

Returns

  • meetupsarray of objects
    Show 20 fields
    • idstring
    • namestring
    • descriptionstring or null
    • categorystring or null
    • languagestring or null
    • examsarray of strings
    • subjectsarray of strings
    • onlineboolean
    • citystring or null
    • starts_atnumber or null

      Start time in milliseconds since 1970 (UTC).

    • date_textstring or null
    • time_textstring or null
    • durationstring or null
    • goinginteger
    • capacityinteger

      0 means no limit.

    • price_rupeesnumber
    • freeboolean
    • hostobject

      A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

      Show 5 fields
      • usernamestring or null
      • namestring
      • picturestring or null
      • verifiedboolean
      • urlstring or null
    • imagestring or null
    • urlstring
  • next_cursorstring or null

    Pass back as cursor for the next page; null on the last page.

GET /api/v1/meetups
curl "https://sikhami.com/api/v1/meetups?limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/meetups/{id}scope readRead only

Details 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 path

    The meetup id.

Returns

  • idstring
  • namestring
  • descriptionstring or null
  • categorystring or null
  • languagestring or null
  • examsarray of strings
  • subjectsarray of strings
  • onlineboolean
  • citystring or null
  • starts_atnumber or null

    Start time in milliseconds since 1970 (UTC).

  • date_textstring or null
  • time_textstring or null
  • durationstring or null
  • goinginteger
  • capacityinteger

    0 means no limit.

  • price_rupeesnumber
  • freeboolean
  • hostobject

    A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

    Show 5 fields
    • usernamestring or null
    • namestring
    • picturestring or null
    • verifiedboolean
    • urlstring or null
  • imagestring or null
  • urlstring
GET /api/v1/meetups/{id}
curl "https://sikhami.com/api/v1/meetups/MEETUP_ID" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/profiles/{username}scope readRead only

A 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 path

    The username, without @.

Returns

  • usernamestring or null
  • namestring
  • picturestring or null
  • verifiedboolean
  • urlstring or null
  • biostring or null
  • collegestring or null
  • levelstring or null
  • examsarray of strings
  • subjectsarray of strings
  • languagesarray of strings
  • followersinteger
  • followinginteger
  • postsinteger
  • joined_atnumber or null
GET /api/v1/profiles/{username}
curl "https://sikhami.com/api/v1/profiles/sikhami" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/quizzesscope readRead only

Sikhami'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 query

    Words in the subject or topic, such as 'percentage' or 'polity'.

    Up to 100 characters

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

  • cursorstringin query

    The next_cursor from the previous page, to continue.

    Up to 200 characters

Returns

  • topicsarray of objects
    Show 6 fields
    • idstring
    • subjectstring
    • topicstring
    • setsinteger
    • questionsinteger
    • urlstring
  • next_cursorstring or null

    Pass back as cursor for the next page; null on the last page.

GET /api/v1/quizzes
curl "https://sikhami.com/api/v1/quizzes?limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "topics": [
    {
      "id": "string",
      "subject": "string",
      "topic": "string",
      "sets": "integer",
      "questions": "integer",
      "url": "string"
    }
  ],
  "next_cursor": "string | null"
}

get_quiz

Get a quiz

GET/api/v1/quizzes/{id}scope readRead only

A 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 path

    A quiz id ('profit-and-loss-3') or a topic id ('profit-and-loss').

    Up to 120 characters

Returns

  • idstring
  • titlestring
  • subjectstring
  • topicstring
  • seconds_per_questioninteger
  • urlstring
  • next_quiz_idstring or null
  • questionsarray of objects
    Show 5 fields
    • idstring
    • questionstring
    • optionsarray of strings
    • answer_indexinteger
    • explanationstring or null
GET /api/v1/quizzes/{id}
curl "https://sikhami.com/api/v1/quizzes/profit-and-loss-3" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/mescope readRead only

The 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

  • idstring

    A permanent id for the account; it never changes, unlike the username.

  • usernamestring or null
  • namestring
  • picturestring or null
  • verifiedboolean
  • urlstring or null
  • biostring or null
  • emailstring or null
  • privateboolean

    True when only approved followers see the profile; others then see it as 'A Sikhami learner'.

  • followersinteger
  • followinginteger
  • postsinteger
GET /api/v1/me
curl "https://sikhami.com/api/v1/me" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/me/coursesscope readRead only

Courses 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 query

    How many to return, 1 to 50 (default 20).

    1 to 50

Returns

  • coursesarray of objects
    Show 5 fields
    • courseobject
      Show 15 fields
      • idstring
      • namestring
      • descriptionstring or null
      • categorystring or null
      • sub_categorystring or null
      • languagestring or null
      • price_rupeesnumber
      • freeboolean
      • lecturesinteger
      • hoursnumber
      • studentsinteger
      • ratingobject or null
      • instituteobject or null
      • imagestring or null
      • urlstring

        The course page on sikhami.com.

    • progress_percentinteger
    • enrolled_atnumber
    • access_expires_atnumber or null
    • continue_urlstring
GET /api/v1/me/courses
curl "https://sikhami.com/api/v1/me/courses?limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/me/meetupsscope readRead only

Meetups 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 query

    Also list meetups that are over.

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

Returns

  • meetupsarray of objects
    Show 3 fields
    • meetupobject
      Show 20 fields
      • idstring
      • namestring
      • descriptionstring or null
      • categorystring or null
      • languagestring or null
      • examsarray of strings
      • subjectsarray of strings
      • onlineboolean
      • citystring or null
      • starts_atnumber or null

        Start time in milliseconds since 1970 (UTC).

      • date_textstring or null
      • time_textstring or null
      • durationstring or null
      • goinginteger
      • capacityinteger

        0 means no limit.

      • price_rupeesnumber
      • freeboolean
      • hostobject

        A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

      • imagestring or null
      • urlstring
    • joined_atnumber or null
    • hostingboolean
GET /api/v1/me/meetups
curl "https://sikhami.com/api/v1/me/meetups?limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/me/notificationsscope readRead only

The connected person's latest Sikhami notifications (likes, comments, follows, meetup and course updates), newest first.

Parameters

  • unread_onlybooleanin query

    Only notifications not yet read.

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

Returns

  • notificationsarray of objects
    Show 7 fields
    • idstring
    • typestring
    • textstring
    • fromobject

      A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

      Show 5 fields
      • usernamestring or null
      • namestring
      • picturestring or null
      • verifiedboolean
      • urlstring or null
    • urlstring or null
    • readboolean
    • created_atnumber
GET /api/v1/me/notifications
curl "https://sikhami.com/api/v1/me/notifications?limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/me/followersscope readRead only

People who started following the connected account, newest first. Works as a 'new follower' trigger: each item has a stable id.

Parameters

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

Returns

  • followersarray of objects
    Show 3 fields
    • idstring
    • followerobject

      A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

      Show 5 fields
      • usernamestring or null
      • namestring
      • picturestring or null
      • verifiedboolean
      • urlstring or null
    • created_atnumber
GET /api/v1/me/followers
curl "https://sikhami.com/api/v1/me/followers?limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/me/meetup-attendeesscope readRead only

People who joined meetups the connected person hosts, newest first (optionally for one meetup). Works as a 'new attendee' trigger.

Parameters

  • meetup_idstringin query

    Only this meetup (one you host).

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

Returns

  • attendeesarray of objects
    Show 4 fields
    • idstring
    • meetupobject
      Show 3 fields
      • idstring
      • namestring
      • urlstring
    • attendeeobject

      A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

      Show 5 fields
      • usernamestring or null
      • namestring
      • picturestring or null
      • verifiedboolean
      • urlstring or null
    • created_atnumber
GET /api/v1/me/meetup-attendees
curl "https://sikhami.com/api/v1/me/meetup-attendees?limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

GET/api/v1/me/course-enrolmentsscope readRead only

Learners who enrolled in courses the connected person owns, newest first (optionally for one course). Works as a 'new enrolment' trigger.

Parameters

  • course_idstringin query

    Only this course (one you own).

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

Returns

  • enrolmentsarray of objects
    Show 5 fields
    • idstring
    • courseobject
      Show 3 fields
      • idstring
      • namestring
      • urlstring
    • studentobject

      A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

      Show 5 fields
      • usernamestring or null
      • namestring
      • picturestring or null
      • verifiedboolean
      • urlstring or null
    • sourcestring
    • created_atnumber
GET /api/v1/me/course-enrolments
curl "https://sikhami.com/api/v1/me/course-enrolments?limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

POST/api/v1/meetups/{id}/joinscope writeChanges data · ask first

Join 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 path

    The meetup id.

Returns

  • joinedboolean
  • meetupobject
    Show 20 fields
    • idstring
    • namestring
    • descriptionstring or null
    • categorystring or null
    • languagestring or null
    • examsarray of strings
    • subjectsarray of strings
    • onlineboolean
    • citystring or null
    • starts_atnumber or null

      Start time in milliseconds since 1970 (UTC).

    • date_textstring or null
    • time_textstring or null
    • durationstring or null
    • goinginteger
    • capacityinteger

      0 means no limit.

    • price_rupeesnumber
    • freeboolean
    • hostobject

      A person. Private profiles, under-18s and people of unknown age show as 'A Sikhami learner' with no username.

      Show 5 fields
      • usernamestring or null
      • namestring
      • picturestring or null
      • verifiedboolean
      • urlstring or null
    • imagestring or null
    • urlstring
POST /api/v1/meetups/{id}/join
curl -X POST "https://sikhami.com/api/v1/meetups/MEETUP_ID/join" \
  -H "Authorization: Bearer skh_pat_..." \
  -H "Content-Type: application/json" \
  -d '{}'
Response200
{
  "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

DEL/api/v1/meetups/{id}/joinscope writeChanges data · ask first

Leave a meetup the connected person joined (they lose their seat and the joining details). Ask the person before leaving.

Parameters

  • idstringRequiredin path

    The meetup id.

Returns

  • leftboolean
DELETE /api/v1/meetups/{id}/join
curl -X DELETE "https://sikhami.com/api/v1/meetups/MEETUP_ID/join" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "left": "boolean"
}

create_post

Publish a post

POST/api/v1/postsscope writeChanges data · ask first

Publish 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 body

    1 to 10 links, shown in this order.

    1 to 10 items

  • textstringin body

    The caption, up to 2,200 characters.

    Up to 2,200 characters

Returns

  • idstring
  • urlstring
  • textstring
  • mediaarray of objects
    Show 2 fields
    • typestring
    • urlstring
  • created_atnumber
POST /api/v1/posts
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"]}'
Response201
{
  "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

GET/api/v1/lms/institutesscope lmsRead only

Institutes 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 objects
    Show 4 fields
    • idstring
    • namestring
    • rolestring
    • urlstring
GET /api/v1/lms/institutes
curl "https://sikhami.com/api/v1/lms/institutes" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "institutes": [
    {
      "id": "string",
      "name": "string",
      "role": "owner | admin",
      "url": "string"
    }
  ]
}

list_admission_enquiries

List admission enquiries

GET/api/v1/lms/enquiriesscope lmsRead only

An 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 query

    The institute id (from list_my_institutes).

  • stagestringin query

    Only enquiries at this stage.

    One of: new, contacted, demo, joined, lost

  • limitintegerin query

    How many to return, 1 to 50 (default 20).

    1 to 50

Returns

  • enquiriesarray of objects
    Show 13 fields
    • idstring
    • institute_idstring
    • namestring
    • phonestring or null
    • emailstring or null
    • intereststring or null
    • course_idstring or null
    • course_namestring or null
    • messagestring or null
    • stagestring
    • sourcestring
    • created_atnumber
    • updated_atnumber
GET /api/v1/lms/enquiries
curl "https://sikhami.com/api/v1/lms/enquiries?institute_id=INSTITUTE_ID&limit=5" \
  -H "Authorization: Bearer skh_pat_..."
Response200
{
  "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

POST/api/v1/lms/enquiriesscope lmsChanges data · ask first

Add 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 body

    The institute id (from list_my_institutes).

  • namestringRequiredin body

    The person's name.

    1 to 100 characters

  • phonestringin body

    Phone number.

    Up to 20 characters

  • emailstringin body

    Email address.

    Up to 200 characters

  • intereststringin body

    What they are interested in, such as 'Class 11 JEE batch'.

    Up to 200 characters

  • course_idstringin body

    A course of the institute they asked about.

  • notestringin body

    A note for the team.

    Up to 1,000 characters

Returns

  • idstring
  • institute_idstring
  • namestring
  • phonestring or null
  • emailstring or null
  • intereststring or null
  • course_idstring or null
  • course_namestring or null
  • messagestring or null
  • stagestring
  • sourcestring
  • created_atnumber
  • updated_atnumber
POST /api/v1/lms/enquiries
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"}'
Response201
{
  "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?