FastPaste API

FastPaste REST API v1

Démarrage

L'API FastPaste vous permet de créer, récupérer et supprimer des pastes de manière programmée.

Une clé API est requise pour utiliser l'API. Contactez l'administrateur.

Authentification

Toutes les requêtes API nécessitent l'en-tête X-API-Key :

X-API-Key: lq_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Base URL

https://fastpaste.xyz/api/v1

Format de réponse

Toutes les réponses sont au format JSON :

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

POST /api/v1/paste

Crée un nouveau paste.

Paste texte (JSON)

ParamètreTypeObligatoireDescription
contentstringOuiContenu du paste (min 3, max 4.00 MB)
titlestringNonTitre du paste
descriptionstringNonDescription (max 500 caractères)
expirystringNonDurée : 10m, 30m, 1h, 3h, 6h, 12h, 1d, 2d, 3d, 1w, 2w, 1m, never (défaut : 1d)
passwordstringNonProtection par mot de passe
burnbooleanNonVoir une fois puis supprimer. Si true, le paste est supprimé automatiquement après la première consultation (défaut : false).
encryptbooleanNonChiffrement de bout en bout. Si true, le contenu doit être une chaîne « fpe1:... » chiffrée côté client (voir la section E2E). Défaut : false.
keystringNonClé de déchiffrement base64url. Facultatif ; utilisée uniquement pour ajouter #clé au lien renvoyé et jamais stockée sur le serveur. Laissez vide pour garder la clé entièrement côté client.
downloadablebooleanNonRend un paste chiffré E2E téléchargeable (défaut : false). À utiliser avec encrypt=true ; sur les pastes non chiffrés, il n'a aucun effet et la réponse contient un avertissement (les pastes non chiffrés sont de toute façon toujours téléchargeables).
languagestringNonLangage de coloration syntaxique (ex. python, javascript). Détecté automatiquement si omis ; pour l'E2E, il est stocké pour la coloration après déchiffrement.
publicbooleanNonSi true, le paste est listé dans l'archive publique et le sitemap. false par défaut. Ignoré si un mot de passe, l'autodestruction ou le chiffrement est utilisé.
slugstringNonAdresse courte personnalisée (p. ex. « mes-notes » → /view/mes-notes). Si elle est prise, une adresse similaire est attribuée.
Exemple de requête (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 }'
Réponse (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 } }

Envoi de fichier (multipart/form-data)

