Appearance
Are you an LLM? You can read better optimized documentation at /api/reference.md for this page in Markdown format
API Reference
Nine read-only endpoints at https://app.telegramtometatrader.com/api/v1.
All requests require Authorization: Bearer ttmt_live_…. See Authentication and Errors.
Endpoints
| Endpoint | Description |
|---|---|
| GET /accounts | List your connected MetaAPI accounts |
| GET /signals | List signals with filters and cursor pagination |
| GET /signals/{id} | Full signal including raw Telegram message text |
| GET /trades | List trades with filters and cursor pagination |
| GET /trades/{id} | Fat trade: signal + positions + orders embedded |
| GET /trades/{id}/positions | Positions for a specific trade |
| GET /trades/{id}/orders | Orders for a specific trade |
| GET /positions | Currently-open positions across your accounts |
| GET /stream | SSE live event feed |
Pagination
List endpoints (/signals, /trades) use cursor-only keyset pagination, newest first.
json
{
"data": [ /* items */ ],
"has_more": true,
"next_cursor": "MjAyNi0wNi0wOFQwOToxNDoyMlp8N2Y4ZQ"
}Pass ?after=<next_cursor> for the next page. Pass ?limit= (1–100, default 50). The cursor is opaque — never build it yourself.
after_date / before_date are a date window for filtering — a different concept from the after pagination cursor.
Filters quick reference
| Parameter | Endpoints | Notes |
|---|---|---|
status | signals, trades | validated enum; unknown → 400 |
symbol | trades | exact match |
channel_id | signals, trades | UUID |
account_id | signals, trades, positions, stream | DB UUID from GET /accounts |
after_date / before_date | signals, trades | ISO-8601 |
limit / after | signals, trades | pagination |
include | trades | signal,positions,orders |
Money and shapes
All financial objects carry currency, account_id, and account_label. Amounts are in the account's currency. Null TP/SL are JSON null, never 0.
Terminal GET /trades/{id} and GET /signals/{id} return a strong ETag and answer If-None-Match with 304. Active records return no-cache.
List your MetaAPI accounts
List signals
GET
/signals
Authorizations
bearerAuth
TypeHTTP (bearer)
Parameters
Query Parameters
status
Typestring
Enum
pendingqueuedparsingexecutingexecutedexecuted_awaiting_modificationexecuted_via_followuppending_followupexecution_pausedfaileddelivery_failedrejectedignoredskippedchannel_id
Typestring
format
uuidaccount_id
Typestring
format
uuidafter_date
Typestring
format
date-timebefore_date
Typestring
format
date-timelimit
Typeinteger
minimum
1maximum
100default
50after
opaque pagination cursor (next_cursor)
Typestring
Responses
OKSchema JSON JSON
application/json
{
"data": [
],
"has_more": true,
"next_cursor": "string"
}
List trades
GET
/trades
Authorizations
bearerAuth
TypeHTTP (bearer)
Parameters
Query Parameters
status
Typestring
Enum
pendingactiveclosed_profitclosed_lossfailedneeds_recoveryclosed_timeout_cleanupclosed_unfilledsymbol
Typestring
channel_id
Typestring
format
uuidaccount_id
Typestring
format
uuidafter_date
Typestring
format
date-timebefore_date
Typestring
format
date-timelimit
Typeinteger
minimum
1maximum
100default
50after
opaque pagination cursor (next_cursor)
Typestring
include
comma list of signal,positions,orders
Typestring
Responses
OKSchema JSON JSON
application/json
{
"data": [
],
"has_more": true,
"next_cursor": "string"
}
Currently-open positions across accounts
GET
/positions
Each position includes a nested signal sub-object with the originating Telegram message ID. See SignalSummary for null semantics.
Authorizations
bearerAuth
TypeHTTP (bearer)
Parameters
Query Parameters
account_id
Typestring
format
uuidResponses
OKSchema JSON JSON
application/json
{
"data": [
{
"id": "string",
"metaapi_position_id": "string",
"symbol": "string",
"direction": "string",
"volume": 0,
"entry_price": 0,
"current_price": 0,
"unrealized_pl": 0,
"status": "string",
"trade_id": "string",
"signal": {
"signal_id": "string",
"telegram_message_id": 0
},
"account_id": "string",
"account_label": "string",
"currency": "string"
}
]
}
SSE live feed (text/event-stream)
GET
/stream
Events carry a signal sub-object (SignalSummary) on position_update, position_closed, tp_hit, trade_executed, trade_finalized, breakeven_failed, and order_fill. For breakeven_set, signal is always null (event carries only a DB position UUID, not the MetaAPI ID required for watchdog lookup).
Authorizations
bearerAuth
TypeHTTP (bearer)
Parameters
Query Parameters
account_id
Typestring
format
uuidResponses
event stream
text/event-stream

