Skip to content

Instantly share code, notes, and snippets.

@TheFrozenFire
Created November 19, 2018 17:49
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save TheFrozenFire/23071bee8c5258795972753358ae7985 to your computer and use it in GitHub Desktop.
Save TheFrozenFire/23071bee8c5258795972753358ae7985 to your computer and use it in GitHub Desktop.
{
"kind": "discovery#restDescription",
"description": "Business logic for the Meetings app.",
"servicePath": "",
"rootUrl": "https://meetings.googleapis.com/",
"basePath": "",
"ownerDomain": "google.com",
"name": "meetings",
"batchPath": "batch",
"revision": "20181113",
"documentationLink": "https://sites.google.com/corp/google.com/getthor/home",
"id": "meetings:v1",
"title": "Meetings API",
"ownerName": "Google",
"discoveryVersion": "v1",
"version_module": true,
"resources": {
"users": {
"methods": {
"getMe": {
"description": "Get information about a user.",
"httpMethod": "GET",
"parameterOrder": [
"name"
],
"response": {
"$ref": "User"
},
"parameters": {
"name": {
"description": "The resource name for the user to get. The only recognized name is\n\"users/me\".",
"required": true,
"type": "string",
"pattern": "^users/me$",
"location": "path"
}
},
"flatPath": "v1/users/me",
"id": "meetings.users.getMe",
"path": "v1/{+name}"
}
},
"resources": {
"events": {
"methods": {
"list": {
"response": {
"$ref": "ListScheduledEventsResponse"
},
"parameterOrder": [
"name"
],
"httpMethod": "GET",
"parameters": {
"name": {
"location": "path",
"description": "The resource name for the user. It is either `users/me` to identify the\ncalling user, or `users/{email}` where {email} is the email address for\na user, or `users/{badge_value}` where {badge_value} is the encoded value\nof Google's badge.\nThe user identified by the email address must be a normal user, and not a\nsecondary calendar or service account or similar.",
"required": true,
"type": "string",
"pattern": "^users/[^/]+$"
},
"scenario": {
"description": "The scenario of this request.",
"type": "string",
"location": "query",
"enum": [
"SCENARIO_UNSPECIFIED",
"JOIN_FLOW"
]
},
"maxResult": {
"location": "query",
"description": "Maximum results to return. Value must be in range [1,10], otherwise it will\nfail with INVALID_ARGUMENT error.",
"format": "int32",
"type": "integer"
}
},
"flatPath": "v1/users/{usersId}/events",
"path": "v1/{+name}/events",
"id": "meetings.users.events.list",
"description": "Search scheduled events on a user's calendar.\nThe request can be made by a user or CfM device belonging to google.com.\nRequests from unsupported callers will fail with a PERMISSION DENIED error."
}
}
}
}
},
"views": {
"methods": {
"get": {
"description": "Gets a meeting broadcast.",
"httpMethod": "GET",
"parameterOrder": [
"name"
],
"response": {
"$ref": "MeetingBroadcastView"
},
"parameters": {
"name": {
"description": "Resource name of the broadcast view requested.",
"required": true,
"type": "string",
"pattern": "^views/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/views/{viewsId}",
"id": "meetings.views.get",
"path": "v1/{+name}"
}
}
},
"spaces": {
"methods": {
"echo": {
"request": {
"$ref": "EchoRequest"
},
"description": "Responds to ping-like health check request from client to test the\nconnectivity between client and backend server.",
"response": {
"$ref": "EchoResponse"
},
"parameterOrder": [],
"httpMethod": "POST",
"parameters": {},
"flatPath": "v1/spaces:echo",
"path": "v1/spaces:echo",
"id": "meetings.spaces.echo"
},
"getRegionalConfig": {
"httpMethod": "GET",
"parameterOrder": [],
"response": {
"$ref": "GetRegionalConfigResponse"
},
"parameters": {},
"flatPath": "v1/spaces:getRegionalConfig",
"id": "meetings.spaces.getRegionalConfig",
"path": "v1/spaces:getRegionalConfig",
"description": "Returns regional configuration for all regions. This includes\ninternational PSTN numbers for access with universal pins, as well\nas information about regional defaults. Clients should request this\nat most once per day or so, using If-None-Match headers, and then cache\nfor at most three months."
},
"updateBroadcast": {
"response": {
"$ref": "MeetingBroadcast"
},
"parameterOrder": [
"name"
],
"httpMethod": "PATCH",
"parameters": {
"updateMask": {
"description": "Field mask to support partial updates.",
"format": "google-fieldmask",
"type": "string",
"location": "query"
},
"name": {
"location": "path",
"description": "Resource name of the broadcast. It must have the format of\n\"spaces/*/broadcast\".",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/broadcast$"
}
},
"flatPath": "v1/spaces/{spacesId}/broadcast",
"path": "v1/{+name}",
"id": "meetings.spaces.updateBroadcast",
"description": "Updates properties of a broadcast. Returns a 404 if broadcasting is not\navailable based on the meeting space owner's SKU.",
"request": {
"$ref": "MeetingBroadcast"
}
},
"update": {
"flatPath": "v1/spaces/{spacesId}",
"path": "v1/{+meetingSpaceId}",
"id": "meetings.spaces.update",
"description": "Updates meeting space attributes, given a meeting token that identifies\nthe meeting space.\n\nMeeting token MUST be provided in HTTP request header.",
"request": {
"$ref": "MeetingSpace"
},
"response": {
"$ref": "MeetingSpace"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "PUT",
"parameters": {
"meetingSpaceId": {
"location": "path",
"description": "A unique server-generated ID for the meeting space. This is the\nREST name of the meeting space resource and has the form\n`spaces/\u003cid\u003e`, where \u003cid\u003e is a sequence of characters in the\n[base64url set](https://tools.ietf.org/html/rfc4648#section-5),\nwithout any `=` characters.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$"
}
}
},
"getGateway_access": {
"response": {
"$ref": "GetGatewayAccessResponse"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "GET",
"parameters": {
"meetingSpaceId": {
"description": "ID of the meeting space.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}/gateway_access",
"path": "v1/{+meetingSpaceId}/gateway_access",
"id": "meetings.spaces.getGateway_access",
"description": "Returns a gateway access code for a meeting space that has 3rd party\ninterop enabled."
},
"getBroadcast": {
"response": {
"$ref": "MeetingBroadcast"
},
"parameterOrder": [
"name"
],
"httpMethod": "GET",
"parameters": {
"name": {
"description": "Resource name of the broadcast to access.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/broadcast$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}/broadcast",
"path": "v1/{+name}",
"id": "meetings.spaces.getBroadcast",
"description": "Returns the broadcast associated with the meeting space, or a 404 if\nbroadcasting is not available based on the meeting space owner's SKU.\nWhen supported by the owner's SKU, this resource always exists."
},
"list": {
"response": {
"$ref": "ListMeetingSpacesResponse"
},
"parameterOrder": [],
"httpMethod": "GET",
"parameters": {},
"flatPath": "v1/spaces",
"path": "v1/spaces",
"id": "meetings.spaces.list",
"description": "Lists all meetings that the calling user has access to."
},
"create": {
"request": {
"$ref": "MeetingSpace"
},
"description": "Creates a new meeting space. This RPC returns a meeting token in HTTP\nresponse. The meeting token should be used in RPCs that mention they\nneed it.",
"response": {
"$ref": "MeetingSpace"
},
"parameterOrder": [],
"httpMethod": "POST",
"parameters": {
"deviceHint.dasherDeviceId": {
"description": "HotRod device id",
"type": "string",
"location": "query"
},
"creatorRegionCode": {
"location": "query",
"description": "The CLDR/ISO 3166 region code for the country that the meeting creator is\nin. To be parsed by the i18n RegionCode utility. Example: \"SE\" for Sweden.\nUsed for allocating a phone number for the given country.",
"type": "string"
}
},
"flatPath": "v1/spaces",
"path": "v1/spaces",
"id": "meetings.spaces.create"
},
"listUniversalPhoneNumbers": {
"flatPath": "v1/spaces:universalPhoneNumbers",
"path": "v1/spaces:universalPhoneNumbers",
"id": "meetings.spaces.listUniversalPhoneNumbers",
"description": "Lists international phone numbers for universal access. Used by\nclients to request international PSTN numbers for access with\nuniversal pins. Clients should request this at most once per day\nor so.\n\nThis is deprecated; clients should move to GetRegionalConfig instead,\nonce that is fully implemented.",
"response": {
"$ref": "ListUniversalPstnNumbersResponse"
},
"parameterOrder": [],
"httpMethod": "GET",
"parameters": {}
},
"listPstnOutRegionCodes": {
"description": "Lists the CLDR/ISO 3166 region codes to which the client is allowed to make\nPSTN-out calls.\n\nEach region (typically country) has a different set of rules and\nregulations governing dial-in/out and other telephony functionality.\nIf dial-out is not allowed in the client's region, an empty list will be\nreturned.",
"response": {
"$ref": "ListPstnOutRegionCodesResponse"
},
"parameterOrder": [],
"httpMethod": "GET",
"parameters": {},
"flatPath": "v1/spaces:pstnOutRegionCodes",
"path": "v1/spaces:pstnOutRegionCodes",
"id": "meetings.spaces.listPstnOutRegionCodes"
},
"deleteBroadcast": {
"flatPath": "v1/spaces/{spacesId}/broadcast",
"path": "v1/{+name}",
"id": "meetings.spaces.deleteBroadcast",
"description": "Deletes an existing meeting broadcast and any associated livestreams. The\nview url associated with the broadcast will no longer be enabled. The\nbroadcast resource will be replaced with a new disabled one.",
"response": {
"$ref": "Empty"
},
"parameterOrder": [
"name"
],
"httpMethod": "DELETE",
"parameters": {
"name": {
"description": "Resource name of the broadcast to delete.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/broadcast$",
"location": "path"
}
}
},
"get": {
"description": "Retrieves a meeting given a meeting id.\n\nMeeting token MUST be provided in HTTP request header.",
"httpMethod": "GET",
"parameterOrder": [
"meetingSpaceId"
],
"response": {
"$ref": "MeetingSpace"
},
"parameters": {
"meetingSpaceId": {
"description": "ID of the meeting space. The caller MUST also provide in a HTTP header\na meeting token that has been obtained by meeting.Resolve or\nmeeting.Create call.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}",
"id": "meetings.spaces.get",
"path": "v1/{+meetingSpaceId}"
},
"resolve": {
"request": {
"$ref": "ResolveMeetingSpaceRequest"
},
"description": "Finds a meeting space given a meeting space code. This RPC returns\na meeting token in HTTP response. The meeting token should be used\nin RPCs that mention they need it.",
"response": {
"$ref": "MeetingSpace"
},
"parameterOrder": [],
"httpMethod": "POST",
"parameters": {},
"flatPath": "v1/spaces:resolve",
"path": "v1/spaces:resolve",
"id": "meetings.spaces.resolve"
},
"delete": {
"flatPath": "v1/spaces/{spacesId}",
"path": "v1/{+meetingSpaceId}",
"id": "meetings.spaces.delete",
"description": "Deletes an existing meeting space, given a meeting token that identifies\nthe meeting.\n\nMeeting token MUST be provided in HTTP request header.",
"response": {
"$ref": "Empty"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "DELETE",
"parameters": {
"meetingSpaceId": {
"location": "path",
"description": "ID of the meeting space. The caller MUST also provide in a HTTP header\na meeting token that has been obtained by meeting.Resolve or\nmeeting.Create call.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$"
}
}
}
},
"resources": {
"recordings": {
"methods": {
"list": {
"description": "Lists recording sessions with a meeting.",
"response": {
"$ref": "ListMeetingRecordingsResponse"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "GET",
"parameters": {
"meetingSpaceId": {
"location": "path",
"description": "Unique identifier for the meeting.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$"
}
},
"flatPath": "v1/spaces/{spacesId}/recordings",
"path": "v1/{+meetingSpaceId}/recordings",
"id": "meetings.spaces.recordings.list"
},
"update": {
"description": "Updates a recording session. Client should use this request to stop a\nrecording.",
"request": {
"$ref": "MeetingRecording"
},
"httpMethod": "PUT",
"parameterOrder": [
"recordingId"
],
"response": {
"$ref": "MeetingRecording"
},
"parameters": {
"recordingId": {
"location": "path",
"description": "Unique id for recording session for “meetings/*/recordings/*”.\nGenerated by server.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/recordings/[^/]+$"
}
},
"flatPath": "v1/spaces/{spacesId}/recordings/{recordingsId}",
"id": "meetings.spaces.recordings.update",
"path": "v1/{+recordingId}"
},
"create": {
"flatPath": "v1/spaces/{spacesId}/recordings",
"path": "v1/{+meetingSpaceId}/recordings",
"id": "meetings.spaces.recordings.create",
"description": "Starts a recording session.\nReturns http code RC_CLIENT_CLOSED_REQUEST (499) which maps to\ncanonical error code CANCELLED if the recording is deleted before\nthe creation finishes.",
"request": {
"$ref": "MeetingRecording"
},
"response": {
"$ref": "MeetingRecording"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "POST",
"parameters": {
"meetingSpaceId": {
"description": "Unique identifier for the meeting.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$",
"location": "path"
}
}
},
"delete": {
"description": "Delete a recording entry from the meeting. If the recording hasn't been\nstopped, it will also stop the recording.",
"response": {
"$ref": "Empty"
},
"parameterOrder": [
"recordingId"
],
"httpMethod": "DELETE",
"parameters": {
"recordingId": {
"location": "path",
"description": "Unique identifier for the recording.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/recordings/[^/]+$"
}
},
"flatPath": "v1/spaces/{spacesId}/recordings/{recordingsId}",
"path": "v1/{+recordingId}",
"id": "meetings.spaces.recordings.delete"
}
},
"resources": {
"acks": {
"methods": {
"list": {
"flatPath": "v1/spaces/{spacesId}/recordings/{recordingsId}/acks",
"path": "v1/{+recordingId}/acks",
"id": "meetings.spaces.recordings.acks.list",
"description": "Lists recording acks for JOINED devices.\nOnly the recording producer can access to this API, other clients will get\n403 forbidden. Design doc go/recordingacks.",
"response": {
"$ref": "ListMeetingRecordingAcksResponse"
},
"parameterOrder": [
"recordingId"
],
"httpMethod": "GET",
"parameters": {
"recordingId": {
"location": "path",
"description": "Recording REST id, unique identifier of the recording.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/recordings/[^/]+$"
}
}
}
}
}
}
},
"devices": {
"methods": {
"get": {
"response": {
"$ref": "MeetingDevice"
},
"parameterOrder": [
"deviceId"
],
"httpMethod": "GET",
"parameters": {
"deviceId": {
"description": "Unique identifier for the device of the form \"meetings/*/devices/*\".",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/devices/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}/devices/{devicesId}",
"path": "v1/{+deviceId}",
"id": "meetings.spaces.devices.get",
"description": "Retrieves information about a device.\n\nA meeting token MUST be provided in HTTP request header."
},
"close": {
"response": {
"$ref": "Empty"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "POST",
"parameters": {
"meetingSpaceId": {
"description": "Unique identifier for the meeting space of the form \"meetings/*\".",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}/devices:close",
"path": "v1/{+meetingSpaceId}/devices:close",
"id": "meetings.spaces.devices.close",
"description": "Called by browsers when tab is being closed. This does not follow\nthe normal REST rules and does not have authentication credentials\nbecause of browser restrictions.",
"request": {
"$ref": "CloseMeetingDeviceRequest"
}
},
"update": {
"request": {
"$ref": "MeetingDevice"
},
"description": "Updates a device.\n\nA meeting token MUST be provided in HTTP request header.\n\nA RESOURCE_EXHAUSTED error response (HTTP status code 429) when\ntrying to change the join state to JOINED means that the call was\nfull and no more devices can join. A client may try at again at a\nlater time if some other device left the call, but clients should\nnot retry automatically.\n\nThe request may fail with an UNAVAILABLE error response (HTTP\nstatus code 503) if a conflicting change was detected while the\nupdate was in progress. In this case, the client needs to retry\nthe request.",
"response": {
"$ref": "MeetingDevice"
},
"parameterOrder": [
"meetingDeviceId"
],
"httpMethod": "PUT",
"parameters": {
"meetingDeviceId": {
"description": "A unique server-generated ID for the meeting device. This is the\nREST name of the meeting device resource and has the form\n`spaces/\u003cid\u003e/devices/\u003cid\u003e`, where \u003cid\u003e is a sequence of\ncharacters in the\n[base64url set](https://tools.ietf.org/html/rfc4648#section-5),\nwithout any `=` characters.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/devices/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}/devices/{devicesId}",
"path": "v1/{+meetingDeviceId}",
"id": "meetings.spaces.devices.update"
},
"closedevice": {
"flatPath": "v1/spaces/{spacesId}/devices:closedevice",
"path": "v1/{+meetingSpaceId}/devices:closedevice",
"id": "meetings.spaces.devices.closedevice",
"description": "Called by browsers when tab is being closed. This does not follow\nthe normal REST rules and does not have authentication credentials\nbecause of browser restrictions.",
"response": {
"$ref": "Empty"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "GET",
"parameters": {
"meetingSpaceId": {
"description": "Unique identifier for the meeting space of the form \"meetings/*\".",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$",
"location": "path"
},
"meetingToken": {
"location": "query",
"description": "Device token. This should contain the value of the header\nnormally sent by devices in X-Goog-Meeting-Token, in same format\nas the value of that header, i.e. \"\u003ctoken timestamp\u003e;\u003ctoken value\u003e\".\nSee g3doc/communication/meetings/g3doc/api#meeting-token for more\ninformation about the token.",
"type": "string"
}
}
},
"list": {
"response": {
"$ref": "ListMeetingDevicesResponse"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "GET",
"parameters": {
"meetingSpaceId": {
"description": "Unique identifier for the meeting.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}/devices",
"path": "v1/{+meetingSpaceId}/devices",
"id": "meetings.spaces.devices.list",
"description": "Lists all visible devices.\n\nA meeting token MUST be provided in HTTP request header."
},
"senddtmf": {
"flatPath": "v1/spaces/{spacesId}/devices/{devicesId}:senddtmf",
"id": "meetings.spaces.devices.senddtmf",
"path": "v1/{+deviceId}:senddtmf",
"description": "Called by clients that want to send a DTMF code to another device\nA meeting token MUST be provided in HTTP request header",
"request": {
"$ref": "SendDtmfRequest"
},
"httpMethod": "POST",
"parameterOrder": [
"deviceId"
],
"response": {
"$ref": "SendDtmfResponse"
},
"parameters": {
"deviceId": {
"description": "Unique identifier for the recipient device.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+/devices/[^/]+$",
"location": "path"
}
}
},
"create": {
"description": "Creates a new meeting device object in the current conference. If there was\nno current conference, this will start a new one.\n\nThe common case is when a client creates a device to represent itself, and\nthe information provided in the request describes the client. The only\nfield that always need to be set in these requests is `join_state` to\nindicate the desired initial join state. For anonymous clients, the\n`display_name` should also be set.\n\nA secondary case is when a client that already is associated with a device\ncreates another device, with the purpose of inviting another client. This\nis used for dialing out to phone numbers, in which case the `join_state`\nfield should be set to `RINGING`, and the `pstn_out` field should contain\nrelevant information. A meeting token MUST be provided in HTTP request\nheader.\n\nA RESOURCE_EXHAUSTED error response (HTTP status code 429) means\nthat the call was full and no more devices can join. It may still\nbe possible to create device in the HIDDEN state. A client may\ntry at again at a later time if some other device left the call,\nbut clients should not retry automatically.",
"request": {
"$ref": "MeetingDevice"
},
"httpMethod": "POST",
"parameterOrder": [
"meetingSpaceId"
],
"response": {
"$ref": "MeetingDevice"
},
"parameters": {
"trusted": {
"description": "Meant to be used by interop gateways to signal that they want to be\nregarded as host endpoints. This is needed since interop devices are\ncreated anonymously rather than with user credentials, but also because not\nall devices a certain gateway creates want to be trusted.",
"type": "boolean",
"location": "query"
},
"meetingSpaceId": {
"location": "path",
"description": "Unique identifier for the meeting.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$"
}
},
"flatPath": "v1/spaces/{spacesId}/devices",
"id": "meetings.spaces.devices.create",
"path": "v1/{+meetingSpaceId}/devices"
},
"createandpush": {
"response": {
"$ref": "CreateAndPushMeetingDeviceResponse"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "POST",
"parameters": {
"meetingSpaceId": {
"description": "Identifies the meeting space.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}/devices:createandpush",
"path": "v1/{+meetingSpaceId}/devices:createandpush",
"id": "meetings.spaces.devices.createandpush",
"request": {
"$ref": "CreateAndPushMeetingDeviceRequest"
},
"description": "Called by clients that want to push a meeting space to another\nclient (Thor client pushing to GVC or CfM). The meeting token\ncontained in the push to another client will pre-approve the\npermission to join the meeting if the caller already has that\npermission."
}
}
},
"messages": {
"methods": {
"list": {
"description": "Lists messages sent to a meeting space.\n\nMeeting token MUST be provided in HTTP request header.",
"response": {
"$ref": "ListMeetingMessagesResponse"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "GET",
"parameters": {
"meetingSpaceId": {
"description": "Unique identifier for the meeting space.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$",
"location": "path"
}
},
"flatPath": "v1/spaces/{spacesId}/messages",
"path": "v1/{+meetingSpaceId}/messages",
"id": "meetings.spaces.messages.list"
},
"create": {
"description": "Adds new messages to a meeting space. The device adding the messages\nhave to be in the meeting space.\n\nMeeting token MUST be provided in HTTP request header.",
"request": {
"$ref": "MeetingMessage"
},
"response": {
"$ref": "MeetingMessage"
},
"parameterOrder": [
"meetingSpaceId"
],
"httpMethod": "POST",
"parameters": {
"meetingSpaceId": {
"location": "path",
"description": "Id of the meeting space message is added to.",
"required": true,
"type": "string",
"pattern": "^spaces/[^/]+$"
}
},
"flatPath": "v1/spaces/{spacesId}/messages",
"path": "v1/{+meetingSpaceId}/messages",
"id": "meetings.spaces.messages.create"
}
}
}
}
},
"rooms": {
"methods": {
"list": {
"flatPath": "v1/rooms",
"path": "v1/rooms",
"id": "meetings.rooms.list",
"description": "Lists meeting rooms matching the search criteria. Only rooms the user has\naccess to are included in the response.",
"response": {
"$ref": "ListMeetingRoomsResponse"
},
"parameterOrder": [],
"httpMethod": "GET",
"parameters": {
"query": {
"description": "Required. The query entered by the user. It is used to do a case\ninsensitive substring match on the names of meeting rooms.",
"type": "string",
"location": "query"
},
"meetingSpaceId": {
"location": "query",
"description": "Optional. The meeting space that the user wants to\njoin the meeting room found by this query. It is the resource name of the\nmeeting space in the MeetingSpaceService. If provided, the server may\nuse it to find the most appropriate meeting room.",
"type": "string"
},
"pageToken": {
"location": "query",
"description": "Optional. The token for the next page in the result. If page_token is set,\nthe request must have otherwise identical content to have exactly same\ncontents in meeting_space_id and query as they were in the previous\nrequest.",
"type": "string"
}
}
},
"resolve": {
"flatPath": "v1/rooms:resolve",
"path": "v1/rooms:resolve",
"id": "meetings.rooms.resolve",
"request": {
"$ref": "ResolveMeetingRoomRequest"
},
"description": "Finds a meeting room given the device ID of the CfM device\nin the room.\n\nIn the returned MeetingRoom resource, only the meeting_room_id and\ndisplay_name fields are guaranteed to be set.\n\nWhen no meeting room could be found, the response will be NOT_FOUND.\nThis can happen if either the device ID could not be found, or the result\nis not accessible to the user making the request.",
"response": {
"$ref": "MeetingRoom"
},
"parameterOrder": [],
"httpMethod": "POST",
"parameters": {}
}
}
}
},
"parameters": {
"callback": {
"location": "query",
"description": "JSONP",
"type": "string"
},
"oauth_token": {
"description": "OAuth 2.0 token for the current user.",
"type": "string",
"location": "query"
},
"$.xgafv": {
"enumDescriptions": [
"v1 error format",
"v2 error format"
],
"location": "query",
"enum": [
"1",
"2"
],
"description": "V1 error format.",
"type": "string"
},
"alt": {
"description": "Data format for response.",
"default": "json",
"enum": [
"json",
"media",
"proto"
],
"type": "string",
"enumDescriptions": [
"Responses with Content-Type of application/json",
"Media download with context-dependent Content-Type",
"Responses with Content-Type of application/x-protobuf"
],
"location": "query"
},
"access_token": {
"description": "OAuth access token.",
"type": "string",
"location": "query"
},
"key": {
"location": "query",
"description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
"type": "string"
},
"upload_protocol": {
"location": "query",
"description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
"type": "string"
},
"quotaUser": {
"location": "query",
"description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
"type": "string"
},
"prettyPrint": {
"location": "query",
"description": "Returns response with indentations and line breaks.",
"type": "boolean",
"default": "true"
},
"fields": {
"description": "Selector specifying which fields to include in a partial response.",
"type": "string",
"location": "query"
},
"uploadType": {
"location": "query",
"description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
"type": "string"
}
},
"schemas": {
"StreamingSessionInfo": {
"description": "Information about a streaming session in conference.",
"type": "object",
"properties": {
"latestSessionEvent": {
"description": "The latest streaming session event. This can be used by clients to help\nexplain what is going on, why recording stopped, etc. This will always be\nset to a valid event and consistent with the status. It can be set when\ncurrent session is inactive to indicate latest event that makes current\nsession to become inactive.",
"$ref": "SessionEvent"
},
"applicationType": {
"description": "The application type of the current streaming session.",
"type": "string",
"enumDescriptions": [
"This is never used.",
"A meeting recording saved to a video file in Google Drive.",
"A *Google Live* managed stream. See go/thor-managed-streaming.",
"A meeting broadcast. See go/thor-streaming-prd."
],
"enum": [
"RECORDING_APPLICATION_TYPE_UNSPECIFIED",
"RECORDING",
"GLIVE_STREAM",
"BROADCAST"
]
},
"status": {
"enumDescriptions": [
"This value is never used.",
"The streaming session is inactive. This means either it's not\nstarted yet or it’s already stopped.",
"The streaming session is about to begin. The status will be updated to\nLIVE when the streaming session actually starts, which happens when\nall the backend plumbing is set up.",
"The streaming session is live. Any media sent to the conference may\nbe included in the resulting recording/broadcast."
],
"enum": [
"STATUS_UNSPECIFIED",
"INACTIVE",
"STARTING",
"LIVE"
],
"description": "The current status of this streaming session. This can be used by clients\nto show session status indicator and/or notification.",
"type": "string"
},
"sessionId": {
"description": "This is the REST name and unique identifier of this streaming session and\nhas the form `spaces/\u003cid\u003e/recordings/\u003cid\u003e` This is returned whenever\nstatus is either `STARTING` or `STARTED`.",
"type": "string"
},
"ownerDisplayName": {
"description": "The display name of the owner of the recording output.\nIt’s only set when there will be uploaded recordings.\nCurrently, it's only set when application type is RECORDING or\nGLIVE_STREAM.",
"type": "string"
}
},
"id": "StreamingSessionInfo"
},
"UniversalPstnNumber": {
"description": "Contains information about a single international PSTN number for access\nwith universal pins.",
"type": "object",
"properties": {
"regionCode": {
"description": "The region (typically country) for which this number is valid,\nper ISO 3166-1 alpha-2.",
"type": "string"
},
"e164": {
"description": "The E164-formatted phone number.",
"type": "string"
},
"languageCode": {
"description": "The language used in voice prompts on this number, per BCP 47/LDML.",
"type": "string"
},
"availability": {
"enumDescriptions": [
"Never used.",
"Do not show this number to anyone.",
"User should be in a fishfood experiment in order to see the number.",
"User should be in a fishfood or a dogfood experiment in order to see the\nnumber.",
"Show the number to everyone."
],
"enum": [
"AVAILABILITY_UNSPECIFIED",
"NONE",
"PSTN_FISHFOOD",
"PSTN_DOGFOOD",
"PUBLIC"
],
"description": "The availability level for this number.",
"type": "string"
}
},
"id": "UniversalPstnNumber"
},
"UniversalPhoneAccess": {
"description": "Universal phone access contains information required to dial into a\nconference using one of a static list of phone numbers and a universal\nPIN. The phone number list is distributed separately.",
"type": "object",
"properties": {
"pstnInfoUrl": {
"description": "This field has the same contents as the MeetingSpace.more_join_url\nfield, and is included for compatibility reasons. Clients should use the\nother field instead.\n\nThis field is deprecated and will be removed.",
"type": "string"
},
"pin": {
"description": "The PIN that users must enter after dialing a universal number. The pin\nconsists of only decimal digits and the length may vary, though\nit generally is longer than a PhoneAccess.pin.",
"type": "string"
}
},
"id": "UniversalPhoneAccess"
},
"MeetingMessage": {
"description": "A message sent to a meeting space.",
"type": "object",
"properties": {
"messageContent": {
"description": "Actual content of message.",
"$ref": "Content"
},
"meetingMessageId": {
"description": "Unique id for the meeting message, in format \"meetings/*/messages/*\".",
"type": "string"
},
"timestamp": {
"description": "Timestamp when the message was received by client.",
"format": "google-datetime",
"type": "string"
},
"contentType": {
"description": "The type of the message contents.",
"type": "string",
"enumDescriptions": [
"The content type of the message wasn't specified.",
"An ephemeral text chat message.",
"A test chat message. Not to be shown on UI.",
"An audio debug recording status message. Indicates a client-side audio\ndebug recording is in progress so that all endpoints can show a badge\non the UI."
],
"enum": [
"CONTENT_TYPE_UNSPECIFIED",
"CHAT",
"CHAT_TEST",
"AUDIO_DEBUG_RECORDING_STATE"
]
},
"clientDedupeId": {
"description": "Unique id set by client that is used to eliminate client retries.\nClient should use it's own local timestamp here, and use the same\ntimestamp for all retries of the same message.\nThis field is not present when viewing messages from other\nmeeting devices.",
"format": "int64",
"type": "string"
},
"senderDeviceId": {
"description": "Id of the device that sent the message.",
"type": "string"
}
},
"id": "MeetingMessage"
},
"ListMeetingRoomsResponse": {
"description": "A response to list meeting room requests. The criteria for relevance is\nbackend implementation specific.",
"type": "object",
"properties": {
"recommendationResults": {
"description": "List of room recommendations from Rendezvous matching the search criteria\nordered by relevance. This will only include available/un-booked rooms.\n\nThis is not paginated and will only contain a small number of results.",
"type": "array",
"items": {
"$ref": "MeetingRoom"
}
},
"listingResults": {
"description": "The rooms matching the search criteria, in alphabetical order.\nNote that this list will include unavailable/booked rooms. The results may\nbe paginated using the page_token field.",
"type": "array",
"items": {
"$ref": "MeetingRoom"
}
},
"pageToken": {
"description": "Token to be used for the next page in the result. If this is\nempty string, there are no more pages.",
"type": "string"
}
},
"id": "ListMeetingRoomsResponse"
},
"PhoneAccess": {
"description": "Phone access contains information required to dial into a conference using\na regional phone number and a PIN that is specific to that phone number.",
"type": "object",
"properties": {
"languageCode": {
"description": "The BCP 47/LDML language code for the language associated with this phone\naccess. To be parsed by the i18n LanguageCode utility. Examples: \"es-419\"\nfor Latin American Spanish, \"fr-CA\" for Canadian French.",
"type": "string"
},
"pin": {
"description": "The PIN that users must enter after dialing the given number. The PIN\nconsists of only decimal digits and the length may vary.",
"type": "string"
},
"phoneNumber": {
"description": "The phone number to dial for this meeting space. The phone number will be\nE.164 formatted full phone number with a leading '+' character.",
"type": "string"
},
"regionCode": {
"description": "The CLDR/ISO 3166 region code for the country associated with this phone\naccess. To be parsed by the i18n RegionCode utility. Example: \"SE\" for\nSweden.",
"type": "string"
}
},
"id": "PhoneAccess"
},
"MuteRequest": {
"description": "Remote devices can only request muting of other devices. It is up\nto the muted device to accept or reject the mute as described below.",
"type": "object",
"properties": {
"byMeetingDeviceId": {
"description": "The device resource name of the device that added the mute request.",
"type": "string"
}
},
"id": "MuteRequest"
},
"ResolveMeetingRoomRequest": {
"description": "A request to look up a meeting room using the associated CfM device ID.",
"type": "object",
"properties": {
"meetingSpaceId": {
"description": "Optional. The meeting space that the user wants to join from the meeting\nroom found by this query. It is the resource name of the meeting space in\nthe MeetingSpaceService. If provided, the server may use it to find the\nmost appropriate meeting room.",
"type": "string"
},
"cfmDeviceId": {
"description": "Required. The device ID of a CfM device.",
"type": "string"
}
},
"id": "ResolveMeetingRoomRequest"
},
"MeetingBroadcastView": {
"description": "Information for watch page to playback a meeting broadcast and display\nbroadcast information.",
"type": "object",
"properties": {
"pollingInterval": {
"description": "The time that clients must wait between request to read this resource. The\nvalue may change and clients should update its polling interval when it\nsees an update value in a response.",
"format": "google-duration",
"type": "string"
},
"name": {
"description": "The resource name of this meeting broadcast view.",
"type": "string"
},
"latestViewSession": {
"description": "The latest session for this broadcast view. A broadcast view can have\nseveral sessions over time, but only the latest can be active. If there is\nno latest session created, This will be empty.",
"$ref": "MeetingBroadcastViewSession"
}
},
"id": "MeetingBroadcastView"
},
"ListMeetingMessagesResponse": {
"description": "ListMeetingMessagesResponse is used to return the meeting_messages that\nhave been stored in the call. At most 20 latest meeting_messages will be\nreturned.",
"type": "object",
"properties": {
"meetingMessages": {
"description": "The retrieved meeting messages.",
"type": "array",
"items": {
"$ref": "MeetingMessage"
}
}
},
"id": "ListMeetingMessagesResponse"
},
"UniversalPstnNumberForRegion": {
"description": "One phone number with information about when and where it should be used.",
"type": "object",
"properties": {
"e164": {
"description": "The E164-formatted phone number.",
"type": "string"
},
"languageCode": {
"description": "The language used in voice prompts for this number, per BCP 47/LDML.",
"type": "string"
},
"availability": {
"description": "The availability level for this number.",
"type": "string",
"enumDescriptions": [
"Never used.",
"Do not show this number to anyone.",
"User should be in a fishfood experiment in order to see the number.",
"User should be in a fishfood or a dogfood experiment in order to see the\nnumber.",
"Show the number to everyone."
],
"enum": [
"AVAILABILITY_UNSPECIFIED",
"NONE",
"PSTN_FISHFOOD",
"PSTN_DOGFOOD",
"PUBLIC"
]
},
"subregionId": {
"description": "Really optional: any sub-national entity for which we may want to store a\nsub-pool of numbers, e.g. \"SWEDEN_STAGING\"\nAn empty string is interpreted as \"Default subregion\"",
"type": "string"
}
},
"id": "UniversalPstnNumberForRegion"
},
"VideoFeed": {
"description": "Represents a single video feed on UI and how the video stream for that\nfeed is decided.",
"type": "object",
"properties": {
"algorithmType": {
"description": "The algorithm to be used for this feed.",
"type": "string",
"enumDescriptions": [
"Default value. Not used.",
"This feed is selected automatically by the server (\nbased on the current speaker).",
"Use the client selected (device_id) to populate the feed."
],
"enum": [
"ALGORITHM_TYPE_UNSPECIFIED",
"AUTO_SPEAKER_SWITCH",
"CLIENT_SELECTED"
]
},
"deviceId": {
"description": "The device resource name of the device that populate the feed.\nShould be non-empty if and only if type == CLIENT_SELECTED.",
"type": "string"
}
},
"id": "VideoFeed"
},
"GatewayAccessCode": {
"description": "A message representing information used by 3rd party interop gateways to\nresolve a meeting.",
"type": "object",
"properties": {
"accessCode": {
"description": "An access code can be used as an alternative way of resolving a meeting\nusing the ResolveMeetingSpace RPC.",
"type": "string"
}
},
"id": "GatewayAccessCode"
},
"ExternalJoinInformation": {
"description": "A message representing information to be used for external (non-host) users\nwhen joining via a 3rd party interop gateway.",
"type": "object",
"properties": {
"gatewayIp": {
"description": "An IP pointing to a gateway that can be used to join the meeting.\nOnly set if an IP has been specified for the domain.",
"type": "string"
},
"gatewayAddress": {
"description": "A DNS address pointing to a gateway that can be used to join the meeting.\nOnly set if an address has been specified for the domain.",
"type": "string"
}
},
"id": "ExternalJoinInformation"
},
"RecordingAck": {
"description": "This message contains the acknowledgement the device sends after it\nreceives the recording status update. The server side would start recording\nonly after it gathers acknowledgments from all devices.",
"type": "object",
"properties": {
"recordingId": {
"description": "ID of the recording.",
"type": "string"
},
"ackStatus": {
"enumDescriptions": [
"Default value. Not used.",
"The server is requesting the client to ACK. Only set by the server\nin device creation, or blocked from join.",
"Deprecated. The client has ACKed. Set by client.",
"The client has ACKed that a recording is active. Set by client.",
"The client has ACKed that a broadcast is active. Set by client."
],
"enum": [
"ACK_STATUS_UNSPECIFIED",
"ACK_STATUS_REQUESTED",
"ACK_STATUS_ACKED",
"ACK_STATUS_ACKED_FOR_RECORDING",
"ACK_STATUS_ACKED_FOR_BROADCAST"
],
"description": "ACK status. Changed when server requests or client ACKs. If the value is\nACK_STATUS_REQUESTED, the client needs to ack with this field set to\nACK_STATUS_ACKED_FOR_RECORDING or ACK_STATUS_ACKED_FOR_BROADCAST based on\nrequired application type.",
"type": "string"
},
"applicationType": {
"enumDescriptions": [
"This is never used.",
"A meeting recording saved to a video file in Google Drive.",
"A *Google Live* managed stream. See go/thor-managed-streaming.",
"A meeting broadcast. See go/thor-streaming-prd."
],
"enum": [
"RECORDING_APPLICATION_TYPE_UNSPECIFIED",
"RECORDING",
"GLIVE_STREAM",
"BROADCAST"
],
"description": "Application type that needs to be ACKed.\nOnly set by server along with ACK_REQUESTED in device creation or blocked\nfrom join.",
"type": "string"
}
},
"id": "RecordingAck"
},
"VideoLayout": {
"description": "The layout of video feeds for the recording.",
"type": "object",
"properties": {
"videoFeeds": {
"description": "The main video feeds in the layout.\n\nNote that this field does NOT include the video feeds in the film strip.\nFor now, we only have one main feed, which means there should be only one\nitem in this repeated field.",
"type": "array",
"items": {
"$ref": "VideoFeed"
}
}
},
"id": "VideoLayout"
},
"SendDtmfResponse": {
"description": "The response to a `SendDtmf` request.",
"type": "object",
"properties": {},
"id": "SendDtmfResponse"
},
"MeetingRecording": {
"description": "Information about a recording session in a meeting space.",
"type": "object",
"properties": {
"producerDeviceId": {
"description": "The device resource name of the device to produce the recording layout.\nA moderator/owner device can override it through the update action,\nby setting to its own device resource name. Leaving it empty in the update\naction would be a no-op.",
"type": "string"
},
"resolution": {
"description": "Output video resolution.",
"type": "string",
"enumDescriptions": [
"Output resolution not specified.",
"360p.",
"480p.",
"720p."
],
"enum": [
"RESOLUTION_UNSPECIFIED",
"RESOLUTION_640X360",
"RESOLUTION_854X480",
"RESOLUTION_1280X720"
]
},
"videoLayout": {
"$ref": "VideoLayout",
"description": "Layout of the recording. Only the recording producer can set/update the\nvideo layout."
},
"title": {
"description": "Drive document title, limited to max length of 256 unicode characters.\nExceeding the limit will result in a BAD_REQUEST error.\nCan only be set at the recording creation time. No update is allowed.",
"type": "string"
},
"externalId": {
"description": "An external ID for the recording. This is provided by the client when\ncreating a GLIVE_STREAMING session, and must be empty otherwise.",
"type": "string"
},
"documentUrl": {
"description": "The recording document URL in drive. Set by server once the video is\nuploaded to drive. This field is read only to the client.",
"type": "string"
},
"sessionStatus": {
"description": "Recording session status.\n- In CreateRecording, the client can set this to INITIALIZED if the client\n just wants to prepare the ingestion. It can also set this to STARTED to\n start the recording.\n- In UpdateRecording, if the ingestion has been initialized, the client can\n set this to STARTED to start the recording.\n- In UpdateRecording, if the recording has started, the client can set this\n to STOPPED to stop the recording.",
"type": "string",
"enumDescriptions": [
"Unspecified session state.",
"Recording session is initializing.",
"Recording session is initialized with live ingestion.",
"Recorder has started.",
"Recorder has stopped.",
"Deprecated. Recorded media data is",
"being processed.\nRecorded media data is processed.",
"Recorded media data process failed."
],
"enum": [
"SESSION_STATUS_UNSPECIFIED",
"INITIALIZING",
"INITIALIZED",
"STARTED",
"STOPPED",
"PROCESSING",
"PROCESSED",
"PROCESS_FAILED"
]
},
"recordingOwnerEmail": {
"description": "The email address of the recording owner. Provided by the client\nwhen creating a GLIVE_STREAM with recording enabled.\nMust be empty otherwise.",
"type": "string"
},
"controlPrivileges": {
"description": "List of control privileges. This tells a requesting client what operations\nit is permitted to do with a MeetingRecording. Set by server.",
"type": "array",
"items": {
"enum": [
"PRIVILEGE_UNSPECIFIED",
"FULL_CONTROL"
],
"type": "string"
},
"enumDescriptions": [
"Not used.",
"This client has full control on this MeetingRecording."
]
},
"stopTimestamp": {
"description": "Stop recording timestamps in UTC Epoch time. These values are set by\nserver during handling the request.",
"format": "google-datetime",
"type": "string"
},
"recordingApplicationType": {
"enumDescriptions": [
"This is never used.",
"A meeting recording saved to a video file in Google Drive.",
"A *Google Live* managed stream. See go/thor-managed-streaming.",
"A meeting broadcast. See go/thor-streaming-prd."
],
"enum": [
"RECORDING_APPLICATION_TYPE_UNSPECIFIED",
"RECORDING",
"GLIVE_STREAM",
"BROADCAST"
],
"description": "The application type of the recording. Set at creation by the client,\nwith a default value of RECORDING.",
"type": "string"
},
"startTimestamp": {
"description": "Start recording timestamps in UTC Epoch time. These values are set by\nserver during handling the request.",
"format": "google-datetime",
"type": "string"
},
"recordingId": {
"description": "Unique id for recording session for “meetings/*/recordings/*”.\nGenerated by server.",
"type": "string"
}
},
"id": "MeetingRecording"
},
"ListUniversalPstnNumbersResponse": {
"description": "A response to a ListUniversalPstnNumbers request.",
"type": "object",
"properties": {
"numbers": {
"description": "The list of international PSTN numbers that the current user can\nuse with universal pins to dial in. For anonymous users, it will\nhave some default content. The list may be empty.",
"type": "array",
"items": {
"$ref": "UniversalPstnNumber"
}
}
},
"id": "ListUniversalPstnNumbersResponse"
},
"PstnInfo": {
"description": "PSTN-related information.",
"type": "object",
"properties": {
"endCallReason": {
"description": "The end call reason of the PSTN call for this device.",
"type": "string",
"enumDescriptions": [
"No end call reason specified when device is removed.",
"The call was ended by the phone user (caller in PSTN-in or callee in\nPSTN-out).",
"The call was ended by the caller in a PSTN-out call.",
"The call was blocked due to policy constraints (PSTN-out only), e.g.\nabuse or account delinquency",
"The callee was busy (PSTN-out only).",
"The callee declined (PSTN-out only).",
"Unknown reasons or errors.",
"The media channel unexpectedly died.",
"Tinkerbell failover (handover) failed.",
"The caller needs to buy more GV credits in order to make the call\n(PSTN-out only).",
"The phone user was kicked out of the conference by another user.",
"Unknown TPAPI error",
"The phone user was removed because no one else joined the conference\nwithin the deadline."
],
"enum": [
"END_CALL_REASON_UNSPECIFIED",
"USER_ENDED",
"CALLER_ENDED",
"BLOCKED",
"BUSY",
"DECLINE",
"UNKNOWN",
"CONNECTIVITY_LOST",
"FAILOVER_FAILED",
"PAYMENT_REQUIRED",
"KICKED",
"TPAPI_ERROR",
"ALONE_TIMEOUT"
]
},
"phoneNumber": {
"description": "The phone number in E.164 format.\n\nIn the request for starting an outbound call, this is provided by the\ninitiating client and is used in the server as the phone number to dial.\n\nIn responses or push notifications from server, this will only be visible\nfor outbound calls when the receiving device is the creator of the PSTN\ndevice (as indicated by the created_by field). In other cases and inbound\ncalls, this field will be empty.",
"type": "string"
},
"mediaRouterShard": {
"description": "If non-empty, then the given media router shard should be\nused for the PSTN-out call.\nExample valid values: \"dev\", \"staging\", \"preprod\", \"prod\".\nOther values will be ignored by the media backend.\nThis is write-only - it is used by the client to communicate\nthe value of its \"media_router\" URL parameter to control the\nmedia router shard used for a PSTN-out call.",
"type": "string"
}
},
"id": "PstnInfo"
},
"BroadcastPlayerConfig": {
"description": "Configuration parameters that a client needs to play back a specific\nbroadcast.",
"type": "object",
"properties": {
"hlsvp": {
"description": "The HLS Variable Playlist URL to support HLS playback.",
"type": "string"
},
"youtubeContentId": {
"description": "The unique identifier of the broadcast in YouTube backend.",
"type": "string"
},
"dashMpdUrl": {
"description": "The dash MPD (media presentation description) URL.",
"type": "string"
},
"adaptiveFmts": {
"description": "The adaptive_fmts for Youtube players to enable manifestless playback.\nMore details in go/manifestless-live.",
"type": "string"
}
},
"id": "BroadcastPlayerConfig"
},
"CloseMeetingDeviceRequest": {
"description": "Used by devices to quickly leave a meeting. This is called by JS\nclients through browser beacon request API\n(https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon).\nBeacon requests have a limitation that they only support HTTP POST\nand clients can not add custom HTTP headers to the requests. This\nRPC will transition the device to LEFT state. No further\ncommunication with the device is expected.",
"type": "object",
"properties": {
"meetingToken": {
"description": "Device token. This should contain the value of the header\nnormally sent by devices in X-Goog-Meeting-Token, in same format\nas the value of that header, i.e. \"\u003ctoken timestamp\u003e;\u003ctoken value\u003e\".\nSee g3doc/communication/meetings/g3doc/api#meeting-token for more\ninformation about the token.",
"type": "string"
}
},
"id": "CloseMeetingDeviceRequest"
},
"Feature": {
"description": "Room features such as GVC, Jamboard or Wheelchair accessible.",
"type": "object",
"properties": {
"equipmentType": {
"description": "Type of equipment the feature involves. Optional.",
"type": "string",
"enumDescriptions": [
"For equipment that is not used for communication.",
"For video equipment.",
"For audio-only equipment."
],
"enum": [
"UNSPECIFIED_EQUIPMENT_TYPE",
"VIDEO",
"AUDIO"
]
},
"displayProminence": {
"enumDescriptions": [
"Display this feature only in a room details view or pop-up.",
"Display this feature prominently, i.e. in the room tile used in\nlistings."
],
"enum": [
"DEFAULT_PROMINENCE",
"PROMINENT"
],
"description": "Where this feature should be displayed.",
"type": "string"
},
"name": {
"description": "The name of this feature as shown in Calendar.",
"type": "string"
}
},
"id": "Feature"
},
"RegionalConfig": {
"description": "Configuration for one region that defines what universal phone numbers to use\nfor that region.",
"type": "object",
"properties": {
"fallbackRegion": {
"description": "The region (typically country) to fall back to as per regional\ndefault logic if no PSTN numbers are available for the current region.",
"type": "string"
},
"phoneNumbers": {
"description": "This holds the PSTN numbers to be used with universal pin numbers for\nthis region, if any. There is no guarantee that there will be only one\nper language_code.",
"type": "array",
"items": {
"$ref": "UniversalPstnNumberForRegion"
}
}
},
"id": "RegionalConfig"
},
"SendDtmfRequest": {
"description": "Request to send DTMF code to the recipient device.",
"type": "object",
"properties": {
"timestamp": {
"description": "The locally determined timestamp when sending the DTMF.\nWhen sending a sequence of DTMF requests, client needs to ensure the\ntimestamp in each request reflects the right order of the DTMF in the\nsequence. So if Tinkerbell receives duplicate or disordered requests, it\ncan use the timestamp to rebuild the original sequence. So note that:\n1. when retry a request, this should be the original timestamp when sending\n the DTMF at first time, NOT the current time.\n2. if multiple requests are sent with the same timestamp, Tinkerbell will\n dedup and only accept the first one it receives.\n3. the timestamp will not be used to compare with other timestamps, so\n local time is fine.",
"format": "google-datetime",
"type": "string"
},
"dtmf": {
"enumDescriptions": [
"Never used.",
"DTMF zero key.",
"DTMF one key.",
"DTMF two key.",
"DTMF tree key.",
"DTMF four key.",
"DTMF five key.",
"DTMF six key.",
"DTMF seven key.",
"DTMF eight key.",
"DTMF nine key.",
"DTMF asterisk key.",
"DTMF octothorpe key.",
"DTMF A key.",
"DTMF B key.",
"DTMF C key.",
"DTMF D key."
],
"enum": [
"DTMF_CODE_UNSPECIFIED",
"ZERO",
"ONE",
"TWO",
"THREE",
"FOUR",
"FIVE",
"SIX",
"SEVEN",
"EIGHT",
"NINE",
"ASTERISK",
"POUND",
"A",
"B",
"C",
"D"
],
"description": "DTMF code to send.",
"type": "string"
}
},
"id": "SendDtmfRequest"
},
"RecordingInfo": {
"description": "Information about recording in the current conference.\nStreamingSessionInfo is the replacement of this which can represent more\napplication type.",
"type": "object",
"properties": {
"recordingId": {
"description": "An identifier for the current recording, if any. This is\nreturned whenever recording_status is either\n`RECORDING_STARTING` or `RECORDING_STARTED`.",
"type": "string"
},
"ownerDisplayName": {
"description": "The display name of the owner of the recording output. Email\nnotifications about uploaded recordings will also be sent to this owner.",
"type": "string"
},
"producerDeviceId": {
"description": "The device resource name of the producer device for the currently active\nrecording. Note that, after the producer drops/leaves the conference,\nthis field will be cleaned up by the server after a delay.",
"type": "string"
},
"latestRecordingEvent": {
"$ref": "RecordingEvent",
"description": "The latest recording event. This can be used by clients to help explain\nwhat is going on, why recording stopped, etc. This will always be set if\nthere is or was an active recording, which means there can be latest\nevent when recording is INACTIVE."
},
"recordingApplicationType": {
"enumDescriptions": [
"This is never used.",
"A meeting recording saved to a video file in Google Drive.",
"A *Google Live* managed stream. See go/thor-managed-streaming.",
"A meeting broadcast. See go/thor-streaming-prd."
],
"enum": [
"RECORDING_APPLICATION_TYPE_UNSPECIFIED",
"RECORDING",
"GLIVE_STREAM",
"BROADCAST"
],
"description": "The application type of the current active recording.\n`RECORDING_APPLICATION_TYPE_UNSPECIFIED` if `recording_status` is\ninactive.",
"type": "string"
},
"recordingStatus": {
"enumDescriptions": [
"This value is never used.",
"The conference is not being recorded. This can mean either that\nno recording has been started, or that a previous recording\nhas stopped.",
"Recording is about to begin. The status will be updated to\nRECORDING_STARTED when the recording actually starts, which\nhappens when all the backend plumbing is set up.",
"The recording is started. Any media sent to the conference\nmay be included in the resulting recording."
],
"enum": [
"RECORDING_UNSPECIFIED",
"RECORDING_INACTIVE",
"RECORDING_STARTING",
"RECORDING_STARTED"
],
"description": "The current status of the recording. This can be used by\nclients to show a recording dot or similar to indicated to the\nuser that a recording is taking place.",
"type": "string"
}
},
"id": "RecordingInfo"
},
"SessionEvent": {
"description": "A session event is something that happens to the streaming session in a\nconference.",
"type": "object",
"properties": {
"type": {
"description": "The type of event.",
"type": "string",
"enumDescriptions": [
"This is never used.",
"Streaming session was started or is being started by a user.",
"Streaming session was stopped by a user.",
"Streaming session was cancelled by a user.",
"Streaming session was cancelled by the server because of a failure\nduring session initialization.",
"Streaming session was cancelled by the server because the session\ninitiator left the conference during initialization. When the\ninitiator leaves after the session is started, no event is triggered.",
"Streaming session is about to be stopped by the server because the\nsession is about to reach the maximum duration.",
"Streaming session was stopped because the session reached the maximum\nduration.",
"Streaming session was stopped because there were no devices left in\nthe conference.",
"Streaming session was stopped because of an internal error."
],
"enum": [
"EVENT_UNSPECIFIED",
"STARTED_BY_USER",
"STOPPED_BY_USER",
"CANCELLED_BY_USER",
"CANCELLED_INITIALIZATION_FAILED",
"CANCELLED_INITIATOR_LEFT",
"ACTIVE_ABOUT_TO_STOP_TOO_LONG",
"STOPPED_TOO_LONG",
"STOPPED_ALL_DEVICES_LEFT",
"STOPPED_INTERNAL_FAILURES"
]
},
"deviceId": {
"description": "The initiator of the latest event of the streaming session. It will be\nset for all user events (`type` is 100-199) and unset for all server\nevents(`type` is 200-299).",
"type": "string"
}
},
"id": "SessionEvent"
},
"ListMeetingSpacesResponse": {
"description": "MeetingListResponse is returned when clients list meetings they\nhave access to.",
"type": "object",
"properties": {
"meetingSpaces": {
"description": "The retrieved meeting.",
"type": "array",
"items": {
"$ref": "MeetingSpace"
}
}
},
"id": "ListMeetingSpacesResponse"
},
"ScheduledEvent": {
"description": "Information for a scheduled calendar event.",
"type": "object",
"properties": {
"meetingSpace": {
"description": "The meeting space for a Hangout Meet conference.",
"$ref": "MeetingSpace"
},
"endOffsetMs": {
"description": "Offset from UTC in millis for converting end time to the calendar's\ntimezone. Set to 0 if it's an all-day event.",
"format": "int32",
"type": "integer"
},
"start": {
"description": "The start time of the event (inclusive) in UTC. For an all-day event, it is\nthe midnight of the first day (only the date part matters in this case).",
"format": "google-datetime",
"type": "string"
},
"hangoutLink": {
"description": "The link for a Classic Hangout conference.",
"type": "string"
},
"eventTitle": {
"description": "Title of the event from calendar.",
"type": "string"
},
"visibility": {
"enumDescriptions": [
"This should be never used.",
"Uses the default visibility for events on the calendar.",
"The event is public and event details are visible to all readers.",
"The event is private and only event attendees may view event details.",
"The event is private. This value is provided for compatibility reasons.",
"See go/secret-events.",
"See http://shortn/_KjOApVbc6y."
],
"enum": [
"VISIBILITY_UNSPECIFIED",
"DEFAULT",
"PUBLIC",
"PRIVATE",
"CONFIDENTIAL",
"SECRET",
"SHADOW"
],
"description": "Visibility of the event.",
"type": "string"
},
"startOffsetMs": {
"description": "Offset from UTC in millis for converting start time to the calendar's\ntimezone. Set to 0 if it's an all-day event.",
"format": "int32",
"type": "integer"
},
"streamUri": {
"description": "URL for livestream viewing.",
"type": "string"
},
"end": {
"description": "The end time of the event (exclusive) in UTC. For an all-day event, it is\nthe next midnight of the last day in the event (only the date part matters\nin this case).",
"format": "google-datetime",
"type": "string"
},
"isAllDayEvent": {
"description": "Whether it is an all-day event.",
"type": "boolean"
}
},
"id": "ScheduledEvent"
},
"Presenter": {
"description": "Presenter contains information about which device is currently presenting\nas well as which device requested the presenter to be set.",
"type": "object",
"properties": {
"byDeviceId": {
"description": "The device resource name of the device which requested the current\npresenter to be set. This field can not be modified by clients.",
"type": "string"
},
"presenterDeviceId": {
"description": "The device resource name of the currently presenting device.",
"type": "string"
}
},
"id": "Presenter"
},
"CallInfo": {
"description": "CallInfo contains information regarding an ongoing conference\n(aka call) for a meeting space.",
"type": "object",
"properties": {
"recordingInfo": {
"description": "Info about recording for this conference. This will always be\nset in server responses, with a valid recording status.\n\nThis is the superceded by streaming_sessions field, which contains the\nsame information about this recording as well as additional information\nabout other application type at the same time. This will be deprecated\nand removed at some point.",
"$ref": "RecordingInfo"
},
"hasViewers": {
"description": "An indicator that will be set to true if there is atleast one meeting\ndevice in VIEWING state in the conference/call.\n\nThis field can be used by clients to show a \"this conference is being\nviewed\" indicator.",
"type": "boolean"
},
"meetingAlias": {
"description": "This field is deprecated. It will never be set by the backend.",
"type": "string"
},
"organizationName": {
"description": "The name or description of the organization or domain that the\norganizer belongs to. The expected use of this in clients is to\npresent messages like \"John Doe (outside of Google.com) is\ntrying to join this call\", where \"Google.com\" is the\norganization name. The field will be empty if the organization\nname could not be determined, possibly because of a backend\nerror. Can not be set by the client.",
"type": "string"
},
"maxJoinedDevices": {
"description": "The maximum number of devices that may be in the joined state\nsimultaneously in this conference. This can be used by clients\nto guess whether it will be possible to join, but the only way\nto know is to try to join. It can also be used to inform users\nabout the limit that is in effect.\n\nThis limit is normally set when the conference is created and\nnot changed during the lifetime of the conference. But there\nare some cases where it may change, so clients should be aware\nthat the information may be stale.",
"format": "int32",
"type": "integer"
},
"streamingSessions": {
"description": "Info about streaming sessions (recording, broadcast, etc.) for\nthis conference. This should contain all active sessions.\nCurrently, it's guaranteed to have at most one recording and at most one\nbroadcast (at most two sessions in total). For each application type\n(recording or broadcast), latest inactive session is included if there's\nno active one.",
"type": "array",
"items": {
"$ref": "StreamingSessionInfo"
}
},
"presenter": {
"description": "The current presenter in the call, or unset if there is no current\npresenter.",
"$ref": "Presenter"
},
"calendarEventId": {
"description": "If the meeting space is associated with an event in Google Calendar,\nthen this field is the event id of that event. For recurring events,\nit refers to the recurring instance associated with the current call, as\ndetermined by the server. Can not be set by the client.",
"type": "string"
},
"mediaBackendInfo": {
"description": "Information about the media backend for the currently ongoing conference\nin the meeting space. The media backend information will only be filled\nin for clients that are supposed to present the information. The\ninformation should be displayed in a debug panel and is only intended for\ninternal debugging purposes. If the string is empty nothing should be\ndisplayed about the media backend.",
"type": "string"
}
},
"id": "CallInfo"
},
"ListScheduledEventsResponse": {
"description": "Response to ListScheduledEventsRequest.",
"type": "object",
"properties": {
"events": {
"description": "Events found for the user.",
"type": "array",
"items": {
"$ref": "ScheduledEvent"
}
}
},
"id": "ListScheduledEventsResponse"
},
"Empty": {
"description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n service Foo {\n rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
"type": "object",
"properties": {},
"id": "Empty"
},
"GetRegionalConfigResponse": {
"description": "A response message for the GetRegionalConfig RPC.",
"type": "object",
"properties": {
"config": {
"additionalProperties": {
"$ref": "RegionalConfig"
},
"description": "The key is the region (typically country) per ISO 3166-1 alpha-2.\nThe value is the config for that region.",
"type": "object"
}
},
"id": "GetRegionalConfigResponse"
},
"Content": {
"description": "Submessage for actual content payload to be delivered to other clients.",
"type": "object",
"properties": {
"isTest": {
"description": "Indicates this is a test message, to not to be shown on UI.",
"type": "boolean"
},
"audioDebugRecordingState": {
"description": "The audio debug recording state content. This field must be set when the\nmessage's content_type is AUDIO_DEBUG_RECORDING_STATE.",
"$ref": "AudioDebugRecordingState"
},
"textMessage": {
"description": "The content of a plain text message. The text_message may be at\nmost 500 unicode code units long. Normal characters are 1\nunicode code unit, however certain emojis can be encoded as\nmultiple code units, and thus the maximum number of emojis is\nsmaller. This field must be set when content type is CHAT or\nCHAT_TEST.",
"type": "string"
}
},
"id": "Content"
},
"MeetingRoom": {
"description": "A meeting room, physical room that a meeting can be held in.",
"type": "object",
"properties": {
"calendarId": {
"description": "The calendar resource ID for the room, in email format. This may be empty,\nfor example when resolving the device ID for a CfM that is not linked to a\ncalendar.",
"type": "string"
},
"shortName": {
"description": "The abbreviated resource name, eg: \"Boardroom\", if defined.",
"type": "string"
},
"suitability": {
"enumDescriptions": [
"Fallback.",
"This room satisfies all perceived requirements and can be presented\nwith confidence.",
"This room not only satisfies all perceived requirements, but it also has\nsomething more going for it, like being the same room as the previous\nmeeting. It can be presented extra confidently (or just confidently).",
"This room has one of more drawbacks which means it may or may not be\na good fit for this meeting location. We should bring attention to these\nand let the user decide if they can use it."
],
"enum": [
"UNKNOWN_SUITABILITY",
"IDEAL",
"EXTRA_IDEAL",
"LESS_THAN_IDEAL"
],
"description": "The suitability of this room, as reported by Rendezvous.",
"type": "string"
},
"capacity": {
"description": "The number of people the room is specified to fit, if known. Zero if\nunknown.",
"format": "int32",
"type": "integer"
},
"description": {
"description": "A short description of the meeting room.\n\nExample: \"This conference room is in New York city, building 14,\nfloor 12, Boardroom\"",
"type": "string"
},
"floorName": {
"description": "The name of the floor on which this room is located, if known.",
"type": "string"
},
"meetingRoomId": {
"description": "The unique id for the meeting room. This can be passed in to\nCreateAndPushMeetingDeviceRequest.",
"type": "string"
},
"category": {
"enumDescriptions": [
"unknown whether this is or isn't a meeting room.",
"meeting room or equivalent, e.g. phone booth",
"known to be a non-meeting-room resource."
],
"enum": [
"CATEGORY_UNKNOWN",
"CONFERENCE_ROOM",
"OTHER"
],
"description": "Which kind of resource this room represents. Has semantic bearing on how\nthe resource is displayed in UI, and whether it appears in contexts where\nonly conference rooms are suggested.",
"type": "string"
},
"features": {
"description": "The features this room has, if known.",
"type": "array",
"items": {
"$ref": "Feature"
}
},
"availability": {
"enumDescriptions": [
"Default value. Used for lookup errors by Rendezvous, clients should\nregard this too as not AVAILABLE.",
"The room is available.",
"The room is unavailable."
],
"enum": [
"UNKNOWN",
"AVAILABLE",
"UNAVAILABLE"
],
"description": "The availability of the room, as reported by Rendezvous.",
"type": "string"
},
"displayName": {
"description": "The display name of the meeting room. This may contain information\nsuch as building and capacity (eg: \"NYC-9TH-9A232-Boardroom\").\nThis is always present.",
"type": "string"
},
"buildingName": {
"description": "Name of the building in which this room is located, if known.",
"type": "string"
}
},
"id": "MeetingRoom"
},
"DisplayNameInfo": {
"description": "Meta information about the display name.",
"type": "object",
"properties": {
"displayNameType": {
"description": "The type of the name in the display_name field. It can be used to hint\non-screen rendering or screen readers.",
"type": "string",
"enumDescriptions": [
"The default type, with no special interpretation.",
"A phone number, or an obfuscated phone number where some of the digits\nhave been replaced by placeholders."
],
"enum": [
"DISPLAY_NAME_TYPE_UNSPECIFIED",
"PHONE_NUMBER"
]
}
},
"id": "DisplayNameInfo"
},
"CreateAndPushMeetingDeviceResponse": {
"description": "Response to CreateAndPushMeetingDeviceRequest.",
"type": "object",
"properties": {
"meetingDeviceId": {
"description": "The id of the target device if it joins the call as a result of\nthis push. Receiving this response does not mean the device has\nactually been created in meetingDevices collection, that takes\nplace only after the target device calls meetingDevices.Create.",
"type": "string"
}
},
"id": "CreateAndPushMeetingDeviceResponse"
},
"ResolveMeetingSpaceRequest": {
"description": "Used by clients to find a meeting space given a meeting code. Exactly one of\n`meeting_code`, `meeting_url`, or `gateway_pin` should be specified in the\nrequest.",
"type": "object",
"properties": {
"deviceHint": {
"description": "Hint for which device is sending the request. This will be validated\nagainst the authenticated user. Required for HotRods.",
"$ref": "DasherDeviceHint"
},
"meetingCode": {
"description": "The meeting code to resolve. This will be used both to match against the\nmeeting code and the meeting alias, depending on the form of the string.\n\nA client that accepts user input should use this field to send the user\ninput unmodified to be resolved by the server.\n\nIf the code starts with a hash character (#), the code is interpreted as a\nmeeting alias, and meeting spaces belonging to the same organzation as the\nrequester are searched. If no meeting space was found, a new one is\ncreated automatically, as if the requester had called CreateMeetingSpace\ninstead.\n\nOtherwise, the code is normalized to a canonical form and matched globally\nagainst the meeting code in all meeting spaces. If there was no match, the\nresponse will be 404 (not found).\n\nWhen resolving an alias, this request must carry the credentials of a user\nthat is enabled to use aliases. If the alias is not found, the user must\nalso be enabled to create meeting spaces.",
"type": "string"
},
"meetingUrl": {
"description": "An URL that identifies the meeting. It will contain the same information as\nthe `meeting_code` field, but encoded in a URL.\n\nA client that accepts URLs should use this field to pass in the original\nURL, and let the server decode it, rather then trying to extract\ninformation to put in the `meeting_code` field.",
"type": "string"
},
"creatorRegionCode": {
"description": "The CLDR/ISO 3166 region code for the country that the meeting creator is\nin. To be parsed by the i18n RegionCode utility. Example: \"SE\" for Sweden.\nUsed for allocating a phone number for the given country. Only used when\ncreating a MeetingSpace for a nonexistent #alias.",
"type": "string"
}
},
"id": "ResolveMeetingSpaceRequest"
},
"MeetingRecordingAck": {
"description": "The device ACK status to a specific recording.",
"type": "object",
"properties": {
"status": {
"enumDescriptions": [
"Default value. Not used.",
"The device hasn't ACKed to the current recording.",
"The client has ACKed."
],
"enum": [
"STATUS_UNSPECIFIED",
"NOT_ACKED",
"ACKED"
],
"description": "The Ack status of the device to the recording. Set by server.",
"type": "string"
},
"meetingRecordingId": {
"description": "The rest id of the recording.",
"type": "string"
},
"meetingDeviceId": {
"description": "The device resource name of the device.",
"type": "string"
}
},
"id": "MeetingRecordingAck"
},
"MeetingBroadcast": {
"description": "Information about the broadcast of a meeting space.",
"type": "object",
"properties": {
"enabled": {
"description": "Whether broadcasting is enabled. When false, all other fields will have\ntheir default values.",
"type": "boolean"
},
"viewUrl": {
"description": "A URL that can be used to access the broadcast of the meeting. This field\nis readonly.",
"type": "string"
},
"viewerAccessPolicy": {
"description": "The policy that controls who can view the broadcast. Some options may be\nrestricted by the domain admin via dasher policies.",
"type": "string",
"enumDescriptions": [
"Used only when broadcast is not enabled, or an unknown enum value is used.",
"Only authenticated Google accounts belonging to the same organization\nas the meeting organizer can access the broadcast.",
"Anyone with the broadcast view URL can access the broadcast."
],
"enum": [
"BROADCASTING_ACCESS_POLICY_UNSPECIFIED",
"ORGANIZATION",
"PUBLIC"
]
},
"name": {
"description": "Resource name of the broadcast. It must have the format of\n\"spaces/*/broadcast\".",
"type": "string"
}
},
"id": "MeetingBroadcast"
},
"RecordingPrivilege": {
"description": "This message contains control type the device has over a recording. Devices\nin moderator role are granted control over the recording. Always set by\nserver.",
"type": "object",
"properties": {
"recordingId": {
"description": "ID of the recording.",
"type": "string"
},
"controlType": {
"description": "Control type the device has over the recording. Set by the server.",
"type": "string",
"enumDescriptions": [
"Control type is not set.",
"This client has no control on the recording.",
"This client has full control on the recording."
],
"enum": [
"CONTROL_UNSPECIFIED",
"NO_CONTROL",
"FULL_CONTROL"
]
}
},
"id": "RecordingPrivilege"
},
"CreateAndPushMeetingDeviceRequest": {
"description": "Used by a device to push the meeting onto another device in the\ncall. The HTTP header of the request should also contain meeting\ntoken.",
"type": "object",
"properties": {
"targetMeetingRoomId": {
"description": "Target device identifier.",
"type": "string"
},
"copresenceToken": {
"description": "Ephemeral token received from the CfM by the issuer of this request.\nIt is used to prove the device is in the same room, to skip showing\nthe flinging confirmation dialog in the room.",
"format": "byte",
"type": "string"
},
"targetUserId": {
"description": "obfuscated gaia id of the user. Used only for Jam boards for now.",
"type": "string"
},
"meetingName": {
"description": "Name of the meeting to be displayed in receiving CfM UI where\nuser in the room confirms that the CfM can join the meeting.",
"type": "string"
},
"targetResourceName": {
"description": "Name of the resource associated with the CfM unit calendar or\nJamboard (jamboard email).",
"type": "string"
}
},
"id": "CreateAndPushMeetingDeviceRequest"
},
"RecordingEvent": {
"description": "A recording event is something that happens to the recording in a\nconference.",
"type": "object",
"properties": {
"type": {
"description": "The type of event.",
"type": "string",
"enumDescriptions": [
"This is never used.",
"Deprecated, use detailed user actions instead.",
"Recording was started or is being started by a user.",
"Recording was stopped by a user.",
"Recording was cancelled by a user.",
"Recording was cancelled by the server because of a failure during\nrecording initialization.",
"Recording was cancelled by the server because the recording initiator\nleft the conference during initialization. When the initiator leaves\nafter the recording is started, no event is triggered.",
"Recording is about to be stopped by the server because the recording\nis about to reach the maximum duration.",
"Recording was stopped because the recording reached the maximum\nduration.",
"Recording was stopped because there were no devices left in the\nconference.",
"Recording was stopped because of an internal error."
],
"enum": [
"RECORDING_EVENT_UNSPECIFIED",
"USER_ACTION",
"STARTED_BY_USER",
"STOPPED_BY_USER",
"CANCELLED_BY_USER",
"CANCELLED_INITIALIZATION_FAILED",
"CANCELLED_INITIATOR_LEFT",
"ACTIVE_ABOUT_TO_STOP_TOO_LONG",
"STOPPED_TOO_LONG",
"STOPPED_ALL_DEVICES_LEFT",
"STOPPED_INTERNAL_FAILURES"
]
},
"deviceId": {
"description": "The initiator of the latest event of the recording. It will be set for\nall user events (`type` is 100-199) and unset for all server events\n(`type` is 200-299).",
"type": "string"
}
},
"id": "RecordingEvent"
},
"ListPstnOutRegionCodesResponse": {
"description": "A response message for the ListPstnOutRegionCodes RPC.",
"type": "object",
"properties": {
"regionCodes": {
"description": "The CLDR/ISO 3166 region codes to which the client is allowed to dial-out.\nThis is used by client to avoid user entering region code directly and\nmaking disallowed calls. If an empty list is returned, client should not\nshow PSTN-out feature.\nHowever, if user makes a disallowed call by hacking, there is no check\nin MAS right now and the call will go through.",
"type": "array",
"items": {
"type": "string"
}
}
},
"id": "ListPstnOutRegionCodesResponse"
},
"ListMeetingRecordingsResponse": {
"description": "Response for collection of meeting recordings.",
"type": "object",
"properties": {
"recordings": {
"description": "Retrieved recordings.",
"type": "array",
"items": {
"$ref": "MeetingRecording"
}
}
},
"id": "ListMeetingRecordingsResponse"
},
"ListMeetingRecordingAcksResponse": {
"description": "Response of the list of recording ack status for JOINED devices.",
"type": "object",
"properties": {
"recordingAcks": {
"description": "Retrieved ack status.",
"type": "array",
"items": {
"$ref": "MeetingRecordingAck"
}
}
},
"id": "ListMeetingRecordingAcksResponse"
},
"MeetingDevice": {
"description": "A device connected to a conference. A device represents a client session in\nthe context of a conference belonging to a meeting space.\n\nA MeetingDevice is bound to the conference it connects to, and if the\nconference ends prematurely for some reason, the device will be deleted.",
"type": "object",
"properties": {
"deleted": {
"description": "The device has reached one of the final states and is no longer part\nof the call.",
"type": "boolean"
},
"displayNameInfo": {
"description": "Meta information about the display name of this device.",
"$ref": "DisplayNameInfo"
},
"recordingAcks": {
"description": "Client acknowledgments on receiving recording update, invisible to\nother devices. Note only two updates are supported for this\nfield:\n * Insert ACK to active recordings\n * Flip ACK_STATUS_REQUESTED -\u003e ACK_STATUS_ACKED for an active recording.\nOther actions from client side is no-op.",
"type": "array",
"items": {
"$ref": "RecordingAck"
}
},
"createdBy": {
"description": "The device resource name of the device that created this device, or\nempty if this device was created by a client with no previous device\naffiliation. It is equal to the meeting_device_id field of that device,\nalthough there is no guarantee that that device still exists.\n\nThis is used for invitations and will be set when a PSTN-out device is\ncreated to dial out to a phone number. There may be second screen uses in\nthe future as well.\n\nClients must not set it themselves, it is set by the server.",
"type": "string"
},
"avatarUrl": {
"description": "A URL for an avatar image. The avatar can be used to represent\nthe device when there is no video feed. This is a FIFE URL\n(go/fife-urls) that points to a square 192×192 pixel image that\nis either a profile picture or an automatically generated image.\nCannot be set by the client.",
"type": "string"
},
"features": {
"description": "During the rollout phase of a new feature, clients must use this\nfeature list to determine if the feature should be enabled or\ndisabled. After the feature has been fully launched, clients\nshould be updated to no longer look at this field for that\nfeature, and when all clients are updated, the backend may stop\nsetting it.",
"type": "array",
"items": {
"enum": [
"FEATURE_UNUSED",
"FEATURE_MEETING_MESSAGES",
"FEATURE_MEETING_RECORDING"
],
"type": "string"
},
"enumDescriptions": [
"Not used, ever.",
"Meeting messages are to be supported.",
"Meeting recordings are to be supported."
]
},
"meetingDeviceId": {
"description": "A unique server-generated ID for the meeting device. This is the\nREST name of the meeting device resource and has the form\n`spaces/\u003cid\u003e/devices/\u003cid\u003e`, where \u003cid\u003e is a sequence of\ncharacters in the\n[base64url set](https://tools.ietf.org/html/rfc4648#section-5),\nwithout any `=` characters.",
"type": "string"
},
"deletedBy": {
"description": "This field is never set.",
"type": "string"
},
"p2pSessionId": {
"description": "The id of an optional P2P session with which this device is associated.",
"type": "string"
},
"displayName": {
"description": "For a PSTN-out device, the display name will be the full, unobfuscated,\nphone number only when viewed by the device that created the PSTN-out\ndevice and the reverse phone number lookup for the dialed number failed.",
"type": "string"
},
"audioMuteRequest": {
"description": "This represents a desire to mute the audio from a meeting device\nother than the owner of the audio stream. A device other than the\nowner of the audio stream will request remote mute by filling in\nits own meeting device resource name in\naudio_mute_request.by_meeting_device_id.\n\nThe owner may either approve this request (changing the actual\nmute state in it's AUDIO media source and copying the meeting\ndevice resource name to the mute state in it) or reject it (keeping the\nmute state in AUDIO media source intact).\n\nAfter handling the request, the owner should clear this field by\nsetting audio_mute_request.by_meeting_device_id to the empty\nstring.\n\nA client must not rely on seeing this set for any other device\nthan its own.",
"$ref": "MuteRequest"
},
"joined": {
"description": "Indicates whether this device should be treated as part of the call by\nother devices. At present, this flag corresponds 1:1 to the JOINED\njoin_state, but it is a future-proof way for clients to know when to show\nanother device in the UI even if we add new states which should also be\ntreated as joined. Provided by the server and must not be set by the\nclient.",
"type": "boolean"
},
"primaryDeviceId": {
"description": "The *primary meeting device* this meeting device is associated with, which\nalso means that the current device is a *secondary meeting device*. Clients\nshould adapt their UI to show that the primary device and secondary devices\nassociated with it are parts of a cluster, forming a larger \"virtual\"\nmeeting device. A typical use case is a secondary device carrying a\npresentation together with a primary device with the meeting room camera.\n\nThe value, if set, is a REST ID of another meeting device and is set by the\nclient when creating the meeting device, or upon modification prior to\njoining the meeting. If the referenced primary device is removed during the\nconference, the backend will clear this field.",
"type": "string"
},
"clientType": {
"description": "The type of client used by this device. This can be used by\nother clients, for instance, to differentiate PSTN participants and\nprovide different UI (e.g. ability to send DTMF).\nThis must not be filled in by clients. The backend will fill this out\nusing information clients provide in standard RTC headers.",
"type": "string",
"enumDescriptions": [
"Not used.",
"Type not covered by remaining options.",
"A browser client.",
"A mobile native client.",
"A phone (using PSTN connection). This is used both for incoming and\noutgoing calls.",
"Videoconferencing equipment, such as a GVC installation in a conference\nroom or a personal Hotrod unit",
"A Meetings test bot.",
"An gateway that lets users connect from other kinds of VC\nequipment. Clients can show this similar to VC_EQUIPMENT.",
"A native desktop client. Even though this may embed a browser / webviews\nfor UI, it is different from the WEB client type above in that it depends\non things outside of the browser environment, and is deployed as such."
],
"enum": [
"CLIENT_TYPE_UNSPECIFIED",
"OTHER",
"WEB",
"MOBILE",
"PSTN",
"VC_EQUIPMENT",
"TEST_BOT",
"INTEROP_GATEWAY",
"NATIVE_DESKTOP"
]
},
"joinState": {
"enumDescriptions": [
"Not used, but may show up if an unknown enum value is used.",
"The JOINED state is used for devices that are in the call and\nmay send or receive media. Clients should always request this\nstate when trying to join a call.\n\nVisibility: Visible to all other JOINED, HIDDEN and VIEWING devices.\n\nTransitions: Clients can change the join state to one of the final\nstates LEFT (if the client represents the modified device) or EJECTED\n(if the client represents another device and the MAY_EJECT privilege\nis set on the client's own device).",
"The HIDDEN state is a semi-joined state. It means that the\ndevice has been accepted into the call and the other devices in\nthe call are now visible, but it can not send or receive media.\n\nThis can be used to implement a \"green room\" where the client\nlets the user confirm that it actually wants to join and open\nthe camera and microphone. Participants that need to knock to\njoin will not be able to use this state, since it is only\navailable to devices that can join.\n\nVisibility: A HIDDEN device is not visible to other devices.\n\nTransitions: The client in the HIDDEN state can request to transition\nto VIEWING, JOINED states. The request to JOINED state will result in\none of the following states\n * JOINED, if all the join conditions are met.\n * MISSING_PREREQUISITES, if the device needs to fulfill some\n prerequisites, e.g. acknowledge a recording notice.",
"A device is put in the KNOCKING state when it is not allowed to\njoin immediately. A knocking device does not have access to the\ncall and can not send or receive media.\n\nWhen trying to join, clients should always request the JOINED\nstate, and the response to the create request may indicate that\nit was instead put in the KNOCKING state.\n\nVisibility: A KNOCKING device is visible only to devices that\nhave the ability to accept it into the call.\n\nTransitions: The KNOCKING state can be changed by either server or\nanother device to one of the following states:\n * JOINED, if accepted, and no other confirmations are needed.\n * MISSING_PREREQUISITES, if the device needs to fulfill some\n prerequisites, e.g. acknowledge a recording notice.\n * DENIED, if the knocking request was denied",
"The DENIED state indicates that joining the call was denied for\nthis device, in response to knocking.\n\nVisibility: The visibility for devices in the DENIED state is\nidentical to the KNOCKING state.\n\nTransitions: This is a final state.\n\nNOTE: This is usually set by other clients, but may be set by\nthe server if the conference becomes full. However, the\nDENIED_FULL join state is designed to cover that use case and\nthe server will switch to setting that as soon as it is\nconfirmed that all clients can handle it.",
"The LOBBY state is similar to the HIDDEN state, but with the\ndifference that the client is not able to join the call without\nknocking. Devices in this state may not send or receive media.\n\nVisibility: Devices in the LOBBY state are not visible to any\nother devices than itself.\n\nTransitions: The LOBBY state can be changed by the client to the JOINED\nstate, but that will usually result in actually changing it to the\nKNOCKING state. If the meeting ACL was changed while the client was in\nthe LOBBY state, the request to change to JOINED may succeed.",
"The LEFT state is used for devices that were once in the JOINED,\nRINGING or VIEWING state but have since voluntarily left the call.\n\nVisibility: Visible to all JOINED, HIDDEN, VIEWING devices that existed\nbefore this device entered this state.\n\nTransitions: This is a final state.",
"The EJECTED state is used for devices that were once in the JOINED\nstate but have since been removed from the call by another device.\nA device can also enter EJECTED from RINGING, when cancelling a PSTN-out\ncall before it successfully connected.\n\nVisibility: Visible to all JOINED or HIDDEN devices that existed before\nthis device entered this state.\n\nTransitions: This is a final state.",
"The ERROR state is used for devices that have been detected by the\nserver to no longer exist.\n\nVisibility: Visible to all JOINED, HIDDEN, VIEWING devices that existed\nbefore this device entered this state.\n\nTransitions: This is a final state. Devices in this state may be\ncompletely removed from the device collection by the server.",
"The MISSING_PREREQUISITES state is used for devices that need to fulfill\ncertain prerequisites to join (e.g. acknowledge that the call is being\nrecorded). Currently only used for recording/streaming cases.\n\n\nVisibility: Visible to all JOINED devices.\n\nTransitions: The client can change the state to JOINED once all\nprerequisites have been met. If they have not been met, the update will\nresult in the device staying in the MISSING_PREREQUISITES state.",
"A device in the RINGING state represents an invitation where the\nrecipient of the invitation has not yet responded to the invitation.\n\nVisibility: Visible to all JOINED devices.\n\nTransitions: The invited party can accept or decline, which will\ntransition to JOINED and LEFT, respectively. If there was a problem, the\nbackend will transition this to ERROR. PSTN-out devices that are still\nRINGING may instead transition to EJECTED if ejected before the call\nsuccessfully connects.",
"The DENIED_FULL state indicates that the conference became full\nwhile the device was in the KNOCKING state. It is set by the server.\n\nVisibility: The visibility for devices in the DENIED_FULL state\nis identical to the KNOCKING state.\n\nTransitions: This is a final state.",
"The VIEWING state can be used by devices that would be able to enter the\nJOINED state but do not want to join the conference, and are interested\nin receiving the media content.\n\nThis state is currently (Aug '17) being used for live streaming Thor\nconferences using YouTube Live infrastructure to ACLed users. See\ngo/thor-viewers\n\nVisibility: These devices have the same visibility as JOINED devices -\nare visible to all other JOINED, HIDDEN and VIEWING state devices.\n\nTransitions: Devices in the VIEWING state can request to transition to\nJOINED state. The request will result in one of the following states\n * JOINED, if all the join conditions are met.\n * MISSING_PREREQUISITES, if the device needs to fulfill some\n prerequisites, e.g. acknowledge a recording notice."
],
"enum": [
"JOIN_STATE_UNSPECIFIED",
"JOINED",
"HIDDEN",
"KNOCKING",
"DENIED",
"LOBBY",
"LEFT",
"EJECTED",
"ERROR",
"MISSING_PREREQUISITES",
"RINGING",
"DENIED_FULL",
"VIEWING"
],
"description": "The current state of joining the call. The client must set it to either\nJOINED or HIDDEN on create to indicate the desired starting state. The\nserver may change it to KNOCKING or LOBBY in the create response. State\nchanges are performed either by client or server according to the state\ndefinitions.\n\nNOTE: New join states may be added in future versions of this API. If a\nclient encounters a join state it doesn't recognize, it should use the\nfollowing list to determine a fallback join state for the device:\n\n- If the deleted flag is set, the device should be treated as if it were\n in the LEFT join state.\n\n- Otherwise, if the joined flag is set, it should treat the device as if\n it were in the JOINED state.\n\n- Otherwise, this device should be treated as yet not having joined the\n call and not be shown in a user interface.",
"type": "string"
},
"audioState": {
"$ref": "MediaState",
"description": "The audio state for this device."
},
"recordingPrivileges": {
"description": "Recording privileges the device has. Always set by server.",
"type": "array",
"items": {
"$ref": "RecordingPrivilege"
}
},
"guest": {
"description": "A flag that is set to true by the backend if the device owner\ndoes not belong to the same domain as the organizer. Also set to\ntrue for anonymous devices.",
"type": "boolean"
},
"mediaSessionId": {
"description": "The ids of ongoing media sessions with which this device is associated.\nThis field will be deprecated by the cloud_session_id and p2p_session_id\nfields (b/109873048).",
"type": "array",
"items": {
"type": "string"
}
},
"anonymous": {
"description": "This flag is used by clients which want to display a specific UI for users\nwhich have gone through the anonymous join flow. Generally this means that\nusers which are not authenticated will have this flag set to true, but\nsince PSTN clients do not use the same join flow, they will have this flag\nset to false. Note that the guest flag will always be true if this flag is\ntrue.",
"type": "boolean"
},
"cloudSessionId": {
"description": "The id of an ongoing cloud media session with which this device is\nassociated. Not in use yet, but will replace the media_session_id field\n(b/109873048).",
"type": "string"
},
"pstnInfo": {
"description": "PSTN-related information about the device if it has `client_type` set to\n`PSTN`. It is not used for other devices.\n\nThis is set by the client when creating a device for an outbound call, and\nset by the server for inbound calls.",
"$ref": "PstnInfo"
},
"privileges": {
"description": "List of privileges. This is only provided for the current device.",
"type": "array",
"items": {
"enum": [
"PRIVILEGE_UNSPECIFIED",
"MAY_EJECT",
"MAY_INITIATE_RECORDING",
"MAY_DIAL_OUT",
"MAY_INITIATE_BROADCAST",
"MAY_SEND_INVITES"
],
"type": "string"
},
"enumDescriptions": [
"Not used.",
"This device may eject other devices in the call.",
"This device may initiate recording.",
"This device may create new meeting devices by dialing out to phone\nnumbers.",
"This device may initiate broadcast. This privilege is granted to a device\nif and only if the meeting organizer is enabled for broadcast in Dasher\nsettings and broadcast is enabled in Broadcast settings.",
"This device may send invitations to people to join the conference."
]
}
},
"id": "MeetingDevice"
},
"EchoRequest": {
"description": "A request message that client send to MAS service for connectivity checking.",
"type": "object",
"properties": {
"message": {
"description": "A message with no semantical meaning, but expected to be echoed from\nresponse for verification.",
"type": "string"
}
},
"id": "EchoRequest"
},
"DasherDeviceHint": {
"description": "Used to hint the backend about what device is sending the RPC. Must always\nbe validated against DDS.",
"type": "object",
"properties": {
"dasherDeviceId": {
"description": "HotRod device id",
"type": "string"
}
},
"id": "DasherDeviceHint"
},
"MeetingSpace": {
"description": "A meeting space is a persistent object that is the context for one\nor more calls. The meeting space is what makes users find each\nother when they want to meet and to find shared resources.\n\nWith two exceptions, all the fields in the meeting space resource are\nvisible publicly to any client, even anonymous users. The exceptions\nare that\n* The call_info field is only visible to clients that have a\n device (as indicated by the meeting token) in the JOINED, HIDDEN, or\nVIEWING state\n* The meeting_alias field will only be set for users who are in the\n same domain as the meeting space.\n\nThe meeting space resource (outside call_info) should only contain\ninformation necessary to join a call in the meeting space, and not any other\nmetadata about the meeting space, such as what organization it belongs to or\nthings related to ongoing calls.",
"type": "object",
"properties": {
"meetingAlias": {
"description": "An optional alias for the meeting space. The alias can in some cases be\nresolved to the meeting space, similar to the meeting code. The limitiation\nis that the user needs to be in the same meeting domain as the meeting\nspace. See go/thor-backend/meeting-alias for more details.",
"type": "string"
},
"meetingUrl": {
"description": "A URL to identify and access the meeting space. Generated server-side.",
"type": "string"
},
"aclPolicy": {
"enumDescriptions": [
"Not used, but may show up if an unknown enum value is used.",
"Any user can join an ongoing call in an unlocked meeting space\nas long as they have the meeting code for the meeting space.\nThis policy is deprecated.",
"Only organizers and moderators can join ongoing calls in a locked meeting\nspace. All other users must knock to join."
],
"enum": [
"MEETING_ACCESS_UNSPECIFIED",
"UNLOCKED",
"LOCKED"
],
"description": "The current ACL policy for this meeting space. This field is\ndeprecated and should not be set by clients, or assumed that it\nis set by the server.",
"type": "string"
},
"meetingCode": {
"description": "A meeting code is a globally unique code which points to a meeting space.\nNote: Meeting codes may be regenerated, which will cause old meeting codes\nto become invalid.",
"type": "string"
},
"gatewayAccess": {
"$ref": "GatewayAccess",
"description": "The interop gateway access information for the meeting space..\n\nA gateway access can be used when joining conferences from non-Google\nequipment through an interop gateway."
},
"phoneAccess": {
"description": "All regional phone access methods for this meeting space. Can be empty.",
"type": "array",
"items": {
"$ref": "PhoneAccess"
}
},
"universalPhoneAccess": {
"$ref": "UniversalPhoneAccess",
"description": "A universal phone access method for this meeting space. Can be unset."
},
"callInfo": {
"description": "Information relevant to an ongoing conference. This field will be set in\nresponses if the client requesting the meeting space has a device in one\nof the JOINED, HIDDEN, MISSING_PREREQUISITES, or VIEWING states. The field\nwill also be set without a created device if the client requesting the\nmeeting space is eligible to directly create a device in the JOINED state\nwithout knocking, eg a same-domain joiner.\n\nCan also only be updated by clients with a device in the JOINED state.",
"$ref": "CallInfo"
},
"meetingSpaceId": {
"description": "A unique server-generated ID for the meeting space. This is the\nREST name of the meeting space resource and has the form\n`spaces/\u003cid\u003e`, where \u003cid\u003e is a sequence of characters in the\n[base64url set](https://tools.ietf.org/html/rfc4648#section-5),\nwithout any `=` characters.",
"type": "string"
},
"moreJoinUrl": {
"description": "A URL that clients (e.g. Calendar) can use to show the webpage with all\njoin methods available for this meeting space. This link is also used in\niOS universal links and Android intents, used for opening the \"More ways to\njoin\" view in the Thor mobile apps.\n\nExample: https://tel.meet/mee-ting-cod?pin=1234567891011\n\nHere, \"pin\" is the universal phone PIN. We include it explicitly to better\nsupport the offline case on the mobile.\n\nThis is set when the meeting space has either a universal PIN or an\ninterop PIN and clients who can show a \"more ways to join\" button should\nshow it whenever this field is set.",
"type": "string"
}
},
"id": "MeetingSpace"
},
"User": {
"description": "A user account using a device to create a call. Used only in\n/v1/users/me response.",
"type": "object",
"properties": {
"logUploadPolicy": {
"description": "Client log upload policy for this user.",
"type": "string",
"enumDescriptions": [
"This user should not upload client logs. Default value.",
"This user should always upload client logs.",
"Client may have a separate setting for uploading client logs."
],
"enum": [
"NEVER",
"ALWAYS",
"CLIENT_DECIDES"
]
},
"mayCreateMeetingDevice": {
"description": "True if the user is allowed to create a new meeting device using\nMeetingDeviceService.CreateMeetingDevice.",
"type": "boolean"
},
"name": {
"description": "Resource name of the user",
"type": "string"
},
"mayAccessDomainQualityDashboard": {
"description": "True if the user is allowed to access delve domain admin meeting quality\ndashboard.",
"type": "boolean"
},
"mayResolveMeetingSpaceByAlias": {
"description": "True if the user is allowed to resolve a meeting space by alias. If false,\nthere is no support for alias in the domain and so people can't join by\nalias. This setting reflects the behavior of ResolveMeetingSpace for that\nuser.",
"type": "boolean"
},
"mayCreateMeetingSpace": {
"description": "True if the user is allowed to create a new meeting space using\nMeetingSpaceService.CreateMeetingSpace.",
"type": "boolean"
},
"avatarUrl": {
"description": "The URL of the avatar image used for meeting devices connected to\nthis user. For anonymous users, this will be different from the\nin-conference avatar if the user provides a display name when\njoining.\n\nThis is a FIFE URL (go/fife-urls) that points to a square 192×192\npixel image that is either a profile picture or an automatically\ngenerated image.",
"type": "string"
},
"maySendToRoom": {
"description": "True if the user is allowed to use the\nMeetingDeviceService.CreateAndPushMeetingDevice API to make a meeting room\ndevice join a conference, also known as flinging.",
"type": "boolean"
},
"mayAccessDelve": {
"description": "True if the user is allowed to access delve media stats page.",
"type": "boolean"
},
"adminSendBandwidth": {
"description": "The send bandwidth restriction specified by domain admins for this user.",
"type": "string",
"enumDescriptions": [
"Not used.",
"No bandwidth restriction (the video will be in HD).",
"The video is restricted to VGA.",
"The camera will be off when joining each call. If the user turns it on,\nthe video will be restricted to VGA."
],
"enum": [
"RESTRICTION_UNSPECIFIED",
"NO_RESTRICTION",
"VGA",
"AUDIO_ONLY"
]
}
},
"id": "User"
},
"GetGatewayAccessResponse": {
"description": "A response message for the GetGatewayAccess RPC.",
"type": "object",
"properties": {
"gatewayAccess": {
"description": "This is set only if 3rd party interop was enabled for the meeting.",
"$ref": "GatewayAccessCode"
},
"externalJoinInformation": {
"$ref": "ExternalJoinInformation",
"description": "Information needed to provide full join instructions to external\nparticipants."
}
},
"id": "GetGatewayAccessResponse"
},
"MediaState": {
"description": "High level information about media originating from the device.\nThis is used to provide UI hints to other clients to indicate\nthat the device is sending working media etc.\n\nSince this is not at the granularity of individual streams, it\nonly provides an aggregate or approximation in the case of a\ndevice with multiple streams of the same media type.\n\nThis is fully under the control of the owning client, and will\nnever be changed by the server and can not be changed by other\nclients. For PSTN participants, this is will be set by the PSTN\nclient code in the backend.",
"type": "object",
"properties": {
"muteability": {
"enumDescriptions": [
"Not used. If a device is created with this, it will receive a default\nvalue from the backend. If a client receives an unknown value, it\nshould handle it in a reasonable way, for example defaulting to\nMUTEABLE.",
"The device does not support automatic remote mute and will not respond\nto mute requests. Viewing clients should indicate this in the UI, and\navoid sending mute requests.",
"The device supports remote mute, and viewing clients should show an\naffordance to mute media in their UI, as long as the device has a\ncorresponding media stream.",
"The device does not support automatic remote mute, but will accept\nrequests to mute and make a best effort to mute, for example by\nprompting the end user to mute the hardware device."
],
"enum": [
"MUTEABILITY_UNSPECIFIED",
"NOT_MUTEABLE",
"MUTEABLE",
"BEST_EFFORT"
],
"description": "The remote muteability of this media for this device. This is an\nindication to other clients whether they can mute this device. This field\nis set by the owning client, but can not be changed after the device has\nentered the JOINED state.",
"type": "string"
},
"mutedByDeviceId": {
"description": "The device resource name of a device that caused media to be muted. When\nthis is set, it means that media should be seen as muted, and\nwhen it is unset, media should be seen as not muted. The actual\nmute state of individual streams is part of the media streams\nAPI.\n\nWhen a client mutes its own media (stops sending media), it\nshould set this string to point to the meeting device that\noriginally requested the change. If mute was not requested by\nanother device but initiated by the user controlling this\ndevice, then this should be set to the device's own meeting\ndevice resource name.\n\nWhen media sending resumes, the client should clear this field.",
"type": "string"
},
"health": {
"enumDescriptions": [
"Not used.",
"Media is working as expected. As long as it isn't muted, the\nmedia path should contain useful data.",
"There is a problem getting media from the hardware source,\nfor example when a microphone is not able to record any\naudio, or that the signal is so low that it should be\nconsidered broken. Media may still be unmuted when this is\nset, but there will probably not be any useful media data."
],
"enum": [
"HEALTH_UNSPECIFIED",
"WORKING",
"BROKEN"
],
"description": "The current health of this media.",
"type": "string"
}
},
"id": "MediaState"
},
"ListMeetingDevicesResponse": {
"description": "MeetingDeviceListResponse is returned when clients want to list the\ndevices ACLd to a specific meeting.",
"type": "object",
"properties": {
"meetingDevices": {
"description": "The retrieved meeting devices.",
"type": "array",
"items": {
"$ref": "MeetingDevice"
}
}
},
"id": "ListMeetingDevicesResponse"
},
"EchoResponse": {
"description": "A response message for the Echo RPC.",
"type": "object",
"properties": {
"message": {
"description": "A message that echos the EchoRequest payload.",
"type": "string"
}
},
"id": "EchoResponse"
},
"GatewayAccess": {
"description": "Details on the third-party interoperability settings for the meeting space.",
"type": "object",
"properties": {
"enabled": {
"description": "Whether third-party gateway accesses are enabled for this meeting space.\nIf enabled, the actual access code can be retrieved by calling the\nGetGatewayAccess RPC method.",
"type": "boolean"
}
},
"id": "GatewayAccess"
},
"AudioDebugRecordingState": {
"description": "Submessage for audio debug recording state.",
"type": "object",
"properties": {
"durationSeconds": {
"description": "The duration of the audio debug recording. After this number of seconds\nhas elapsed, the recording will be done.",
"format": "int32",
"type": "integer"
}
},
"id": "AudioDebugRecordingState"
},
"MeetingBroadcastViewSession": {
"description": "A session in a MeetingBroadcastView.",
"type": "object",
"properties": {
"broadcastPlayerConfig": {
"$ref": "BroadcastPlayerConfig",
"description": "The Streaming URLs for content playback. Only set when the broadcast view\nsession is live."
},
"sessionStatus": {
"description": "The current status of this broadcast view session.",
"type": "string",
"enumDescriptions": [
"This should be never used.",
"The broadcast view session is not active. Content cannot be played.",
"Resource for the broadcast view session is being prepared. Content cannot\nbe played.",
"Resource for the broadcast view session is ready. Content can be played."
],
"enum": [
"SESSION_STATUS_UNSPECIFIED",
"INACTIVE",
"STARTING",
"LIVE"
]
}
},
"id": "MeetingBroadcastViewSession"
}
},
"protocol": "rest",
"icons": {
"x32": "http://www.google.com/images/icons/product/search-32.gif",
"x16": "http://www.google.com/images/icons/product/search-16.gif"
},
"version": "v1",
"baseUrl": "https://meetings.googleapis.com/",
"canonicalName": "Meetings"
}
@AngeloD2022
Copy link

Lifesaver! Thank you! How did you obtain this?

@TheFrozenFire
Copy link
Author

I recall having dug through the network inspector in Google Meet to find what endpoints it was calling, and then poked around until I found an endpoint that would emit the API specification. I can't recall where that was.

@AngeloD2022
Copy link

Yes, if I remember correctly, what you found is known as the discovery document. I hope that it's still up-to-date because it seems as if they have privatized it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment