List analyses
List the chart analyses in one channel, newest first, with optional filters for status, direction and timeframe.
- Method
- GET
- Path
https://api.returning.ai / v1/ analysis/ communities/ {communityId}/ channels/ {channelId} - Permission
- sendMessage
- Retries
- Read-only; exact retries are safe
When to use this
- Check what a chart channel already shows before you post another analysis.
- Find the analysis you just posted after a timeout, before you retry the create.
- Sync a channel's open (
Pending) analyses into your own tools.
Authentication#
- Header
Authorization: Bearer <API_KEY>- Permission
- sendMessageShown in the dashboard as “Send Messages”
Use a Community API key with sendMessage, shown in the dashboard as Send Messages, and keep it on your server. Send your own community's ID and one of its channels. Personal API keys are not accepted here and return 401.
Behaviour#
This read changes nothing. Results are newest first unless you set sortBy and sortOrder. Filters combine. direction is lower case (bullish), while Create analysis takes BULLISH; the upper-case value returns 400.
A channel that doesn't exist, or has no charts, returns 200 with an empty list rather than an error. Read every page up to totalPages, or while hasNextPage is true.
Request#
Path parameters#
Query parameters#
all, or leaving it out, returns every status.RulePending, Active, Expired, Cancelled or all
EgPending
metadata.direction on Create analysis.Rulebullish, bearish or all
Egbullish
RuleM1, M5, M15, M30, H1, H2, H4, D, W, M or all
EgH1
RulecreatedAt, updatedAt or status; default createdAt
EgcreatedAt
desc, the default, puts the newest first.Ruledesc or asc
Egdesc
RuleWhole number, 1 or more; default 1
Eg1
RuleDefault 20
Eg20
Headers#
sendMessage.RuleBearer <API_KEY>
curl --request GET \
--url 'https://api.returning.ai/v1/analysis/communities/66f000000000000000000010/channels/66f000000000000000000b11?status=Pending&page=1&limit=20' \
--header 'Authorization: Bearer <API_KEY>'
Response#
A 200 returns the page in data.analyses and the totals in data.pagination. Each analysis has the same fields as in Get analysis: find the title in extra.analysisType.title, the status in extra.status, and your levels and metadata in the shapes item whose key is analysis. The channel post itself is not included.
Rulesuccess
Eg"Analyses fetched successfully"
Eg{ ... }
data.analysis in Get analysis, without message. Empty when nothing matches.Eg[ ... ]
key analysis, holding levels and metadata) followed by its drawings.status, the lower-case direction, currency_pair and analysisType.title.Eg"H1"
RuleDate-time
Eg"2026-09-27T08:05:12.431Z"
RuleDate-time
Eg"2026-09-27T08:05:12.431Z"
Eg{ ... }
Eg20
Eg1
limit. 0 when nothing matches.true when a later page has analyses.true when page is above 1.{
"status": "success",
"statusCode": 200,
"message": "Analyses fetched successfully",
"data": {
"analyses": [
{
"_id": "66f000000000000000000b01",
"owner": {
"id": "3247779"
},
"tempId": null,
"serverId": "66f000000000000000000010",
"topicId": "66f000000000000000000b11",
"commentId": "66f000000000000000000b21",
"timeframe": "H1",
"users": {
"up": [],
"down": []
},
"shapes": [
{
"key": "analysis",
"levels": {
"pivot": {
"price": 1.1,
"clientObjectId": "pivot_main",
"time": "2026-09-27T08:00:00.000Z"
},
"resistance": {
"price": 1.12,
"clientObjectId": "resistance_main",
"time": "2026-09-27T08:00:00.000Z"
},
"support": {
"price": 1.08,
"clientObjectId": "support_main",
"time": "2026-09-27T08:00:00.000Z"
}
},
"metadata": {
"direction": "BULLISH",
"entryPlacement": "BELOW_CURRENT",
"expiry": {
"type": "HOURS",
"hours": 24
},
"title": "EURUSD bounce from support",
"preferenceText": "Holding above [[support_main:support]], targeting [[resistance_main:resistance]].",
"timeframe": "H1",
"symbol": "EURUSD"
},
"id": "66f000000000000000000b41",
"isRaw": true,
"timeRange": [1790496000000, 1790496312431]
},
{
"type": "HORIZONTAL_LINE",
"clientObjectId": "entry_line",
"points": [
{
"time": "2026-09-27T08:00:00.000Z",
"price": 1.095
}
],
"style": {
"color": "#2E7D32"
},
"key": "h-ray",
"id": "66f000000000000000000b31",
"isRaw": true,
"timeRange": [1790035200000, 1790956800000]
}
],
"category": "analysis",
"extra": {
"happened": "[{\"type\":\"p\",\"children\":[{\"text\":\"Holding above \"},{\"type\":\"linked-text\",\"hoverIds\":[\"66f000000000000000000b41:0\"],\"children\":[{\"text\":\"support\",\"type\":\"text\",\"id\":\"7c1e4f9a-2b6d-4e0a-9f3b-1a2c3d4e5f61\"}],\"id\":\"7c1e4f9a-2b6d-4e0a-9f3b-1a2c3d4e5f71\"},{\"text\":\", targeting \"},{\"type\":\"linked-text\",\"hoverIds\":[\"66f000000000000000000b41:7\"],\"children\":[{\"text\":\"resistance\",\"type\":\"text\",\"id\":\"7c1e4f9a-2b6d-4e0a-9f3b-1a2c3d4e5f62\"}],\"id\":\"7c1e4f9a-2b6d-4e0a-9f3b-1a2c3d4e5f72\"},{\"text\":\".\"}],\"id\":\"7c1e4f9a-2b6d-4e0a-9f3b-1a2c3d4e5f60\"}]",
"expected": "[{\"type\":\"p\",\"children\":[{\"text\":\"\"}],\"id\":\"7c1e4f9a-2b6d-4e0a-9f3b-1a2c3d4e5f80\"}]",
"comments": "[{\"type\":\"p\",\"children\":[{\"text\":\"\"}],\"id\":\"7c1e4f9a-2b6d-4e0a-9f3b-1a2c3d4e5f80\"}]",
"direction": "bullish",
"currency_pair": "EURUSD",
"horizon": "SHORT",
"userId": 3247779,
"level": [
{
"title": "1st Support",
"value": 1.08
},
{
"title": "2nd Support",
"value": 0
},
{
"title": "Intermediate Support",
"value": 0
},
{
"title": "Downside Confirmation",
"value": 0
},
{
"title": "Upside Confirmation",
"value": 0
},
{
"title": "Intermediate Resistance",
"value": 0
},
{
"title": "2nd Resistance",
"value": 0
},
{
"title": "1st Resistance",
"value": 1.12
},
{
"title": "Pivot",
"value": 1.1
}
],
"timeframe": "H1",
"analysisType": {
"expiry": 1,
"title": "EURUSD bounce from support",
"type": "bullish_bounce"
},
"status": "Pending",
"intermediate": false
},
"roles": [],
"private": false,
"timeRange": {
"x": [1790035200000, 1790956800000],
"y": [1.078, 1.122]
},
"snapshot": null,
"translationSource": "en",
"translations": {},
"createdAt": "2026-09-27T08:05:12.431Z",
"updatedAt": "2026-09-27T08:05:12.431Z",
"__v": 0
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"totalPages": 1,
"hasNextPage": false,
"hasPrevPage": false
}
}
}
Errors#
These errors have no machine-readable code; branch on the HTTP status. The validation 400 names the parameter in detail; the ID format 400 has only status, statusCode and message. The 401 for a missing or unknown key has detail and a meta object; the 401 for a missing permission has only message.
Fix the request02
Read the body:
List Analyses Request Validation validation error.: a query value is invalid, such as an upper-casedirection, astatusofHit, or apageorlimitthat isn't a whole number.detailnames the parameter.Invalid community ID formatorInvalid channel ID format: send 24-character IDs.
Token is require.) or unknown (Token is wrong.), it's a personal key, or it lacks sendMessage (Your API key does not have permission to access this action). Send Authorization: Bearer <API_KEY> with a Community API key, and add Send Messages in Settings > Integration > API Keys.Retry with backoff01
{
"meta": {
"status": "error",
"statusCode": 400
},
"message": "List Analyses Request Validation validation error.",
"detail": {
"direction": "Invalid enum value. Expected 'bullish' | 'bearish' | 'all', received 'BULLISH'"
},
"solution": "Check your query in request and try again"
}