GuVault API Documentation
Современное решение для безопасного хранения и обмена файлами с временными ссылками доступа. Поддержка CORS, защита паролем, автоматическая очистка и Telegram архивирование.
🎯 Обзор
GuVault — это современный API для безопасного хранения и обмена файлами и сообщениями с временными ссылками доступа.
Загрузка файлов
Любого типа до 100MB с настройками безопасности
Временные сообщения
Создание защищенных сообщений с ограничениями
Защита паролем
Argon2 хеширование с настраиваемыми попытками
Автоочистка
Автоматическое удаление истекших файлов
⚡ Быстрый старт
Base URL
https://api.guvault.com
Пример загрузки файла
curl -X POST https://api.guvault.com/upload/file \ -F "file=@document.pdf" \ -F "expires_in_hours=24" \ -F "password=secret123"
Пример загрузки сообщения
curl -X POST https://api.guvault.com/upload/message \ -H "Content-Type: application/json" \ -d '{ "content": "Секретное сообщение!", "expires_in_hours": 48, "password": "mypassword" }'
❤️ Health Check
GET /health
GETПроверка состояния API сервера.
Ответ
HTTP/1.1 200 OK Content-Type: text/plain OK
Пример
curl https://api.guvault.com/health
📁 Загрузка файлов
POST /upload/file
POSTЗагрузка файла с возможностью настройки параметров безопасности.
Параметры
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
file |
File | ✅ | Файл для загрузки (до 100MB) |
expires_in_hours |
Integer | ❌ | Срок действия в часах |
max_downloads |
Integer | ❌ | Максимальное количество скачиваний |
password |
String | ❌ | Пароль для доступа (до 100 символов) |
alias |
String | ❌ | Пользовательский алиас (3-64 символа) |
Пример запроса
curl -X POST https://api.guvault.com/upload/file \ -F "file=@document.pdf" \ -F "expires_in_hours=24" \ -F "max_downloads=5" \ -F "password=secret123" \ -F "alias=my-document"
Ответ
{ "id": "550e8400-e29b-41d4-a716-446655440000", "access_code": "file_my-document", "download_url": "/download/file_my-document", "expires_at": "2025-09-30T20:18:18Z", "max_downloads": 5 }
💬 Загрузка сообщений
POST /upload/message
POSTСоздание временного сообщения с настройками безопасности.
Тело запроса
{ "content": "Текст сообщения", "expires_in_hours": 24, "max_downloads": 10, "password": "secret123", "alias": "my-message" }
Пример запроса
curl -X POST https://api.guvault.com/upload/message \ -H "Content-Type: application/json" \ -d '{ "content": "Это секретное сообщение!", "expires_in_hours": 48, "max_downloads": 3, "password": "mypassword", "alias": "secret-note" }'
Ответ
{ "id": "550e8400-e29b-41d4-a716-446655440001", "access_code": "msg_secret-note", "download_url": "/download/msg_secret-note", "expires_at": "2025-10-01T20:18:18Z", "max_downloads": 3 }
⬇️ Скачивание
GET /download/{access_code}
GETПолучение файла или сообщения по коду доступа.
Параметры URL
access_code
— код доступа (например:file_abc123
илиmsg_my-message
)
Для защищенного контента (POST)
{ "password": "secret123" }
Примеры
# Скачивание файла curl https://api.guvault.com/download/file_my-document # Скачивание с паролем curl -X POST https://api.guvault.com/download/file_my-document \ -H "Content-Type: application/json" \ -d '{"password": "secret123"}' # Скачивание сообщения curl https://api.guvault.com/download/msg_secret-note
🔍 Проверка алиаса
POST /alias/check
POSTПроверка доступности пользовательского алиаса.
Тело запроса
{ "type": "file", "alias": "my-alias" }
Ответ
{ "available": false, "suggestions": ["my-alias1", "my-alias2", "my-alias3"] }
Пример
curl -X POST https://api.guvault.com/alias/check \ -H "Content-Type: application/json" \ -d '{ "type": "file", "alias": "my-document" }'
⚠️ Коды ошибок
Код | Описание | Причина |
---|---|---|
200 |
✅ Успех | Операция выполнена успешно |
400 |
❌ Неверный запрос | Некорректные параметры |
401 |
🔒 Неавторизован | Неверный пароль |
404 |
🔍 Не найдено | Файл/сообщение не существует |
409 |
⚡ Конфликт | Алиас уже занят |
410 |
⏰ Истек срок | Файл/сообщение удален |
413 |
📏 Слишком большой | Файл превышает 100MB |
500 |
💥 Ошибка сервера | Внутренняя ошибка |
📝 Примеры использования
🌐 JavaScript (Fetch API)
// Загрузка файла async function uploadFile(file, options = {}) { const formData = new FormData(); formData.append('file', file); if (options.expiresInHours) { formData.append('expires_in_hours', options.expiresInHours); } if (options.password) { formData.append('password', options.password); } const response = await fetch('https://api.guvault.com/upload/file', { method: 'POST', body: formData }); return await response.json(); } // Загрузка сообщения async function uploadMessage(content, options = {}) { const response = await fetch('https://api.guvault.com/upload/message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ content, ...options }) }); return await response.json(); }
🐍 Python (requests)
import requests import json class GuVaultAPI: def __init__(self, base_url="https://api.guvault.com"): self.base_url = base_url def upload_file(self, file_path, **options): """Загрузка файла""" with open(file_path, 'rb') as f: files = {'file': f} data = {k: v for k, v in options.items() if v is not None} response = requests.post( f"{self.base_url}/upload/file", files=files, data=data ) return response.json() def upload_message(self, content, **options): """Загрузка сообщения""" data = {'content': content, **options} response = requests.post( f"{self.base_url}/upload/message", json=data ) return response.json() # Пример использования api = GuVaultAPI() # Загрузка файла result = api.upload_file( 'document.pdf', expires_in_hours=24, max_downloads=5, password='secret123', alias='my-document' ) print(f"Файл загружен: {result['download_url']}")
🛠️ SDK и библиотеки
React Hook
import { useState, useCallback } from 'react'; interface UploadOptions { expiresInHours?: number; maxDownloads?: number; password?: string; alias?: string; } export function useGuVault() { const [loading, setLoading] = useState(false); const [error, setError] = useState<string | null>(null); const uploadFile = useCallback(async (file: File, options: UploadOptions = {}) => { setLoading(true); setError(null); try { const formData = new FormData(); formData.append('file', file); Object.entries(options).forEach(([key, value]) => { if (value !== undefined) { formData.append(key, String(value)); } }); const response = await fetch('https://api.guvault.com/upload/file', { method: 'POST', body: formData }); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } return await response.json(); } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error'); throw err; } finally { setLoading(false); } }, []); return { uploadFile, loading, error }; }