Time Status API
Получение информации о статусе адресов в Host Mode — для всех адресов вашего аккаунта или для одного адреса.
Доступны два эндпоинта:
- POST /apiv2/time/status — статус всех ваших адресов (с опциональной пагинацией и сводной информацией на уровне аккаунта).
- GET /apiv2/time/status/{address} — статус одного конкретного адреса.
POST /apiv2/time/status
URL эндпоинта
POST https://netts.io/apiv2/time/statusАутентификация
Передайте ваш API-ключ в теле запроса (api_key) или в заголовке X-API-KEY. IP-адрес запроса должен находиться в белом списке, настроенном для вашего API-ключа.
Тело запроса
{
"api_key": "your_api_key",
"page": 1,
"page_size": 50
}| Parameter | Type | Required | Description |
|---|---|---|---|
| api_key | string | Да | API-ключ (или заголовок X-API-KEY). |
| page | integer | Нет | Номер страницы, ≥ 1. Требует page_size. |
| page_size | integer | Нет | Количество адресов на странице, 1–100. Требует page. |
Пагинация: если указаны оба параметра page и page_size, результаты разбиваются на страницы и возвращается объект pagination. Без них возвращаются все адреса (до 1000), отсортированные по времени создания (сначала новые).
Примеры запросов
cURL (все адреса):
curl -X POST https://netts.io/apiv2/time/status \
-H "Content-Type: application/json" \
-d '{ "api_key": "YOUR_API_KEY_HERE" }'cURL (с пагинацией):
curl -X POST https://netts.io/apiv2/time/status \
-H "Content-Type: application/json" \
-d '{ "api_key": "YOUR_API_KEY_HERE", "page": 1, "page_size": 50 }'Python:
import requests
resp = requests.post(
"https://netts.io/apiv2/time/status",
json={"api_key": "YOUR_API_KEY_HERE"}, # add "page"/"page_size" to paginate
timeout=30,
)
result = resp.json()
if result["code"] == 0:
for a in result["data"]["addresses"]:
# cycles_remaining is None in infinity mode — no limit to count down
left = "unlimited" if a["cycles_remaining"] is None else f"{a['cycles_remaining']} left"
print(a["address"], a["mode"], a["status"], left,
f"spent {a['total_spent']} TRX")
else:
print("Error:", result["msg"])Node.js:
const axios = require('axios');
axios.post('https://netts.io/apiv2/time/status', { api_key: 'YOUR_API_KEY_HERE' })
.then(({ data: result }) => {
if (result.code === 0) {
result.data.addresses.forEach(a => {
// cycles_remaining is null in infinity mode — no limit to count down
const left = a.cycles_remaining === null ? 'unlimited' : `${a.cycles_remaining} left`;
console.log(a.address, a.mode, a.status, left, `spent ${a.total_spent} TRX`);
});
} else {
console.error('Error:', result.msg);
}
})
.catch(err => console.error('Request failed:', err.response?.data || err.message));Ответ
{
"code": 0,
"msg": "Status retrieved successfully",
"data": {
"summary": {
"total_addresses": 3,
"active_addresses": 2,
"infinity_mode_count": 1,
"total_cycles_ordered": 25,
"total_open_orders": 3
},
"order_statistics": {
"total_orders": 12,
"open_orders": 3,
"closed_orders": 9,
"total_cycles_in_open_orders": 25,
"total_delegations": 340,
"total_amount_spent": 1502.4471
},
"addresses": [
{
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"status": "active",
"mode": "normal",
"cycles_ordered": 25,
"cycle_set": 25,
"cycles_completed": 10,
"cycles_remaining": 15,
"cycles_total_lifetime": 214,
"current_cycle_no": 3,
"open_orders": 1,
"total_spent": 962.1184,
"bandwidth_delegated": true,
"created_at": "2026-07-08T12:00:00.000000",
"updated_at": "2026-07-09T10:00:00.000000"
},
{
"address": "TYn8Y3khEsLJW2ChVWFMSMeRDow6KcbMTF",
"status": "active",
"mode": "infinity",
"cycles_ordered": null,
"cycle_set": 0,
"cycles_completed": 83,
"cycles_remaining": null,
"cycles_total_lifetime": 115,
"current_cycle_no": 5,
"open_orders": 1,
"total_spent": 519.1234,
"bandwidth_delegated": true,
"created_at": "2026-07-08T08:00:00.000000",
"updated_at": "2026-07-09T09:30:00.000000"
}
],
"timestamp": "2026-07-09T12:34:50.123456"
}
}С пагинацией data также содержит:
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 150,
"total_pages": 3,
"has_next": true,
"has_prev": false
}Поля summary
| Поле | Описание |
|---|---|
| total_addresses | Количество адресов в вашем аккаунте |
| active_addresses | Адреса, активные в данный момент |
| infinity_mode_count | Активные адреса, работающие в режиме infinity |
| total_cycles_ordered | Сумма заказанных циклов по открытым заказам (заказы infinity исключены) |
| total_open_orders | Количество открытых заказов по всем адресам |
Поля order_statistics
| Поле | Описание |
|---|---|
| total_orders | Все созданные за все время заказы |
| open_orders | Открытые в данный момент заказы |
| closed_orders | Закрытые заказы |
| total_cycles_in_open_orders | Циклы по открытым заказам (infinity исключены) |
| total_delegations | Фактически выполненные делегирования по всем вашим адресам |
| total_amount_spent | Фактически списано, в TRX — сумма, реально списанная с вашего баланса |
Поля объекта адреса
| Parameter | Type | Description |
|---|---|---|
| address | string | Адрес TRON |
| status | string | "active" или "inactive" |
| mode | string | "normal", "infinity" или "off" (когда неактивен) |
| cycles_ordered | integer | null | Заказанные циклы в открытых заказах. null в режиме infinity |
| cycle_set | integer | Значение cycle_set, сохраненное для адреса |
| cycles_completed | integer | Использованные циклы с момента последнего запуска адреса. Сбрасывается при остановке режима или исчерпании заказанных циклов |
| cycles_remaining | integer | null | cycles_ordered − cycles_completed. null в режиме infinity |
| cycles_total_lifetime | integer | Все делегирования для этого адреса за всю его историю. Никогда не сбрасывается |
| current_cycle_no | integer | null | Порядковый номер текущего делегирования с момента последнего запуска адреса. null, когда нет активного делегирования |
| open_orders | integer | Количество открытых заказов для адреса |
| total_spent | number | Фактически списано за этот адрес, в TRX |
| bandwidth_delegated | boolean | Делегирован ли Bandwidth в данный момент. Bandwidth предоставляется бесплатно и включен в стоимость цикла |
| created_at | string | ISO-метка времени добавления |
| updated_at | string | ISO-метка времени последнего обновления |
Режим Infinity. Значения
cycles_orderedиcycles_remainingравныnull, а не0— лимит для обратного отсчета отсутствует. Интерпретируйтеnullкак «неограниченно» и не расценивайте это как «циклы закончились». Полеcycles_completedпо-прежнему возвращает реальное число.
Три счетчика циклов, три значения.
cycles_completedсчитает циклы только с момента последнего запуска адреса,cycles_total_lifetimeведет подсчет за всю историю, аcurrent_cycle_noуказывает на номер текущего делегирования. Они и должны различаться — для одного адреса вы можете одновременно увидеть значения83,115и5.
Ошибки
Все ошибки возвращают code = -1:
| msg | Причина |
|---|---|
API key required in body or X-API-KEY header | API-ключ не передан |
Invalid API key or IP not in whitelist | Ошибка аутентификации |
Page number must be >= 1 | page меньше 1 |
Page size must be >= 1 | page_size меньше 1 |
Page size must be <= 100 | page_size больше 100 |
Database error getting status | Временная ошибка на стороне сервера — повторите попытку |
Internal server error | Непредвиденная ошибка — повторите попытку или обратитесь в поддержку |
GET /apiv2/time/status/
Статус для одного адреса.
URL эндпоинта
GET https://netts.io/apiv2/time/status/{address}Аутентификация
Передайте ваш API-ключ в заголовке X-API-KEY. IP-адрес запроса должен находиться в белом списке.
Примеры запросов
curl -X GET "https://netts.io/apiv2/time/status/TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE" \
-H "X-API-KEY: YOUR_API_KEY_HERE"import requests
address = "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
resp = requests.get(
f"https://netts.io/apiv2/time/status/{address}",
headers={"X-API-KEY": "YOUR_API_KEY_HERE"},
timeout=30,
)
print(resp.json())Ответ
{
"code": 0,
"msg": "Address status retrieved successfully",
"data": {
"address_info": {
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"status": "active",
"mode": "normal",
"cycles_ordered": 25,
"cycle_set": 25,
"cycles_completed": 10,
"cycles_remaining": 15,
"cycles_total_lifetime": 214,
"current_cycle_no": 3,
"open_orders": 1,
"total_spent": 962.1184,
"bandwidth_delegated": true,
"created_at": "2026-07-08T12:00:00.000000",
"updated_at": "2026-07-09T10:00:00.000000"
},
"timestamp": "2026-07-09T12:34:50.123456"
}
}Поле address_info использует те же поля, что и объект адреса выше.
Ошибки
code = -1, например:
| msg | Причина |
|---|---|
API key required in X-API-KEY header | Отсутствует заголовок |
Invalid API key or IP not in whitelist | Ошибка аутентификации |
Address not found or doesn't belong to user | Неизвестный адрес для этого аккаунта |
Database error getting address status | Временная ошибка на стороне сервера — повторите попытку |
Internal server error | Непредвиденная ошибка — повторите попытку или обратитесь в поддержку |
Коды состояния HTTP
Оба эндпоинта возвращают свои ошибки с кодом HTTP 200 и отрицательным code — проверяйте code, а не статус HTTP. Тело ошибки всегда содержит "data": null.
Некоторые ошибки возвращаются до того, как запрос достигает эндпоинта. Они используют статус, отличный от 200, и другой формат тела:
| HTTP | Тело ответа | Причина |
|---|---|---|
| 402 | {"detail": {"code": 1004, "msg": "Insufficient funds. Minimum balance is 4 TRX. Please top up your account."}} | Баланс аккаунта слишком мал |
| 403 | {"detail": {"code": 1005, "msg": "API key is blocked. Contact support."}} | API-ключ заблокирован — обратитесь в поддержку |
| 422 | {"detail": [ … ]} | Только POST — тело запроса не прошло валидацию: поле имеет неверный тип, либо page/page_size были переданы без api_key. Обратите внимание, что в этом ответе нет поля code |
Связанные эндпоинты
- POST /apiv2/time/add — добавить адрес
- POST /apiv2/time/order — купить циклы
- POST /apiv2/time/infinitystart — включить режим infinity
- POST /apiv2/time/stop — остановить адрес
- POST /apiv2/time/delete — удалить адрес
Примечания
- Эндпоинты статуса предназначены только для чтения.
- Возвращаются только адреса, принадлежащие вашему аккаунту.
- Временные метки представляют собой строки в формате ISO 8601.