Skip to content

Meetings

Schedule and manage meetings — the same feature as the web app's Meetings page. A meeting creates one task per participant, so these endpoints use the tasks:read / tasks:write OAuth scopes. Access follows the web app, not the workspace-wide default of the rest of this API: you see meetings in projects you created or are a member of (workspace owners and admins see every project), and anything you can't see answers 404. A recurring meeting appears once, carrying its latest occurrence.

GET

/meetings

Lists meetings you can see, ordered by their latest occurrence. Each item carries the occurrence date/time, the participant roster with each participant's task status, the link, location and recurrence rule.

Query parameters

  • projectIdintegeroptionalOnly meetings in this project
  • fromstringoptionalYYYY-MM-DD — only meetings whose latest occurrence is on or after this date
  • tostringoptionalYYYY-MM-DD — only meetings whose latest occurrence is on or before this date
  • orderstringoptionalasc (default) or desc, by occurrence start. Meetings with no remaining occurrence sort last
  • limitintegeroptionalPage size, default 25, max 100
  • offsetintegeroptionalNumber of results to skip, default 0
GET

/meetings/{id}

Returns one meeting. Readable by members of its project, workspace owners/admins, and leads. 404s — never 403 — for a meeting you can't see, one in another workspace, or an id that isn't a meeting.

POST

/meetings

Schedules a meeting: one task per participant (duplicates removed), each assigned to its participant and notified like any other assignment. You must be a member of the project (403 otherwise; 404 if the project isn't in your workspace), and every participant must be a project member (400). A recurring meeting additionally requires the lead role or a workspace owner/admin role (403 forbidden) and a plan that includes recurring tasks (403 forbidden_plan).

Body parameters

  • projectIdintegerrequiredProject the meeting belongs to
  • namestringrequiredMeeting title
  • descriptionstringoptionalAgenda or context
  • datestringrequiredYYYY-MM-DD
  • timestringrequiredHH:MM, 24-hour wall-clock time — the same for every viewer, not converted per timezone
  • participantIdsstring[]requiredUser ids to invite, at least one. Include your own id to attend
  • meetingLinkstringoptionalVideo call URL
  • locationstringoptionalRoom or address, max 200 characters
  • durationobjectoptional{ hours, minutes, days } — integers; defaults to 1 hour when omitted
  • recurrenceobjectoptional{ frequency: "daily" | "weekly", daysOfWeek: 0–6[] (0 = Sunday), timeOfDay: "HH:MM", timezone: IANA name, default "Asia/Jakarta" } — makes the meeting repeat
PATCH

/meetings/{id}

Updates the latest occurrence for every participant at once, in a single transaction: reschedule it and/or set the link or location. Send at least one field. Past occurrences of a recurring meeting are left alone. Requires membership of the meeting's project (403 for a lead who can read it but isn't on the project).

Body parameters

  • datestringoptionalYYYY-MM-DD — move the occurrence to this date (time kept if not sent)
  • timestringoptionalHH:MM — move the occurrence to this time (date kept if not sent)
  • meetingLinkstring | nulloptionalSet the video call URL; null clears it
  • locationstring | nulloptionalSet the location; null clears it
DELETE

/meetings/{id}

Cancels a meeting: it disappears from lists and a recurring meeting stops generating new occurrences. Tasks already created for participants are kept. Requires the lead role or a workspace owner/admin role (403 otherwise).

View example
Schedule a meeting
curl -X POST https://api.klaarin.com/v1/meetings \
  -H "Authorization: Bearer kl_live_9f2ac…" \
  -H "Content-Type: application/json" \
  -d '{
    "projectId": 12,
    "name": "Weekly design review",
    "date": "2026-10-01",
    "time": "09:30",
    "participantIds": ["clx...", "cly..."],
    "meetingLink": "https://meet.google.com/abc-defg-hij"
  }'
Response
{
  "id": 42,
  "name": "Weekly design review",
  "description": null,
  "project": { "id": 12, "name": "IT General" },
  "occurrence": { "date": "2026-10-01", "time": "09:30", "startsAt": "2026-10-01T09:30:00" },
  "duration": { "hours": 1, "minutes": null, "days": null },
  "meetingLink": "https://meet.google.com/abc-defg-hij",
  "location": null,
  "isRecurring": false,
  "recurrence": null,
  "participants": [
    { "taskId": 9064, "status": "todo", "user": { "id": "clx...", "name": "Bayu Pratama", "email": "bayu@example.com", "image": null } }
  ],
  "createdBy": { "id": "clx...", "name": "Bayu Pratama", "email": "bayu@example.com" },
  "createdAt": "2026-09-30T03:00:00.000Z"
}