🔌 API Документация

REST API для интеграции BugLand в ваши приложения

Базовая информация

BugLand API - это REST API, который позволяет интегрировать функционал платформы в ваши приложения.

Base URL

https://bl.isvery.fun

Аутентификация

API поддерживает два способа аутентификации:

API токены можно создать в настройках профиля. Они начинаются с префикса bl_.

⚠️ Rate Limiting (Защита от спама)

API защищен от спама с помощью rate limiting. Лимиты на IP адрес:

Endpoint Лимит
POST /api/bugs 5 запросов в минуту
POST /api/comments 10 запросов в минуту
POST /api/projects 3 запроса в час
POST /api/register 3 запроса в час
POST /api/vote 20 запросов в минуту

При превышении лимита вы получите ответ 429 Too Many Requests с заголовком Retry-After.

Аутентификация

POST /api/register

Регистрация нового пользователя

Request Body:

{ "username": "user123", "email": "user@example.com", "password": "password123" }

Response:

{ "success": true, "message": "Регистрация успешна" }
POST /api/login

Вход в систему

Request Body:

{ "username": "user123", "password": "password123" }

Response:

{ "success": true } // + Set-Cookie header с session ID
POST /api/logout

Выход из системы

Проекты

GET /api/projects

Получить список всех публичных проектов

Response:

[ { "id": 1, "name": "My Project", "slug": "my-project", "description": "Project description", "icon_url": "https://...", "is_private": 0, "owner_name": "user123", "bugs_count": 5, "created_at": "2024-01-01T00:00:00.000Z" } ]
POST /api/projects

Создать новый проект (требуется авторизация)

Request Body:

{ "name": "My Project", "description": "Project description", "icon_url": "https://...", "website": "https://...", "github": "https://github.com/...", "discord": "https://discord.gg/...", "telegram": "https://t.me/...", "youtube": "https://youtube.com/...", "vk": "https://vk.com/...", "is_private": false }
PATCH /api/projects/:id

Обновить проект (только владелец)

POST /api/projects/:id/members

Добавить участника (только владелец)

Request Body:

{ "username": "user123" }
POST /api/projects/:id/members/:userId/remove

Удалить участника (только владелец)

POST /api/projects/:id/tags

Добавить тег (только владелец)

Request Body:

{ "name": "bug", "color": "#ff0000" }

Баги

GET /api/bugs/feed

Получить ленту открытых багов (последние 20)

GET /api/projects/:projectId/bugs

Получить все баги проекта

POST /api/bugs

Создать баг репорт

Request Body:

{ "projectId": 1, "title": "Bug title", "description": "Bug description", "tags": [1, 2] }
PATCH /api/bugs/:id/status

Изменить статус бага (владелец/участник)

Request Body:

{ "status": "resolved" } // Статусы: open, in-progress, resolved, rejected
POST /api/bugs/:id/vote

Проголосовать за баг (требуется авторизация)

Request Body:

{ "vote": 1 // 1 для плюса, -1 для минуса }
GET /api/bugs/:id/comments

Получить комментарии к багу

POST /api/bugs/:id/comments

Добавить комментарий (требуется авторизация)

Request Body:

{ "content": "Comment text" }

Профиль

GET /api/profile

Получить свой профиль (требуется авторизация)

PATCH /api/profile

Обновить профиль (требуется авторизация)

Request Body:

{ "avatar_url": "https://...", "bio": "About me", "website": "https://...", "github": "https://github.com/...", "discord": "https://discord.gg/...", "telegram": "https://t.me/...", "youtube": "https://youtube.com/...", "vk": "https://vk.com/...", "twitter": "https://twitter.com/..." }

Коды ошибок

Код Описание
200 Успешный запрос
400 Неверные данные запроса
401 Требуется авторизация
403 Доступ запрещен
404 Ресурс не найден
500 Внутренняя ошибка сервера

Примеры использования

JavaScript (Fetch API)

// Создание бага const response = await fetch('/api/bugs', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ projectId: 1, title: 'Bug title', description: 'Bug description', tags: [1, 2] }) }); const result = await response.json(); console.log(result);

cURL

curl -X POST https://your-worker.workers.dev/api/bugs \ -H "Content-Type: application/json" \ -d '{ "projectId": 1, "title": "Bug title", "description": "Bug description", "tags": [1, 2] }'