Advertisement
ku_

Roblox Voice Docs Internal July 2023 V3 (ash1-voice.roblox.com/docs/json/v3)

ku_
Dec 5th, 2023
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JSON 22.29 KB | None | 0 0
  1. {
  2.   "swagger": "2.0",
  3.   "info": {
  4.     "title": "Voice Api v3",
  5.     "version": "v3"
  6.   },
  7.   "host": "voice.roblox.com",
  8.   "schemes": [
  9.     "https"
  10.   ],
  11.   "paths": {
  12.     "/v3/calls/{channelId}/subscriptions/list": {
  13.       "get": {
  14.         "tags": [
  15.           "VoiceV3"
  16.         ],
  17.         "summary": "a list of user-linked stream subscriptions (along with mute status)\r\n           for this client on the multistream peer connection.",
  18.         "produces": [
  19.           "application/json",
  20.           "text/json"
  21.         ],
  22.         "parameters": [
  23.           {
  24.             "in": "path",
  25.             "name": "channelId",
  26.             "description": "",
  27.             "required": true,
  28.             "type": "string"
  29.           },
  30.           {
  31.             "in": "query",
  32.             "name": "sessionId",
  33.             "description": "",
  34.             "required": true,
  35.             "type": "string"
  36.           }
  37.         ],
  38.         "responses": {
  39.           "200": {
  40.             "description": "OK",
  41.             "schema": {
  42.               "$ref": "#/definitions/Roblox.Voice.Api.Models.UserSubscriptionsListResponse"
  43.             }
  44.           },
  45.           "401": {
  46.             "description": "0: Authorization has been denied for this request."
  47.           }
  48.         },
  49.         "properties": {
  50.           "internal": true,
  51.           "metricIds": [
  52.             "VoiceV3:GetSubscriptionsList"
  53.           ]
  54.         }
  55.       }
  56.     },
  57.     "/v3/calls/subscriptions/add/complete": {
  58.       "post": {
  59.         "tags": [
  60.           "VoiceV3"
  61.         ],
  62.         "summary": "Completes the addition of subscriptions to an user's multistream peer connection.\r\nThe request must contain a single SDP answer (either partial if the connection already existed \r\nor full if it triggered a new peer connection creation).",
  63.         "consumes": [
  64.           "application/json",
  65.           "text/json"
  66.         ],
  67.         "produces": [
  68.           "application/json",
  69.           "text/json"
  70.         ],
  71.         "parameters": [
  72.           {
  73.             "in": "body",
  74.             "name": "requestModel",
  75.             "description": "",
  76.             "required": true,
  77.             "schema": {
  78.               "$ref": "#/definitions/Roblox.Voice.Api.Models.CompleteMultistreamSubscriptionsAddRequest"
  79.             }
  80.           }
  81.         ],
  82.         "responses": {
  83.           "200": {
  84.             "description": "OK",
  85.             "schema": {
  86.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseSubscriptionsResponse"
  87.             }
  88.           },
  89.           "401": {
  90.             "description": "0: Authorization has been denied for this request."
  91.           },
  92.           "403": {
  93.             "description": "0: Token Validation Failed"
  94.           }
  95.         },
  96.         "properties": {
  97.           "internal": true,
  98.           "metricIds": [
  99.             "VoiceV3:CompleteMultistreamSubscriptionsAdd"
  100.           ]
  101.         }
  102.       }
  103.     },
  104.     "/v3/calls/subscriptions/add/start": {
  105.       "post": {
  106.         "tags": [
  107.           "VoiceV3"
  108.         ],
  109.         "summary": "Initiate the addition of subscriptions to some feeds.\r\n            This will initiate addition of entries to the list of streams handled \r\n            by the subscription connection for the client.\r\n            A new peer connection should be created if an existing subscription connection for the client is not present\r\n            (either on the first time calling this API or if calling it after unsubscribing from everyone in the call, \r\n            which would normally close the connection).",
  110.         "consumes": [
  111.           "application/json",
  112.           "text/json"
  113.         ],
  114.         "produces": [
  115.           "application/json",
  116.           "text/json"
  117.         ],
  118.         "parameters": [
  119.           {
  120.             "in": "body",
  121.             "name": "requestModel",
  122.             "description": "!:InitiateMultistreamSubscriptionsAddRequest",
  123.             "required": true,
  124.             "schema": {
  125.               "$ref": "#/definitions/Roblox.Voice.Api.Models.SubscriptionsRequest"
  126.             }
  127.           }
  128.         ],
  129.         "responses": {
  130.           "200": {
  131.             "description": "OK",
  132.             "schema": {
  133.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseSubscriptionsResponse"
  134.             }
  135.           },
  136.           "401": {
  137.             "description": "0: Authorization has been denied for this request."
  138.           },
  139.           "403": {
  140.             "description": "0: Token Validation Failed"
  141.           }
  142.         },
  143.         "properties": {
  144.           "internal": true,
  145.           "metricIds": [
  146.             "VoiceV3:InitiateMultistreamSubscriptionsAdd"
  147.           ]
  148.         }
  149.       }
  150.     },
  151.     "/v3/calls/subscriptions/block": {
  152.       "post": {
  153.         "tags": [
  154.           "VoiceV3"
  155.         ],
  156.         "summary": "Bidirectionally block the subscriptions between the blocker and blockee and notify blockee that blocker left the call.",
  157.         "consumes": [
  158.           "application/json",
  159.           "text/json"
  160.         ],
  161.         "produces": [
  162.           "application/json",
  163.           "text/json"
  164.         ],
  165.         "parameters": [
  166.           {
  167.             "in": "body",
  168.             "name": "requestModel",
  169.             "description": "",
  170.             "required": true,
  171.             "schema": {
  172.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BlockUnblockSubscriptionsRequest"
  173.             }
  174.           }
  175.         ],
  176.         "responses": {
  177.           "200": {
  178.             "description": "OK",
  179.             "schema": {
  180.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseSubscriptionsResponse"
  181.             }
  182.           },
  183.           "401": {
  184.             "description": "0: Authorization has been denied for this request."
  185.           },
  186.           "403": {
  187.             "description": "0: Token Validation Failed"
  188.           }
  189.         },
  190.         "properties": {
  191.           "internal": true,
  192.           "metricIds": [
  193.             "VoiceV3:BlockSubscriptions"
  194.           ]
  195.         }
  196.       }
  197.     },
  198.     "/v3/calls/subscriptions/close": {
  199.       "post": {
  200.         "tags": [
  201.           "VoiceV3"
  202.         ],
  203.         "summary": "This is triggered to completely close the peer connection for subscriptions. It will be used when the client is \r\nexiting and won’t be able to do the handshake of signalR and also to recover from failures that put the peer \r\nconnection in a bad state.",
  204.         "consumes": [
  205.           "application/json",
  206.           "text/json"
  207.         ],
  208.         "produces": [
  209.           "application/json",
  210.           "text/json"
  211.         ],
  212.         "parameters": [
  213.           {
  214.             "in": "body",
  215.             "name": "requestModel",
  216.             "description": "",
  217.             "required": true,
  218.             "schema": {
  219.               "$ref": "#/definitions/Roblox.Voice.Api.Models.VoiceCallLifecycleRequestBase"
  220.             }
  221.           }
  222.         ],
  223.         "responses": {
  224.           "200": {
  225.             "description": "OK",
  226.             "schema": {
  227.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseStatusResponse"
  228.             }
  229.           },
  230.           "401": {
  231.             "description": "0: Authorization has been denied for this request."
  232.           },
  233.           "403": {
  234.             "description": "0: Token Validation Failed"
  235.           }
  236.         },
  237.         "properties": {
  238.           "internal": true,
  239.           "metricIds": [
  240.             "VoiceV3:CloseMultistreamSubscriptionsConnection"
  241.           ]
  242.         }
  243.       }
  244.     },
  245.     "/v3/calls/subscriptions/remove/complete": {
  246.       "post": {
  247.         "tags": [
  248.           "VoiceV3"
  249.         ],
  250.         "summary": "Completes the removal of subscriptions from an user's multistream peer connection.\r\nThe request must contain a single partial SDP answer.",
  251.         "consumes": [
  252.           "application/json",
  253.           "text/json"
  254.         ],
  255.         "produces": [
  256.           "application/json",
  257.           "text/json"
  258.         ],
  259.         "parameters": [
  260.           {
  261.             "in": "body",
  262.             "name": "requestModel",
  263.             "description": "",
  264.             "required": true,
  265.             "schema": {
  266.               "$ref": "#/definitions/Roblox.Voice.Api.Models.CompleteMultistreamSubscriptionsUpdateRequest"
  267.             }
  268.           }
  269.         ],
  270.         "responses": {
  271.           "200": {
  272.             "description": "OK",
  273.             "schema": {
  274.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseSubscriptionsResponse"
  275.             }
  276.           },
  277.           "401": {
  278.             "description": "0: Authorization has been denied for this request."
  279.           },
  280.           "403": {
  281.             "description": "0: Token Validation Failed"
  282.           }
  283.         },
  284.         "properties": {
  285.           "internal": true,
  286.           "metricIds": [
  287.             "VoiceV3:CompleteMultistreamSubscriptionsRemove"
  288.           ]
  289.         }
  290.       }
  291.     },
  292.     "/v3/calls/subscriptions/remove/start": {
  293.       "post": {
  294.         "tags": [
  295.           "VoiceV3"
  296.         ],
  297.         "summary": "Initiate the removal of some subscriptions from a user's peer connection.\r\nThis will initiate removal of entries from the list of streams handled by the \r\nsubscription connection for the client.",
  298.         "consumes": [
  299.           "application/json",
  300.           "text/json"
  301.         ],
  302.         "produces": [
  303.           "application/json",
  304.           "text/json"
  305.         ],
  306.         "parameters": [
  307.           {
  308.             "in": "body",
  309.             "name": "requestModel",
  310.             "description": "!:InitiateMultistreamSubscriptionsRemoveRequest",
  311.             "required": true,
  312.             "schema": {
  313.               "$ref": "#/definitions/Roblox.Voice.Api.Models.SubscriptionsRequest"
  314.             }
  315.           }
  316.         ],
  317.         "responses": {
  318.           "200": {
  319.             "description": "OK",
  320.             "schema": {
  321.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseSubscriptionsResponse"
  322.             }
  323.           },
  324.           "401": {
  325.             "description": "0: Authorization has been denied for this request."
  326.           },
  327.           "403": {
  328.             "description": "0: Token Validation Failed"
  329.           }
  330.         },
  331.         "properties": {
  332.           "internal": true,
  333.           "metricIds": [
  334.             "VoiceV3:InitiateMultistreamSubscriptionsRemove"
  335.           ]
  336.         }
  337.       }
  338.     },
  339.     "/v3/calls/subscriptions/trickle": {
  340.       "post": {
  341.         "tags": [
  342.           "VoiceV3"
  343.         ],
  344.         "summary": "Trickles ICE candidates for the mulstistream subscriptions' peer connection.\r\nThis will send one or more ICE candidates for the entire peer \r\nconnection without coupling with any feed-specific details.\r\nhttps://webrtcglossary.com/trickle-ice/",
  345.         "consumes": [
  346.           "application/json",
  347.           "text/json"
  348.         ],
  349.         "produces": [
  350.           "application/json",
  351.           "text/json"
  352.         ],
  353.         "parameters": [
  354.           {
  355.             "in": "body",
  356.             "name": "requestModel",
  357.             "description": "",
  358.             "required": true,
  359.             "schema": {
  360.               "$ref": "#/definitions/Roblox.Voice.Api.Models.TrickleIceRequest"
  361.             }
  362.           }
  363.         ],
  364.         "responses": {
  365.           "200": {
  366.             "description": "OK",
  367.             "schema": {
  368.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseStatusResponse"
  369.             }
  370.           },
  371.           "401": {
  372.             "description": "0: Authorization has been denied for this request."
  373.           },
  374.           "403": {
  375.             "description": "0: Token Validation Failed"
  376.           }
  377.         },
  378.         "properties": {
  379.           "internal": true,
  380.           "metricIds": [
  381.             "VoiceV3:MultistreamSubscriptionTrickleIce"
  382.           ]
  383.         }
  384.       }
  385.     },
  386.     "/v3/calls/subscriptions/trickle/end": {
  387.       "post": {
  388.         "tags": [
  389.           "VoiceV3"
  390.         ],
  391.         "summary": "Finish the trickle ICE candidate process.\r\nhttps://webrtcglossary.com/trickle-ice/",
  392.         "consumes": [
  393.           "application/json",
  394.           "text/json"
  395.         ],
  396.         "produces": [
  397.           "application/json",
  398.           "text/json"
  399.         ],
  400.         "parameters": [
  401.           {
  402.             "in": "body",
  403.             "name": "requestModel",
  404.             "description": "",
  405.             "required": true,
  406.             "schema": {
  407.               "$ref": "#/definitions/Roblox.Voice.Api.Models.VoiceCallLifecycleRequestBase"
  408.             }
  409.           }
  410.         ],
  411.         "responses": {
  412.           "200": {
  413.             "description": "OK",
  414.             "schema": {
  415.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseStatusResponse"
  416.             }
  417.           },
  418.           "401": {
  419.             "description": "0: Authorization has been denied for this request."
  420.           },
  421.           "403": {
  422.             "description": "0: Token Validation Failed"
  423.           }
  424.         },
  425.         "properties": {
  426.           "internal": true,
  427.           "metricIds": [
  428.             "VoiceV3:FinishedMultistreamSubscriptionTrickleIce"
  429.           ]
  430.         }
  431.       }
  432.     },
  433.     "/v3/calls/subscriptions/unblock": {
  434.       "post": {
  435.         "tags": [
  436.           "VoiceV3"
  437.         ],
  438.         "summary": "Unblock subscriptions between unblocking user and unblocked users and notify unblocked users that unblocker is publishing.",
  439.         "consumes": [
  440.           "application/json",
  441.           "text/json"
  442.         ],
  443.         "produces": [
  444.           "application/json",
  445.           "text/json"
  446.         ],
  447.         "parameters": [
  448.           {
  449.             "in": "body",
  450.             "name": "requestModel",
  451.             "description": "",
  452.             "required": true,
  453.             "schema": {
  454.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BlockUnblockSubscriptionsRequest"
  455.             }
  456.           }
  457.         ],
  458.         "responses": {
  459.           "200": {
  460.             "description": "OK",
  461.             "schema": {
  462.               "$ref": "#/definitions/Roblox.Voice.Api.Models.BaseSubscriptionsResponse"
  463.             }
  464.           },
  465.           "401": {
  466.             "description": "0: Authorization has been denied for this request."
  467.           },
  468.           "403": {
  469.             "description": "0: Token Validation Failed"
  470.           }
  471.         },
  472.         "properties": {
  473.           "internal": true,
  474.           "metricIds": [
  475.             "VoiceV3:UnblockSubscriptions"
  476.           ]
  477.         }
  478.       }
  479.     }
  480.   },
  481.   "definitions": {
  482.     "Roblox.Platform.Voice.CallPublisherInfo": {
  483.       "type": "object",
  484.       "properties": {
  485.         "userId": {
  486.           "format": "int64",
  487.           "type": "integer"
  488.         },
  489.         "feedReferenceId": {
  490.           "format": "int64",
  491.           "type": "integer"
  492.         },
  493.         "isMuted": {
  494.           "type": "boolean"
  495.         }
  496.       }
  497.     },
  498.     "Roblox.Platform.Voice.IceCandidate": {
  499.       "type": "object",
  500.       "properties": {
  501.         "sdpMid": {
  502.           "type": "string"
  503.         },
  504.         "sdpMLineIndex": {
  505.           "format": "int32",
  506.           "type": "integer"
  507.         },
  508.         "candidate": {
  509.           "type": "string"
  510.         }
  511.       }
  512.     },
  513.     "Roblox.Voice.Api.Models.BaseStatusResponse": {
  514.       "description": "base response model for voice apis",
  515.       "type": "object",
  516.       "properties": {
  517.         "status": {
  518.           "description": "Gets or sets status of response ['Success' = 0]",
  519.           "enum": [
  520.             "Success"
  521.           ],
  522.           "type": "string"
  523.         }
  524.       }
  525.     },
  526.     "Roblox.Voice.Api.Models.BaseSubscriptionsResponse": {
  527.       "description": "Base Response model for subscription operations",
  528.       "type": "object",
  529.       "properties": {
  530.         "channelId": {
  531.           "description": "Gets or sets unique id of the joined call",
  532.           "type": "string"
  533.         },
  534.         "failures": {
  535.           "description": "Gets or sets the reason, for each publisher the subscription operation failed",
  536.           "type": "object",
  537.           "additionalProperties": {
  538.             "type": "string"
  539.           }
  540.         }
  541.       }
  542.     },
  543.     "Roblox.Voice.Api.Models.BlockUnblockSubscriptionsRequest": {
  544.       "description": "Request model for unsubscribing/subscribing to users bidirectionally when they are blocked/unblocked",
  545.       "type": "object",
  546.       "properties": {
  547.         "subscribedUserIds": {
  548.           "description": "Gets or sets the user ids of the users to unsubscribe or subscribe to",
  549.           "type": "array",
  550.           "items": {
  551.             "format": "int64",
  552.             "type": "integer"
  553.           }
  554.         },
  555.         "channelId": {
  556.           "description": "Gets or sets unique id of the joined call",
  557.           "type": "string"
  558.         },
  559.         "sessionId": {
  560.           "description": "Gets or sets unique id of the joined call",
  561.           "maxLength": 64,
  562.           "minLength": 0,
  563.           "type": "string"
  564.         }
  565.       }
  566.     },
  567.     "Roblox.Voice.Api.Models.CallSubscriptionInfoRequest": {
  568.       "description": "Request model for the details of a subscription to a call publisher, does not include the publishing state (muted/unmuted)",
  569.       "type": "object",
  570.       "properties": {
  571.         "mids": {
  572.           "description": "Gets or sets a list of mids of the publisher's streams in a subscription peer connection. \r\nOptional.",
  573.           "type": "array",
  574.           "items": {
  575.             "type": "string"
  576.           }
  577.         },
  578.         "userId": {
  579.           "format": "int64",
  580.           "description": "Gets or sets the user Id",
  581.           "type": "integer"
  582.         },
  583.         "feedReferenceId": {
  584.           "format": "int64",
  585.           "description": "Gets or sets the unique identifier for a publisher's feed (timestamp user finished publishing handshake)\r\nThis is used to identify the latest feed associated with a publisher",
  586.           "type": "integer"
  587.         }
  588.       }
  589.     },
  590.     "Roblox.Voice.Api.Models.CompleteMultistreamSubscriptionsAddRequest": {
  591.       "description": "Request model to complete subscribing to user feeds in voice call",
  592.       "type": "object",
  593.       "properties": {
  594.         "muteUsers": {
  595.           "description": "Gets or sets the user ids of users to start as muted.",
  596.           "type": "array",
  597.           "items": {
  598.             "format": "int64",
  599.             "type": "integer"
  600.           }
  601.         },
  602.         "sdpAnswer": {
  603.           "description": "Gets or sets the sdp answer",
  604.           "type": "string"
  605.         },
  606.         "channelId": {
  607.           "description": "Gets or sets unique id of the joined call",
  608.           "type": "string"
  609.         },
  610.         "sessionId": {
  611.           "description": "Gets or sets unique id of the joined call",
  612.           "maxLength": 64,
  613.           "minLength": 0,
  614.           "type": "string"
  615.         }
  616.       }
  617.     },
  618.     "Roblox.Voice.Api.Models.CompleteMultistreamSubscriptionsUpdateRequest": {
  619.       "description": "Request model to complete a multistream subscription update with an sdp answer.",
  620.       "type": "object",
  621.       "properties": {
  622.         "sdpAnswer": {
  623.           "description": "Gets or sets the sdp answer",
  624.           "type": "string"
  625.         },
  626.         "channelId": {
  627.           "description": "Gets or sets unique id of the joined call",
  628.           "type": "string"
  629.         },
  630.         "sessionId": {
  631.           "description": "Gets or sets unique id of the joined call",
  632.           "maxLength": 64,
  633.           "minLength": 0,
  634.           "type": "string"
  635.         }
  636.       }
  637.     },
  638.     "Roblox.Voice.Api.Models.SubscriptionsRequest": {
  639.       "description": "Request model for user feed subscription operations",
  640.       "type": "object",
  641.       "properties": {
  642.         "subscribedUsers": {
  643.           "description": "Gets or sets the publisher infos for all users to be subscribed by the subscription request",
  644.           "type": "array",
  645.           "items": {
  646.             "$ref": "#/definitions/Roblox.Voice.Api.Models.CallSubscriptionInfoRequest"
  647.           }
  648.         },
  649.         "channelId": {
  650.           "description": "Gets or sets unique id of the joined call",
  651.           "type": "string"
  652.         },
  653.         "sessionId": {
  654.           "description": "Gets or sets unique id of the joined call",
  655.           "maxLength": 64,
  656.           "minLength": 0,
  657.           "type": "string"
  658.         }
  659.       }
  660.     },
  661.     "Roblox.Voice.Api.Models.TrickleIceRequest": {
  662.       "description": "Request model for Trickle ICE request for a completing a subscription/peer connection",
  663.       "type": "object",
  664.       "properties": {
  665.         "candidates": {
  666.           "description": "Gets or sets Web-RTC ICE candidates",
  667.           "type": "array",
  668.           "items": {
  669.             "$ref": "#/definitions/Roblox.Platform.Voice.IceCandidate"
  670.           }
  671.         },
  672.         "isLast": {
  673.           "description": "Gets or sets a value indicating whether this is the last candidate.\r\nThis allows combining the last candidate trickle request with signaling trickle end.",
  674.           "type": "boolean"
  675.         },
  676.         "channelId": {
  677.           "description": "Gets or sets unique id of the joined call",
  678.           "type": "string"
  679.         },
  680.         "sessionId": {
  681.           "description": "Gets or sets unique id of the joined call",
  682.           "maxLength": 64,
  683.           "minLength": 0,
  684.           "type": "string"
  685.         }
  686.       }
  687.     },
  688.     "Roblox.Voice.Api.Models.UserSubscriptionsListResponse": {
  689.       "description": "Response model for users in voice call",
  690.       "type": "object",
  691.       "properties": {
  692.         "channelId": {
  693.           "description": "Gets or sets the unique id of the call",
  694.           "type": "string"
  695.         },
  696.         "users": {
  697.           "description": "Gets or sets the user Id",
  698.           "type": "array",
  699.           "items": {
  700.             "$ref": "#/definitions/Roblox.Platform.Voice.CallPublisherInfo"
  701.           }
  702.         }
  703.       }
  704.     },
  705.     "Roblox.Voice.Api.Models.VoiceCallLifecycleRequestBase": {
  706.       "description": "Request model to start publishing to voice call",
  707.       "type": "object",
  708.       "properties": {
  709.         "channelId": {
  710.           "description": "Gets or sets unique id of the joined call",
  711.           "type": "string"
  712.         },
  713.         "sessionId": {
  714.           "description": "Gets or sets unique id of the joined call",
  715.           "maxLength": 64,
  716.           "minLength": 0,
  717.           "type": "string"
  718.         }
  719.       }
  720.     }
  721.   }
  722. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement