Topolo Docs Topolo Platform
Open workspace

Get booking — Calendar

Read a booking and its related event type and delivery receipts.

Read a booking and its related event type and delivery receipts.

Action: app_topolo_calendar.bookings.get · GET /api/admin/bookings/{bookingId}

Declared permission: app_topolo_calendar.bookings:read. For authorized Calendar users; permissions and resource access still apply.

Before you start

  • Use the current credential to confirm the production organization and inspect this exact action before preparing a call.
  • Declared permission: app_topolo_calendar.bookings:read. Permission discovery is not a grant.
  • Discover the authorized Calendar workspace and pass it as resourceType=workspace/resourceId separately from this action input. Calendar records and IDs are scoped to the selected host/workspace.

Inputs and field meanings

FieldPresenceDeclared constraintMeaning
bookingIdrequiredstringBooking ID discovered through bookings.list/get for this host; never a public manage token.

Worked request and response

Source-reviewed illustration only. Nothing below was executed; all identifiers, counts, states, credentials and URLs are synthetic. Replace identifiers through discovery before any separately authorized call.

Resource context: workspace; it is not an extra action input field.

Illustrative action input:

{
  "bookingId": "bkg_example"
}

Illustrative HTTP 200 source response:

{
  "booking": {
    "id": "bkg_example",
    "hostId": "hst_example",
    "eventTypeId": "evt_example",
    "calendarUid": "bkg_example@calendar.topolo.app",
    "sequence": 0,
    "startAt": "2026-11-23T06:00:00.000Z",
    "endAt": "2026-11-23T06:30:00.000Z",
    "status": "confirmed",
    "inviteeName": "Example Invitee",
    "inviteeEmail": "invitee@example.com",
    "inviteeTimezone": "Asia/Dubai",
    "inviteeNotes": null,
    "meetingProvider": null,
    "meetingProviderRef": null,
    "createdAt": "2026-11-01T00:00:00.000Z",
    "updatedAt": "2026-11-01T00:00:00.000Z",
    "cancelledAt": null,
    "cancellationReason": null,
    "recurrenceSeriesId": null,
    "recurrenceInstanceStart": null,
    "deliveryReceipts": [],
    "attendees": [
      {
        "id": "att_example",
        "bookingId": "bkg_example",
        "email": "invitee@example.com",
        "name": "Example Invitee",
        "role": "invitee",
        "responseStatus": "needs_action",
        "createdAt": "2026-11-01T00:00:00.000Z",
        "updatedAt": null
      }
    ]
  },
  "eventType": {
    "id": "evt_example",
    "hostId": "hst_example",
    "slug": "intro-call",
    "name": "Intro call",
    "description": null,
    "durationMinutes": 30,
    "bufferBeforeMinutes": 0,
    "bufferAfterMinutes": 10,
    "minNoticeMinutes": 120,
    "maxAdvanceDays": 60,
    "slotIncrementMinutes": 15,
    "locationKind": "phone",
    "locationDetail": "Use the agreed phone number.",
    "displayOrder": 0,
    "isActive": true,
    "approvalRequired": false
  }
}

booking.status is domain state. deliveryReceipts:[] shows no receipts in this illustration; it is not proof no notification was attempted or that an invitee received one. eventType supplies the current associated configuration.

This source-shaped illustrative response does not validate against the declared output schema: overlapping oneOf branches accept the same object. Preserve the schema and report the contract issue; do not claim this is runtime failure evidence.

Effects and verification

  • Reads the host-owned booking, hydrated details and available delivery receipts.
  1. Check id/time/invitee/status plus receipt details separately before another communication or mutation.

Refusals and recovery

Selected source refusals are listed below; runtime middleware can return additional structured errors.

HTTPErrorSupported response
403forbiddenReconcile the declared permission, organization and verified resource grant with the legitimate access owner; do not switch context to bypass a refusal.
404no_hostRead host.get; if it returns host:null, create the intended workspace host through host.update before retrying.
404not_foundList records in the selected workspace and discover the identifier again. Do not probe another workspace by guessing IDs.
404event_type_not_foundReconcile the booking’s type reference with the owning application before changing the booking.

Recovery: This read does not mutate Calendar records. Correct the selected context or request fields before another authorized read.

  • app_topolo_calendar.bookings.list: Find bookings within an explicit time window.
  • app_topolo_calendar.bookings.update: Edit a booking’s time or invitee details.
  • app_topolo_calendar.bookings.invite.resend: Request another invitation or cancellation for the current booking.

Declared schemas and provenance

The hidden action guide carries these exact current declared schemas. They are not rewritten to make the illustrations pass.

Input schema:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "bookingId"
  ],
  "additionalProperties": false
}

Output schema:

{
  "title": "Get booking response",
  "description": "Resource response returned by bookings.get. The service may return the resource directly or in an envelope.",
  "oneOf": [
    {
      "type": "object",
      "title": "booking record",
      "properties": {
        "id": {
          "type": "string",
          "description": "Stable identifier when the booking exposes one."
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "title": "booking record",
          "properties": {
            "id": {
              "type": "string",
              "description": "Stable identifier when the booking exposes one."
            }
          },
          "additionalProperties": true
        },
        "booking": {
          "type": "object",
          "title": "booking record",
          "properties": {
            "id": {
              "type": "string",
              "description": "Stable identifier when the booking exposes one."
            }
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    }
  ],
  "x-topolo-contract-source": "derived-action-metadata",
  "x-topolo-contract-precision": "structural"
}

Source: TopoloCalendar@b378ceb73800ee1d1e6c4ff6f0b4179918cf632c, apps/api/src/routes/admin-bookings.ts. Current catalog metadata and source were compared without executing the application.

  • Source-reviewed synthetic input/response; not captured or executed.
  • Source revision is not proof of current deployment, caller access, provider connection or notification delivery.
  • This source-shaped illustrative response does not validate against the declared output schema: overlapping oneOf branches accept the same object. Preserve the schema and report the contract issue; do not claim this is runtime failure evidence.