Generate text, structured responses, images and speech, or transcribe audio for the selected customer. These endpoints require at least VIEWER access and use the customer's AI credentials and budget policy. Available features depend on the server version.
Send input to /api/ai/responses; use outputFormat for text or JSON-schema output.
Requests are stateless unless you supply an application-owned sessionId. Reuse that ID to continue
a conversation; sessions are scoped to the customer and current user. Expired session mappings start
a new conversation. Avoid concurrent calls with the same session ID: the last completed state write wins.
Provider and model selection are server configuration. Provider-specific request fields are rejected.
Use outputText or outputJson in the response rather than depending on provider-specific rawOutput.
sessionId, input and your function tools.status=requires_action, execute the returned toolCalls in your application.sessionId and tools, supplying all corresponding toolResults together.
Each result identifies its callId and contains the function output; input may then be omitted.status=completed.Wallboard does not execute these functions. Your application controls which tools may run and their permissions. Only custom function tools are supported; provider built-in tools are not accepted.
/api/ai/responses/stream uses server-sent events: output_text_delta carries text updates;
completed carries the result, tool calls, session ID and usage. After streaming starts, handle failures
through the SSE error event as well as HTTP errors before the stream starts.
Image results support base64 or provider-hosted URLs; persist base64 results when you need durable image data.
Speech generation returns base64 audio with its content type. Transcription accepts an audio file as multipart data.
Voice listing is free. Paid calls check the customer budget before execution and record returned usage afterward.
usage.billableTokens represents quota-equivalent units; use usage.cost for the returned USD cost and estimate flag.
Minimum role: VIEWER.
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| instructions | string |
| input | any |
| temperature | number <double> |
| topP | number <double> |
| maxOutputTokens | integer <int32> |
object (AiOutputFormat) schema must be nonempty for json_schema. | |
object | |
| sessionId | string |
| reasoningEffort | string Enum: "low" "medium" "high" |
Array of objects (AiFunctionToolDefinition) | |
object (AiToolChoice) | |
Array of objects (AiToolResult) |
{- "input": "Write a short welcome message."
}{- "outputText": "string",
- "outputJson": null,
- "rawOutput": null,
- "status": "completed",
- "sessionId": "string",
- "toolCalls": [
- {
- "callId": "string",
- "name": "string",
- "arguments": null
}
], - "usage": {
- "inputTokens": 0,
- "cachedInputTokens": 0,
- "outputTokens": 0,
- "reasoningTokens": 0,
- "totalTokens": 0,
- "billableTokens": 0,
- "serverSideToolCalls": 0,
- "cost": {
- "currency": "string",
- "amount": 0,
- "estimated": true
}
}, - "durationMs": 0
}Minimum role: VIEWER.
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| prompt required | string |
| count | integer <int32> [ 1 .. 10 ] Default: 1 |
| responseFormat | string Enum: "base64" "url" |
| quality | string Enum: "low" "medium" |
| resolution | string Enum: "1k" "2k" |
| aspectRatio | string Enum: "auto" "1:1" "16:9" "9:16" "4:3" "3:4" "3:2" "2:3" "2:1" "1:2" "19.5:9" "9:19.5" "20:9" "9:20" |
{- "prompt": "A calm blue abstract background",
- "count": 1
}{- "images": [
- {
- "url": "string",
- "base64Data": "string",
- "mimeType": "string",
- "revisedPrompt": "string"
}
], - "usage": {
- "inputTokens": 0,
- "cachedInputTokens": 0,
- "outputTokens": 0,
- "reasoningTokens": 0,
- "totalTokens": 0,
- "billableTokens": 0,
- "serverSideToolCalls": 0,
- "cost": {
- "currency": "string",
- "amount": 0,
- "estimated": true
}
}, - "durationMs": 0
}Minimum role: VIEWER.
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| text required | string <= 15000 characters |
| voice | string |
| language | string |
| format | string Enum: "mp3" "wav" "pcm" "mulaw" "alaw" |
| sampleRate | integer <int32> |
| bitRate | integer <int32> |
| speed | number <double> |
| textNormalization | boolean |
{- "text": "Welcome to our reception."
}{- "base64Audio": "string",
- "contentType": "string",
- "inputCharacters": 0,
- "usage": {
- "inputTokens": 0,
- "cachedInputTokens": 0,
- "outputTokens": 0,
- "reasoningTokens": 0,
- "totalTokens": 0,
- "billableTokens": 0,
- "serverSideToolCalls": 0,
- "cost": {
- "currency": "string",
- "amount": 0,
- "estimated": true
}
}, - "durationMs": 0
}Streams output_text_delta events followed by a completed result with status, sessionId, toolCalls and usage. Use the response and tool workflow described above. After headers are sent, failures arrive as SSE error events.
Minimum role: VIEWER.
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| instructions | string |
| input | any |
| temperature | number <double> |
| topP | number <double> |
| maxOutputTokens | integer <int32> |
object (AiOutputFormat) schema must be nonempty for json_schema. | |
object | |
| sessionId | string |
| reasoningEffort | string Enum: "low" "medium" "high" |
Array of objects (AiFunctionToolDefinition) | |
object (AiToolChoice) | |
Array of objects (AiToolResult) |
{- "input": "Write a short welcome message."
}Minimum role: VIEWER.
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
{- "voices": [
- {
- "id": "string",
- "name": "string",
- "language": "string"
}
]
}Minimum role: VIEWER.
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| file required | string <binary> |
| language | string |
| diarize | boolean |
| multichannel | boolean |
| channels | integer [ 2 .. 8 ] |
| fillerWords | boolean |
| keyterms | Array of strings |
{- "text": "string",
- "language": "string",
- "durationSeconds": 0.1,
- "words": null,
- "channels": null,
- "usage": {
- "inputTokens": 0,
- "cachedInputTokens": 0,
- "outputTokens": 0,
- "reasoningTokens": 0,
- "totalTokens": 0,
- "billableTokens": 0,
- "serverSideToolCalls": 0,
- "cost": {
- "currency": "string",
- "amount": 0,
- "estimated": true
}
}, - "durationMs": 0
}