Get one booking

GET
/meetings/{id}

Full booking detail including status, pinCode, payment/billing summaries, and histories. Poll this after directing a user to webPaymentUrl until status leaves "unpaid".

Authorization

bearerAuth
AuthorizationBearer <token>

Access token from POST /auth/accessToken

In: header

Path Parameters

id*string

MongoDB ObjectId

Response Body

application/json

application/json

curl -X GET "https://example.com/meetings/string"
{  "code": "KS000",  "success": true,  "message": "string",  "data": {    "_id": "string",    "status": "unpaid",    "meetingRoomId": "string",    "meetingRoomName": "string",    "deskId": "string",    "title": "string",    "body": "string",    "startDateTime": "2019-08-24T14:15:22Z",    "endDateTime": "2019-08-24T14:15:22Z",    "pinCode": "string",    "organizer": {      "userId": "string",      "email": "string",      "name": "string",      "displayName": "string",      "checkInDateTime": "2019-08-24T14:15:22Z",      "checkOutDateTime": "2019-08-24T14:15:22Z"    },    "attendees": [      {        "userId": "string",        "email": "string",        "name": "string",        "type": "required",        "responseStatus": "accepted",        "checkInDateTime": "2019-08-24T14:15:22Z"      }    ],    "payment": {      "paymentId": "string",      "invoiceNo": "string",      "amount": 0,      "summary": {        "subtotal": 0,        "total": 0,        "discounts": [          {            "code": "string",            "value": "string",            "name": "string"          }        ]      },      "webPaymentUrl": "http://example.com",      "webPaymentQr": "string"    },    "paymentDueAt": "2019-08-24T14:15:22Z",    "bookedVia": "webview",    "bookedByUserId": "string",    "billingSummaries": [      {        "kind": "quote",        "payment_id": "string",        "amount": 0,        "total": 0,        "invoice_no": "string",        "status": "string",        "expiredAt": "2019-08-24T14:15:22Z"      }    ],    "histories": [      {        "action": "create",        "at": "2019-08-24T14:15:22Z",        "by": "string"      }    ],    "seriesMasterId": "string",    "occurrenceEventId": "string",    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}

Create a room or desk booking POST

Exactly one of meetingRoomId / deskId. Desk bookings: exactly one of endDateTime / timePeriod. A response with status "unpaid" requires the end user to complete payment at payment.webPaymentUrl within ~5 minutes (billingSummaries[].expiredAt) or the booking auto-cancels — do NOT automate payment. Back-office bookings (organizerId set by a caller holding MEETING_UPDATE) mint nothing at create: there is no webPaymentUrl, the organizer pays later from their own device, and the booking is held until paymentDueAt (paymentDueMinutes → the project's backofficePaymentDueMinutes → 1440 minutes; clamped to 7 days and to the meeting start). No-show auto-cancel: unless disabled per asset (config.meetingConfig.postStartExpireMinutes = -1), an active booking nobody checks in to is automatically cancelled ~15 minutes after start. No idempotency mechanism: never blind-retry a timed-out create; reconcile via GET /meetings. Slot races surface as 409 KS012. An organizer an admin has blocked from booking is refused 403 MEETING_049 — an authorization refusal, not a slot problem: do not offer another slot.

Update or extend a booking PATCH

Only active or checked-in bookings. Start time cannot change after check-in. Extending a paid booking can return status "unpaid" with a payment object — same handling as a paid create. pinCode required when the caller is not the organizer. A change to startDateTime/endDateTime by a blocked organizer is refused 403 MEETING_049; an edit that keeps the time (title, body, attendees) is not.