imgpile API

Lade Bilder und Videos hoch, teile sie und verwalte sie per Programmierung.

https://imgpile.com/api/v1 — alle Endpoints

https://cdn.imgpile.com/api/v1/media — nur Dateiuploads (siehe unten)

Hol dir ein API-Token

Anmelden oder registrieren um ein API-Token zu erstellen.

Konzepte

imgpile hat zwei zentrale Objekte. Wenn du den Unterschied verstehst, sparst du Zeit.

Medien

Eine einzelne Datei (Bild oder Video). Hat eine direkte CDN-URL - ideal für Hotlinking, Einbettung oder Teilen.

Beitrag

Eine teilbare Seite mit einem oder mehreren Medien. Hat einen Titel, eine Beschreibung, Abstimmungen, Kommentare und Tags.

Du brauchst nur eine direkte Bild-URL? Hochladen nach /media. Verwende urls.original aus der Antwort. Fertig.
Willst du einen teilbaren Beitrag mit Kommentaren und Abstimmungen? Lade zuerst die Medien hoch und rufe dann /posts mit den Medien-IDs auf.

Schnellstart

Lade eine einzelne Datei hoch und erhalte eine direkte CDN-URL. Perfekt für ShareX, Discord-Bots oder jedes Skript, das einfach nur ein Bild hosten muss.

Hinweis: Uploads gehen an cdn.imgpile.com, nicht imgpile.com.

curl -X POST https://cdn.imgpile.com/api/v1/media \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "[email protected]"

Antwort:

{ "message": "Media created successfully", "media": { "slug": "abc1234", "type": "image/jpeg", "urls": { "original": "https://cdn.imgpile.com/f/abc1234.jpg", ... } } }

Lade mehrere Dateien hoch und gruppiere sie dann zu einem Beitrag mit Metadaten, Bewertung und Kommentaren.

1. Lade jede Datei hoch nach cdn.imgpile.com und behalte die zurückgegebene Media-ID:

curl -X POST https://cdn.imgpile.com/api/v1/media \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "[email protected]" # Returns: { "media": { "id": 12345, ... } }

2. Erstelle einen Beitrag mit diesen IDs:

curl -X POST https://imgpile.com/api/v1/posts \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"media_ids": [12345, 12346]}' # Returns: { "post": { "slug": "xyz789", ... } }

3. (Optional) Füge einen Titel und eine Beschreibung hinzu:

curl -X PATCH https://imgpile.com/api/v1/posts/xyz789 \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "My post", "description": "Summer 2026"}'

Dein Beitrag ist jetzt live unter https://imgpile.com/p/xyz789

Lade ein Bild aus dem Browser oder mit Node.js hoch:

