Все ошибки Vilna API соответствуют формату RFC 7807 Problem Details и возвращаются как application/problem+json.
Каждый ответ об ошибке содержит как минимум поля type, title и status:
{
"type": "https://docs.vilna.io/apis/problems/not-found",
"title": "Not Found",
"status": 404,
"detail": "Address not found"
}Запросы, не прошедшие валидацию входных данных, возвращают статус 400 с массивом fields, описывающим каждое невалидное поле:
{
"type": "https://docs.vilna.io/apis/problems/invalid-request",
"title": "Invalid Request",
"status": 400,
"detail": "Validation error",
"fields": [
{ "name": "value", "reason": "must not be empty" },
{ "name": "chainFamily", "reason": "must be one of: evm, bitcoin, solana, tron" }
]
}| Статус | Заголовок | Когда возникает |
|---|---|---|
| 400 | Invalid Request | Невалидные или отсутствующие поля запроса |
| 401 | Unauthorized | Отсутствующий или недействительный API-ключ |
| 403 | Forbidden | Действительный ключ, но недостаточно прав |
| 404 | Not Found | Ресурс не существует |
| 409 | Conflict | Конфликт состояния ресурса (например, адрес уже существует) |
| 422 | Unprocessable Entity | Не выполнено предусловие бизнес-логики |
| 429 | Too Many Requests | Превышен лимит запросов |
| 500 | Internal Server Error | Непредвиденная ошибка сервера |
| 502 | Bad Gateway | Вышестоящий сервис недоступен |
| 503 | Service Unavailable | Сервер временно перегружен |
При превышении лимита запросов API возвращает 429 со стандартным телом ошибки:
{
"type": "https://docs.vilna.io/apis/problems/rate-limit",
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded"
}Каждый ответ содержит заголовки с информацией о лимитах:
| Заголовок | Описание |
|---|---|
X-RateLimit-Limit | Максимальное количество запросов за окно |
X-RateLimit-Remaining | Оставшиеся запросы в текущем окне |
X-RateLimit-Reset | Unix-метка времени сброса окна |
При получении 429 дождитесь момента X-RateLimit-Reset перед повторной попыткой. Если заголовок недоступен, используйте экспоненциальную задержку с джиттером.
Ошибки 5xx указывают на временную проблему на стороне сервера. Повторяйте запросы с экспоненциальной задержкой: 1с, 2с, 4с и далее до максимума 30с, не более 5 попыток. Добавляйте случайный джиттер (например, 0-500мс) к каждой задержке, чтобы избежать эффекта «громового стада».
Идемпотентность: запросы GET и DELETE безопасны для повторной отправки. Запросы POST, PUT и PATCH могут быть неидемпотентными — проверьте документацию эндпоинта или используйте ключ идемпотентности, если он поддерживается.
SDK возвращает { data, error } из каждого вызова. Проверяйте error перед использованием data:
const { data, error } = await client.POST("/addresses/external", {
body: {
value: "0x...",
chainFamily: "evm",
label: "Treasury",
},
});
if (error) {
switch (error.status) {
case 400:
// Ошибка валидации - проверьте отдельные поля
for (const field of error.fields ?? []) {
console.error(`${field.name}: ${field.reason}`);
}
break;
case 404:
console.error("Resource not found:", error.detail);
break;
case 409:
console.error("Conflict:", error.detail);
break;
default:
console.error(`${error.title}: ${error.detail}`);
}
}curl -s -w "\n%{http_code}" "https://${VILNA_NAMESPACE}.vilna.app/addresses/invalid" \
-H "X-Api-Key: your-api-key" | jq .Ответ 404 выглядит так:
{
"type": "https://docs.vilna.io/apis/problems/not-found",
"title": "Not Found",
"status": 404,
"detail": "Address not found"
}Ошибка: 401 Unauthorized
Убедитесь, что заголовок X-Api-Key присутствует и ключ активен. Ключи привязаны к пространству имён — проверьте, что вы обращаетесь к правильному базовому URL (https://{namespace}.vilna.app).
Ошибка: 404 Not Found
Проверьте, что формат адреса соответствует сети. EVM-адреса начинаются с 0x и содержат 42 символа. TRON-адреса начинаются с T и содержат 34 символа. Адрес должен быть предварительно зарегистрирован через API.
Ошибка: 422 Unprocessable Entity
Перед мониторингом адресов в блокчейне сначала активируйте его:
curl -X POST "https://${VILNA_NAMESPACE}.vilna.app/blockchains/eip155:137/actions/activate" \
-H "X-Api-Key: your-api-key"Ошибка: Канал помечен как неработающий после повторных сбоев доставки
- Убедитесь, что URL вебхука публично доступен из интернета.
- Убедитесь, что эндпоинт возвращает HTTP 2xx в течение 10 секунд.
- Проверьте, что эндпоинт принимает
Content-Type: application/json.
Vilna использует стандарты CAIP для идентификаторов сетей, аккаунтов и активов.
| Тип | Формат | Пример |
|---|---|---|
| Сеть (CAIP-2) | {namespace}:{reference} | eip155:1 |
| Актив (CAIP-19) | {chain_id}/{asset_namespace}:{asset_reference} | eip155:1/erc20:0xa0b8... |
Типичные ошибки:
- Использование числового идентификатора сети вместо формата CAIP-2 (
1вместоeip155:1) - Отсутствие префикса пространства имён в идентификаторах активов