curl --request GET \
--url https://api.centaur.io/v2/feed \
--header 'x-api-key: <api-key>'import requests
url = "https://api.centaur.io/v2/feed"
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/v2/feed', 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/v2/feed",
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/v2/feed"
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/v2/feed")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.centaur.io/v2/feed")
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": [
{
"id": "<string>",
"writtenAt": "2023-11-07T05:31:56Z",
"source": {
"platform": "TELEGRAM",
"url": "<string>",
"text": "<string>",
"attachments": [
{
"type": "<string>",
"url": "<string>"
}
],
"identity": {
"platform": "TELEGRAM",
"sourceIdentityId": "<string>",
"displayName": "<string>",
"handle": "<string>",
"avatarUrl": "<string>",
"profileUrl": "<string>",
"audienceCount": 123
},
"x": {
"urls": [
{
"url": "<string>",
"displayUrl": "<string>",
"attachmentUrls": [
"<string>"
]
}
],
"replyTo": {
"tweetId": "<string>",
"userId": "<string>",
"handle": "<string>"
},
"quote": {
"status": "unavailable",
"tweetId": "<string>",
"url": "<string>"
}
}
},
"trader": {
"id": 123,
"name": "<string>",
"slug": "<string>",
"avatarUrl": "<string>"
},
"events": [
{
"id": 123,
"type": "open",
"price": 123,
"quoteSymbol": "<string>",
"timeOfEvent": "2023-11-07T05:31:56Z",
"direction": "long",
"assumed": true,
"retrospective": true,
"positionId": 123,
"traderId": 123,
"assetId": 123,
"asset": {
"id": 123,
"name": "<string>",
"symbol": "<string>",
"slug": "<string>",
"logoUrl": "<string>"
}
}
]
}
],
"meta": {
"hasMore": true,
"nextCursor": "<string>",
"serverTime": "2023-11-07T05:31:56Z",
"appliedTimeRange": {
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z"
},
"dataComputedAt": "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": "RATE_LIMITED",
"message": "Rate limit exceeded"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "AUTHENTICATION_UNAVAILABLE",
"message": "Authentication is temporarily unavailable"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}List the curated partner feed
Returns presentation-ready source-message groups ordered by message post time. Use cursor for scroll-back pagination or since for ingestion-watermark change polling with whole-group upsert semantics. source.text is the source message as stored: a subset of Telegram HTML for Telegram, escaped plain text for X. Sanitize it with an allowlist, or strip the tags and decode the entities, before display; never insert it as raw HTML.
curl --request GET \
--url https://api.centaur.io/v2/feed \
--header 'x-api-key: <api-key>'import requests
url = "https://api.centaur.io/v2/feed"
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/v2/feed', 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/v2/feed",
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/v2/feed"
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/v2/feed")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.centaur.io/v2/feed")
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": [
{
"id": "<string>",
"writtenAt": "2023-11-07T05:31:56Z",
"source": {
"platform": "TELEGRAM",
"url": "<string>",
"text": "<string>",
"attachments": [
{
"type": "<string>",
"url": "<string>"
}
],
"identity": {
"platform": "TELEGRAM",
"sourceIdentityId": "<string>",
"displayName": "<string>",
"handle": "<string>",
"avatarUrl": "<string>",
"profileUrl": "<string>",
"audienceCount": 123
},
"x": {
"urls": [
{
"url": "<string>",
"displayUrl": "<string>",
"attachmentUrls": [
"<string>"
]
}
],
"replyTo": {
"tweetId": "<string>",
"userId": "<string>",
"handle": "<string>"
},
"quote": {
"status": "unavailable",
"tweetId": "<string>",
"url": "<string>"
}
}
},
"trader": {
"id": 123,
"name": "<string>",
"slug": "<string>",
"avatarUrl": "<string>"
},
"events": [
{
"id": 123,
"type": "open",
"price": 123,
"quoteSymbol": "<string>",
"timeOfEvent": "2023-11-07T05:31:56Z",
"direction": "long",
"assumed": true,
"retrospective": true,
"positionId": 123,
"traderId": 123,
"assetId": 123,
"asset": {
"id": 123,
"name": "<string>",
"symbol": "<string>",
"slug": "<string>",
"logoUrl": "<string>"
}
}
]
}
],
"meta": {
"hasMore": true,
"nextCursor": "<string>",
"serverTime": "2023-11-07T05:31:56Z",
"appliedTimeRange": {
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z"
},
"dataComputedAt": "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": "RATE_LIMITED",
"message": "Rate limit exceeded"
},
"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
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"
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"
Positive integer asset 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 assetRefs for slugs, tickers, or legacy symbols. Do not supply assetIds and assetRefs together, even if one is empty.
"1,34"
Asset slugs, tickers, or legacy symbols as strings only. REST accepts comma-separated values or repeated parameters. MCP accepts a string array, e.g. ["AAPL", "crypto-btc", "700"]. Values are trimmed and matched case-insensitively, in order: slug, ticker, then legacy symbol. Numeric text such as "700" is a literal reference, never an ID. Maximum 200 non-empty supplied entries per field, including duplicates. Do not supply assetIds and assetRefs together, even if one is empty. Unknown references match nothing. Retry ambiguous references with a returned numeric ID in assetIds, omitting assetRefs. Find names with asset discovery search.
"AAPL,crypto-btc,700"