API Wuna — программный доступ | Документация

API

Обновлено: 5 августа 2026

API нужен, чтобы получать данные аккаунта в свои системы: вывести список сайтов на внутренний дашборд, следить за остатком кредитов, забирать историю платежей в бухгалтерию.

Что умеет API и кому он доступен

Через API вы читаете то, что и так видно в кабинете: профиль, остаток кредитов, тариф, проекты, файлы проектов, уведомления и платежи. Разница только в том, что данные приходят в машинном виде и их можно подставить в свою программу, таблицу или отчёт.

API только читает данныеЧерез него нельзя создать проект, изменить сайт или запустить сборку — все действия по-прежнему выполняются в кабинете. Это сделано намеренно: ключ, попавший в чужие руки, не сможет ничего сломать.

Доступ к API включён на тарифе «Бизнес». Что входит в остальные тарифы — в разделе «Тарифы».

Ключи доступа

Любой запрос к API подписывается ключом. Ключи создаются и удаляются в кабинете.

  1. Откройте «API-ключи» в меню слева и нажмите «Создать ключ».
  2. Назовите ключ так, чтобы потом было понятно, где он используется — например, «Интеграция с CRM».
  3. При желании задайте срок действия — 30, 90 или 365 дней. По истечении ключ перестаёт работать.
  4. Скопируйте и сохраните ключ Он показывается один раз, сразу после создания.
Форма создания API-ключа: поле имени и выбор срока действия
Создание ключа: имя и срок действия
Список созданных API-ключей в кабинете
Список ключей: видно название, начало ключа и когда он использовался в последний раз
Храните ключ как парольНе публикуйте его в коде сайта, в репозитории или в переписке. Если ключ мог утечь — удалите его в кабинете и создайте новый. Одновременно можно держать до 10 ключей.

Аутентификация и лимиты

Базовый адрес

https://app.wuna.ai/api/v1

Заголовок авторизации

Ключ передаётся в заголовке Authorization как Bearer-токен:

Authorization: Bearer sk_ваш_ключ
Accept: application/json

Ограничение частоты

На каждый ключ действует лимит 60 запросов в минуту. Текущее состояние возвращается в заголовках ответа:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57

При превышении приходит ответ 429 с заголовком Retry-After — в нём число секунд до следующей попытки.

Постраничная выдача

Списочные методы отдают данные страницами. Управляют этим параметры page и per_page (максимум 50). Рядом с данными приходят блоки links и meta с общим количеством записей и ссылками на соседние страницы.

Проверка запросов прямо в кабинете

В разделе «Документация API» есть встроенная песочница: вставляете ключ и выполняете запросы, не выходя из браузера. Ключ хранится только в памяти вкладки.

Встроенный справочник по API в кабинете Wuna
Справочник по API в кабинете — с возможностью протестировать запрос

Список методов

Все методы работают только на чтение и вызываются методом GET от базового адреса. Ниже — полный список с примерами ответов.

GET /me — данные аккаунта

{
  "data": {
    "id": 15,
    "name": "Иван Петров",
    "email": "user@example.com",
    "locale": "ru",
    "plan": "Стандарт",
    "created_at": "2026-07-27T09:50:16+00:00"
  }
}

GET /credits — остаток кредитов

{
  "data": {
    "credits_remaining": 470935,
    "purchased_credits": 0,
    "credits_used": 29065,
    "monthly_limit": 500000,
    "is_unlimited": false,
    "usage_percentage": 5.8,
    "using_own_key": false,
    "resets_at": "2026-08-01T00:00:00+00:00"
  }
}

resets_at — когда лимит обновится, usage_percentage — процент израсходованного.

GET /subscription — тариф и подписка

{
  "data": {
    "plan": {
      "name": "Pro",
      "slug": "pro",
      "price": "990.00",
      "billing_period": "monthly"
    },
    "subscription": {
      "status": "active",
      "starts_at": "2026-07-01T10:00:00+00:00",
      "renewal_at": "2026-08-01T10:00:00+00:00",
      "ends_at": null,
      "cancelled_at": null
    }
  }
}

Если действующего тарифа нет — например, пробный период закончился, — subscription равен null.

GET /projects — список проектов

Параметры: page, per_page (по умолчанию 15, максимум 50). Сортировка — по дате изменения, свежие первыми.

