FastPaste API

FastPaste REST API v1

Начало работы

API FastPaste позволяет программно создавать, получать и удалять пасты.

Для использования API необходим API-ключ. Обратитесь к администратору.

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

Все запросы к API требуют заголовок X-API-Key:

X-API-Key: lq_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Base URL

https://fastpaste.xyz/api/v1

Формат ответа

Все ответы в формате JSON:

{ "error": false, "message": "...", "data": { ... } }

POST /api/v1/paste

Создаёт новую пасту.

Текстовая паста (JSON)

ПараметрТипОбязательноОписание
contentstringДаСодержимое пасты (мин. 3, макс. 4.00 MB)
titlestringНетЗаголовок пасты
descriptionstringНетОписание (макс. 500 символов)
expirystringНетДлительность: 10m, 30m, 1h, 3h, 6h, 12h, 1d, 2d, 3d, 1w, 2w, 1m, never (по умолчанию: 1d)
passwordstringНетЗащита паролем
burnbooleanНетПросмотр один раз и удаление. Если true, паста автоматически удаляется после первого просмотра (по умолчанию: false).
encryptbooleanНетСквозное шифрование. Если true, содержимое должно быть зашифрованной на стороне клиента строкой «fpe1:...» (см. раздел E2E). По умолчанию: false.
keystringНетКлюч расшифровки в формате base64url. Необязательный; используется только для добавления #ключ к возвращаемой ссылке и никогда не сохраняется на сервере. Оставьте пустым, чтобы ключ оставался полностью на стороне клиента.
downloadablebooleanНетДелает E2E-зашифрованный paste доступным для скачивания (по умолчанию: false). Предназначен для использования с encrypt=true; для незашифрованных paste не имеет эффекта, и ответ содержит предупреждение (незашифрованные paste и так всегда доступны для скачивания).
languagestringНетЯзык подсветки синтаксиса (напр. python, javascript). Определяется автоматически, если не указан; для E2E сохраняется для подсветки после расшифровки.
publicbooleanНетЕсли true, paste попадает в публичный архив и sitemap. По умолчанию false. Игнорируется при использовании пароля, самоуничтожения или шифрования.
slugstringНетПользовательский короткий адрес (например, «my-notes» → /view/my-notes). Если занят, назначается похожий.
Пример запроса (cURL)
curl -X POST https://fastpaste.xyz/api/v1/paste \ -H "Content-Type: application/json" \ -H "X-API-Key: lq_your_api_key_here" \ -d '{ "content": "print(\"Hello, World!\")", "title": "Test Paste", "expiry": "1d", "burn": true }'
Ответ (201 Created)
{ "error": false, "message": "Paste created successfully.", "data": { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "raw_url": "https://fastpaste.xyz/raw/aB3cD4eF5g", "download_url": "https://fastpaste.xyz/download/aB3cD4eF5g", "expires_at": "2025-01-02 15:30:00", "sha256": "abc123...", "burn_after_read": true, "encrypted": false, "downloadable": false } }

Загрузка файла (multipart/form-data)

ПараметрТипОбязательноОписание
filefileДаФайл для загрузки (макс. 10.00 MB)
descriptionstringНетОписание файла
expirystringНетСрок
passwordstringНетЗащита паролем
burnbooleanНетПросмотр один раз и удаление. Если true, паста автоматически удаляется после первого просмотра (по умолчанию: false).
encryptbooleanНетСквозное шифрование. Если true, содержимое должно быть зашифрованной на стороне клиента строкой «fpe1:...» (см. раздел E2E). По умолчанию: false.
keystringНетКлюч расшифровки в формате base64url. Необязательный; используется только для добавления #ключ к возвращаемой ссылке и никогда не сохраняется на сервере. Оставьте пустым, чтобы ключ оставался полностью на стороне клиента.
downloadablebooleanНетДелает E2E-зашифрованный paste доступным для скачивания (по умолчанию: false). Предназначен для использования с encrypt=true; для незашифрованных paste не имеет эффекта, и ответ содержит предупреждение (незашифрованные paste и так всегда доступны для скачивания).
Пример (файл через cURL)
curl -X POST https://fastpaste.xyz/api/v1/paste \ -H "X-API-Key: lq_your_api_key_here" \ -F "[email protected]" \ -F "expiry=1w"

Сквозное шифрование (E2E)

Зашифруйте содержимое на своей стороне с помощью AES-GCM (256 бит), затем отправьте шифртекст как content. Сервер хранит только зашифрованные данные и никогда не видит открытый текст. Используется тот же формат, что и в веб-интерфейсе.

