К содержимому

Обменять код на ключ

POST/api/v1/device-auth/token

Доступ
Без ключа

Без ключа: доказательство — одноразовый код и PKCE-верификатор. Один раз на код, в течение 5 минут после «Подключить» на сайте. Выдаёт ключ с правами приложения (account:read + content:write) на 365 дней с именем «lacuna для Windows · {компьютер}» и отзывает прежний ключ того же приложения на том же компьютере. Повторный обмен кода отклоняется, а с верным верификатором отзывает и выданный им ключ — если ответ потерялся, подключись заново. До 20 обменов с одного адреса за 10 минут.

Пример запроса

curl -X POST "https://lac.pics/api/v1/device-auth/token" \
  -H "Content-Type: application/json" \
  -d '{
  "code": "Qm3xT7kP9wZ2vL5nR8cB1dF4gH6jK0sA3eY7uI2oM5q",
  "verifier": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
}'

Тело запроса

application/jsonобязательный

  • codestringобязательныйтолько в запросе

    Одноразовый код из адреса возврата в приложение.

    шаблон ^[A-Za-z0-9_-]{43}$

  • verifierstringобязательныйтолько в запросе

    PKCE-верификатор, S256-хеш которого был подтверждён.

    шаблон ^[A-Za-z0-9_-]{43,128}$

Ответы

  • 200ГотовоDeviceAuthToken
    • tokenstringобязательныйтолько в ответе

      Ключ API, показывается один раз. Храни его как пароль (в Windows — в диспетчере учётных данных), никогда в адресе или логе.

      шаблон ^lac_api_[A-Za-z0-9_-]{43}$

    • keyApiCredentialобязательный

      Метаданные ключа.

      ApiCredential 6 полей
      • idstringобязательный

        id файла или заметки.

      • namestringобязательный

        Название ключа; у ключа приложения — «lacuna для Windows · {компьютер}».

        длина 1–100

      • scopesмассив stringобязательный

        Права.

        значения: "content:read" "content:write" "content:delete" "account:read"

        1–4 элементов · без повторов

      • expiresAtstring · date-timeобязательный

        После этого момента — 401 API_KEY_EXPIRED. Ключ приложения живёт 365 дней и продлевается сам за 30 дней до конца.

      • clientstringобязательныйили null

        Приложение ключа подключения; null — ключ из формы.

        значения: "windows"

      • deviceNamestringобязательныйили null

        Компьютер; null — ключ из формы.

        длина 1–128

    • userobjectобязательный

      Аккаунт.

      1 поле
      • usernamestringобязательный

        Никнейм.

  • 400Некорректный запросDEVICE_AUTH_INVALIDINVALID_JSON
  • 413Слишком большой файл или нет места
  • 429Слишком много запросовRATE_LIMITED
  • 500Сбой на сервере
  • 503Сервис занят или недоступен

Пример ответа

200 · application/json
{
  "token": "lac_api_NEW_KEY_SHOWN_ONCE",
  "key": {
    "id": "cmf8a1x2k0001q7lh5b2n8r6t",
    "name": "Upload script",
    "scopes": [
      "content:write"
    ],
    "expiresAt": "2026-12-26T09:30:00.000Z",
    "client": null,
    "deviceName": null
  },
  "user": {
    "username": "alex"
  }
}

Коды ошибок

КодСтатусТекст
DEVICE_AUTH_INVALID400Код подключения недействителен или устарел. Начни подключение в приложении заново.
INVALID_JSON400Не удалось прочитать JSON запроса.
RATE_LIMITED429Слишком много запросов. Повтори позже.
Обменять код на ключ: POST /api/v1/device-auth/token · API lacuna