Subscribe to Stream
curl --request GET \
--url https://macaly.com/api/chat/{chatId}/subscribe \
--header 'Authorization: Bearer <token>'import requests
url = "https://macaly.com/api/chat/{chatId}/subscribe"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://macaly.com/api/chat/{chatId}/subscribe', 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://macaly.com/api/chat/{chatId}/subscribe",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://macaly.com/api/chat/{chatId}/subscribe"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://macaly.com/api/chat/{chatId}/subscribe")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://macaly.com/api/chat/{chatId}/subscribe")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyEndpointy
Subscribe to stream
Sledování odpovědí AI v reálném čase
GET
/
api
/
chat
/
{chatId}
/
subscribe
Subscribe to Stream
curl --request GET \
--url https://macaly.com/api/chat/{chatId}/subscribe \
--header 'Authorization: Bearer <token>'import requests
url = "https://macaly.com/api/chat/{chatId}/subscribe"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://macaly.com/api/chat/{chatId}/subscribe', 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://macaly.com/api/chat/{chatId}/subscribe",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://macaly.com/api/chat/{chatId}/subscribe"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://macaly.com/api/chat/{chatId}/subscribe")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://macaly.com/api/chat/{chatId}/subscribe")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyUmožňuje odebírat aktivní stream chatu a přijímat odpovědi AI v reálném čase. Alternativa k opakovanému dotazování přes endpoint Get Status.
Požadavek
GET /api/chat/{chatId}/subscribe
Hlavičky
| Hlavička | Povinná | Popis |
|---|---|---|
Authorization | Ano | Bearer macaly_... |
Parametry cesty
| Parametr | Typ | Popis |
|---|---|---|
chatId | string | ID chatu vrácené z POST /api/chat |
Příklad požadavku
curl -N https://www.macaly.com/api/chat/abc123/subscribe \
-H "Authorization: Bearer macaly_abc123..."
const response = await fetch(
`https://www.macaly.com/api/chat/${chatId}/subscribe`,
{
headers: {
'Authorization': 'Bearer macaly_abc123...',
},
}
);
if (response.status === 204) {
console.log('No active stream');
return;
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
for (const line of chunk.split('\n')) {
if (line.startsWith('0:')) {
// Text content
const text = JSON.parse(line.slice(2));
process.stdout.write(text);
}
}
}
import requests
response = requests.get(
f'https://www.macaly.com/api/chat/{chat_id}/subscribe',
headers={
'Authorization': 'Bearer macaly_abc123...',
},
stream=True,
)
if response.status_code == 204:
print('No active stream')
else:
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('0:'):
import json
text = json.loads(line[2:])
print(text, end='')
Odpověď
Vrací Server-Sent Events (SSE) stream s průběhem zpracování a odpověďmi AI.Formát streamu
Stream používá protokol Vercel AI SDK v4 data stream. Každý chunk má na začátku prefix určující typ obsahu:| Prefix | Popis |
|---|---|
0: | Textový obsah |
2: | Datové objekty (např. { chatId }) |
8: | Anotace a metadata |
Příklad streamu
2:[{"chatId":"abc123"}]
0:"I'll create a landing page for you."
0:" Let me start by setting up the project structure."
8:{"type":"tool-call","toolName":"WriteFile",...}
0:" Done! Your landing page is ready."
Stavové kódy
| Kód | Popis |
|---|---|
| 200 | Úspěch (streaming odpověď) |
| 204 | Žádný aktivní stream – zpracování už skončilo, nebo ještě nezačalo |
| 401 | Neplatný nebo chybějící API klíč |
| 403 | Chat nepatří vašemu týmu |
| 404 | Chat nenalezen |
| 429 | Překročen limit požadavků |
Poznámky
- Stream se ukončí, jakmile AI dokončí práci
- Pokud tento endpoint zavoláte po dokončení zpracování, vrátí se
204 No Content - Pro jednodušší implementaci stačí průběžně kontrolovat stav přes endpoint Get Status
Byla tato stránka užitečná?
⌘I