const formData = new FormData(); formData.append('file', fileInput.files[0]); const response = await fetch('https://cdn.imgpile.com/api/v1/media', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN', }, body: formData, }); const { media } = await response.json(); console.log(media.urls.original); // https://cdn.imgpile.com/f/abc1234.jpg

ShareX-Einrichtung

Lade unsere Custom-Uploader-Konfiguration herunter und importiere sie in ShareX - kein manuelles JSON-Bearbeiten nötig.

Download imgpile.sxcu

  1. Klicke auf den Button oben, um imgpile.sxcu.
  2. Doppelklicke auf die Datei — ShareX importiert sie und macht imgpile einen verfügbaren Uploader.
  3. Öffnen Ziele -> Benutzerdefinierte Uploader-Einstellungen -> Header und ersetze YOUR_TOKEN_HERE durch dein API-Token (erstelle eines im Einführung).
  4. Setzen Ziele -> Bild-Uploader -> imgpile. Mach einen Screenshot — die URL landet in deiner Zwischenablage als https://cdn.imgpile.com/f/….

Authentifizierung

Lese-Endpunkte (GET) sind öffentlich und erfordern keine Authentifizierung. Alle anderen Endpoints erfordern ein Bearer-Token.

curl https://imgpile.com/api/v1/posts

Für authentifizierte Anfragen gib dein Token im Authorization Header an:

curl -H "Authorization: Bearer YOUR_TOKEN" https://cdn.imgpile.com/api/v1/media -F "[email protected]"

Datei-Uploads-Ziel cdn.imgpile.com; siehe Medien -> Hochladen für Details.

Erstelle ein Token im Einführung Abschnitt oben.

Fehler

Die API gibt standardmäßige HTTP-Statuscodes zurück. Fehlerantworten enthalten einen JSON-Body mit einem message (oder error) Feld, das beschreibt, was schiefgelaufen ist.

Statuscodes

CodeBedeutung
200OK — Anfrage erfolgreich
201Created — Ressource wurde erstellt
400Bad Request — fehlerhafte Anfrage
401Unauthenticated — Token fehlt oder ist ungültig
403Verboten — du hast keine Berechtigung für diese Aktion
404Nicht gefunden — die Ressource existiert nicht
422Validation failed — Request-Body hat ungültige Felder
429Rate Limited — zu viele Anfragen, bitte langsamer
451Nicht verfügbar aus rechtlichen Gründen — Datei hat einen gesperrten Hash getroffen
500Server Error — bei uns ist etwas schiefgelaufen

Beispiel für Fehlerantworten

401 Unauthenticated

{ "message": "Unauthenticated." }

403 Forbidden

{ "message": "This action is unauthorized." }

422 Validation failed

{ "message": "The file field is required.", "errors": { "file": ["The file field is required."] } }

429 Rate limited

{ "message": "Too Many Attempts." }

Prüfe den Retry-After Response-Header für die Sekunden, bis das Limit zurückgesetzt wird.

451 Verbotener Inhalt

{ "error": "This file is not allowed." }

API-Paginierung

Endpunkte auflisten (GET /posts, GET /media) gibt paginierte Ergebnisse zurück. Die Standard-Seitengröße ist 10; du kannst bis zu 250 anfordern mit ?limit=N.

Verwende ?page=N um Seiten zu navigieren. Die Antwort enthält Paginierungs-Metadaten:

{ "data": [ ... ], "links": { "first": "https://imgpile.com/api/v1/posts?page=1", "last": "https://imgpile.com/api/v1/posts?page=42", "prev": null, "next": "https://imgpile.com/api/v1/posts?page=2" }, "meta": { "current_page": 1, "from": 1, "to": 10, "per_page": 10, "total": 421, "last_page": 42 } }

Wenn du iterierst, folge links.next bis es null, oder prüfe meta.current_page gegen meta.last_page.

Inhaltsfilterung

Standardmäßig listen Endpunkte (GET /posts, GET /media) nur sicheren Inhalt zurück (Moderationsstatus approved). Um auch Inhalte für Erwachsene einzuschließen (nsfw), übergeben ?nsfw=1:

curl https://imgpile.com/api/v1/posts?nsfw=1

Verbotener Inhalt (rejected, d. h. Spam oder Missbrauch) wird nie an öffentliche Feed-Endpunkte zurückgegeben, unabhängig von der ?nsfw Kennzeichnung.

Jede Post- und Media-Antwort enthält ein moderation_status Feld, damit du in deinem Client markierte Elemente warnen, verpixeln oder ausblenden kannst:

{ "moderation_status": "approved" | "pending" | "nsfw" | "rejected", ... }
  • approved — sicher für alle Zielgruppen.
  • pending — wartet auf automatisierte Moderation.
  • nsfw — Inhalte für Erwachsene; nur von öffentlichen Endpunkten zurückgegeben, wenn ?nsfw=1.
  • rejected — Spam/Missbrauch; niemals an öffentliche Endpunkte zurückgegeben.

Ausgeblendete Posts sind über ihren Slug zugänglich, erscheinen aber nie in Feeds. Private Posts erfordern ein ?key=xxx Query-Parameter (der Besitzer kann das im Freigabelink des Beitrags finden).

Ratenbegrenzungen

  • Öffentliche Anfragen (kein Token): 30 Anfragen/Minute pro IP
  • Authentifizierte Anfragen: 120 Anfragen/Minute pro Benutzer
  • Datei-Uploads: 1.000 Dateien/Tag pro Benutzer/IP
  • Maximale Dateigröße: 100 MB
  • Akzeptierte Typen: image/* und video/*

Rate-Limit-Header sind in jeder Antwort enthalten (X-RateLimit-Limit, X-RateLimit-Remaining).

Das Media-Objekt

Von Media-Endpunkten zurückgegeben und in Post-Antworten eingebettet.

FeldTypBeschreibung
slugstringEindeutiger 7-Zeichen-Identifier. Wird in URLs verwendet.
filenamestringDateiname in der Speicherung (gleich wie Slug).
titlestring|nullVom Benutzer bereitgestellter Titel.
descriptionstring|nullVom Benutzer bereitgestellte Beschreibung.
typestringMIME-Typ — z. B. image/jpeg, video/mp4.
widthintegerPixelbreite.
heightintegerPixelhöhe.
moderation_statusenumEines von approved, pending, nsfw, oder rejected. Sieh Inhaltsfilterung.
processedbooleanfalse während die größenabhängigen Varianten erstellt werden; true wenn es bereit ist.
created_attimestampISO-8601-Zeitstempel.
urlsobjectCDN-URLs in jeder verfügbaren Größe — siehe Direkte Bild-URLs.
userobject|nullDer Uploader (Benutzername, Avatar). Null bei Gast-Uploads.

Das Post-Objekt

Ein teilbarer Container für ein oder mehrere Medienobjekte.

FeldTypBeschreibung
idintegerNumerische ID. Verwende slug für URLs.
slugstringEindeutiger 7-Zeichen-Identifier. Wird in URLs verwendet.
titlestring|nullTitel des Posts.
descriptionstring|nullBeschreibung des Posts.
scoreintegerNetto-Wertung (Upvotes minus Downvotes).
view_countintegerGesamtzahl der Seitenaufrufe.
media_countintegerAnzahl der Medienobjekte in diesem Post.
moderation_statusenumEines von approved, pending, nsfw, oder rejected. Sieh Inhaltsfilterung.
isUpvotedByUserbooleanOb der authentifizierte Benutzer diesen Post upgevotet hat.
isDownvotedByUserbooleanOb der authentifizierte Benutzer diesen Post downgevotet hat.
created_attimestampISO-8601-Zeitstempel.
userobject|nullDer Autor (Benutzername, Avatar). Null bei Gast-Posts.
mediaarrayArray von Medienobjekte. Nur enthalten bei Einzel-Post-Anfragen.
first_mediaobject|nullDas erste Medium (Vorschau). Nur enthalten in Feed-Antworten.
Nur für den Besitzer bestimmte Felder (werden nur an den Besitzer des Beitrags zurückgegeben):
visibilityenumpublic, hidden, oder private.
access_keystring|nullErforderlich, um einen privaten Post zu sehen. Anhängen als ?key=xxx.

Media-Endpunkte

Einzelne Dateien (Bilder oder Videos). Jedes Medium hat eine direkte CDN-URL, die du überall verlinken oder einbetten kannst.

POST /media Authentifizierung erforderlich
Upload-Host

Uploads senden an https://cdn.imgpile.com/api/v1/medianicht imgpile.com. Dateien werden auf einer dedizierten Origin gespeichert; ein POST an den Haupt-Host wird fehlschlagen.

Alle anderen Endpoints verwenden imgpile.com/api/v1 wie gewohnt.

Lade ein Bild oder Video hoch. Sende als multipart/form-data.

ParameterBeschreibung
fileerforderlich Die hochzuladende Datei. Max. 100 MB. Akzeptiert image/* und video/*.
post_idoptional An einen bestehenden Post anhängen.
Anfrage
curl -X POST https://cdn.imgpile.com/api/v1/media \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "[email protected]"
Antwort 201
{ "message": "Media created successfully", "media": { "slug": "abc1234", "filename": "abc1234", "type": "image/jpeg", "width": 1920, "height": 1080, "moderation_status": "approved", "urls": { "original": "https://cdn.imgpile.com/f/abc1234.jpg", ... } } }
GET /media Öffentlich

Medienobjekte mit Filterung und Pagination auflisten.

ParameterBeschreibung
tagNach Tag-Namen filtern
sortlatest (Standard) oder random
periodday, week, month, year, all
limitErgebnisse pro Seite (max. 250, Standard 10)
usernameNach Benutzernamen filtern
nsfwSetze auf 1 um NSFW-Inhalte einzuschließen. Standard: nur SFW.
Anfrage
curl https://imgpile.com/api/v1/media?limit=20
Antwort 200
{ "data": [ { "slug": "abc1234", "type": "image/jpeg", "width": 1920, "height": 1080, "moderation_status": "approved", "urls": { ... } }, ... ], "links": { ... }, "meta": { "current_page": 1, "total": 421 } }
GET /media/{slug} Öffentlich

Ein einzelnes Medienobjekt anhand seines Slugs abrufen.

Anfrage
curl https://imgpile.com/api/v1/media/abc1234
Antwort 200
{ "data": { "slug": "abc1234", "type": "image/jpeg", "width": 1920, "height": 1080, "moderation_status": "approved", "urls": { ... } } }
PATCH /media/{slug} Authentifizierung erforderlich

Medien aktualisieren, die du besitzt.

ParameterBeschreibung
titleMedientitel
descriptionMedienbeschreibung
Anfrage
curl -X PATCH https://imgpile.com/api/v1/media/abc1234 \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "New title"}'
Antwort 200
{ "message": "Media updated successfully" }
DELETE /media/{slug} Authentifizierung erforderlich

Medien löschen, die du besitzt.

Anfrage
curl -X DELETE https://imgpile.com/api/v1/media/abc1234 \ -H "Authorization: Bearer YOUR_TOKEN"
Antwort 200
{ "message": "Media deleted successfully." }

Post-Endpunkte

Teilbare Seiten, die ein oder mehrere Medienobjekte enthalten. Mit Titel, Beschreibung, Voting, Kommentaren und Tags.

GET /posts Öffentlich

Öffentliche Posts mit Filterung und Pagination auflisten.

ParameterBeschreibung
tagNach Tag-Namen filtern
sortlatest (Standard) oder random
periodday, week, month, year, all
limitErgebnisse pro Seite (max. 250, Standard 10)
usernameNach Benutzernamen filtern
nsfwSetze auf 1 um NSFW-Inhalte einzuschließen. Standard: nur SFW.
Anfrage
curl https://imgpile.com/api/v1/posts?sort=latest
Antwort 200
{ "data": [ { "id": 30713, "slug": "MSGhYqy", "title": "Sunset photos", "score": 12, "view_count": 245, "media_count": 3, "moderation_status": "approved", "user": { "username": "alice", ... }, "first_media": { ... } }, ... ] }
GET /posts/{slug} Öffentlich

Rufe einen einzelnen Beitrag mit paginierten Medien ab.

ParameterBeschreibung
mediaPageSeitennummer für Medien (Standard 1)
perPageMedien pro Seite (Standard 10)
keyErforderlich für private Beiträge. Der Besitzer kann das im Freigabelink finden.
Anfrage
curl https://imgpile.com/api/v1/posts/MSGhYqy # Private post with key: curl "https://imgpile.com/api/v1/posts/xyz789?key=ab12cd34ef"
Antwort 200
{ "data": { "id": 30713, "slug": "MSGhYqy", "title": "Sunset photos", "description": "...", "score": 12, "view_count": 245, "moderation_status": "approved", "user": { "username": "alice", ... }, "media": [ ... ] } }
POST /posts Authentifizierung erforderlich

Erstelle einen neuen Beitrag aus hochgeladenen Medien.

ParameterBeschreibung
media_idserforderlich Array mit Medien-IDs, die im Beitrag enthalten sein sollen
Anfrage
curl -X POST https://imgpile.com/api/v1/posts \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"media_ids": [12345, 12346]}'
Antwort 201
{ "message": "Post created successfully", "post": { "id": 30720, "slug": "rtWJdHr" } }
PATCH /posts/{slug} Authentifizierung erforderlich

Aktualisiere einen Beitrag, der dir gehört.

ParameterBeschreibung
titleBeitragstitel (max. 255)
descriptionBeitragsbeschreibung
visibilitypublic, hidden, oder private. Einstellung für private generiert automatisch ein access_key.
is_nsfwBoolesch. Markiere den Beitrag als Erwachseneninhalt, damit er hinter dem NSFW-Umschalter des Betrachters verborgen ist. Sobald gesetzt, wird der Beitrag nicht automatisch unter nsfw.
media_orderArray von Medien-Slugs in der gewünschten Reihenfolge
Anfrage
curl -X PATCH https://imgpile.com/api/v1/posts/rtWJdHr \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "Updated title", "visibility": "private"}'
Antwort 200
{ "message": "Post updated successfully", "visibility": "private", "access_key": "ab12cd34ef" }
DELETE /posts/{slug} Authentifizierung erforderlich

Lösche einen Beitrag, der dir gehört.

Anfrage
curl -X DELETE https://imgpile.com/api/v1/posts/rtWJdHr \ -H "Authorization: Bearer YOUR_TOKEN"
Antwort 200
{ "message": "Post deleted successfully" }

Kommentare

POST /posts/{post}/comments Authentifizierung erforderlich

Füge einen Kommentar zu einem Beitrag hinzu.

ParameterBeschreibung
contenterforderlich Kommentartext (max. 500 Zeichen)
parent_idoptional Kommentar-ID, auf die geantwortet werden soll (für verschachtelte Antworten)
Anfrage
curl -X POST https://imgpile.com/api/v1/posts/MSGhYqy/comments \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"content": "Nice shot!"}'
Antwort 201
{ "success": true, "comment": { "id": 456, "content": "Nice shot!", "user_id": 1, "post_id": 12345 } }
DELETE /comments/{comment} Authentifizierung erforderlich

Lösche einen Kommentar, der dir gehört.

Anfrage
curl -X DELETE https://imgpile.com/api/v1/comments/123 \ -H "Authorization: Bearer YOUR_TOKEN"
Antwort 200
{ "success": true, "message": "Comment deleted successfully" }

Benutzer

GET /users/{username}/posts Öffentlich

Rufe die Beiträge eines Benutzers ab.

Anfrage
curl https://imgpile.com/api/v1/users/alice/posts
Antwort 200
{ "data": [ { "id": 30713, "slug": "MSGhYqy", "title": "Sunset photos", "score": 12, "moderation_status": "approved", "first_media": { ... } }, ... ] }
GET /users/{username}/media Öffentlich

Rufe die Medien eines Benutzers ab.

Anfrage
curl https://imgpile.com/api/v1/users/alice/media
Antwort 200
{ "data": [ { "slug": "abc1234", "type": "image/jpeg", "moderation_status": "approved", "urls": { ... } }, ... ] }
GET /users/{username}/comments Öffentlich

Rufe die Kommentare eines Benutzers ab (paginierte Ausgabe).

Anfrage
curl https://imgpile.com/api/v1/users/alice/comments
GET /users/{username}/followers Öffentlich

Rufe die Follower eines Benutzers ab (paginierte Ausgabe).

Anfrage
curl https://imgpile.com/api/v1/users/alice/followers
GET /users/{username}/following Öffentlich

Rufe die Benutzer ab, denen dieser Benutzer folgt (paginierte Ausgabe).

Anfrage
curl https://imgpile.com/api/v1/users/alice/following
POST /users/{username}/follow Authentifizierung erforderlich

Folge einem Benutzer.

Anfrage
curl -X POST https://imgpile.com/api/v1/users/alice/follow \ -H "Authorization: Bearer YOUR_TOKEN"
Antwort 200
{ "message": "User followed." }
DELETE /users/{username}/follow Authentifizierung erforderlich

Entfolge einem Benutzer.

Anfrage
curl -X DELETE https://imgpile.com/api/v1/users/alice/follow \ -H "Authorization: Bearer YOUR_TOKEN"
Antwort 200
{ "message": "User unfollowed." }

Abstimmungen

POST /posts/{post}/upvote Authentifizierung erforderlich

Vote für einen Beitrag hoch. Ein erneuter Aufruf entfernt den Upvote.

Anfrage
curl -X POST https://imgpile.com/api/v1/posts/123/upvote \ -H "Authorization: Bearer YOUR_TOKEN"
Antwort 200
{ "message": "Post upvoted successfully", "score": 13 }
POST /posts/{post}/downvote Authentifizierung erforderlich

Vote für einen Beitrag runter. Ein erneuter Aufruf entfernt den Downvote.

Anfrage
curl -X POST https://imgpile.com/api/v1/posts/123/downvote \ -H "Authorization: Bearer YOUR_TOKEN"
Antwort 200
{ "message": "Post downvoted successfully", "score": 11 }
POST /comments/{comment}/upvote Authentifizierung erforderlich

Vote für einen Kommentar hoch. Ein erneuter Aufruf entfernt den Upvote.

Anfrage
curl -X POST https://imgpile.com/api/v1/comments/456/upvote \ -H "Authorization: Bearer YOUR_TOKEN"
POST /comments/{comment}/downvote Authentifizierung erforderlich

Vote für einen Kommentar runter. Ein erneuter Aufruf entfernt den Downvote.

Anfrage
curl -X POST https://imgpile.com/api/v1/comments/456/downvote \ -H "Authorization: Bearer YOUR_TOKEN"

Direkte Bild-URLs

Jede hochgeladene Datei wird über das CDN ausgeliefert. Die Medienantwort enthält ein urls Objekt mit allen verfügbaren Größen:

https://cdn.imgpile.com/f/{filename}.{ext} — Original https://cdn.imgpile.com/f/{filename}_xs.{ext} — Extra small https://cdn.imgpile.com/f/{filename}_sm.{ext} — Small https://cdn.imgpile.com/f/{filename}_md.{ext} — Medium https://cdn.imgpile.com/f/{filename}_lg.{ext} — Large https://cdn.imgpile.com/f/{filename}_xl.{ext} — Extra large https://cdn.imgpile.com/f/{filename}_thumb.jpg — Thumbnail (videos)
storage.to Kostenloses Dateiteilen
25GB-Dateien Keine Anmeldung Unbegrenzte Geschwindigkeit
Kostenlos testen