{
  "data": [
    {
      "id": "019fa2fb-758d-72a3-8614-3a474cb0f59f",
      "name": "Кофейня Roasted",
      "description": "Лендинг с меню и картой",
      "build_status": "completed",
      "output_target": "website",
      "is_public": true,
      "subdomain": "roasted",
      "custom_domain": null,
      "public_url": "https://roasted.wuna.ai",
      "published_at": "2026-07-27T10:14:02+00:00",
      "created_at": "2026-07-27T09:50:16+00:00",
      "updated_at": "2026-07-27T10:14:02+00:00"
    }
  ],
  "links": { "first": "...", "last": "...", "prev": null, "next": null },
  "meta": { "current_page": 1, "per_page": 15, "total": 2, "last_page": 1 }
}

Поле public_url заполняется только у опубликованных проектов; если подключён свой домен, там будет он.

GET /projects/{id} — один проект

Возвращает те же поля, что и список, но одним объектом в data. Чужой или несуществующий проект отдаёт 404.

GET /projects/{id}/files — файлы проекта

{
  "data": [
    {
      "id": 41,
      "name": "logo.png",
      "size": 18422,
      "mime_type": "image/png",
      "source": "upload",
      "checksum": "9f2c...",
      "url": "https://app.wuna.ai/api/files/...",
      "created_at": "2026-07-27T09:58:41+00:00"
    }
  ]
}

size — в байтах.

GET /projects/{id}/files/{fileId} — один файл

Карточка файла. Файл из другого проекта отдаёт 404, даже если он ваш.

GET /notifications — уведомления

{
  "data": [
    {
      "id": 7,
      "type": "build_completed",
      "title": "Сборка завершена",
      "message": "Проект «Кофейня Roasted» готов",
      "action_url": "/project/019fa2fb-...",
      "read_at": null,
      "created_at": "2026-07-27T10:02:11+00:00"
    }
  ]
}

По умолчанию 20 записей на страницу. read_at равен null у непрочитанных.

GET /invoices — история платежей

{
  "data": [
    {
      "id": 12,
      "invoice_number": "INV-2026-0012",
      "amount": "990.00",
      "currency": "RUB",
      "status": "completed",
      "type": "subscription",
      "payment_method": "yookassa",
      "plan": "Стандарт",
      "transaction_date": "2026-07-01T10:00:00+00:00"
    }
  ]
}

Отдаются только успешные платежи, свежие первыми.

Ошибки

API отвечает стандартными кодами HTTP. Тело ошибки — JSON с полем message:

{ "message": "Project not found." }
Код Что означает Что делать
401 Ключ не передан, недействителен или просрочен. Проверьте заголовок Authorization и срок действия ключа.
403 Тариф не включает доступ к API. Перейдите на тариф с поддержкой API.
404 Объект не существует или принадлежит другому аккаунту. Проверьте идентификатор проекта или файла.
429 Превышен лимит 60 запросов в минуту. Подождите столько секунд, сколько указано в Retry-After.

Примеры кода

curl

curl https://app.wuna.ai/api/v1/projects 
  -H "Authorization: Bearer sk_ваш_ключ" 
  -H "Accept: application/json"

JavaScript

const res = await fetch('https://app.wuna.ai/api/v1/credits', {
  headers: {
    Authorization: `Bearer ${process.env.WUNA_API_KEY}`,
    Accept: 'application/json',
  },
});

if (!res.ok) throw new Error(`Wuna API: ${res.status}`);

const { data } = await res.json();
console.log(`Осталось кредитов: ${data.credits_remaining}`);

Python

import os, requests

headers = {
    "Authorization": f"Bearer {os.environ['WUNA_API_KEY']}",
    "Accept": "application/json",
}

r = requests.get("https://app.wuna.ai/api/v1/projects", headers=headers, timeout=15)
r.raise_for_status()

for p in r.json()["data"]:
    print(p["name"], "→", p["public_url"] or "не опубликован")

Обход всех страниц

async function allProjects(key) {
  const out = [];
  let page = 1;

  while (true) {
    const res = await fetch(
      `https://app.wuna.ai/api/v1/projects?page=${page}&per_page=50`,
      { headers: { Authorization: `Bearer ${key}`, Accept: 'application/json' } },
    );

    const body = await res.json();
    out.push(...body.data);

    // meta.last_page — сколько всего страниц
    if (page >= body.meta.last_page) break;
    page++;
  }

  return out;
}
Если запрос не проходитСначала повторите его в песочнице раздела «Документация API» — так сразу видно, дело в ключе или в самом запросе. Если не помогает, напишите в поддержку и приложите код ответа.
Команда Wuna Документацию ведут разработчики платформы. Нашли неточность или остался вопрос — напишите на support@wuna.ai.

Создайте свой проект
уже сегодня

Опишите задачу одним предложением и получите готовый продукт через несколько минут. Это бесплатно.

Начать бесплатно