curl --request GET \
--url https://api.centaur.io/v1/messages \
--header 'x-api-key: <api-key>'import requests
url = "https://api.centaur.io/v1/messages"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.centaur.io/v1/messages', 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://api.centaur.io/v1/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.centaur.io/v1/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.centaur.io/v1/messages")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.centaur.io/v1/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"results": [
{
"traderId": 123,
"id": "<string>",
"source": {
"platform": "TELEGRAM",
"identity": {
"platform": "TELEGRAM",
"sourceIdentityId": "<string>",
"displayName": "<string>",
"handle": "<string>",
"avatarUrl": "<string>",
"profileUrl": "<string>",
"audienceCount": 123
},
"preview": {
"platform": "TELEGRAM",
"writtenAt": "2023-11-07T05:31:56Z",
"url": "<string>",
"text": "<string>",
"attachments": [
{
"type": "<string>",
"url": "<string>"
}
],
"isEdited": true,
"isReply": true,
"isQuote": true,
"isRepost": true
}
}
}
],
"meta": {
"hasMore": true,
"nextCursor": "<string>",
"serverTime": "2023-11-07T05:31:56Z",
"appliedTimeRange": {
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z"
}
}
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "INVALID_CURSOR",
"message": "Malformed cursor"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Unauthorized"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "Forbidden"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Unauthorized",
"details": "<unknown>"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "AUTHENTICATION_UNAVAILABLE",
"message": "Authentication is temporarily unavailable"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}List source message feed
Returns eligible source messages by source platform, message timestamp, or direct Source Message ID hydration. Trader IDs select messages independently of signal visibility. Asset, direction, and event-type filters are not supported.
curl --request GET \
--url https://api.centaur.io/v1/messages \
--header 'x-api-key: <api-key>'import requests
url = "https://api.centaur.io/v1/messages"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.centaur.io/v1/messages', 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://api.centaur.io/v1/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.centaur.io/v1/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.centaur.io/v1/messages")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.centaur.io/v1/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"results": [
{
"traderId": 123,
"id": "<string>",
"source": {
"platform": "TELEGRAM",
"identity": {
"platform": "TELEGRAM",
"sourceIdentityId": "<string>",
"displayName": "<string>",
"handle": "<string>",
"avatarUrl": "<string>",
"profileUrl": "<string>",
"audienceCount": 123
},
"preview": {
"platform": "TELEGRAM",
"writtenAt": "2023-11-07T05:31:56Z",
"url": "<string>",
"text": "<string>",
"attachments": [
{
"type": "<string>",
"url": "<string>"
}
],
"isEdited": true,
"isReply": true,
"isQuote": true,
"isRepost": true
}
}
}
],
"meta": {
"hasMore": true,
"nextCursor": "<string>",
"serverTime": "2023-11-07T05:31:56Z",
"appliedTimeRange": {
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z"
}
}
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "INVALID_CURSOR",
"message": "Malformed cursor"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Unauthorized"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "Forbidden"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Unauthorized",
"details": "<unknown>"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "AUTHENTICATION_UNAVAILABLE",
"message": "Authentication is temporarily unavailable"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}Query Parameters
Filter messages by their assigned traders, independently of signal visibility. Positive integer trader IDs only. REST accepts comma-separated values or repeated parameters. MCP accepts an array. Numeric strings become IDs. Maximum 200 non-empty supplied entries per field, including duplicates. Use traderRefs for slugs. Do not supply traderIds and traderRefs together, even if one is empty.
"7,12"
Filter messages by their assigned traders, independently of signal visibility. Trader slugs as strings only. REST accepts comma-separated values or repeated parameters. MCP accepts a string array, e.g. ["alpha-trades", "700"]. Values are trimmed and matched case-insensitively. Numeric text such as "700" is a literal slug, never an ID. Maximum 200 non-empty supplied entries per field, including duplicates. Do not supply traderIds and traderRefs together, even if one is empty. Unknown references match nothing. Retry ambiguous references with a returned numeric ID in traderIds, omitting traderRefs. Find names or handles with trader directory search.
"alpha-trades"