2meet Docs
OpenAPI ↓

JSON API (LMS v1)

HMAC-signed REST for custom backends. Moodle plugins should use the LMS wire API instead.

Base URL

https://{slug}.2meet.ir/lms/v1/

Authentication (HMAC)

HeaderValue
X-2meet-TimestampUnix seconds (UTC); skew ≤ 5 minutes
X-2meet-SignatureHex HMAC-SHA256 (lowercase) of payload below
X-2meet-Reseller-SlugOptional if slug is already in the hostname
payload = "{timestamp}\n{METHOD}\n{path}\n{body}"
signature = hex(HMAC-SHA256(integration_secret, payload))

For GET requests, body is the empty string. path is the URL path only (no host, no query).

Endpoints

MethodPathDescription
POST/meetingsCreate (JSON) — logo + cover via URL fields
GET/meetingsList (paginated)
GET/meetings/{id}Detail (internal UUID)
PATCH/meetings/{id}Update name / logout / cover_url / org
DELETE/meetings/{id}End meeting
GET/meetings/{id}/reportAttendance report (see below)
POST/meetings/{id}/join-linksFresh join URLs with per-user identity

Create meeting

POST /meetings — pure JSON. For LMS, send image links (cover_url + org.logo_url). No file upload required.

{
  "name": "کلاس ریاضی — هفته ۳",
  "external_id": "course-42-week-3",
  "max_participants": 80,
  "session_mode": "lecture",
  "duration_minutes": 90,
  "logout_url": "https://lms.example/course/view.php?id=5",
  "cover_url": "https://lms.example/media/class-cover.jpg",
  "org": {
    "org_display_name": "آکادمی نمونه",
    "logo_url": "https://lms.example/media/school-logo.png"
  }
}
FieldRequiredDescription
nameYesSession title
external_idRecommendedStable LMS id (attendance report aggregates by this)
max_participantsNoDefault 80
session_modeNolecture (default) or interactive
duration_minutesNoHard time cap; omit → 10 min demo default
logout_urlNoReturn URL after leave/end
cover_urlNoAbsolute http(s) URL of stage cover image (applied when class goes live)
orgNoSchool branding object (see below)
org.logo_urlNoAbsolute http(s) URL of school/class logo in the desktop header
org.org_display_nameNoSchool/academy short name (tab title + chrome)
org.org_nameNoOptional legal/internal name
featuresNoPer-session feature toggles
Recommended for LMS: put logo and cover as public CDN/LMS media URLs on create. File upload endpoints exist only as an optional alternative for non-LMS tools.

School / class logo (org)

On create (or PATCH), snapshot branding into the meeting:

"org": {
  "org_display_name": "آکادمی نمونه",
  "logo_url": "https://lms.example/media/school-logo.png"
}

Wire create: meta_org_logo_url, meta_org_display_name, meta_org_name.

Session cover (cover_url)

Static image on the video stage when the host camera is off or before start.

Primary (LMS): pass a link on create / PATCH — no binary upload:

{ "cover_url": "https://lms.example/media/class-cover.jpg" }

Wire: meta_cover_url=https://…. Applied when the class goes live. Clients then load GET /api/v1/portal/sessions/{sessionId}/cover.

Advanced only: multipart file field cover on create, or POST /meetings/{id}/cover — not needed when you already have a public image URL.

Join identity (per user)

Create returns generic join URLs. Before sending a user into the room, call POST /meetings/{id}/join-links. Always send user_id for attendance.

POST /meetings/{meeting_id}/join-links
{
  "display_name": "Alice Teacher",
  "avatar_url": "https://lms.example/avatars/alice.jpg",
  "user_id": "42",
  "role": "moderator",
  "logout_url": "https://lms.example/mod/bigbluebuttonbn/view.php?id=9"
}

Attendance report

Pull-only grading / attendance (HMAC):

GET /meetings/{id}/report
{id}Behavior
Your external_idAggregates all occurrences (presence, joins, voice/video, class wall-clock). Includes occurrence_count.
Internal meeting UUIDSingle occurrence only
{
  "meeting_id": "course-42-week-3",
  "occurrence_count": 4,
  "participant_count": 12,
  "total_duration_seconds": 13828,
  "participants": [
    {
      "user_id": "42",
      "display_name": "Alice Teacher",
      "joined": true,
      "total_duration_seconds": 12040,
      "join_count": 8,
      "voice_minutes": 164,
      "video_minutes": 132
    }
  ]
}

OpenAPI

Download lms-v1.openapi.yaml