{ "openapi": "3.0.3", "info": { "title": "spreed-backend-sipbridge", "version": "0.0.1", "description": "Chat, video & audio-conferencing using WebRTC", "license": { "name": "agpl" } }, "components": { "securitySchemes": { "basic_auth": { "type": "http", "scheme": "basic" }, "bearer_auth": { "type": "http", "scheme": "bearer" } }, "schemas": { "BaseMessage": { "type": "object", "required": [ "actorDisplayName", "actorId", "actorType", "expirationTimestamp", "message", "messageParameters", "messageType", "systemMessage" ], "properties": { "actorDisplayName": { "type": "string" }, "actorId": { "type": "string" }, "actorType": { "type": "string" }, "expirationTimestamp": { "type": "integer", "format": "int64" }, "message": { "type": "string" }, "messageParameters": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/RichObjectParameter" } }, "messageType": { "type": "string" }, "systemMessage": { "type": "string" } } }, "Capabilities": { "type": "object", "required": [ "features", "features-local", "config", "config-local", "version" ], "properties": { "features": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "features-local": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "config": { "type": "object", "required": [ "attachments", "call", "chat", "conversations", "federation", "previews", "signaling", "experiments" ], "properties": { "attachments": { "type": "object", "required": [ "allowed" ], "properties": { "allowed": { "type": "boolean" }, "folder": { "type": "string" } } }, "call": { "type": "object", "required": [ "enabled", "breakout-rooms", "recording", "recording-consent", "supported-reactions", "predefined-backgrounds", "predefined-backgrounds-v2", "can-upload-background", "sip-enabled", "sip-dialout-enabled", "can-enable-sip", "start-without-media", "max-duration", "blur-virtual-background", "end-to-end-encryption", "live-transcription" ], "properties": { "enabled": { "type": "boolean" }, "breakout-rooms": { "type": "boolean" }, "recording": { "type": "boolean" }, "recording-consent": { "type": "integer", "format": "int64" }, "supported-reactions": { "type": "array", "items": { "type": "string" } }, "predefined-backgrounds": { "type": "array", "description": "List of file names relative to the spreed/img/backgrounds/ web path, e.g. `2_home.jpg`", "items": { "type": "string" } }, "predefined-backgrounds-v2": { "type": "array", "description": "List of file paths relative to the server web root with leading slash, e.g. `/apps/spreed/img/backgrounds/2_home.jpg`", "items": { "type": "string" } }, "can-upload-background": { "type": "boolean" }, "sip-enabled": { "type": "boolean" }, "sip-dialout-enabled": { "type": "boolean" }, "can-enable-sip": { "type": "boolean" }, "start-without-media": { "type": "boolean" }, "max-duration": { "type": "integer", "format": "int64" }, "blur-virtual-background": { "type": "boolean" }, "end-to-end-encryption": { "type": "boolean" }, "live-transcription": { "type": "boolean" } } }, "chat": { "type": "object", "required": [ "max-length", "read-privacy", "has-translation-providers", "has-translation-task-providers", "typing-privacy", "summary-threshold", "style" ], "properties": { "max-length": { "type": "integer", "format": "int64" }, "read-privacy": { "type": "integer", "format": "int64" }, "has-translation-providers": { "type": "boolean" }, "has-translation-task-providers": { "type": "boolean" }, "typing-privacy": { "type": "integer", "format": "int64" }, "summary-threshold": { "type": "integer", "format": "int64", "minimum": 1 }, "style": { "type": "string", "enum": [ "split", "unified" ] } } }, "conversations": { "type": "object", "required": [ "can-create", "force-passwords", "list-style", "description-length", "retention-event", "retention-phone", "retention-instant-meetings" ], "properties": { "can-create": { "type": "boolean" }, "force-passwords": { "type": "boolean" }, "list-style": { "type": "string", "enum": [ "two-lines", "compact" ] }, "description-length": { "type": "integer", "format": "int64", "minimum": 1 }, "retention-event": { "type": "integer", "format": "int64", "minimum": 0 }, "retention-phone": { "type": "integer", "format": "int64", "minimum": 0 }, "retention-instant-meetings": { "type": "integer", "format": "int64", "minimum": 0 } } }, "federation": { "type": "object", "required": [ "enabled", "incoming-enabled", "outgoing-enabled", "only-trusted-servers" ], "properties": { "enabled": { "type": "boolean" }, "incoming-enabled": { "type": "boolean" }, "outgoing-enabled": { "type": "boolean" }, "only-trusted-servers": { "type": "boolean" } } }, "previews": { "type": "object", "required": [ "max-gif-size" ], "properties": { "max-gif-size": { "type": "integer", "format": "int64" } } }, "signaling": { "type": "object", "required": [ "session-ping-limit" ], "properties": { "session-ping-limit": { "type": "integer", "format": "int64" }, "hello-v2-token-key": { "type": "string" } } }, "experiments": { "type": "object", "required": [ "enabled" ], "properties": { "enabled": { "type": "integer", "format": "int64", "minimum": 0 } } } } }, "config-local": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" }, "minItems": 1 } }, "version": { "type": "string" } } }, "ChatMessage": { "allOf": [ { "$ref": "#/components/schemas/BaseMessage" }, { "type": "object", "required": [ "id", "isReplyable", "markdown", "reactions", "referenceId", "timestamp", "token" ], "properties": { "deleted": { "type": "boolean", "enum": [ true ] }, "id": { "type": "integer", "format": "int64" }, "isReplyable": { "type": "boolean" }, "markdown": { "type": "boolean" }, "reactions": { "type": "object", "additionalProperties": { "type": "integer", "format": "int64" } }, "reactionsSelf": { "type": "array", "items": { "type": "string" } }, "referenceId": { "type": "string" }, "timestamp": { "type": "integer", "format": "int64" }, "token": { "type": "string" }, "lastEditActorDisplayName": { "type": "string" }, "lastEditActorId": { "type": "string" }, "lastEditActorType": { "type": "string" }, "lastEditTimestamp": { "type": "integer", "format": "int64" }, "silent": { "type": "boolean" }, "threadId": { "type": "integer", "format": "int64" }, "isThread": { "type": "boolean" }, "threadTitle": { "type": "string" }, "threadReplies": { "type": "integer", "format": "int64" }, "metaData": { "$ref": "#/components/schemas/ChatMessageMetaData" } } } ] }, "ChatMessageMetaData": { "type": "object", "properties": { "pinnedActorType": { "type": "string", "description": "Actor type of the attendee that pinned the message - Required capability: `pinned-messages`" }, "pinnedActorId": { "type": "string", "description": "Actor ID of the attendee that pinned the message - Required capability: `pinned-messages`" }, "pinnedActorDisplayName": { "type": "string", "description": "Display name of the attendee that pinned the message - Required capability: `pinned-messages`" }, "pinnedAt": { "type": "integer", "format": "int64", "description": "Timestamp when the message was pinned - Required capability: `pinned-messages`" }, "pinnedUntil": { "type": "integer", "format": "int64", "description": "Timestamp until when the message is pinned. If missing the message is pinned infinitely - Required capability: `pinned-messages`" } } }, "ChatProxyMessage": { "$ref": "#/components/schemas/BaseMessage" }, "OCSMeta": { "type": "object", "required": [ "status", "statuscode" ], "properties": { "status": { "type": "string" }, "statuscode": { "type": "integer" }, "message": { "type": "string" }, "totalitems": { "type": "string" }, "itemsperpage": { "type": "string" } } }, "PublicCapabilities": { "type": "object", "properties": { "spreed": { "$ref": "#/components/schemas/Capabilities" } } }, "RichObjectParameter": { "type": "object", "required": [ "type", "id", "name" ], "properties": { "type": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "server": { "type": "string" }, "link": { "type": "string" }, "call-type": { "type": "string", "enum": [ "one2one", "group", "public" ] }, "icon-url": { "type": "string" }, "message-id": { "type": "string" }, "boardname": { "type": "string" }, "stackname": { "type": "string" }, "size": { "type": "string" }, "path": { "type": "string" }, "mimetype": { "type": "string" }, "preview-available": { "type": "string", "enum": [ "yes", "no" ] }, "hide-download": { "type": "string", "enum": [ "yes", "no" ] }, "mtime": { "type": "string" }, "latitude": { "type": "string" }, "longitude": { "type": "string" }, "description": { "type": "string" }, "thumb": { "type": "string" }, "website": { "type": "string" }, "visibility": { "type": "string", "enum": [ "0", "1" ] }, "assignable": { "type": "string", "enum": [ "0", "1" ] }, "conversation": { "type": "string" }, "etag": { "type": "string" }, "permissions": { "type": "string" }, "width": { "type": "string" }, "height": { "type": "string" }, "blurhash": { "type": "string" } } }, "Room": { "type": "object", "required": [ "actorId", "actorType", "attendeeId", "attendeePermissions", "attendeePin", "avatarVersion", "breakoutRoomMode", "breakoutRoomStatus", "callFlag", "callPermissions", "callRecording", "callStartTime", "canDeleteConversation", "canEnableSIP", "canLeaveConversation", "canStartCall", "defaultPermissions", "description", "displayName", "hasCall", "hasPassword", "id", "isCustomAvatar", "isFavorite", "lastActivity", "lastCommonReadMessage", "lastPing", "lastReadMessage", "listable", "liveTranscriptionLanguageId", "lobbyState", "lobbyTimer", "mentionPermissions", "messageExpiration", "name", "notificationCalls", "notificationLevel", "objectId", "objectType", "participantFlags", "participantType", "permissions", "readOnly", "recordingConsent", "sessionId", "sipEnabled", "token", "type", "unreadMention", "unreadMentionDirect", "unreadMessages", "isArchived", "isImportant", "isSensitive", "lastPinnedId", "hiddenPinnedId", "hasScheduledMessages" ], "properties": { "actorId": { "type": "string", "description": "The unique identifier for the given actor type" }, "invitedActorId": { "type": "string", "description": "The cloud id of the invited user" }, "actorType": { "type": "string", "description": "Actor type of the current user (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-types))" }, "attendeeId": { "type": "integer", "format": "int64", "description": "Unique attendee id" }, "attendeePermissions": { "type": "integer", "format": "int64", "description": "Dedicated permissions for the current participant, if not `Custom` this are not the resulting permissions (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions))" }, "attendeePin": { "type": "string", "nullable": true, "description": "Unique dial-in authentication code for this user, when the conversation has SIP enabled (see `sipEnabled` attribute)" }, "avatarVersion": { "type": "string", "description": "Version of conversation avatar used to easier expiration of the avatar in case a moderator updates it, since the avatar endpoint should be cached for 24 hours. (only available with `avatar` capability)" }, "breakoutRoomMode": { "type": "integer", "format": "int64", "description": "Breakout room configuration mode (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#breakout-room-modes)) (only available with `breakout-rooms-v1` capability)" }, "breakoutRoomStatus": { "type": "integer", "format": "int64", "description": "Breakout room status (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#breakout-room-status)) (only available with `breakout-rooms-v1` capability)" }, "callFlag": { "type": "integer", "format": "int64", "description": "Combined flag of all participants in the current call (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#participant-in-call-flag), only available with `conversation-call-flags` capability)" }, "callPermissions": { "type": "integer", "format": "int64", "description": "Call permissions, if not `Custom` this are not the resulting permissions, if set they will reset after the end of the call (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions))" }, "callRecording": { "type": "integer", "format": "int64", "enum": [ 0, 1, 2, 3, 4, 5 ], "description": "Type of call recording (see [Constants - Call recording status](https://nextcloud-talk.readthedocs.io/en/latest/constants#call-recording-status)) (only available with `recording-v1` capability)" }, "callStartTime": { "type": "integer", "format": "int64", "description": "Timestamp when the call was started (only available with `recording-v1` capability)" }, "canDeleteConversation": { "type": "boolean", "description": "Flag if the user can delete the conversation for everyone (not possible without moderator permissions or in one-to-one conversations)" }, "canEnableSIP": { "type": "boolean", "description": "Whether the given user can enable SIP for this conversation. Note that when the token is not-numeric only, SIP can not be enabled even if the user is permitted and a moderator of the conversation" }, "canLeaveConversation": { "type": "boolean", "description": "Flag if the user can leave the conversation (not possible for the last user with moderator permissions)" }, "canStartCall": { "type": "boolean", "description": "Flag if the user can start a new call in this conversation (joining is always possible) (only available with `start-call-flag` capability)" }, "defaultPermissions": { "type": "integer", "format": "int64", "description": "Default permissions for new participants (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions))" }, "description": { "type": "string", "description": "Description of the conversation (can also be empty) (only available with `room-description` capability)" }, "displayName": { "type": "string", "description": "`name` if non-empty, otherwise it falls back to a list of participants" }, "hasCall": { "type": "boolean", "description": "Flag if the conversation has an active call" }, "hasPassword": { "type": "boolean", "description": "Flag if the conversation has a password" }, "id": { "type": "integer", "format": "int64", "description": "Numeric identifier of the conversation" }, "isCustomAvatar": { "type": "boolean", "description": "Flag if the conversation has a custom avatar (only available with `avatar` capability)" }, "isFavorite": { "type": "boolean", "description": "Flag if the conversation is favorited by the user" }, "lastActivity": { "type": "integer", "format": "int64", "description": "Timestamp of the last activity in the conversation, in seconds and UTC time zone" }, "lastCommonReadMessage": { "type": "integer", "format": "int64", "description": "ID of the last message read by every user that has read privacy set to public in a room. When the user themself has it set to private the value is `0` (only available with `chat-read-status` capability)" }, "lastMessage": { "$ref": "#/components/schemas/RoomLastMessage", "description": "Last message in a conversation if available, otherwise empty. **Note:** Even when given the message will not contain the `parent` or `reactionsSelf` attribute due to performance reasons" }, "lastPing": { "type": "integer", "format": "int64", "description": "Timestamp of the user's session making the request" }, "lastReadMessage": { "type": "integer", "format": "int64", "description": "ID of the last read message in a room (only available with `chat-read-marker` capability)" }, "listable": { "type": "integer", "format": "int64", "description": "Listable scope for the room (only available with `listable-rooms` capability)" }, "liveTranscriptionLanguageId": { "type": "string", "description": "ID of the language to use for live transcriptions in the room," }, "lobbyState": { "type": "integer", "format": "int64", "description": "Webinar lobby restriction (0-1), if the participant is a moderator they can always join the conversation (only available with `webinary-lobby` capability) (See [Webinar lobby states](https://nextcloud-talk.readthedocs.io/en/latest/constants#webinar-lobby-states))" }, "lobbyTimer": { "type": "integer", "format": "int64", "description": "Timestamp when the lobby will be automatically disabled (only available with `webinary-lobby` capability)" }, "mentionPermissions": { "type": "integer", "format": "int64", "enum": [ 0, 1 ], "description": "Whether all participants can mention using `@all` or only moderators (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#mention-permissions)) (only available with `mention-permissions` capability)" }, "messageExpiration": { "type": "integer", "format": "int64", "description": "The message expiration time in seconds in this chat. Zero if disabled. (only available with `message-expiration` capability)" }, "name": { "type": "string", "description": "Name of the conversation (can also be empty)" }, "notificationCalls": { "type": "integer", "format": "int64" }, "notificationLevel": { "type": "integer", "format": "int64", "description": "The notification level for the user (See [Participant notification levels](https://nextcloud-talk.readthedocs.io/en/latest/constants#participant-notification-levels))" }, "objectId": { "type": "string", "description": "See [Object types](https://nextcloud-talk.readthedocs.io/en/latest/constants#object-types) documentation for explanation" }, "objectType": { "type": "string", "description": "The type of object that the conversation is associated with (See [Object types](https://nextcloud-talk.readthedocs.io/en/latest/constants#object-types))" }, "participantFlags": { "type": "integer", "format": "int64", "description": "\"In call\" flags of the user's session making the request (only available with `in-call-flags` capability)" }, "participantType": { "type": "integer", "format": "int64", "description": "Permissions level of the current user" }, "permissions": { "type": "integer", "format": "int64", "description": "Combined final permissions for the current participant, permissions are picked in order of attendee then call then default and the first which is `Custom` will apply (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions))" }, "readOnly": { "type": "integer", "format": "int64", "description": "Read-only state for the current user (only available with `read-only-rooms` capability)" }, "recordingConsent": { "type": "integer", "format": "int64", "description": "Whether recording consent is required before joining a call (Only 0 and 1 will be returned, see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#recording-consent-required)) (only available with `recording-consent` capability)" }, "remoteServer": { "type": "string" }, "remoteToken": { "type": "string" }, "sessionId": { "type": "string", "description": "`'0'` if not connected, otherwise an up to 512 character long string that is the identifier of the user's session making the request. Should only be used to pre-check if the user joined already with this session, but this might be outdated by the time of usage, so better check via [Get list of participants in a conversation](https://nextcloud-talk.readthedocs.io/en/latest/participant/#get-list-of-participants-in-a-conversation)" }, "sipEnabled": { "type": "integer", "format": "int64", "description": "SIP enable status (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#sip-states))" }, "status": { "type": "string", "description": "Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status" }, "statusClearAt": { "type": "integer", "format": "int64", "nullable": true, "description": "Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status" }, "statusIcon": { "type": "string", "nullable": true, "description": "Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status" }, "statusMessage": { "type": "string", "nullable": true, "description": "Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status" }, "token": { "type": "string", "description": "Token identifier of the conversation which is used for further interaction" }, "type": { "type": "integer", "format": "int64", "description": "See list of conversation types in the [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants/#conversation-types)" }, "unreadMention": { "type": "boolean", "description": "Flag if the user was mentioned since their last visit" }, "unreadMentionDirect": { "type": "boolean", "description": "Flag if the user was mentioned directly (ignoring `@all` mentions) since their last visit (only available with `direct-mention-flag` capability)" }, "unreadMessages": { "type": "integer", "format": "int64", "description": "Number of unread chat messages in the conversation (only available with `chat-v2` capability)" }, "isArchived": { "type": "boolean", "description": "Flag if the conversation is archived by the user (only available with `archived-conversations-v2` capability)" }, "isImportant": { "type": "boolean", "description": "Required capability: `important-conversations`" }, "isSensitive": { "type": "boolean", "description": "Required capability: `sensitive-conversations`" }, "lastPinnedId": { "type": "integer", "format": "int64", "description": "Required capability: `pinned-messages`" }, "hiddenPinnedId": { "type": "integer", "format": "int64", "description": "Required capability: `pinned-messages`" }, "hasScheduledMessages": { "type": "boolean", "description": "Required capability: `scheduled-messages` (local)" } } }, "RoomLastMessage": { "anyOf": [ { "$ref": "#/components/schemas/ChatMessage" }, { "$ref": "#/components/schemas/ChatProxyMessage" } ] } } }, "paths": { "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}": { "get": { "operationId": "room-get-single-room", "summary": "Get a room", "tags": [ "room" ], "security": [ {}, { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v4" ], "default": "v4" } }, { "name": "token", "in": "path", "description": "Token of the room", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]{4,30}$" } }, { "name": "x-nextcloud-federation", "in": "header", "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", "schema": { "type": "string" } }, { "name": "talk-sipbridge-random", "in": "header", "description": "Random seed used to generate the request checksum", "schema": { "type": "string" } }, { "name": "talk-sipbridge-checksum", "in": "header", "description": "Checksum over the request body to verify authenticity from the Sipbridge", "schema": { "type": "string" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Room returned", "headers": { "X-Nextcloud-Talk-Hash": { "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Room" } } } } } } } }, "401": { "description": "SIP request invalid", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "404": { "description": "Room not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/pin/{pin}": { "get": { "operationId": "room-verify-dial-in-pin-deprecated", "summary": "Verify a dial-in PIN (SIP bridge)", "tags": [ "room" ], "security": [ {}, { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v4" ], "default": "v4" } }, { "name": "token", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]{4,30}$" } }, { "name": "pin", "in": "path", "description": "PIN the participant used to dial-in", "required": true, "schema": { "type": "string", "pattern": "^\\d{7,32}$" } }, { "name": "talk-sipbridge-random", "in": "header", "description": "Random seed used to generate the request checksum", "schema": { "type": "string" } }, { "name": "talk-sipbridge-checksum", "in": "header", "description": "Checksum over the request body to verify authenticity from the Sipbridge", "schema": { "type": "string" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Participant returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Room" } } } } } } } }, "401": { "description": "SIP request invalid", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "404": { "description": "Participant not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "501": { "description": "SIP dial-in is not configured", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/verify-dialin": { "post": { "operationId": "room-verify-dial-in-pin", "summary": "Verify a dial-in PIN (SIP bridge)", "tags": [ "room" ], "security": [ {}, { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "pin" ], "properties": { "pin": { "type": "string", "description": "PIN the participant used to dial-in" } } } } } }, "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v4" ], "default": "v4" } }, { "name": "token", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]{4,30}$" } }, { "name": "talk-sipbridge-random", "in": "header", "description": "Random seed used to generate the request checksum", "schema": { "type": "string" } }, { "name": "talk-sipbridge-checksum", "in": "header", "description": "Checksum over the request body to verify authenticity from the Sipbridge", "schema": { "type": "string" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Participant returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Room" } } } } } } } }, "401": { "description": "SIP request invalid", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "404": { "description": "Participant not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "501": { "description": "SIP dial-in is not configured", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/direct-dial-in": { "post": { "operationId": "room-direct-dial-in", "summary": "Direct dial-in (SIP bridge)", "description": "Required capability: `sip-direct-dialin`", "tags": [ "room" ], "security": [ {}, { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "phoneNumber", "caller" ], "properties": { "phoneNumber": { "type": "string", "description": "Phone number that is called" }, "caller": { "type": "string", "description": "Phone number of the person calling in" } } } } } }, "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v4" ], "default": "v4" } }, { "name": "talk-sipbridge-random", "in": "header", "description": "Random seed used to generate the request checksum", "schema": { "type": "string" } }, { "name": "talk-sipbridge-checksum", "in": "header", "description": "Checksum over the request body to verify authenticity from the Sipbridge", "schema": { "type": "string" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Call conversation created", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Room" } } } } } } } }, "401": { "description": "SIP request invalid", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "404": { "description": "Number is not assigned to any user", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "500": { "description": "Error occurred while creating conversation", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "501": { "description": "SIP dial-in is not configured", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/verify-dialout": { "post": { "operationId": "room-verify-dial-out-number", "summary": "Verify a dial-out number (SIP bridge)", "tags": [ "room" ], "security": [ {}, { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "number" ], "properties": { "number": { "type": "string", "description": "E164 formatted phone number" }, "options": { "type": "object", "default": {}, "description": "Additional details to verify the validity of the request", "properties": { "actorId": { "type": "string" }, "actorType": { "type": "string" }, "attendeeId": { "type": "integer", "format": "int64" } } } } } } } }, "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v4" ], "default": "v4" } }, { "name": "token", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]{4,30}$" } }, { "name": "talk-sipbridge-random", "in": "header", "description": "Random seed used to generate the request checksum", "schema": { "type": "string" } }, { "name": "talk-sipbridge-checksum", "in": "header", "description": "Checksum over the request body to verify authenticity from the Sipbridge", "schema": { "type": "string" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Participant created successfully", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Room" } } } } } } } }, "400": { "description": "Phone number and details could not be confirmed", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "401": { "description": "SIP request invalid", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "404": { "description": "Phone number is not invited as a participant", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "501": { "description": "SIP dial-out is not configured", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/open-dial-in": { "post": { "operationId": "room-create-guest-by-dial-in", "summary": "Create a guest by their dial-in", "tags": [ "room" ], "security": [ {}, { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v4" ], "default": "v4" } }, { "name": "token", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]{4,30}$" } }, { "name": "talk-sipbridge-random", "in": "header", "description": "Random seed used to generate the request checksum", "schema": { "type": "string" } }, { "name": "talk-sipbridge-checksum", "in": "header", "description": "Checksum over the request body to verify authenticity from the Sipbridge", "schema": { "type": "string" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Participant created successfully", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Room" } } } } } } } }, "400": { "description": "SIP not enabled", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "401": { "description": "SIP request invalid", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } }, "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/rejected-dialout": { "delete": { "operationId": "room-rejected-dial-out-request", "summary": "Reset call ID of a dial-out participant when the SIP gateway rejected it", "tags": [ "room" ], "security": [ {}, { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "apiVersion", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "v4" ], "default": "v4" } }, { "name": "token", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[a-z0-9]{4,30}$" } }, { "name": "callId", "in": "query", "description": "The call ID provided by the SIP bridge earlier to uniquely identify the call to terminate", "required": true, "schema": { "type": "string" } }, { "name": "options", "in": "query", "description": "Additional details to verify the validity of the request", "schema": { "type": "string" } }, { "name": "talk-sipbridge-random", "in": "header", "description": "Random seed used to generate the request checksum", "schema": { "type": "string" } }, { "name": "talk-sipbridge-checksum", "in": "header", "description": "Checksum over the request body to verify authenticity from the Sipbridge", "schema": { "type": "string" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Call ID reset", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "400": { "description": "Call ID mismatch or attendeeId not found in $options", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "401": { "description": "SIP request invalid", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "404": { "description": "Participant was not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } }, "501": { "description": "SIP dial-out is not configured", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "nullable": true } } } } } } } } } } } }, "tags": [] }