sender (member email).chartsEnabled: true. A normal text channel returns 400 Channel does not support analysis posts (chartsEnabled is false) after the body validates.sender and missing metadata fail validation before the chartsEnabled check.sendMessage. Optional idempotencyKey and drawings are documented on the schema on this page.sendMessage. Keep the key server-side. sender must be a member email that exists in the community.Create Analysis Request Validation validation error. Typical detail: metadata.direction must be BULLISH or BEARISH; entryPlacement ABOVE_CURRENT or BELOW_CURRENT; expiry, preferenceText, symbol, levels required; timeframe one of M1, M5, M15, M30, H1, H2, H4, D, W, M.User not found.Channel does not support analysis posts (chartsEnabled is false). Reproduced on a channel whose topic includes "analysis". GET /v1/channels still omits chartsEnabled.201/200 create body is not documented. No chart-enabled channel was available on the throwaway community used for this pass.analysisId from the create body when present.| Status | When | Recovery |
|---|---|---|
400 validation | Missing metadata/levels/sender | Send the required fields. Direction in create body is uppercase. |
404 User not found | sender is not a member | Use an existing member email. |
400 chartsEnabled is false | Channel is not chart-enabled | Use a chart-enabled channel. GET /v1/channels will not tell you. |
401 | Missing or invalid token | Add a key with sendMessage. |
idempotencyKey when the schema supports it. Duplicate POSTs can create additional analyses.direction=bullish is lowercase; create metadata.direction is BULLISH.GET /v1/channels omits chartsEnabled.curl --location 'https://adss-integration.returning.ai/apis/v1/analysis/6502c9e514a3e564c5c09c0a/channels/656966caae59563fb291b324' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"sender": "pangray2025+t5@gmail.com",
"metadata": {
"direction": "BULLISH",
"entryPlacement": "BELOW_CURRENT",
"expiry": {
"type": "HOURS",
"hours": 24
},
"title": "GBPUSD Bullish Bounce from Support",
"preferenceText": "Price bounced from [[support_zone:demand zone]]. Entry above [[entry_line:breakout level]] with target at [[target:resistance]].",
"alternativeText": "If price breaks below support, analysis invalidated",
"comments": "Watch for volume confirmation",
"timeframe": "H1",
"symbol": "GBP/USD"
},
"levels": {
"pivot": {
"price": 1.345,
"clientObjectId": "pivot_main",
"time": "2026-01-08T12:00:00Z"
},
"resistance": {
"price": 1.35,
"clientObjectId": "res_1",
"time": "2026-01-08T14:00:00Z"
},
"support": {
"price": 1.341,
"clientObjectId": "sup_1",
"time": "2026-01-08T10:00:00Z"
}
},
"drawings": [
{
"type": "RECTANGLE",
"clientObjectId": "support_zone",
"points": [
{
"time": "2026-01-08T00:00:00Z",
"price": 1.338
},
{
"time": "2026-01-09T00:00:00Z",
"price": 1.347
}
],
"style": {
"fillColor": "#00FF33",
"borderColor": "#00FF00",
"lineWidth": 2
}
},
{
"type": "LINE",
"clientObjectId": "entry_line",
"points": [
{
"time": "2026-01-08T00:00:00Z",
"price": 1.3485
},
{
"time": "2026-01-09T00:00:00Z",
"price": 1.3505
}
],
"startHead": "NONE",
"endHead": "ARROW",
"style": {
"color": "#0000FF",
"lineWidth": 2,
"lineStyle": "DASHED"
}
},
{
"type": "HORIZONTAL_LINE",
"clientObjectId": "target",
"points": [
{
"time": "2026-01-08T10:00:00Z",
"price": 1.355
}
],
"style": {
"color": "#FF0000",
"lineWidth": 2,
"lineStyle": "SOLID"
}
}
],
"idempotencyKey": "analysis_20250109_001"
}'{
"status": "success",
"message": "Analysis created successfully",
"data": {
"analysisId": "507f1f77bcf86cd799439022",
"objectIdMap": {
"pivot_main": "60d5ec49f1b2c8b1f8e4c8a1:8",
"res_1": "60d5ec49f1b2c8b1f8e4c8a1:7",
"sup_1": "60d5ec49f1b2c8b1f8e4c8a1:0",
"res_int": "60d5ec49f1b2c8b1f8e4c8a1:5",
"sup_int": "60d5ec49f1b2c8b1f8e4c8a1:2",
"support_zone": "60d5ec49f1b2c8b1f8e4c8a2",
"entry_line": "60d5ec49f1b2c8b1f8e4c8a3",
"target": "60d5ec49f1b2c8b1f8e4c8a4"
}
}
}