Формат шифртекста: fpe1:<base64(iv)>:<base64(шифртекст)> — где iv это случайное 12-байтовое значение, а шифртекст включает тег GCM.

Ключ расшифровки никогда не сохраняется на сервере. Если вы передаёте необязательный параметр key, возвращаемый url содержит его как #ключ и ссылка сразу пригодна к использованию; ключ используется только для построения ссылки и не сохраняется. Для более строгого E2E не передавайте key и добавляйте часть #ключ к ссылке самостоятельно.
Скачивание: E2E paste по умолчанию НЕ доступны для скачивания (/download возвращает 403, а download_url в ответе равен null). Если paste создан с downloadable=true, /download отдаёт зашифрованное содержимое «fpe1:...» (расшифруйте его сами своим ключом); кнопка «Скачать» на странице просмотра расшифровывает содержимое в браузере с помощью #ключа и скачивает его как обычный текст.
Если downloadable=true отправлен с незашифрованным paste (encrypt=false), запрос всё равно принимается, но ответ содержит поле «warning».
Пример запроса (cURL)
curl -X POST https://fastpaste.xyz/api/v1/paste \ -H "Content-Type: application/json" \ -H "X-API-Key: lq_your_api_key_here" \ -d '{ "content": "fpe1:<base64-iv>:<base64-ciphertext>", "encrypt": true, "key": "<base64url-key>", "downloadable": true, "expiry": "1d" }'
Ответ (201 Created)
{ "error": false, "message": "Paste created successfully.", "data": { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g#<base64url-key>", "raw_url": "https://fastpaste.xyz/raw/aB3cD4eF5g", "download_url": "https://fastpaste.xyz/download/aB3cD4eF5g", "expires_at": "2025-01-02 15:30:00", "sha256": "abc123...", "burn_after_read": false, "encrypted": true, "downloadable": true } }

GET /api/v1/paste/{id}

Получает сведения и содержимое пасты.

Пасты с паролем нельзя получить через API.
Пасты с однократным просмотром безвозвратно удаляются сразу после первого успешного получения — через эту конечную точку или /raw.
Пример запроса (cURL)
curl https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g \ -H "X-API-Key: lq_your_api_key_here"
Ответ (200 OK)
{ "error": false, "data": { "paste_id": "aB3cD4eF5g", "title": "Test Paste", "description": null, "content": "print(\"Hello, World!\")", "content_type": "text", "original_filename": null, "language": "python", "file_size": 22, "sha256": "abc123...", "created_at": "2025-01-01 15:30:00", "expires_at": "2025-01-02 15:30:00", "view_count": 5, "burn_after_read": false, "burned": false, "encrypted": false, "downloadable": false } }

PUT /api/v1/paste/{id}

Обновляет существующий paste (только принадлежащие этому API-ключу). Отправляйте только изменяемые поля: content (только текст), title, description, expiry, burn, password, language, downloadable. Если content «fpe1:...», добавьте encrypt и key.

Пример запроса (cURL)
curl -X PUT https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g \ -H "Content-Type: application/json" \ -H "X-API-Key: lq_your_api_key_here" \ -d '{ "title": "Updated title", "content": "new content", "expiry": "1w" }'
Ответ (200 OK)
{ "error": false, "message": "Paste updated successfully.", "data": { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "encrypted": false } }

GET /api/v1/pastes

Список paste, созданных этим API-ключом (сначала новые). Пагинация: page и limit (1–100).

Пример запроса (cURL)
curl "https://fastpaste.xyz/api/v1/pastes?page=1&limit=20" \ -H "X-API-Key: lq_your_api_key_here"
Ответ (200 OK)
{ "error": false, "data": [ { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "title": "Test Paste", "content_type": "text", "language": "python", "file_size": 22, "created_at": "2025-01-01 15:30:00", "expires_at": "2025-01-02 15:30:00", "view_count": 5, "encrypted": false, "downloadable": false } ], "pagination": { "page": 1, "limit": 20, "total": 1, "total_pages": 1 } }

GET /api/v1/paste/{id}/raw

Возвращает содержимое пасты в виде обычного текста. Подходит для скриптов и автоматизации.

Пример
curl https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g/raw \ -H "X-API-Key: lq_your_api_key_here"

Ответ: Content-Type: text/plain

DELETE /api/v1/paste/{id}

Удаляет пасту. Можно удалить только пасты, созданные с тем же API-ключом.

Пример
curl -X DELETE https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g \ -H "X-API-Key: lq_your_api_key_here"
Ответ (200 OK)
{"error": false, "message": "Paste deleted."}

POST /api/v1/cli

Быстрое создание paste из командной строки (curl). Отправляйте содержимое как сырое тело запроса из stdin или как поле формы (content/paste/f:1). Ответ по умолчанию — URL в виде обычного текста.

API-ключ необязателен: работает анонимно без ключа (ограничение по IP + проверка содержимого). При наличии ключа использование засчитывается ему. Анонимный доступ можно отключить в админ-панели.

Параметр

ПараметрТипОбязательноОписание
(gövde)raw / formДаСодержимое paste. Для сырого тела рекомендуется text/plain (чтобы сохранить = и &).
expirystringНетДлительность: 10m, 30m, 1h, 3h, 6h, 12h, 1d, 2d, 3d, 1w, 2w, 1m, never (по умолчанию: 1d)
titlestringНетЗаголовок пасты
langstringНетЯзык подсветки синтаксиса (напр. python, javascript). Определяется автоматически, если не указан; для E2E сохраняется для подсветки после расшифровки.
burnbooleanНетПросмотр один раз и удаление. Если true, паста автоматически удаляется после первого просмотра (по умолчанию: false).
Пример запроса (cURL)
# stdin → URL (text/plain önerilir) echo "merhaba" | curl -H "Content-Type: text/plain" --data-binary @- https://fastpaste.xyz/api/v1/cli # dosya yükle curl -H "Content-Type: text/plain" --data-binary @app.log https://fastpaste.xyz/api/v1/cli # sprunge/ix.io tarzı echo "merhaba" | curl -F 'f:1=<-' https://fastpaste.xyz/api/v1/cli # seçeneklerle cat x.py | curl -H "Content-Type: text/plain" --data-binary @- 'https://fastpaste.xyz/api/v1/cli?expiry=1w&lang=python' # API anahtarı ile (kota anahtara işlenir) cat x | curl -H "X-API-Key: lq_xxx" -H "Content-Type: text/plain" --data-binary @- https://fastpaste.xyz/api/v1/cli
Ответ
https://fastpaste.xyz/view/aB3cD4eF5g

Accept: application/json veya ?json=1 ile JSON döner. GET /api/v1/cli kullanım örneklerini gösterir.

Разрешённые расширения файлов

.txt .log .json .xml .yaml .yml .ini .cfg .conf .md .csv .sql .js .ts .html .htm .css .py .java .go .rs .c .cpp .h .hpp .lua .rb .jsx .tsx .vue .svelte .scss .sass .less .toml .gitignore .dockerfile .makefile .bat .ps1 .r .swift .kt .kts .scala .pl .pm .tcl .awk .sed .diff .patch .tf .hcl .proto .graphql .tex .bib .rst .adoc .org .wiki .properties .gradle .cmake .mak

Файлы проверяются по расширению и MIME-типу. Принимаются только текстовые/кодовые файлы.

Ограничения частоты запросов

Для каждого API-ключа можно задать отдельные ограничения частоты:

Тип лимитаОписание
Лимит в часМаксимум запросов в час (0 = без ограничений)
Дневной лимитМаксимум запросов в день
Месячный лимитМаксимум запросов в месяц

При превышении лимита возвращается ответ 429 Too Many Requests.

Коды ошибок

КодЗначение
400Неверный запрос (отсутствующий или неправильный параметр)
401Отсутствует API-ключ
403Недействительный/неактивный API-ключ или доступ запрещён
404Паста не найдена или истекла
405Метод HTTP не разрешён
413Файл слишком большой
429Превышен лимит запросов
500Ошибка сервера
503API отключён

Уведомления Webhook

Для каждого API-ключа можно настроить отдельный URL вебхука. При создании новой пасты отправляется POST-запрос:

{ "event": "paste_created", "paste_id": "aB3cD4eF5g", "type": "text", "source": "api", "api_key_name": "My App", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "raw_url": "https://fastpaste.xyz/raw/aB3cD4eF5g", "download_url": "https://fastpaste.xyz/download/aB3cD4eF5g", "expires_at": "2025-01-02 15:30:00", "created_at": "2025-01-01 15:30:00", "ip": "1.2.3.4" }

Получить API-ключ

Свяжитесь с администратором, чтобы получить API-ключ или увеличить лимит.

Связаться с администратором