Skip to content

Ошибки

Когда что-то идёт не так, API возвращает JSON-объект с описанием ошибки и соответствующим HTTP-статусом.

Формат ошибки

json
{
  "error": {
    "code": 400,
    "type": "bad_request",
    "message": "invalid request body",
    "fields": [
      {
        "field": "phone",
        "message": "phone is required"
      }
    ]
  }
}
ПолеОписание
codeHTTP-статус код
typeТип ошибки (строка)
messageЧитаемое описание ошибки
fieldsСписок ошибок валидации (только для 400)

HTTP-статусы

СтатусКогда возникает
400 Bad RequestНеверный формат запроса, невалидные поля
401 UnauthorizedКлюч не передан, неверный или отключён
403 ForbiddenКлюч не имеет нужного разрешения
404 Not FoundРесурс не найден (SMS, устройство)
409 ConflictКонфликт — например, устройство уже существует
422 UnprocessableЛогическая ошибка — например, устройство офлайн
429 Too Many RequestsПревышен лимит запросов
500 Internal Server ErrorВнутренняя ошибка сервера

Примеры ошибок

Ключ не передан — 401

json
{
  "error": {
    "code": 401,
    "type": "unauthorized",
    "message": "api key is required: use Authorization: Bearer <key> header or ?token= query param"
  }
}

Нет разрешения — 403

json
{
  "error": {
    "code": 403,
    "type": "forbidden",
    "message": "insufficient permissions"
  }
}

Ошибка валидации — 400

json
{
  "error": {
    "code": 400,
    "type": "validation_error",
    "message": "validation failed",
    "fields": [
      {
        "field": "phone",
        "message": "phone must be a valid phone number"
      },
      {
        "field": "message",
        "message": "message is required"
      }
    ]
  }
}

Ресурс не найден — 404

json
{
  "error": {
    "code": 404,
    "type": "not_found",
    "message": "sms not found"
  }
}

Советы по обработке ошибок

javascript
async function apiRequest(url, options) {
  const response = await fetch(url, options);

  if (!response.ok) {
    const body = await response.json();
    const err = body.error;

    // Ошибки валидации — показываем пользователю детали
    if (err.code === 400 && err.fields) {
      const details = err.fields.map(f => `${f.field}: ${f.message}`).join('\n');
      throw new Error(`Ошибка валидации:\n${details}`);
    }

    // Авторизация — перенаправляем на страницу с ключами
    if (err.code === 401 || err.code === 403) {
      throw new Error('Проверьте API-ключ и его разрешения');
    }

    throw new Error(err.message);
  }

  // 204 No Content — тело ответа пустое
  if (response.status === 204) return null;

  return response.json();
}

GoSMS — управление Android-устройствами для автоматизации отправки SMS