curl --request POST \
--url https://recoup-api.vercel.app/api/chat \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"prompt": "<string>",
"messages": [
{
"id": "<string>",
"content": "<string>"
}
],
"artistId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "openai/gpt-5-mini",
"excludeTools": [
"create_scheduled_actions"
],
"roomId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://recoup-api.vercel.app/api/chat"
payload = {
"prompt": "<string>",
"messages": [
{
"id": "<string>",
"content": "<string>"
}
],
"artistId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "openai/gpt-5-mini",
"excludeTools": ["create_scheduled_actions"],
"roomId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
messages: [{id: '<string>', content: '<string>'}],
artistId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
model: 'openai/gpt-5-mini',
excludeTools: ['create_scheduled_actions'],
roomId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://recoup-api.vercel.app/api/chat', 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://recoup-api.vercel.app/api/chat",
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([
'prompt' => '<string>',
'messages' => [
[
'id' => '<string>',
'content' => '<string>'
]
],
'artistId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'model' => 'openai/gpt-5-mini',
'excludeTools' => [
'create_scheduled_actions'
],
'roomId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://recoup-api.vercel.app/api/chat"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\"\n }\n ],\n \"artistId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"openai/gpt-5-mini\",\n \"excludeTools\": [\n \"create_scheduled_actions\"\n ],\n \"roomId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://recoup-api.vercel.app/api/chat")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\"\n }\n ],\n \"artistId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"openai/gpt-5-mini\",\n \"excludeTools\": [\n \"create_scheduled_actions\"\n ],\n \"roomId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://recoup-api.vercel.app/api/chat")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\"\n }\n ],\n \"artistId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"openai/gpt-5-mini\",\n \"excludeTools\": [\n \"create_scheduled_actions\"\n ],\n \"roomId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body"<string>"{
"status": "error",
"message": "<string>"
}Stream Chat
Stream AI-powered chat responses using the Recoup chat system. This endpoint mirrors the request payload of the Chat Generate API but returns a streaming response compatible with the Vercel AI SDK createUIMessageStreamResponse. The stream emits UI message parts encoded as data chunks that can be parsed with createUIMessageStreamParser.
curl --request POST \
--url https://recoup-api.vercel.app/api/chat \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"prompt": "<string>",
"messages": [
{
"id": "<string>",
"content": "<string>"
}
],
"artistId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "openai/gpt-5-mini",
"excludeTools": [
"create_scheduled_actions"
],
"roomId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://recoup-api.vercel.app/api/chat"
payload = {
"prompt": "<string>",
"messages": [
{
"id": "<string>",
"content": "<string>"
}
],
"artistId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "openai/gpt-5-mini",
"excludeTools": ["create_scheduled_actions"],
"roomId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
messages: [{id: '<string>', content: '<string>'}],
artistId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
model: 'openai/gpt-5-mini',
excludeTools: ['create_scheduled_actions'],
roomId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://recoup-api.vercel.app/api/chat', 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://recoup-api.vercel.app/api/chat",
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([
'prompt' => '<string>',
'messages' => [
[
'id' => '<string>',
'content' => '<string>'
]
],
'artistId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'model' => 'openai/gpt-5-mini',
'excludeTools' => [
'create_scheduled_actions'
],
'roomId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://recoup-api.vercel.app/api/chat"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\"\n }\n ],\n \"artistId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"openai/gpt-5-mini\",\n \"excludeTools\": [\n \"create_scheduled_actions\"\n ],\n \"roomId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://recoup-api.vercel.app/api/chat")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\"\n }\n ],\n \"artistId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"openai/gpt-5-mini\",\n \"excludeTools\": [\n \"create_scheduled_actions\"\n ],\n \"roomId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://recoup-api.vercel.app/api/chat")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"messages\": [\n {\n \"id\": \"<string>\",\n \"content\": \"<string>\"\n }\n ],\n \"artistId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"openai/gpt-5-mini\",\n \"excludeTools\": [\n \"create_scheduled_actions\"\n ],\n \"roomId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body"<string>"{
"status": "error",
"message": "<string>"
}Authorizations
Your Recoup API key. Learn more.
Body
Chat stream request
Request body for chat streaming. Exactly one of 'prompt' or 'messages' must be provided.
Single text prompt for the assistant. Required if 'messages' is not provided.
Array of UIMessage objects for context. Required if 'prompt' is not provided.
Show child attributes
Show child attributes
The unique identifier of the artist (optional)
The AI model to use for text generation (optional)
"openai/gpt-5-mini"
Array of tool names to exclude from execution
["create_scheduled_actions"]
UUID of the chat room. If not provided, one will be generated automatically.
Response
Streaming response with UI message parts. Events include: message-start (assistant begins message), message-delta (incremental updates), message-end (assistant finishes message), error (stream error), and metadata (usage data).
Server-Sent Events stream containing UI message parts
