curl -X POST https://api.upliftai.org/v1/realtime-assistants/550e8400-e29b-41d4-a716-446655440000/createPublicSession \
-H "Content-Type: application/json" \
-d '{
"participantName": "Guest User"
}'
// Can be called directly from frontend for public assistants
const assistantId = '550e8400-e29b-41d4-a716-446655440000';
const response = await fetch(
`https://api.upliftai.org/v1/realtime-assistants/${assistantId}/createPublicSession`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
participantName: 'Guest User',
})
}
);
if (!response.ok) {
if (response.status === 403) {
throw new Error('This assistant is not public');
}
if (response.status === 404) {
throw new Error('Assistant not found');
}
throw new Error('Failed to create session');
}
const sessionData = await response.json();
import { useState } from 'react';
import { UpliftAIRoom } from '@upliftai/assistants-react';
function PublicAssistantDemo() {
const [sessionData, setSessionData] = useState(null);
const [loading, setLoading] = useState(false);
const connectToAssistant = async () => {
setLoading(true);
try {
const response = await fetch(
'https://api.upliftai.org/v1/realtime-assistants/YOUR_PUBLIC_ASSISTANT_ID/createPublicSession',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
participantName: 'Demo User'
})
}
);
const data = await response.json();
setSessionData(data);
} catch (error) {
console.error('Failed to connect:', error);
} finally {
setLoading(false);
}
};
if (!sessionData) {
return (
<button onClick={connectToAssistant} disabled={loading}>
{loading ? 'Connecting...' : 'Connect to Assistant'}
</button>
);
}
return (
<UpliftAIRoom
token={sessionData.token}
serverUrl={sessionData.wsUrl}
connect={true}
audio={true}
>
<YourAssistantUI />
</UpliftAIRoom>
);
}
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDU0MTAwMDAsImlzcyI6IkFQSWFiY2RlZiIsImp0aSI6Imd1ZXN0XzEyMyIsIm5hbWUiOiJHdWVzdCBVc2VyIiwicm9vbSI6InB1YmxpYy1hYmMxMjMiLCJzdWIiOiJndWVzdF8xMjMiLCJ2aWRlbyI6eyJyb29tIjoiam9pbiIsInJvb21BZG1pbiI6ZmFsc2UsInJvb21DcmVhdGUiOmZhbHNlLCJyb29tSm9pbiI6dHJ1ZSwicm9vbUxpc3QiOmZhbHNlfX0.signature",
"wsUrl": "wss://upliftai-livekit-url...",
"roomName": "public-abc123-1705406400"
}
API Reference (Beta)
Create Public Session
Create a session for a public assistant without authentication
POST
/
v1
/
realtime-assistants
/
{realtimeAssistantId}
/
createPublicSession
curl -X POST https://api.upliftai.org/v1/realtime-assistants/550e8400-e29b-41d4-a716-446655440000/createPublicSession \
-H "Content-Type: application/json" \
-d '{
"participantName": "Guest User"
}'
// Can be called directly from frontend for public assistants
const assistantId = '550e8400-e29b-41d4-a716-446655440000';
const response = await fetch(
`https://api.upliftai.org/v1/realtime-assistants/${assistantId}/createPublicSession`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
participantName: 'Guest User',
})
}
);
if (!response.ok) {
if (response.status === 403) {
throw new Error('This assistant is not public');
}
if (response.status === 404) {
throw new Error('Assistant not found');
}
throw new Error('Failed to create session');
}
const sessionData = await response.json();
import { useState } from 'react';
import { UpliftAIRoom } from '@upliftai/assistants-react';
function PublicAssistantDemo() {
const [sessionData, setSessionData] = useState(null);
const [loading, setLoading] = useState(false);
const connectToAssistant = async () => {
setLoading(true);
try {
const response = await fetch(
'https://api.upliftai.org/v1/realtime-assistants/YOUR_PUBLIC_ASSISTANT_ID/createPublicSession',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
participantName: 'Demo User'
})
}
);
const data = await response.json();
setSessionData(data);
} catch (error) {
console.error('Failed to connect:', error);
} finally {
setLoading(false);
}
};
if (!sessionData) {
return (
<button onClick={connectToAssistant} disabled={loading}>
{loading ? 'Connecting...' : 'Connect to Assistant'}
</button>
);
}
return (
<UpliftAIRoom
token={sessionData.token}
serverUrl={sessionData.wsUrl}
connect={true}
audio={true}
>
<YourAssistantUI />
</UpliftAIRoom>
);
}
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDU0MTAwMDAsImlzcyI6IkFQSWFiY2RlZiIsImp0aSI6Imd1ZXN0XzEyMyIsIm5hbWUiOiJHdWVzdCBVc2VyIiwicm9vbSI6InB1YmxpYy1hYmMxMjMiLCJzdWIiOiJndWVzdF8xMjMiLCJ2aWRlbyI6eyJyb29tIjoiam9pbiIsInJvb21BZG1pbiI6ZmFsc2UsInJvb21DcmVhdGUiOmZhbHNlLCJyb29tSm9pbiI6dHJ1ZSwicm9vbUxpc3QiOmZhbHNlfX0.signature",
"wsUrl": "wss://upliftai-livekit-url...",
"roomName": "public-abc123-1705406400"
}
Beta Feature: This endpoint is currently in beta. Features and specifications may change.
This endpoint does not require authentication and can be called directly from client applications. The assistant must have
public: true to use this endpoint.string
required
The unique identifier of the public assistant
string
required
Display name for the user participant
string
Optional custom room name. If not provided, a unique room name will be generated
curl -X POST https://api.upliftai.org/v1/realtime-assistants/550e8400-e29b-41d4-a716-446655440000/createPublicSession \
-H "Content-Type: application/json" \
-d '{
"participantName": "Guest User"
}'
// Can be called directly from frontend for public assistants
const assistantId = '550e8400-e29b-41d4-a716-446655440000';
const response = await fetch(
`https://api.upliftai.org/v1/realtime-assistants/${assistantId}/createPublicSession`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
participantName: 'Guest User',
})
}
);
if (!response.ok) {
if (response.status === 403) {
throw new Error('This assistant is not public');
}
if (response.status === 404) {
throw new Error('Assistant not found');
}
throw new Error('Failed to create session');
}
const sessionData = await response.json();
import { useState } from 'react';
import { UpliftAIRoom } from '@upliftai/assistants-react';
function PublicAssistantDemo() {
const [sessionData, setSessionData] = useState(null);
const [loading, setLoading] = useState(false);
const connectToAssistant = async () => {
setLoading(true);
try {
const response = await fetch(
'https://api.upliftai.org/v1/realtime-assistants/YOUR_PUBLIC_ASSISTANT_ID/createPublicSession',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
participantName: 'Demo User'
})
}
);
const data = await response.json();
setSessionData(data);
} catch (error) {
console.error('Failed to connect:', error);
} finally {
setLoading(false);
}
};
if (!sessionData) {
return (
<button onClick={connectToAssistant} disabled={loading}>
{loading ? 'Connecting...' : 'Connect to Assistant'}
</button>
);
}
return (
<UpliftAIRoom
token={sessionData.token}
serverUrl={sessionData.wsUrl}
connect={true}
audio={true}
>
<YourAssistantUI />
</UpliftAIRoom>
);
}
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDU0MTAwMDAsImlzcyI6IkFQSWFiY2RlZiIsImp0aSI6Imd1ZXN0XzEyMyIsIm5hbWUiOiJHdWVzdCBVc2VyIiwicm9vbSI6InB1YmxpYy1hYmMxMjMiLCJzdWIiOiJndWVzdF8xMjMiLCJ2aWRlbyI6eyJyb29tIjoiam9pbiIsInJvb21BZG1pbiI6ZmFsc2UsInJvb21DcmVhdGUiOmZhbHNlLCJyb29tSm9pbiI6dHJ1ZSwicm9vbUxpc3QiOmZhbHNlfX0.signature",
"wsUrl": "wss://upliftai-livekit-url...",
"roomName": "public-abc123-1705406400"
}
Use Cases
Public sessions are ideal for:- Product Demos - Let users try your assistant without signup
- Landing Pages - Showcase capabilities to visitors
- Kiosks - Public-facing voice interfaces
- Testing - Easy testing during development
Security Considerations
Public assistants are accessible to anyone with the assistant ID. Ensure you:
- Don’t include sensitive information in instructions
- Implement rate limiting if needed
- Monitor usage for abuse
- Use secure tool implementations
Limitations
Public sessions have the following limitations:- Cannot access private user data
- Limited to publicly safe operations
- May have usage quotas applied
- Session data is not persisted
Making an Assistant Public
To enable public access for an assistant:// Update existing assistant
await fetch(`https://api.upliftai.org/v1/realtime-assistants/${assistantId}`, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
public: true
})
});
Related Endpoints
- Create Session - For authenticated sessions
- Create Adhoc Session - For temporary configurations
⌘I
