Create an authenticated browser Realtime voice session
curl --request POST \
--url https://api.example.com/inference/realtime-session \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sdp": "<string>",
"assistant_name": "<string>",
"conversation_id": "<string>",
"context_entities": [
{}
],
"audible": true
}
'import requests
url = "https://api.example.com/inference/realtime-session"
payload = {
"sdp": "<string>",
"assistant_name": "<string>",
"conversation_id": "<string>",
"context_entities": [{}],
"audible": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sdp: '<string>',
assistant_name: '<string>',
conversation_id: '<string>',
context_entities: [{}],
audible: true
})
};
fetch('https://api.example.com/inference/realtime-session', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/inference/realtime-session",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sdp' => '<string>',
'assistant_name' => '<string>',
'conversation_id' => '<string>',
'context_entities' => [
[
]
],
'audible' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/inference/realtime-session"
payload := strings.NewReader("{\n \"sdp\": \"<string>\",\n \"assistant_name\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"context_entities\": [\n {}\n ],\n \"audible\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/inference/realtime-session")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sdp\": \"<string>\",\n \"assistant_name\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"context_entities\": [\n {}\n ],\n \"audible\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/inference/realtime-session")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sdp\": \"<string>\",\n \"assistant_name\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"context_entities\": [\n {}\n ],\n \"audible\": true\n}"
response = http.request(request)
puts response.read_body{
"sdp": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}inference
Create an authenticated browser Realtime voice session
Proxy the browser’s SDP offer to OpenAI without exposing our API key.
The browser sends only the SDP offer and lightweight conversation context. Audio then flows directly over WebRTC between the browser and OpenAI.
POST
/
inference
/
realtime-session
Create an authenticated browser Realtime voice session
curl --request POST \
--url https://api.example.com/inference/realtime-session \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sdp": "<string>",
"assistant_name": "<string>",
"conversation_id": "<string>",
"context_entities": [
{}
],
"audible": true
}
'import requests
url = "https://api.example.com/inference/realtime-session"
payload = {
"sdp": "<string>",
"assistant_name": "<string>",
"conversation_id": "<string>",
"context_entities": [{}],
"audible": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sdp: '<string>',
assistant_name: '<string>',
conversation_id: '<string>',
context_entities: [{}],
audible: true
})
};
fetch('https://api.example.com/inference/realtime-session', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/inference/realtime-session",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sdp' => '<string>',
'assistant_name' => '<string>',
'conversation_id' => '<string>',
'context_entities' => [
[
]
],
'audible' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/inference/realtime-session"
payload := strings.NewReader("{\n \"sdp\": \"<string>\",\n \"assistant_name\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"context_entities\": [\n {}\n ],\n \"audible\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/inference/realtime-session")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sdp\": \"<string>\",\n \"assistant_name\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"context_entities\": [\n {}\n ],\n \"audible\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/inference/realtime-session")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sdp\": \"<string>\",\n \"assistant_name\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"context_entities\": [\n {}\n ],\n \"audible\": true\n}"
response = http.request(request)
puts response.read_body{
"sdp": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Body
application/json
Response
Successful Response