curl --request GET \
--url https://scienter-intelligence-production.up.railway.app/sse/flags \
--header 'Authorization: Bearer <token>'import requests
url = "https://scienter-intelligence-production.up.railway.app/sse/flags"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://scienter-intelligence-production.up.railway.app/sse/flags', 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://scienter-intelligence-production.up.railway.app/sse/flags",
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://scienter-intelligence-production.up.railway.app/sse/flags"
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://scienter-intelligence-production.up.railway.app/sse/flags")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scienter-intelligence-production.up.railway.app/sse/flags")
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_body{
"seq": 123,
"type": "welcome",
"ts": 123,
"chain": "<string>",
"address": "<string>",
"score": 123,
"model_version": "<string>",
"first_seen": true,
"top_evidence": {}
}{
"error": "unauthorized",
"reason": "<string>"
}{
"state": "at_capacity",
"error": "too_many_connections",
"scope": "pro",
"limit": 100,
"current": 100,
"reason": "<string>"
}Stream rug flags (server-sent events)
A long-lived text/event-stream. The response never completes; each event arrives as an id: / event: / data: block.
OpenAPI cannot express a streaming body, so the schema below describes ONE event’s data: payload rather than the response as a whole. The playground’s Send button will hang on this endpoint by design — use curl -N or an EventSource.
See the Streaming guide for event types, resume semantics and backpressure.
curl --request GET \
--url https://scienter-intelligence-production.up.railway.app/sse/flags \
--header 'Authorization: Bearer <token>'import requests
url = "https://scienter-intelligence-production.up.railway.app/sse/flags"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://scienter-intelligence-production.up.railway.app/sse/flags', 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://scienter-intelligence-production.up.railway.app/sse/flags",
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://scienter-intelligence-production.up.railway.app/sse/flags"
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://scienter-intelligence-production.up.railway.app/sse/flags")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scienter-intelligence-production.up.railway.app/sse/flags")
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_body{
"seq": 123,
"type": "welcome",
"ts": 123,
"chain": "<string>",
"address": "<string>",
"score": 123,
"model_version": "<string>",
"first_seen": true,
"top_evidence": {}
}{
"error": "unauthorized",
"reason": "<string>"
}{
"state": "at_capacity",
"error": "too_many_connections",
"scope": "pro",
"limit": 100,
"current": 100,
"reason": "<string>"
}Authorizations
The streaming endpoints additionally accept ?token= for clients that cannot set headers, such as a browser WebSocket. Mint a separate token for that: a credential in a URL reaches access logs, proxies and browser history.
Headers
Sent automatically by EventSource on reconnect. Treated identically to since.
Query Parameters
Comma-separated chain names, or all. Omit for every chain. Unknown names are reported in the welcome event rather than silently dropped.
Resume after this sequence number. The replay window is bounded; a range already discarded is reported as a gap in the welcome event.
Bearer token, for clients that cannot set headers. The Authorization header is checked first and always wins; prefer it.
Response
The stream is open. Body is text/event-stream and does not terminate.
One event's data: payload. Chain-scoped events also carry chain.
Monotonic. Pass the last one you saw back as since to resume.
welcome, rug_flag, subscribed, heartbeat, lag, error False means an existing flag was re-scored rather than a new wallet flagged.