imgpile API

Upload, deel en beheer afbeeldingen en video's programmatisch.

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

https://cdn.imgpile.com/api/v1/media — alleen bestandsuploads (zie hieronder)

Haal een API-token op

Inloggen of registreren om een API-token te genereren.

Concepten

imgpile heeft twee kernobjecten. Als je het verschil begrijpt, bespaar je tijd.

Media

Eén bestand (afbeelding of video). Heeft een directe CDN-URL — ideaal voor hotlinking, inbedden of delen.

Bericht

Een deelbare pagina met één of meer media-items. Heeft een titel, beschrijving, stemmen, reacties en tags.

Heb je alleen een directe afbeeldings-URL nodig? Upload naar /media. Gebruik urls.original uit de response. Klaar.
Wil je een deelbaar bericht met reacties en stemmen? Upload eerst media en roep daarna aan /posts met de media-ID's.

Snel starten

Upload een enkel bestand en krijg een directe CDN-URL. Perfect voor ShareX, Discord-bots, of elke script die gewoon een afbeelding moet hosten.

Let op: uploads gaan naar cdn.imgpile.com, niet imgpile.com.

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

Reactie:

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

Upload meerdere bestanden en groepeer ze vervolgens in een post met metadata, stemmen en reacties.

1. Upload elk bestand naar cdn.imgpile.com en bewaar de teruggegeven 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. Maak een post met die ID's:

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. (Optioneel) Voeg een titel en beschrijving toe:

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

Je post is nu live op https://imgpile.com/p/xyz789

Upload een afbeelding vanuit een browser of Node.js:

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-instelling

Download onze Custom Uploader-config en importeer die in ShareX — handmatig JSON bewerken is niet nodig.

Download imgpile.sxcu

  1. Klik op de knop hierboven om te downloaden imgpile.sxcu.
  2. Dubbelklik op het bestand — ShareX importeert het en maakt imgpile een beschikbare uploader.
  3. Open Bestemmingen → Aangepaste uploader-instellingen → Headers en vervang YOUR_TOKEN_HERE door je API-token (genereer er een in de Introductie).
  4. Instellen Bestemmingen → Afbeelding-uploader → imgpile. Maak een screenshot — de URL belandt op je klembord als https://cdn.imgpile.com/f/….

Authenticatie

Lees-endpoints (GET) zijn publiek en vereisen geen authenticatie. Alle andere endpoints vereisen een bearer token.

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

Voor geauthenticeerde requests geef je je token door in de Authorization header:

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

Bestandsuploads target cdn.imgpile.com; zie Media → Upload voor details.

Genereer een token in de Introductie sectie hierboven.

Fouten

De API geeft standaard HTTP-statuscodes terug. Foutmeldingen bevatten een JSON-body met een message (of error) veld dat beschrijft wat er misging.

Statuscodes

CodeBetekenis
200OK — request geslaagd
201Gemaakt — resource is aangemaakt
400Bad Request — onjuist gevormde request
401Niet-geauthenticeerd — ontbrekend of ongeldig token
403Verboden — je hebt geen toestemming voor deze actie
404Niet gevonden — de resource bestaat niet
422Validatie mislukt — request body heeft ongeldige velden
429Rate limited — te veel requests, rustig aan
451Niet beschikbaar om juridische redenen — bestand kwam overeen met een geblokkeerde hash
500Serverfout — er ging iets mis aan onze kant

Voorbeeld van foutreacties

401 Niet-geauthenticeerd

{ "message": "Unauthenticated." }

403 Verboden

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

422 Validatie mislukt

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

429 Rate limited

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

Bekijk de Retry-After response-header voor het aantal seconden tot de limiet opnieuw wordt ingesteld.

451 Geblokkeerde content

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

API-paginering

Endpoints weergeven (GET /posts, GET /media) geeft gepagineerde resultaten terug. De standaard paginagrootte is 10; je kunt tot 250 aanvragen met ?limit=N.

Gebruik ?page=N om door pagina's te navigeren. De response bevat pagineringmetadata:

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

Bij het doorlopen, volg links.next totdat het null, of controleer meta.current_page tegen meta.last_page.

Contentfiltering

Standaard worden endpoints weergegeven (GET /posts, GET /media) wordt alleen veilige content teruggegeven (moderatiestatus approved). Om ook volwassen content mee te nemen (nsfw), doorgeven ?nsfw=1:

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

Geblokkeerde content (rejected, oftewel spam of misbruik) wordt nooit teruggegeven aan openbare feed-endpoints, ongeacht de ?nsfw flag.

Elke post- en mediaresponse bevat een moderation_status veld zodat je gemarkeerde items in je client kunt waarschuwen, vervagen of verbergen:

{ "moderation_status": "approved" | "pending" | "nsfw" | "rejected", ... }
  • approved — veilig voor alle doelgroepen.
  • pending — in afwachting van geautomatiseerde moderatie.
  • nsfw — volwassen content; alleen teruggegeven via openbare endpoints wanneer ?nsfw=1.
  • rejected — spam/misbruik; nooit teruggegeven aan openbare endpoints.