ParamètreTypeObligatoireDescription
filefileOuiFichier à envoyer (max 10.00 MB)
descriptionstringNonDescription du fichier
expirystringNonExpiration
passwordstringNonProtection par mot de passe
burnbooleanNonVoir une fois puis supprimer. Si true, le paste est supprimé automatiquement après la première consultation (défaut : false).
encryptbooleanNonChiffrement de bout en bout. Si true, le contenu doit être une chaîne « fpe1:... » chiffrée côté client (voir la section E2E). Défaut : false.
keystringNonClé de déchiffrement base64url. Facultatif ; utilisée uniquement pour ajouter #clé au lien renvoyé et jamais stockée sur le serveur. Laissez vide pour garder la clé entièrement côté client.
downloadablebooleanNonRend un paste chiffré E2E téléchargeable (défaut : false). À utiliser avec encrypt=true ; sur les pastes non chiffrés, il n'a aucun effet et la réponse contient un avertissement (les pastes non chiffrés sont de toute façon toujours téléchargeables).
Exemple (fichier avec 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"

Chiffrement de bout en bout (E2E)

Chiffrez le contenu de votre côté avec AES-GCM (256 bits), puis envoyez le texte chiffré dans content. Le serveur ne stocke que les données chiffrées et ne voit jamais le texte en clair. Le même format que l'interface web est utilisé.

Format du texte chiffré : fpe1:<base64(iv)>:<base64(texte chiffré)> — où iv est une valeur aléatoire de 12 octets et le texte chiffré inclut le tag GCM.

La clé de déchiffrement n'est jamais stockée sur le serveur. Si vous envoyez le paramètre facultatif key, l'url renvoyée la contient sous forme de #clé et le lien est directement utilisable ; la clé sert uniquement à construire le lien, elle n'est pas stockée. Pour un E2E plus strict, omettez key et ajoutez vous-même la partie #clé au lien.
Téléchargement : les pastes E2E ne sont PAS téléchargeables par défaut (/download renvoie 403 et download_url est null dans la réponse). S'ils sont créés avec downloadable=true, /download fournit le contenu chiffré « fpe1:... » (déchiffrez-le vous-même avec votre clé) ; le bouton Télécharger de la page de consultation déchiffre le contenu dans le navigateur avec la #clé et le télécharge en texte clair.
Si downloadable=true est envoyé avec un paste non chiffré (encrypt=false), la requête est quand même acceptée, mais la réponse contient un champ « warning ».
Exemple de requête (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" }'
Réponse (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}

Récupère les détails et le contenu d'un paste.

Les pastes protégés par mot de passe ne peuvent pas être récupérés via l'API.
Les pastes à lecture unique sont définitivement supprimés juste après la première récupération réussie, que ce soit via ce point de terminaison ou /raw.
Exemple de requête (cURL)
curl https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g \ -H "X-API-Key: lq_your_api_key_here"
Réponse (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}

Met à jour une paste existante (uniquement celles de cette clé API). N'envoyez que les champs à modifier : content (texte uniquement), title, description, expiry, burn, password, language, downloadable. Si le contenu est « fpe1:... », ajoutez encrypt et key.

Exemple de requête (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" }'
Réponse (200 OK)
{ "error": false, "message": "Paste updated successfully.", "data": { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "encrypted": false } }

GET /api/v1/pastes

Liste les pastes créées avec cette clé API (les plus récentes d'abord). Pagination : page et limit (1–100).

Exemple de requête (cURL)
curl "https://fastpaste.xyz/api/v1/pastes?page=1&limit=20" \ -H "X-API-Key: lq_your_api_key_here"
Réponse (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

Retourne le contenu du paste en texte brut. Adapté aux scripts et à l'automatisation.

Exemple
curl https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g/raw \ -H "X-API-Key: lq_your_api_key_here"

Réponse : Content-Type: text/plain

DELETE /api/v1/paste/{id}

Supprime un paste. Seuls les pastes créés avec la même clé API peuvent être supprimés.

Exemple
curl -X DELETE https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g \ -H "X-API-Key: lq_your_api_key_here"
Réponse (200 OK)
{"error": false, "message": "Paste deleted."}

POST /api/v1/cli

Créez rapidement des pastes en ligne de commande (curl). Envoyez le contenu en corps brut depuis stdin, ou comme champ de formulaire (content/paste/f:1). La réponse par défaut est une URL en texte brut.

La clé API est facultative : fonctionne anonymement sans clé (limite de débit IP + analyse du contenu). Avec une clé, l'usage lui est attribué. L'accès anonyme peut être désactivé dans le panneau d'administration.

Paramètre

ParamètreTypeObligatoireDescription
(gövde)raw / formOuiContenu de la paste. Pour un corps brut, text/plain est recommandé (afin de préserver = et &).
expirystringNonDurée : 10m, 30m, 1h, 3h, 6h, 12h, 1d, 2d, 3d, 1w, 2w, 1m, never (défaut : 1d)
titlestringNonTitre du paste
langstringNonLangage de coloration syntaxique (ex. python, javascript). Détecté automatiquement si omis ; pour l'E2E, il est stocké pour la coloration après déchiffrement.
burnbooleanNonVoir une fois puis supprimer. Si true, le paste est supprimé automatiquement après la première consultation (défaut : false).
Exemple de requête (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
Réponse
https://fastpaste.xyz/view/aB3cD4eF5g

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

Extensions de fichiers autorisées

.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

Les fichiers sont vérifiés par extension et type MIME. Seuls les fichiers texte/code sont acceptés.

Limites de débit

Des limites de débit distinctes peuvent être définies pour chaque clé API :

Type de limiteDescription
Limite horaireRequêtes maximum par heure (0 = illimité)
Limite quotidienneRequêtes maximum par jour
Limite mensuelleRequêtes maximum par mois

En cas de dépassement, une réponse 429 Too Many Requests est renvoyée.

Codes d'erreur

CodeSignification
400Requête invalide (paramètre manquant ou incorrect)
401Clé API manquante
403Clé API invalide/inactive ou accès refusé
404Paste introuvable ou expiré
405Méthode HTTP non autorisée
413Taille du fichier trop grande
429Limite de débit dépassée
500Erreur serveur
503API désactivée

Notifications Webhook

Une URL webhook distincte peut être configurée par clé API. Une requête POST est envoyée lors de la création d'un nouveau paste :

{ "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" }

Obtenir une clé API

Contactez l'administrateur pour obtenir une clé API ou augmenter votre limite.

Contacter l'administrateur