# reserve_organization_room Behavior, inputs, outputs and permissions for reserve_organization_room. Source: https://docs.getridian.com/developers/tools/reserve_organization_room/ Language: en Reviewed: 2026-09-20 This reference is generated from the published tool contract. ## Behavior and boundaries Reserves exactly one internal Microsoft 365 or Google Workspace meeting room after the user explicitly requests that reservation. The caller supplies the visible room name, not provider IDs. The server independently resolves that name against the live organization catalog, requires exactly one match, and checks availability immediately before writing. Optional accountName and provider can disambiguate duplicate visible names. Side effect: creates one calendar event in the selected user's primary calendar and sends one resource invitation to the resolved internal meeting room. No arbitrary attendee, email address, payment, hotel, or external venue can be supplied. The reservation can be reversed by deleting the created event. requestId must be unique for this intended reservation and reused unchanged on retries, which prevents duplicate events. A bookingStatus of requested means the resource has not yet confirmed the invitation. ## Permissions Granted scopes, accounts, calendars and visibility rules limit access. Workspace administrators do not automatically gain access to other users’ accounts. `rooms:read`, `calendar:write` [Consent and boundaries](https://docs.getridian.com/developers/authentication/) ## Input ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "roomName": { "type": "string", "minLength": 1, "maxLength": 512, "description": "Exact human-readable organization meeting-room name shown to the user, for example Ridian Meeting Room 1." }, "accountName": { "description": "Optional human-readable connected account name from search_rooms, used only to disambiguate rooms with the same name.", "type": "string", "minLength": 1, "maxLength": 512 }, "provider": { "description": "Optional calendar provider from search_rooms, used only to disambiguate rooms with the same name.", "type": "string", "enum": [ "google", "microsoft" ] }, "requestId": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Caller-generated stable key for this one intended reservation. Reuse it unchanged only when retrying the same reservation." }, "title": { "type": "string", "minLength": 1, "maxLength": 512, "description": "Title of the calendar event that will be created for this booking." }, "description": { "type": "string", "maxLength": 10000 }, "start": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", "description": "ISO 8601 timestamp with an explicit UTC offset, for example 2026-09-14T09:00:00+02:00 or 2026-09-14T07:00:00Z. A timeZone field does not replace the offset." }, "end": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", "description": "ISO 8601 timestamp with an explicit UTC offset, for example 2026-09-14T09:00:00+02:00 or 2026-09-14T07:00:00Z. A timeZone field does not replace the offset." }, "timeZone": { "type": "string", "minLength": 1, "maxLength": 128 } }, "required": [ "roomName", "requestId", "title", "start", "end", "timeZone" ], "additionalProperties": false } ``` ## Output ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "ok": { "type": "boolean" }, "reason": { "type": "string", "enum": [ "room_catalog_incomplete", "room_not_found", "room_name_ambiguous", "room_not_available" ] }, "matchCount": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "eventId": { "type": "string" }, "idempotentReplay": { "type": [ "boolean", "null" ] }, "idempotencyStatus": { "type": "string", "enum": [ "created", "replayed", "provider_managed" ] }, "bookingStatus": { "type": "string", "enum": [ "confirmed", "declined", "tentative", "requested" ] }, "roomResponseStatus": { "anyOf": [ { "type": "string", "enum": [ "needs-action", "accepted", "declined", "tentative" ] }, { "type": "null" } ] }, "room": { "type": "object", "properties": { "roomId": { "type": "string" }, "name": { "type": "string" }, "capacity": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "building": { "type": "string" }, "floor": { "type": "string" }, "features": { "type": "array", "items": { "type": "string" } } }, "required": [ "roomId", "name" ], "additionalProperties": false } }, "required": [ "ok" ], "additionalProperties": false } ``` ## Errors and retries Check the tool result for errors. Do not blindly retry writes after a timeout. Check the calendar state first. [Error handling](https://docs.getridian.com/developers/errors/)