Verborgen posts zijn toegankelijk via hun slug, maar verschijnen nooit in feeds. Privéposts vereisen een ?key=xxx queryparameter (de eigenaar kan dit vinden in de deel-link van de post).

Snelheidslimieten

  • Openbare requests (geen token): 30 requests/minuut per IP
  • Geverifieerde requests: 120 requests/minuut per gebruiker
  • Bestanduploads: 1.000 bestanden/dag per gebruiker/IP
  • Maximale bestandsgrootte: 100 MB
  • Geaccepteerde types: image/* en video/*

Rate-limit headers zijn opgenomen in elke response (X-RateLimit-Limit, X-RateLimit-Remaining).

Het Media-object

Wordt teruggegeven door media-endpoints en ingesloten in post-responses.

VeldTypeBeschrijving
slugstringUnieke identificatie van 7 tekens. Gebruikt in URL's.
filenamestringOpslagbestandsnaam (zelfde als slug).
titlestring|nullDoor de gebruiker opgegeven titel.
descriptionstring|nullDoor de gebruiker opgegeven beschrijving.
typestringMIME-type — bijv. image/jpeg, video/mp4.
widthintegerPixelbreedte.
heightintegerPixelhoogte.
moderation_statusenumEen van approved, pending, nsfw, of rejected. Zie Contentfiltering.
processedbooleanfalse terwijl er varianten met verschillende afmetingen worden gegenereerd; true wanneer het klaar is.
created_attimestampISO 8601-tijdstempel.
urlsobjectCDN-URL's op elke beschikbare grootte — zie Directe afbeeldings-URL's.
userobject|nullDe uploader (gebruikersnaam, avatar). Null voor uploads van gasten.

Het Post-object

Een deelbare container voor één of meer media-items.

VeldTypeBeschrijving
idintegerNumeriek ID. Gebruik slug voor URL's.
slugstringUnieke identificatie van 7 tekens. Gebruikt in URL's.
titlestring|nullTitel van de post.
descriptionstring|nullBeschrijving van de post.
scoreintegerNetto stemscore (upvotes min downvotes).
view_countintegerTotaal aantal paginaviews.
media_countintegerAantal media-items in deze post.
moderation_statusenumEen van approved, pending, nsfw, of rejected. Zie Contentfiltering.
isUpvotedByUserbooleanOf de ingelogde gebruiker deze post heeft upgevoted.
isDownvotedByUserbooleanOf de ingelogde gebruiker deze post heeft downgevoted.
created_attimestampISO 8601-tijdstempel.
userobject|nullDe auteur (gebruikersnaam, avatar). Null voor posts van gasten.
mediaarrayArray van Media-objecten. Alleen inbegrepen bij requests voor één post.
first_mediaobject|nullHet eerste media-item (preview). Alleen inbegrepen in feed-responses.
Velden alleen voor de eigenaar (alleen teruggegeven aan de eigenaar van de post):
visibilityenumpublic, hidden, of private.
access_keystring|nullVereist om een private post te bekijken. Voeg toe als ?key=xxx.

Media-endpoints

Afzonderlijke bestanden (afbeeldingen of video's). Elk media-item heeft een directe CDN-URL die je overal kunt hotlinken of inbedden.

POST /media Authenticatie vereist
Uploadhost

Verstuur uploads naar https://cdn.imgpile.com/api/v1/medianiet imgpile.com. Bestanden worden opgeslagen op een speciale origin; POST'en naar de hoofdhost zal mislukken.

Alle andere endpoints gebruiken imgpile.com/api/v1 zoals gebruikelijk.

Upload een afbeelding of video. Verstuur als multipart/form-data.

ParameterBeschrijving
filevereist Het te uploaden bestand. Maximaal 100 MB. Accepteert image/* en video/*.
post_idoptioneel Koppel aan een bestaande post.
Request
curl -X POST https://cdn.imgpile.com/api/v1/media \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "[email protected]"
Response 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 Publiek

Toon media-items met filtering en paginering.

ParameterBeschrijving
tagFilter op tagnaam
sortlatest (standaard) of random
periodday, week, month, year, all
limitResultaten per pagina (max 250, standaard 10)
usernameFilter op gebruikersnaam
nsfwZet op 1 om NSFW-content mee te nemen. Standaard: alleen SFW.
Request
curl https://imgpile.com/api/v1/media?limit=20
Response 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} Publiek

Haal één media-item op op basis van de slug.

Request
curl https://imgpile.com/api/v1/media/abc1234
Response 200
{ "data": { "slug": "abc1234", "type": "image/jpeg", "width": 1920, "height": 1080, "moderation_status": "approved", "urls": { ... } } }
PATCH /media/{slug} Authenticatie vereist

Werk media bij die je zelf bezit.

ParameterBeschrijving
titleMediatitel
descriptionMedia-beschrijving
Request
curl -X PATCH https://imgpile.com/api/v1/media/abc1234 \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "New title"}'
Response 200
{ "message": "Media updated successfully" }
DELETE /media/{slug} Authenticatie vereist

Verwijder media die je zelf bezit.

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

Post-endpoints

Deelbare pagina's die één of meer media-items bevatten. Met een titel, beschrijving, stemmen, reacties en tags.

GET /posts Publiek

Toon openbare posts met filtering en paginering.

ParameterBeschrijving
tagFilter op tagnaam
sortlatest (standaard) of random
periodday, week, month, year, all
limitResultaten per pagina (max 250, standaard 10)
usernameFilter op gebruikersnaam
nsfwZet op 1 om NSFW-content mee te nemen. Standaard: alleen SFW.
Request
curl https://imgpile.com/api/v1/posts?sort=latest
Response 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} Publiek

Haal één post op met gepagineerde media.

ParameterBeschrijving
mediaPagePaginanummer voor media (standaard 1)
perPageAantal media-items per pagina (standaard 10)
keyVerplicht voor privéposts. De eigenaar kan dit vinden in de deel-link.
Request
curl https://imgpile.com/api/v1/posts/MSGhYqy # Private post with key: curl "https://imgpile.com/api/v1/posts/xyz789?key=ab12cd34ef"
Response 200
{ "data": { "id": 30713, "slug": "MSGhYqy", "title": "Sunset photos", "description": "...", "score": 12, "view_count": 245, "moderation_status": "approved", "user": { "username": "alice", ... }, "media": [ ... ] } }
POST /posts Authenticatie vereist

Maak een nieuwe post van geüploade media.

ParameterBeschrijving
media_idsvereist Array van media-ID's om in de post op te nemen
Request
curl -X POST https://imgpile.com/api/v1/posts \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"media_ids": [12345, 12346]}'
Response 201
{ "message": "Post created successfully", "post": { "id": 30720, "slug": "rtWJdHr" } }
PATCH /posts/{slug} Authenticatie vereist

Werk een post bij die je zelf bezit.

ParameterBeschrijving
titlePosttitel (max 255)
descriptionPostbeschrijving
visibilitypublic, hidden, of private. Instelling voor private genereert automatisch een access_key.
is_nsfwBoolean. Markeer de post als adult content zodat deze achter de NSFW-schakelaar van de kijker valt. Zodra dit is ingesteld, wordt de post niet automatisch opgelost onder nsfw.
media_orderArray van media-slugs in de gewenste volgorde
Request
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"}'
Response 200
{ "message": "Post updated successfully", "visibility": "private", "access_key": "ab12cd34ef" }
DELETE /posts/{slug} Authenticatie vereist

Verwijder een post die je zelf bezit.

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

Reacties

POST /posts/{post}/comments Authenticatie vereist

Voeg een reactie toe aan een post.

ParameterBeschrijving
contentvereist Reactietekst (max 500 tekens)
parent_idoptioneel Reactie-ID om op te antwoorden (voor geneste reacties)
Request
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!"}'
Response 201
{ "success": true, "comment": { "id": 456, "content": "Nice shot!", "user_id": 1, "post_id": 12345 } }
DELETE /comments/{comment} Authenticatie vereist

Verwijder een reactie die je zelf bezit.

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

Gebruikers

GET /users/{username}/posts Publiek

Haal de posts van een gebruiker op.

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

Haal de media van een gebruiker op.

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

Haal de reacties van een gebruiker op (gepaginateerd).

Request
curl https://imgpile.com/api/v1/users/alice/comments
GET /users/{username}/followers Publiek

Haal de volgers van een gebruiker op (gepaginateerd).

Request
curl https://imgpile.com/api/v1/users/alice/followers
GET /users/{username}/following Publiek

Haal op welke gebruikers deze gebruiker volgt (gepaginateerd).

Request
curl https://imgpile.com/api/v1/users/alice/following
POST /users/{username}/follow Authenticatie vereist

Volg een gebruiker.

Request
curl -X POST https://imgpile.com/api/v1/users/alice/follow \ -H "Authorization: Bearer YOUR_TOKEN"
Response 200
{ "message": "User followed." }
DELETE /users/{username}/follow Authenticatie vereist

Stop met het volgen van een gebruiker.

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

Stemmen

POST /posts/{post}/upvote Authenticatie vereist

Geef een post een upvote. Nogmaals aanroepen verwijdert de upvote.

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

Geef een post een downvote. Nogmaals aanroepen verwijdert de downvote.

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

Geef een reactie een upvote. Nogmaals aanroepen verwijdert de upvote.

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

Geef een reactie een downvote. Nogmaals aanroepen verwijdert de downvote.

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

Directe afbeeldings-URL's

Elke geüploade bestands wordt via de CDN geleverd. De media-respons bevat een urls object met alle beschikbare formaten:

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 Gratis bestandsdeling
25GB bestanden Geen registratie Onbeperkte snelheid
Probeer het gratis