Files
nextcloud-spreed/openapi-backend-sipbridge.json
2025-07-01 17:24:00 +02:00

2426 lines
108 KiB
JSON

{
"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"
],
"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"
}
}
},
"chat": {
"type": "object",
"required": [
"max-length",
"read-privacy",
"has-translation-providers",
"has-translation-task-providers",
"typing-privacy",
"summary-threshold"
],
"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
}
}
},
"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"
}
}
}
]
},
"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",
"lobbyState",
"lobbyTimer",
"mentionPermissions",
"messageExpiration",
"name",
"notificationCalls",
"notificationLevel",
"objectId",
"objectType",
"participantFlags",
"participantType",
"permissions",
"readOnly",
"recordingConsent",
"sessionId",
"sipEnabled",
"token",
"type",
"unreadMention",
"unreadMentionDirect",
"unreadMessages",
"isArchived",
"isImportant",
"isSensitive"
],
"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)"
},
"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`"
}
}
},
"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/{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/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}/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": []
}