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 }; }