You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1894 lines
77 KiB

  1. {
  2. "openapi": "3.0.3",
  3. "info": {
  4. "title": "spreed-backend-sipbridge",
  5. "version": "0.0.1",
  6. "description": "Chat, video & audio-conferencing using WebRTC",
  7. "license": {
  8. "name": "agpl"
  9. }
  10. },
  11. "components": {
  12. "securitySchemes": {
  13. "basic_auth": {
  14. "type": "http",
  15. "scheme": "basic"
  16. },
  17. "bearer_auth": {
  18. "type": "http",
  19. "scheme": "bearer"
  20. }
  21. },
  22. "schemas": {
  23. "BaseMessage": {
  24. "type": "object",
  25. "required": [
  26. "actorDisplayName",
  27. "actorId",
  28. "actorType",
  29. "expirationTimestamp",
  30. "message",
  31. "messageParameters",
  32. "messageType",
  33. "systemMessage"
  34. ],
  35. "properties": {
  36. "actorDisplayName": {
  37. "type": "string"
  38. },
  39. "actorId": {
  40. "type": "string"
  41. },
  42. "actorType": {
  43. "type": "string"
  44. },
  45. "expirationTimestamp": {
  46. "type": "integer",
  47. "format": "int64"
  48. },
  49. "message": {
  50. "type": "string"
  51. },
  52. "messageParameters": {
  53. "type": "object",
  54. "additionalProperties": {
  55. "$ref": "#/components/schemas/RichObjectParameter"
  56. }
  57. },
  58. "messageType": {
  59. "type": "string"
  60. },
  61. "systemMessage": {
  62. "type": "string"
  63. }
  64. }
  65. },
  66. "Capabilities": {
  67. "type": "object",
  68. "required": [
  69. "features",
  70. "features-local",
  71. "config",
  72. "config-local",
  73. "version"
  74. ],
  75. "properties": {
  76. "features": {
  77. "type": "array",
  78. "items": {
  79. "type": "string"
  80. }
  81. },
  82. "features-local": {
  83. "type": "array",
  84. "items": {
  85. "type": "string"
  86. }
  87. },
  88. "config": {
  89. "type": "object",
  90. "required": [
  91. "attachments",
  92. "call",
  93. "chat",
  94. "conversations",
  95. "federation",
  96. "previews",
  97. "signaling"
  98. ],
  99. "properties": {
  100. "attachments": {
  101. "type": "object",
  102. "required": [
  103. "allowed"
  104. ],
  105. "properties": {
  106. "allowed": {
  107. "type": "boolean"
  108. },
  109. "folder": {
  110. "type": "string"
  111. }
  112. }
  113. },
  114. "call": {
  115. "type": "object",
  116. "required": [
  117. "enabled",
  118. "breakout-rooms",
  119. "recording",
  120. "recording-consent",
  121. "supported-reactions",
  122. "predefined-backgrounds",
  123. "can-upload-background",
  124. "sip-enabled",
  125. "sip-dialout-enabled",
  126. "can-enable-sip"
  127. ],
  128. "properties": {
  129. "enabled": {
  130. "type": "boolean"
  131. },
  132. "breakout-rooms": {
  133. "type": "boolean"
  134. },
  135. "recording": {
  136. "type": "boolean"
  137. },
  138. "recording-consent": {
  139. "type": "integer",
  140. "format": "int64"
  141. },
  142. "supported-reactions": {
  143. "type": "array",
  144. "items": {
  145. "type": "string"
  146. }
  147. },
  148. "predefined-backgrounds": {
  149. "type": "array",
  150. "items": {
  151. "type": "string"
  152. }
  153. },
  154. "can-upload-background": {
  155. "type": "boolean"
  156. },
  157. "sip-enabled": {
  158. "type": "boolean"
  159. },
  160. "sip-dialout-enabled": {
  161. "type": "boolean"
  162. },
  163. "can-enable-sip": {
  164. "type": "boolean"
  165. }
  166. }
  167. },
  168. "chat": {
  169. "type": "object",
  170. "required": [
  171. "max-length",
  172. "read-privacy",
  173. "has-translation-providers",
  174. "typing-privacy"
  175. ],
  176. "properties": {
  177. "max-length": {
  178. "type": "integer",
  179. "format": "int64"
  180. },
  181. "read-privacy": {
  182. "type": "integer",
  183. "format": "int64"
  184. },
  185. "has-translation-providers": {
  186. "type": "boolean"
  187. },
  188. "typing-privacy": {
  189. "type": "integer",
  190. "format": "int64"
  191. }
  192. }
  193. },
  194. "conversations": {
  195. "type": "object",
  196. "required": [
  197. "can-create"
  198. ],
  199. "properties": {
  200. "can-create": {
  201. "type": "boolean"
  202. }
  203. }
  204. },
  205. "federation": {
  206. "type": "object",
  207. "required": [
  208. "enabled",
  209. "incoming-enabled",
  210. "outgoing-enabled",
  211. "only-trusted-servers"
  212. ],
  213. "properties": {
  214. "enabled": {
  215. "type": "boolean"
  216. },
  217. "incoming-enabled": {
  218. "type": "boolean"
  219. },
  220. "outgoing-enabled": {
  221. "type": "boolean"
  222. },
  223. "only-trusted-servers": {
  224. "type": "boolean"
  225. }
  226. }
  227. },
  228. "previews": {
  229. "type": "object",
  230. "required": [
  231. "max-gif-size"
  232. ],
  233. "properties": {
  234. "max-gif-size": {
  235. "type": "integer",
  236. "format": "int64"
  237. }
  238. }
  239. },
  240. "signaling": {
  241. "type": "object",
  242. "required": [
  243. "session-ping-limit"
  244. ],
  245. "properties": {
  246. "session-ping-limit": {
  247. "type": "integer",
  248. "format": "int64"
  249. },
  250. "hello-v2-token-key": {
  251. "type": "string"
  252. }
  253. }
  254. }
  255. }
  256. },
  257. "config-local": {
  258. "type": "object",
  259. "additionalProperties": {
  260. "type": "array",
  261. "items": {
  262. "type": "string"
  263. }
  264. }
  265. },
  266. "version": {
  267. "type": "string"
  268. }
  269. }
  270. },
  271. "ChatMessage": {
  272. "allOf": [
  273. {
  274. "$ref": "#/components/schemas/BaseMessage"
  275. },
  276. {
  277. "type": "object",
  278. "required": [
  279. "id",
  280. "isReplyable",
  281. "markdown",
  282. "reactions",
  283. "referenceId",
  284. "timestamp",
  285. "token"
  286. ],
  287. "properties": {
  288. "deleted": {
  289. "type": "boolean",
  290. "enum": [
  291. true
  292. ]
  293. },
  294. "id": {
  295. "type": "integer",
  296. "format": "int64"
  297. },
  298. "isReplyable": {
  299. "type": "boolean"
  300. },
  301. "markdown": {
  302. "type": "boolean"
  303. },
  304. "reactions": {
  305. "type": "object",
  306. "additionalProperties": {
  307. "type": "integer",
  308. "format": "int64"
  309. }
  310. },
  311. "reactionsSelf": {
  312. "type": "array",
  313. "items": {
  314. "type": "string"
  315. }
  316. },
  317. "referenceId": {
  318. "type": "string"
  319. },
  320. "timestamp": {
  321. "type": "integer",
  322. "format": "int64"
  323. },
  324. "token": {
  325. "type": "string"
  326. },
  327. "lastEditActorDisplayName": {
  328. "type": "string"
  329. },
  330. "lastEditActorId": {
  331. "type": "string"
  332. },
  333. "lastEditActorType": {
  334. "type": "string"
  335. },
  336. "lastEditTimestamp": {
  337. "type": "integer",
  338. "format": "int64"
  339. },
  340. "silent": {
  341. "type": "boolean"
  342. }
  343. }
  344. }
  345. ]
  346. },
  347. "ChatProxyMessage": {
  348. "$ref": "#/components/schemas/BaseMessage"
  349. },
  350. "OCSMeta": {
  351. "type": "object",
  352. "required": [
  353. "status",
  354. "statuscode"
  355. ],
  356. "properties": {
  357. "status": {
  358. "type": "string"
  359. },
  360. "statuscode": {
  361. "type": "integer"
  362. },
  363. "message": {
  364. "type": "string"
  365. },
  366. "totalitems": {
  367. "type": "string"
  368. },
  369. "itemsperpage": {
  370. "type": "string"
  371. }
  372. }
  373. },
  374. "PublicCapabilities": {
  375. "oneOf": [
  376. {
  377. "type": "object",
  378. "required": [
  379. "spreed"
  380. ],
  381. "properties": {
  382. "spreed": {
  383. "$ref": "#/components/schemas/Capabilities"
  384. }
  385. }
  386. },
  387. {
  388. "type": "array",
  389. "maxItems": 0
  390. }
  391. ]
  392. },
  393. "RichObjectParameter": {
  394. "type": "object",
  395. "required": [
  396. "type",
  397. "id",
  398. "name"
  399. ],
  400. "properties": {
  401. "type": {
  402. "type": "string"
  403. },
  404. "id": {
  405. "type": "string"
  406. },
  407. "name": {
  408. "type": "string"
  409. },
  410. "server": {
  411. "type": "string"
  412. },
  413. "link": {
  414. "type": "string"
  415. },
  416. "call-type": {
  417. "type": "string",
  418. "enum": [
  419. "one2one",
  420. "group",
  421. "public"
  422. ]
  423. },
  424. "icon-url": {
  425. "type": "string"
  426. },
  427. "message-id": {
  428. "type": "string"
  429. },
  430. "boardname": {
  431. "type": "string"
  432. },
  433. "stackname": {
  434. "type": "string"
  435. },
  436. "size": {
  437. "type": "string"
  438. },
  439. "path": {
  440. "type": "string"
  441. },
  442. "mimetype": {
  443. "type": "string"
  444. },
  445. "preview-available": {
  446. "type": "string",
  447. "enum": [
  448. "yes",
  449. "no"
  450. ]
  451. },
  452. "mtime": {
  453. "type": "string"
  454. },
  455. "latitude": {
  456. "type": "string"
  457. },
  458. "longitude": {
  459. "type": "string"
  460. },
  461. "description": {
  462. "type": "string"
  463. },
  464. "thumb": {
  465. "type": "string"
  466. },
  467. "website": {
  468. "type": "string"
  469. },
  470. "visibility": {
  471. "type": "string",
  472. "enum": [
  473. "0",
  474. "1"
  475. ]
  476. },
  477. "assignable": {
  478. "type": "string",
  479. "enum": [
  480. "0",
  481. "1"
  482. ]
  483. },
  484. "conversation": {
  485. "type": "string"
  486. },
  487. "etag": {
  488. "type": "string"
  489. },
  490. "permissions": {
  491. "type": "string"
  492. },
  493. "width": {
  494. "type": "string"
  495. },
  496. "height": {
  497. "type": "string"
  498. }
  499. }
  500. },
  501. "Room": {
  502. "type": "object",
  503. "required": [
  504. "actorId",
  505. "actorType",
  506. "attendeeId",
  507. "attendeePermissions",
  508. "attendeePin",
  509. "avatarVersion",
  510. "breakoutRoomMode",
  511. "breakoutRoomStatus",
  512. "callFlag",
  513. "callPermissions",
  514. "callRecording",
  515. "callStartTime",
  516. "canDeleteConversation",
  517. "canEnableSIP",
  518. "canLeaveConversation",
  519. "canStartCall",
  520. "defaultPermissions",
  521. "description",
  522. "displayName",
  523. "hasCall",
  524. "hasPassword",
  525. "id",
  526. "isCustomAvatar",
  527. "isFavorite",
  528. "lastActivity",
  529. "lastCommonReadMessage",
  530. "lastMessage",
  531. "lastPing",
  532. "lastReadMessage",
  533. "listable",
  534. "lobbyState",
  535. "lobbyTimer",
  536. "mentionPermissions",
  537. "messageExpiration",
  538. "name",
  539. "notificationCalls",
  540. "notificationLevel",
  541. "objectId",
  542. "objectType",
  543. "participantFlags",
  544. "participantType",
  545. "permissions",
  546. "readOnly",
  547. "recordingConsent",
  548. "sessionId",
  549. "sipEnabled",
  550. "token",
  551. "type",
  552. "unreadMention",
  553. "unreadMentionDirect",
  554. "unreadMessages"
  555. ],
  556. "properties": {
  557. "actorId": {
  558. "type": "string"
  559. },
  560. "actorType": {
  561. "type": "string"
  562. },
  563. "attendeeId": {
  564. "type": "integer",
  565. "format": "int64"
  566. },
  567. "attendeePermissions": {
  568. "type": "integer",
  569. "format": "int64"
  570. },
  571. "attendeePin": {
  572. "type": "string",
  573. "nullable": true
  574. },
  575. "avatarVersion": {
  576. "type": "string"
  577. },
  578. "breakoutRoomMode": {
  579. "type": "integer",
  580. "format": "int64"
  581. },
  582. "breakoutRoomStatus": {
  583. "type": "integer",
  584. "format": "int64"
  585. },
  586. "callFlag": {
  587. "type": "integer",
  588. "format": "int64"
  589. },
  590. "callPermissions": {
  591. "type": "integer",
  592. "format": "int64"
  593. },
  594. "callRecording": {
  595. "type": "integer",
  596. "format": "int64"
  597. },
  598. "callStartTime": {
  599. "type": "integer",
  600. "format": "int64"
  601. },
  602. "canDeleteConversation": {
  603. "type": "boolean"
  604. },
  605. "canEnableSIP": {
  606. "type": "boolean"
  607. },
  608. "canLeaveConversation": {
  609. "type": "boolean"
  610. },
  611. "canStartCall": {
  612. "type": "boolean"
  613. },
  614. "defaultPermissions": {
  615. "type": "integer",
  616. "format": "int64"
  617. },
  618. "description": {
  619. "type": "string"
  620. },
  621. "displayName": {
  622. "type": "string"
  623. },
  624. "hasCall": {
  625. "type": "boolean"
  626. },
  627. "hasPassword": {
  628. "type": "boolean"
  629. },
  630. "id": {
  631. "type": "integer",
  632. "format": "int64"
  633. },
  634. "isCustomAvatar": {
  635. "type": "boolean"
  636. },
  637. "isFavorite": {
  638. "type": "boolean"
  639. },
  640. "lastActivity": {
  641. "type": "integer",
  642. "format": "int64"
  643. },
  644. "lastCommonReadMessage": {
  645. "type": "integer",
  646. "format": "int64"
  647. },
  648. "lastMessage": {
  649. "anyOf": [
  650. {
  651. "$ref": "#/components/schemas/RoomLastMessage"
  652. },
  653. {
  654. "type": "array",
  655. "maxItems": 0
  656. }
  657. ]
  658. },
  659. "lastPing": {
  660. "type": "integer",
  661. "format": "int64"
  662. },
  663. "lastReadMessage": {
  664. "type": "integer",
  665. "format": "int64"
  666. },
  667. "listable": {
  668. "type": "integer",
  669. "format": "int64"
  670. },
  671. "lobbyState": {
  672. "type": "integer",
  673. "format": "int64"
  674. },
  675. "lobbyTimer": {
  676. "type": "integer",
  677. "format": "int64"
  678. },
  679. "mentionPermissions": {
  680. "type": "integer",
  681. "format": "int64"
  682. },
  683. "messageExpiration": {
  684. "type": "integer",
  685. "format": "int64"
  686. },
  687. "name": {
  688. "type": "string"
  689. },
  690. "notificationCalls": {
  691. "type": "integer",
  692. "format": "int64"
  693. },
  694. "notificationLevel": {
  695. "type": "integer",
  696. "format": "int64"
  697. },
  698. "objectId": {
  699. "type": "string"
  700. },
  701. "objectType": {
  702. "type": "string"
  703. },
  704. "participantFlags": {
  705. "type": "integer",
  706. "format": "int64"
  707. },
  708. "participantType": {
  709. "type": "integer",
  710. "format": "int64"
  711. },
  712. "permissions": {
  713. "type": "integer",
  714. "format": "int64"
  715. },
  716. "readOnly": {
  717. "type": "integer",
  718. "format": "int64"
  719. },
  720. "recordingConsent": {
  721. "type": "integer",
  722. "format": "int64"
  723. },
  724. "sessionId": {
  725. "type": "string"
  726. },
  727. "sipEnabled": {
  728. "type": "integer",
  729. "format": "int64"
  730. },
  731. "status": {
  732. "type": "string"
  733. },
  734. "statusClearAt": {
  735. "type": "integer",
  736. "format": "int64",
  737. "nullable": true
  738. },
  739. "statusIcon": {
  740. "type": "string",
  741. "nullable": true
  742. },
  743. "statusMessage": {
  744. "type": "string",
  745. "nullable": true
  746. },
  747. "token": {
  748. "type": "string"
  749. },
  750. "type": {
  751. "type": "integer",
  752. "format": "int64"
  753. },
  754. "unreadMention": {
  755. "type": "boolean"
  756. },
  757. "unreadMentionDirect": {
  758. "type": "boolean"
  759. },
  760. "unreadMessages": {
  761. "type": "integer",
  762. "format": "int64"
  763. }
  764. }
  765. },
  766. "RoomLastMessage": {
  767. "anyOf": [
  768. {
  769. "$ref": "#/components/schemas/ChatMessage"
  770. },
  771. {
  772. "$ref": "#/components/schemas/ChatProxyMessage"
  773. }
  774. ]
  775. }
  776. }
  777. },
  778. "paths": {
  779. "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}": {
  780. "get": {
  781. "operationId": "room-get-single-room",
  782. "summary": "Get a room",
  783. "tags": [
  784. "room"
  785. ],
  786. "security": [
  787. {},
  788. {
  789. "bearer_auth": []
  790. },
  791. {
  792. "basic_auth": []
  793. }
  794. ],
  795. "parameters": [
  796. {
  797. "name": "apiVersion",
  798. "in": "path",
  799. "required": true,
  800. "schema": {
  801. "type": "string",
  802. "enum": [
  803. "v4"
  804. ],
  805. "default": "v4"
  806. }
  807. },
  808. {
  809. "name": "token",
  810. "in": "path",
  811. "description": "Token of the room",
  812. "required": true,
  813. "schema": {
  814. "type": "string",
  815. "pattern": "^[a-z0-9]{4,30}$"
  816. }
  817. },
  818. {
  819. "name": "OCS-APIRequest",
  820. "in": "header",
  821. "description": "Required to be true for the API request to pass",
  822. "required": true,
  823. "schema": {
  824. "type": "boolean",
  825. "default": true
  826. }
  827. }
  828. ],
  829. "responses": {
  830. "200": {
  831. "description": "Room returned",
  832. "headers": {
  833. "X-Nextcloud-Talk-Hash": {
  834. "schema": {
  835. "type": "string"
  836. }
  837. }
  838. },
  839. "content": {
  840. "application/json": {
  841. "schema": {
  842. "type": "object",
  843. "required": [
  844. "ocs"
  845. ],
  846. "properties": {
  847. "ocs": {
  848. "type": "object",
  849. "required": [
  850. "meta",
  851. "data"
  852. ],
  853. "properties": {
  854. "meta": {
  855. "$ref": "#/components/schemas/OCSMeta"
  856. },
  857. "data": {
  858. "$ref": "#/components/schemas/Room"
  859. }
  860. }
  861. }
  862. }
  863. }
  864. }
  865. }
  866. },
  867. "401": {
  868. "description": "SIP request invalid",
  869. "content": {
  870. "application/json": {
  871. "schema": {
  872. "type": "object",
  873. "required": [
  874. "ocs"
  875. ],
  876. "properties": {
  877. "ocs": {
  878. "type": "object",
  879. "required": [
  880. "meta",
  881. "data"
  882. ],
  883. "properties": {
  884. "meta": {
  885. "$ref": "#/components/schemas/OCSMeta"
  886. },
  887. "data": {
  888. "nullable": true
  889. }
  890. }
  891. }
  892. }
  893. }
  894. }
  895. }
  896. },
  897. "404": {
  898. "description": "Room not found",
  899. "content": {
  900. "application/json": {
  901. "schema": {
  902. "type": "object",
  903. "required": [
  904. "ocs"
  905. ],
  906. "properties": {
  907. "ocs": {
  908. "type": "object",
  909. "required": [
  910. "meta",
  911. "data"
  912. ],
  913. "properties": {
  914. "meta": {
  915. "$ref": "#/components/schemas/OCSMeta"
  916. },
  917. "data": {
  918. "nullable": true
  919. }
  920. }
  921. }
  922. }
  923. }
  924. }
  925. }
  926. }
  927. }
  928. }
  929. },
  930. "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/pin/{pin}": {
  931. "get": {
  932. "operationId": "room-verify-dial-in-pin-deprecated",
  933. "summary": "Verify a dial-in PIN (SIP bridge)",
  934. "tags": [
  935. "room"
  936. ],
  937. "security": [
  938. {},
  939. {
  940. "bearer_auth": []
  941. },
  942. {
  943. "basic_auth": []
  944. }
  945. ],
  946. "parameters": [
  947. {
  948. "name": "apiVersion",
  949. "in": "path",
  950. "required": true,
  951. "schema": {
  952. "type": "string",
  953. "enum": [
  954. "v4"
  955. ],
  956. "default": "v4"
  957. }
  958. },
  959. {
  960. "name": "token",
  961. "in": "path",
  962. "required": true,
  963. "schema": {
  964. "type": "string",
  965. "pattern": "^[a-z0-9]{4,30}$"
  966. }
  967. },
  968. {
  969. "name": "pin",
  970. "in": "path",
  971. "description": "PIN the participant used to dial-in",
  972. "required": true,
  973. "schema": {
  974. "type": "string",
  975. "pattern": "^\\d{7,32}$"
  976. }
  977. },
  978. {
  979. "name": "OCS-APIRequest",
  980. "in": "header",
  981. "description": "Required to be true for the API request to pass",
  982. "required": true,
  983. "schema": {
  984. "type": "boolean",
  985. "default": true
  986. }
  987. }
  988. ],
  989. "responses": {
  990. "200": {
  991. "description": "Participant returned",
  992. "content": {
  993. "application/json": {
  994. "schema": {
  995. "type": "object",
  996. "required": [
  997. "ocs"
  998. ],
  999. "properties": {
  1000. "ocs": {
  1001. "type": "object",
  1002. "required": [
  1003. "meta",
  1004. "data"
  1005. ],
  1006. "properties": {
  1007. "meta": {
  1008. "$ref": "#/components/schemas/OCSMeta"
  1009. },
  1010. "data": {
  1011. "$ref": "#/components/schemas/Room"
  1012. }
  1013. }
  1014. }
  1015. }
  1016. }
  1017. }
  1018. }
  1019. },
  1020. "401": {
  1021. "description": "SIP request invalid",
  1022. "content": {
  1023. "application/json": {
  1024. "schema": {
  1025. "type": "object",
  1026. "required": [
  1027. "ocs"
  1028. ],
  1029. "properties": {
  1030. "ocs": {
  1031. "type": "object",
  1032. "required": [
  1033. "meta",
  1034. "data"
  1035. ],
  1036. "properties": {
  1037. "meta": {
  1038. "$ref": "#/components/schemas/OCSMeta"
  1039. },
  1040. "data": {}
  1041. }
  1042. }
  1043. }
  1044. }
  1045. }
  1046. }
  1047. },
  1048. "404": {
  1049. "description": "Participant not found",
  1050. "content": {
  1051. "application/json": {
  1052. "schema": {
  1053. "type": "object",
  1054. "required": [
  1055. "ocs"
  1056. ],
  1057. "properties": {
  1058. "ocs": {
  1059. "type": "object",
  1060. "required": [
  1061. "meta",
  1062. "data"
  1063. ],
  1064. "properties": {
  1065. "meta": {
  1066. "$ref": "#/components/schemas/OCSMeta"
  1067. },
  1068. "data": {}
  1069. }
  1070. }
  1071. }
  1072. }
  1073. }
  1074. }
  1075. },
  1076. "501": {
  1077. "description": "SIP dial-in is not configured",
  1078. "content": {
  1079. "application/json": {
  1080. "schema": {
  1081. "type": "object",
  1082. "required": [
  1083. "ocs"
  1084. ],
  1085. "properties": {
  1086. "ocs": {
  1087. "type": "object",
  1088. "required": [
  1089. "meta",
  1090. "data"
  1091. ],
  1092. "properties": {
  1093. "meta": {
  1094. "$ref": "#/components/schemas/OCSMeta"
  1095. },
  1096. "data": {}
  1097. }
  1098. }
  1099. }
  1100. }
  1101. }
  1102. }
  1103. }
  1104. }
  1105. }
  1106. },
  1107. "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/verify-dialin": {
  1108. "post": {
  1109. "operationId": "room-verify-dial-in-pin",
  1110. "summary": "Verify a dial-in PIN (SIP bridge)",
  1111. "tags": [
  1112. "room"
  1113. ],
  1114. "security": [
  1115. {},
  1116. {
  1117. "bearer_auth": []
  1118. },
  1119. {
  1120. "basic_auth": []
  1121. }
  1122. ],
  1123. "requestBody": {
  1124. "required": true,
  1125. "content": {
  1126. "application/json": {
  1127. "schema": {
  1128. "type": "object",
  1129. "required": [
  1130. "pin"
  1131. ],
  1132. "properties": {
  1133. "pin": {
  1134. "type": "string",
  1135. "description": "PIN the participant used to dial-in"
  1136. }
  1137. }
  1138. }
  1139. }
  1140. }
  1141. },
  1142. "parameters": [
  1143. {
  1144. "name": "apiVersion",
  1145. "in": "path",
  1146. "required": true,
  1147. "schema": {
  1148. "type": "string",
  1149. "enum": [
  1150. "v4"
  1151. ],
  1152. "default": "v4"
  1153. }
  1154. },
  1155. {
  1156. "name": "token",
  1157. "in": "path",
  1158. "required": true,
  1159. "schema": {
  1160. "type": "string",
  1161. "pattern": "^[a-z0-9]{4,30}$"
  1162. }
  1163. },
  1164. {
  1165. "name": "OCS-APIRequest",
  1166. "in": "header",
  1167. "description": "Required to be true for the API request to pass",
  1168. "required": true,
  1169. "schema": {
  1170. "type": "boolean",
  1171. "default": true
  1172. }
  1173. }
  1174. ],
  1175. "responses": {
  1176. "200": {
  1177. "description": "Participant returned",
  1178. "content": {
  1179. "application/json": {
  1180. "schema": {
  1181. "type": "object",
  1182. "required": [
  1183. "ocs"
  1184. ],
  1185. "properties": {
  1186. "ocs": {
  1187. "type": "object",
  1188. "required": [
  1189. "meta",
  1190. "data"
  1191. ],
  1192. "properties": {
  1193. "meta": {
  1194. "$ref": "#/components/schemas/OCSMeta"
  1195. },
  1196. "data": {
  1197. "$ref": "#/components/schemas/Room"
  1198. }
  1199. }
  1200. }
  1201. }
  1202. }
  1203. }
  1204. }
  1205. },
  1206. "401": {
  1207. "description": "SIP request invalid",
  1208. "content": {
  1209. "application/json": {
  1210. "schema": {
  1211. "type": "object",
  1212. "required": [
  1213. "ocs"
  1214. ],
  1215. "properties": {
  1216. "ocs": {
  1217. "type": "object",
  1218. "required": [
  1219. "meta",
  1220. "data"
  1221. ],
  1222. "properties": {
  1223. "meta": {
  1224. "$ref": "#/components/schemas/OCSMeta"
  1225. },
  1226. "data": {}
  1227. }
  1228. }
  1229. }
  1230. }
  1231. }
  1232. }
  1233. },
  1234. "404": {
  1235. "description": "Participant not found",
  1236. "content": {
  1237. "application/json": {
  1238. "schema": {
  1239. "type": "object",
  1240. "required": [
  1241. "ocs"
  1242. ],
  1243. "properties": {
  1244. "ocs": {
  1245. "type": "object",
  1246. "required": [
  1247. "meta",
  1248. "data"
  1249. ],
  1250. "properties": {
  1251. "meta": {
  1252. "$ref": "#/components/schemas/OCSMeta"
  1253. },
  1254. "data": {}
  1255. }
  1256. }
  1257. }
  1258. }
  1259. }
  1260. }
  1261. },
  1262. "501": {
  1263. "description": "SIP dial-in is not configured",
  1264. "content": {
  1265. "application/json": {
  1266. "schema": {
  1267. "type": "object",
  1268. "required": [
  1269. "ocs"
  1270. ],
  1271. "properties": {
  1272. "ocs": {
  1273. "type": "object",
  1274. "required": [
  1275. "meta",
  1276. "data"
  1277. ],
  1278. "properties": {
  1279. "meta": {
  1280. "$ref": "#/components/schemas/OCSMeta"
  1281. },
  1282. "data": {}
  1283. }
  1284. }
  1285. }
  1286. }
  1287. }
  1288. }
  1289. }
  1290. }
  1291. }
  1292. },
  1293. "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/verify-dialout": {
  1294. "post": {
  1295. "operationId": "room-verify-dial-out-number",
  1296. "summary": "Verify a dial-out number (SIP bridge)",
  1297. "tags": [
  1298. "room"
  1299. ],
  1300. "security": [
  1301. {},
  1302. {
  1303. "bearer_auth": []
  1304. },
  1305. {
  1306. "basic_auth": []
  1307. }
  1308. ],
  1309. "requestBody": {
  1310. "required": true,
  1311. "content": {
  1312. "application/json": {
  1313. "schema": {
  1314. "type": "object",
  1315. "required": [
  1316. "number"
  1317. ],
  1318. "properties": {
  1319. "number": {
  1320. "type": "string",
  1321. "description": "E164 formatted phone number"
  1322. },
  1323. "options": {
  1324. "type": "object",
  1325. "default": [],
  1326. "description": "Additional details to verify the validity of the request",
  1327. "properties": {
  1328. "actorId": {
  1329. "type": "string"
  1330. },
  1331. "actorType": {
  1332. "type": "string"
  1333. },
  1334. "attendeeId": {
  1335. "type": "integer",
  1336. "format": "int64"
  1337. }
  1338. }
  1339. }
  1340. }
  1341. }
  1342. }
  1343. }
  1344. },
  1345. "parameters": [
  1346. {
  1347. "name": "apiVersion",
  1348. "in": "path",
  1349. "required": true,
  1350. "schema": {
  1351. "type": "string",
  1352. "enum": [
  1353. "v4"
  1354. ],
  1355. "default": "v4"
  1356. }
  1357. },
  1358. {
  1359. "name": "token",
  1360. "in": "path",
  1361. "required": true,
  1362. "schema": {
  1363. "type": "string",
  1364. "pattern": "^[a-z0-9]{4,30}$"
  1365. }
  1366. },
  1367. {
  1368. "name": "OCS-APIRequest",
  1369. "in": "header",
  1370. "description": "Required to be true for the API request to pass",
  1371. "required": true,
  1372. "schema": {
  1373. "type": "boolean",
  1374. "default": true
  1375. }
  1376. }
  1377. ],
  1378. "responses": {
  1379. "200": {
  1380. "description": "Participant created successfully",
  1381. "content": {
  1382. "application/json": {
  1383. "schema": {
  1384. "type": "object",
  1385. "required": [
  1386. "ocs"
  1387. ],
  1388. "properties": {
  1389. "ocs": {
  1390. "type": "object",
  1391. "required": [
  1392. "meta",
  1393. "data"
  1394. ],
  1395. "properties": {
  1396. "meta": {
  1397. "$ref": "#/components/schemas/OCSMeta"
  1398. },
  1399. "data": {
  1400. "$ref": "#/components/schemas/Room"
  1401. }
  1402. }
  1403. }
  1404. }
  1405. }
  1406. }
  1407. }
  1408. },
  1409. "400": {
  1410. "description": "Phone number and details could not be confirmed",
  1411. "content": {
  1412. "application/json": {
  1413. "schema": {
  1414. "type": "object",
  1415. "required": [
  1416. "ocs"
  1417. ],
  1418. "properties": {
  1419. "ocs": {
  1420. "type": "object",
  1421. "required": [
  1422. "meta",
  1423. "data"
  1424. ],
  1425. "properties": {
  1426. "meta": {
  1427. "$ref": "#/components/schemas/OCSMeta"
  1428. },
  1429. "data": {}
  1430. }
  1431. }
  1432. }
  1433. }
  1434. }
  1435. }
  1436. },
  1437. "401": {
  1438. "description": "SIP request invalid",
  1439. "content": {
  1440. "application/json": {
  1441. "schema": {
  1442. "type": "object",
  1443. "required": [
  1444. "ocs"
  1445. ],
  1446. "properties": {
  1447. "ocs": {
  1448. "type": "object",
  1449. "required": [
  1450. "meta",
  1451. "data"
  1452. ],
  1453. "properties": {
  1454. "meta": {
  1455. "$ref": "#/components/schemas/OCSMeta"
  1456. },
  1457. "data": {}
  1458. }
  1459. }
  1460. }
  1461. }
  1462. }
  1463. }
  1464. },
  1465. "404": {
  1466. "description": "Phone number is not invited as a participant",
  1467. "content": {
  1468. "application/json": {
  1469. "schema": {
  1470. "type": "object",
  1471. "required": [
  1472. "ocs"
  1473. ],
  1474. "properties": {
  1475. "ocs": {
  1476. "type": "object",
  1477. "required": [
  1478. "meta",
  1479. "data"
  1480. ],
  1481. "properties": {
  1482. "meta": {
  1483. "$ref": "#/components/schemas/OCSMeta"
  1484. },
  1485. "data": {}
  1486. }
  1487. }
  1488. }
  1489. }
  1490. }
  1491. }
  1492. },
  1493. "501": {
  1494. "description": "SIP dial-out is not configured",
  1495. "content": {
  1496. "application/json": {
  1497. "schema": {
  1498. "type": "object",
  1499. "required": [
  1500. "ocs"
  1501. ],
  1502. "properties": {
  1503. "ocs": {
  1504. "type": "object",
  1505. "required": [
  1506. "meta",
  1507. "data"
  1508. ],
  1509. "properties": {
  1510. "meta": {
  1511. "$ref": "#/components/schemas/OCSMeta"
  1512. },
  1513. "data": {}
  1514. }
  1515. }
  1516. }
  1517. }
  1518. }
  1519. }
  1520. }
  1521. }
  1522. }
  1523. },
  1524. "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/open-dial-in": {
  1525. "post": {
  1526. "operationId": "room-create-guest-by-dial-in",
  1527. "summary": "Create a guest by their dial-in",
  1528. "tags": [
  1529. "room"
  1530. ],
  1531. "security": [
  1532. {},
  1533. {
  1534. "bearer_auth": []
  1535. },
  1536. {
  1537. "basic_auth": []
  1538. }
  1539. ],
  1540. "parameters": [
  1541. {
  1542. "name": "apiVersion",
  1543. "in": "path",
  1544. "required": true,
  1545. "schema": {
  1546. "type": "string",
  1547. "enum": [
  1548. "v4"
  1549. ],
  1550. "default": "v4"
  1551. }
  1552. },
  1553. {
  1554. "name": "token",
  1555. "in": "path",
  1556. "required": true,
  1557. "schema": {
  1558. "type": "string",
  1559. "pattern": "^[a-z0-9]{4,30}$"
  1560. }
  1561. },
  1562. {
  1563. "name": "OCS-APIRequest",
  1564. "in": "header",
  1565. "description": "Required to be true for the API request to pass",
  1566. "required": true,
  1567. "schema": {
  1568. "type": "boolean",
  1569. "default": true
  1570. }
  1571. }
  1572. ],
  1573. "responses": {
  1574. "200": {
  1575. "description": "Participant created successfully",
  1576. "content": {
  1577. "application/json": {
  1578. "schema": {
  1579. "type": "object",
  1580. "required": [
  1581. "ocs"
  1582. ],
  1583. "properties": {
  1584. "ocs": {
  1585. "type": "object",
  1586. "required": [
  1587. "meta",
  1588. "data"
  1589. ],
  1590. "properties": {
  1591. "meta": {
  1592. "$ref": "#/components/schemas/OCSMeta"
  1593. },
  1594. "data": {
  1595. "$ref": "#/components/schemas/Room"
  1596. }
  1597. }
  1598. }
  1599. }
  1600. }
  1601. }
  1602. }
  1603. },
  1604. "400": {
  1605. "description": "SIP not enabled",
  1606. "content": {
  1607. "application/json": {
  1608. "schema": {
  1609. "type": "object",
  1610. "required": [
  1611. "ocs"
  1612. ],
  1613. "properties": {
  1614. "ocs": {
  1615. "type": "object",
  1616. "required": [
  1617. "meta",
  1618. "data"
  1619. ],
  1620. "properties": {
  1621. "meta": {
  1622. "$ref": "#/components/schemas/OCSMeta"
  1623. },
  1624. "data": {}
  1625. }
  1626. }
  1627. }
  1628. }
  1629. }
  1630. }
  1631. },
  1632. "401": {
  1633. "description": "SIP request invalid",
  1634. "content": {
  1635. "application/json": {
  1636. "schema": {
  1637. "type": "object",
  1638. "required": [
  1639. "ocs"
  1640. ],
  1641. "properties": {
  1642. "ocs": {
  1643. "type": "object",
  1644. "required": [
  1645. "meta",
  1646. "data"
  1647. ],
  1648. "properties": {
  1649. "meta": {
  1650. "$ref": "#/components/schemas/OCSMeta"
  1651. },
  1652. "data": {}
  1653. }
  1654. }
  1655. }
  1656. }
  1657. }
  1658. }
  1659. }
  1660. }
  1661. }
  1662. },
  1663. "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/rejected-dialout": {
  1664. "delete": {
  1665. "operationId": "room-rejected-dial-out-request",
  1666. "summary": "Reset call ID of a dial-out participant when the SIP gateway rejected it",
  1667. "tags": [
  1668. "room"
  1669. ],
  1670. "security": [
  1671. {},
  1672. {
  1673. "bearer_auth": []
  1674. },
  1675. {
  1676. "basic_auth": []
  1677. }
  1678. ],
  1679. "requestBody": {
  1680. "required": true,
  1681. "content": {
  1682. "application/json": {
  1683. "schema": {
  1684. "type": "object",
  1685. "required": [
  1686. "callId"
  1687. ],
  1688. "properties": {
  1689. "callId": {
  1690. "type": "string",
  1691. "description": "The call ID provided by the SIP bridge earlier to uniquely identify the call to terminate"
  1692. },
  1693. "options": {
  1694. "type": "object",
  1695. "default": [],
  1696. "description": "Additional details to verify the validity of the request",
  1697. "properties": {
  1698. "actorId": {
  1699. "type": "string"
  1700. },
  1701. "actorType": {
  1702. "type": "string"
  1703. },
  1704. "attendeeId": {
  1705. "type": "integer",
  1706. "format": "int64"
  1707. }
  1708. }
  1709. }
  1710. }
  1711. }
  1712. }
  1713. }
  1714. },
  1715. "parameters": [
  1716. {
  1717. "name": "apiVersion",
  1718. "in": "path",
  1719. "required": true,
  1720. "schema": {
  1721. "type": "string",
  1722. "enum": [
  1723. "v4"
  1724. ],
  1725. "default": "v4"
  1726. }
  1727. },
  1728. {
  1729. "name": "token",
  1730. "in": "path",
  1731. "required": true,
  1732. "schema": {
  1733. "type": "string",
  1734. "pattern": "^[a-z0-9]{4,30}$"
  1735. }
  1736. },
  1737. {
  1738. "name": "OCS-APIRequest",
  1739. "in": "header",
  1740. "description": "Required to be true for the API request to pass",
  1741. "required": true,
  1742. "schema": {
  1743. "type": "boolean",
  1744. "default": true
  1745. }
  1746. }
  1747. ],
  1748. "responses": {
  1749. "200": {
  1750. "description": "Call ID reset",
  1751. "content": {
  1752. "application/json": {
  1753. "schema": {
  1754. "type": "object",
  1755. "required": [
  1756. "ocs"
  1757. ],
  1758. "properties": {
  1759. "ocs": {
  1760. "type": "object",
  1761. "required": [
  1762. "meta",
  1763. "data"
  1764. ],
  1765. "properties": {
  1766. "meta": {
  1767. "$ref": "#/components/schemas/OCSMeta"
  1768. },
  1769. "data": {}
  1770. }
  1771. }
  1772. }
  1773. }
  1774. }
  1775. }
  1776. },
  1777. "400": {
  1778. "description": "Call ID mismatch or attendeeId not found in $options",
  1779. "content": {
  1780. "application/json": {
  1781. "schema": {
  1782. "type": "object",
  1783. "required": [
  1784. "ocs"
  1785. ],
  1786. "properties": {
  1787. "ocs": {
  1788. "type": "object",
  1789. "required": [
  1790. "meta",
  1791. "data"
  1792. ],
  1793. "properties": {
  1794. "meta": {
  1795. "$ref": "#/components/schemas/OCSMeta"
  1796. },
  1797. "data": {}
  1798. }
  1799. }
  1800. }
  1801. }
  1802. }
  1803. }
  1804. },
  1805. "401": {
  1806. "description": "SIP request invalid",
  1807. "content": {
  1808. "application/json": {
  1809. "schema": {
  1810. "type": "object",
  1811. "required": [
  1812. "ocs"
  1813. ],
  1814. "properties": {
  1815. "ocs": {
  1816. "type": "object",
  1817. "required": [
  1818. "meta",
  1819. "data"
  1820. ],
  1821. "properties": {
  1822. "meta": {
  1823. "$ref": "#/components/schemas/OCSMeta"
  1824. },
  1825. "data": {}
  1826. }
  1827. }
  1828. }
  1829. }
  1830. }
  1831. }
  1832. },
  1833. "404": {
  1834. "description": "Participant was not found",
  1835. "content": {
  1836. "application/json": {
  1837. "schema": {
  1838. "type": "object",
  1839. "required": [
  1840. "ocs"
  1841. ],
  1842. "properties": {
  1843. "ocs": {
  1844. "type": "object",
  1845. "required": [
  1846. "meta",
  1847. "data"
  1848. ],
  1849. "properties": {
  1850. "meta": {
  1851. "$ref": "#/components/schemas/OCSMeta"
  1852. },
  1853. "data": {}
  1854. }
  1855. }
  1856. }
  1857. }
  1858. }
  1859. }
  1860. },
  1861. "501": {
  1862. "description": "SIP dial-out is not configured",
  1863. "content": {
  1864. "application/json": {
  1865. "schema": {
  1866. "type": "object",
  1867. "required": [
  1868. "ocs"
  1869. ],
  1870. "properties": {
  1871. "ocs": {
  1872. "type": "object",
  1873. "required": [
  1874. "meta",
  1875. "data"
  1876. ],
  1877. "properties": {
  1878. "meta": {
  1879. "$ref": "#/components/schemas/OCSMeta"
  1880. },
  1881. "data": {}
  1882. }
  1883. }
  1884. }
  1885. }
  1886. }
  1887. }
  1888. }
  1889. }
  1890. }
  1891. }
  1892. },
  1893. "tags": []
  1894. }