API-Dokumentation

Mit der YourImageShare-API kannst du Dateien per Code hochladen, auflisten und löschen. Es ist eine kleine JSON/REST-API – kein SDK nötig, nur ein HTTP-Client und ein API-Schlüssel. Offizielle JavaScript-, Python- und MCP-Bibliotheken gibt es ebenfalls.

Alle Client-Bibliotheken und die Tools unten sind Open Source. Den Code findest du in unserem offiziellen GitHub-Repository, dort kannst du auch Probleme melden oder mitmachen: github.com/yourimageshare/yourimageshare.

Basis-URL: https://yourimageshare.com/api · Format: JSON bei Anfrage und Antwort, außer bei Uploads, die multipart/form-data nutzen · Auth: ein API-Schlüssel bei jeder Anfrage. · Maschinenlesbare Spezifikation: /openapi.json (OpenAPI 3.1), für Agenten und Codegenerierungs-Tools, die diese Seite lieber nicht auswerten.

API-Schlüssel erhalten

Melde dich an, geh zu Mein Konto und öffne den Tab API. Dort siehst du deinen Schlüssel und eine Schaltfläche Neu generieren. Wenn du einen Schlüssel neu generierst, wird der alte sofort ungültig – aktualisiere ihn also überall, wo du ihn verwendest, bevor du klickst.

In diesem Tab gibt es außerdem einen zweiten, unabhängigen Nur-Upload-Schlüssel – siehe den Tipp unten und Forum-Plugins, wann du ihn stattdessen verwenden solltest.

Authentifizierung

Sende deinen Schlüssel als Header – das ist die bevorzugte Variante, denn Query-Strings landen gern in Zugriffs- und Proxy-Logs und in Referer-Headern:

X-API-Key: YOUR_API_KEY

Ein Query-Parameter ?key= funktioniert ebenfalls, er bleibt für ältere Integrationen und schnelle einmalige curl-Befehle erhalten. Sind beide vorhanden, hat der Header Vorrang.

?key=YOUR_API_KEY

Tipp: Behandle deinen Schlüssel wie ein Passwort – wer ihn hat, kann in deinem Konto hochladen, auflisten, ändern und löschen. Jede erfolgreiche Anfrage wird protokolliert und im Tab API deiner Kontoseite als Diagramm angezeigt, aufgeschlüsselt nach Tag und Anfragetyp. Muss ein Schlüssel irgendwo liegen, wo andere ihn sehen können – etwa in einem Forum-Plugin oder einer öffentlichen Konfigurationsdatei –, nimm stattdessen den Nur-Upload-Schlüssel aus demselben Tab: Er kann nur hochladen – Auflisten, Abrufen, Ändern und Löschen von Uploads lehnen ihn mit einem 401 ab.

Endpunkte

Hochladen, Auflisten und Löschen verwenden dieselbe Authentifizierung und dieselben Limits; große Dateien kannst du vorher in Teilen senden.

POST /api – Datei hochladen

Lädt eine einzelne Datei für das authentifizierte Konto hoch.

FeldTypErforderlichBeschreibung
uploadsfileeines von diesen dreienDie hochzuladende Datei, bis zu 100MB (das Limit für eine einzelne Anfrage über unser Netzwerk). Eine Datei pro Anfrage – dieser Endpunkt lädt nicht mehrere Dateien auf einmal hoch.
urlstringEin öffentlicher http(s)-Link zu einem Bild oder Video. Wir laden es selbst herunter, daher funktionieren Dateien bis zu 200MB.
upload_idstringEine Datei, die du vorher in Teilen an POST /api/chunk gesendet hast, bis zu 200MB.
filenamestringneinZusammen mit upload_id: der ursprüngliche Dateiname.
expires_inintegerneinLöscht diesen Upload nach so vielen Sekunden automatisch (60 bis 31.536.000, also 1 Minute bis 1 Jahr). Lass das Feld weg für einen normalen, dauerhaften Upload.
allow_duplicatebooleanneinSpeichert eine neue Kopie, auch wenn dein Konto exakt dieselbe Datei schon hochgeladen hat (siehe duplicate unten).
keep_originalbooleanneinBehält das Bild genau so, wie es hochgeladen wurde. Ohne diese Option werden JPG/PNG-Dateien über 1 MB zu WebP optimiert. Metadaten wie GPS werden in jedem Fall entfernt.
visibilitystringneinunlisted (Standard): Die Datei und ihre Seite funktionieren für alle mit dem Link, werden aber nirgends aufgelistet. private: nur die Datei – der Seitenlink leitet alle außer dir direkt zur Datei weiter (keine Kommentare, Reaktionen oder Werbung). public: auf der Website aufgelistet und indexierbar.
titlestringneinBis zu 90 Zeichen, wird auf der Seite des Uploads angezeigt.
descriptionstringneinBis zu 500 Zeichen.

Akzeptierte Typen: JPG, PNG, GIF, WEBP, AVIF, BMP, TIFF, HEIC oder HEIF-Bilder; MP4, WEBM, AVI, MOV, MKV, MPEG, WMV, FLV oder 3GP-Video (die genaue Liste kann sich mit der Zeit erweitern). HEIC/HEIF und TIFF werden als WebP gespeichert, Video außer MP4/WebM wird in MP4 umgewandelt, und größere JPEG/PNG-Bilder werden kurz nach dem Hochladen in WebP umgewandelt, wenn sie dadurch spürbar kleiner werden. Maximale Größe: 200MB; zu große oder nicht lesbare Dateien werden mit einem 422 abgelehnt.

Antwort – 200 OK:

{
  "type": "success",
  "msg": "success",
  "data": {
    "id": "aB3xY9qRz1",
    "type": "image",
    "path": "https://i.yourimageshare.com/aB3xY9qRz1.png",
    "src": "https://yourimageshare.com/ib/aB3xY9qRz1.png",
    "direct": "https://yourimageshare.com/ib/aB3xY9qRz1",
    "thumb": "https://i.yourimageshare.com/thumb-aB3xY9qRz1.webp",
    "width": 1920,
    "height": 1080,
    "size": 482113,
    "locked": false,
    "visibility": "unlisted",
    "title": null,
    "description": null,
    "expires_at": null,
    "duplicate": false,
    "delete_url": "https://yourimageshare.com/delete#iV3x...k9"
  }
}
FeldBeschreibung
idDie eindeutige Kennung der Datei.
typeimage oder video.
pathDie Speicher-URL der Datei, wie sie hochgeladen wurde. Sie kann sich kurz danach ändern, wenn die Datei umgewandelt wird (WebP/MP4), also speichere src, nicht path.
srcDauerhafte direkte Datei-URL – öffnet immer die aktuelle Datei, geeignet als src für <img>/<video> und zum Speichern.
directDie Seite der Datei auf YourImageShare (Titel, Beschreibung, Kommentare, Teilen-Optionen).
thumbEin 280px breites WebP-Vorschaubild (bei einem Video das erste Bild) oder null.
width, heightAnzeigegröße in Pixeln (aufrecht; bei einem Video die Bildgröße) oder null, wenn unbekannt.
sizeDateigröße in Bytes, wie gespeichert.
lockedtrue, wenn der Upload passwortgeschützt ist.
visibilityprivate, unlisted oder public (siehe Anfragefeld oben).
title, descriptionWie gesetzt oder null. Texte durchlaufen dieselbe Moderation wie auf der Website.
delete_urlNur bei neuen Uploads: ein privater Link, der diesen Upload ohne API-Schlüssel löscht. Er wird nur einmal angezeigt (gespeichert wird nur ein Hash) – bewahre ihn auf, wenn du ihn brauchst.
expires_atISO-8601-Zeitstempel, zu dem dieser Upload automatisch gelöscht wird, oder null, wenn er nicht abläuft.
duplicatetrue, wenn dein Konto exakt dieselbe Datei schon hochgeladen hatte: Dann wird dieser Upload zurückgegeben und nichts Neues gespeichert. Gilt nicht für ablaufende Uploads oder mit allow_duplicate=1.

Ablaufende Uploads: Sobald expires_at erreicht ist, wird die Datei aus dem Speicher gelöscht, und die Seite des Uploads liefert innerhalb von etwa 5 Minuten 410 Gone. Das lässt sich nachträglich nicht rückgängig machen oder verlängern – lösche früher mit dem DELETE-Endpunkt, wenn du die Datei eher entfernen willst, oder lade sie mit einem neuen expires_in erneut hoch, wenn sie länger bestehen soll.

POST /api/chunk – Große Dateien

Eine einzelne Anfrage kann höchstens 100MB enthalten. Bei größeren Dateien (bis zu 200MB) oder um bei einer langsamen Verbindung jede Anfrage klein zu halten, sendest du die Datei in Teilen von höchstens 5MB und schließt dann mit POST /api ab:

  1. Wähle eine Upload-ID: 32 zufällige Hex-Zeichen.
  2. Sende für jedes Teil POST /api/chunk (multipart/form-data) mit upload_id, index (ab 0), total (Anzahl der Teile) und den Bytes in chunk. Die Antwort lautet {"type": "success", "chunk_size": 5242880}.
  3. Sende POST /api mit upload_id und filename statt uploads, plus beliebige weitere Upload-Felder. Die Antwort ist die normale Upload-Antwort.

Teile eines nicht abgeschlossenen Uploads werden nach 2 Stunden gelöscht. Nur das abschließende POST /api zählt für die Upload-Limits.

GET /api/{id} und PATCH /api/{id} – Ein Upload

GET gibt einen deiner Uploads mit denselben Feldern wie die Liste unten zurück. PATCH ändert visibility, title oder description (Formularfelder oder JSON; ein leerer Titel oder eine leere Beschreibung löscht den Wert) und antwortet mit dem aktualisierten Upload. Beide brauchen den vollständigen API-Schlüssel; 404, wenn es in deinem Konto keinen solchen Upload gibt.

curl -X PATCH https://yourimageshare.com/api/aB3xY9qRz1 \
  -H "X-API-Key: YOUR_API_KEY" -d visibility=public -d title="Sunset"

POST /api/{id}/replace – Datei ersetzen

Tauscht die Datei hinter einem deiner Uploads aus und behält ID, Seite und alle Links. Jeder erlaubte Typ funktioniert, auch ein anderer (aus einem Bild kann ein Video werden). Sende die neue Datei als uploads (oder upload_id einer Datei, die du mit POST /api/chunk in Teilen gesendet hast); keep_original funktioniert wie beim Hochladen. Die neue Datei durchläuft dieselben Prüfungen und Umwandlungen wie ein neuer Upload, und die bisherige Version wird entfernt. Braucht den vollständigen API-Schlüssel; 404, wenn es in deinem Konto keinen solchen Upload gibt, 409, wenn er passwortgeschützt oder auf eine Anzahl von Aufrufen begrenzt ist.

curl -X POST https://yourimageshare.com/api/aB3xY9qRz1/replace \
  -H "X-API-Key: YOUR_API_KEY" -F uploads=@new-version.png

GET /api – Deine Uploads auflisten

Gibt eine seitenweise Liste der Uploads des authentifizierten Kontos zurück (aus jeder Quelle – API, Website oder Editor), die neuesten zuerst, 50 pro Seite.

ParameterInErforderlichBeschreibung
pagequeryneinSeitenzahl, Standard ist 1.

Antwort – 200 OK:

{
  "type": "success",
  "data": [
    {
      "id": "aB3xY9qRz1",
      "type": "image",
      "title": null,
      "path": "https://i.yourimageshare.com/aB3xY9qRz1.webp",
      "src": "https://yourimageshare.com/ib/aB3xY9qRz1.webp",
      "direct": "https://yourimageshare.com/ib/aB3xY9qRz1",
      "thumb": "https://i.yourimageshare.com/thumb-aB3xY9qRz1.webp",
      "width": 1920,
      "height": 1080,
      "size": 482113,
      "locked": false,
      "visibility": "unlisted",
      "description": null,
      "expires_at": null,
      "created_at": "2026-07-23T15:43:28+01:00"
    }
  ],
  "meta": { "current_page": 1, "last_page": 1, "total": 1 }
}

Die Felder bedeuten hier dasselbe wie in der obigen Upload-Antwort (bei einem passwortgeschützten Upload sind path und thumb kurzlebige signierte Links). Um einen Upload anhand seiner id abzurufen, nutze GET /api/{id}.

DELETE /api/{id} – Upload löschen

Löscht einen Upload des authentifizierten Kontos endgültig. Über die API lässt sich das nicht rückgängig machen. {id} ist der Wert, der von den Upload- oder Listen-Endpunkten als id zurückgegeben wird.

Antwort – 200 OK:

{ "type": "success", "msg": "Deleted." }

404, wenn es in deinem Konto keinen Upload mit dieser ID gibt (entweder gehörte er nie dir, oder er wurde schon gelöscht).

POST /api/compare – Vorher/Nachher-Schieberegler

Erstellt einen Vorher/Nachher-Vergleich aus zwei deiner eigenen Bild-Uploads: eine Seite mit Schieberegler unter /c/{id}, die sich auch in jede Website einbetten lässt. Der Nur-Upload-Schlüssel funktioniert ebenfalls. Sende before und after (Upload-IDs, erforderlich) und optional title, label_before und label_after (Standard: „Before“ und „After“).

Antwort – 201 Created:

{
  "type": "success",
  "id": "P7uAYy04VA",
  "url": "https://yourimageshare.com/c/P7uAYy04VA",
  "embed_url": "https://yourimageshare.com/embed/c/P7uAYy04VA",
  "embed": { "script": "<blockquote class=\"YISEmbed\" ...", "iframe": "<iframe ..." }
}

422, wenn eine der IDs nicht zu einem deiner Bild-Uploads gehört (Videos und passwortgeschützte Bilder können nicht verwendet werden).

Limits

Jeder API-Schlüssel hat eigene Kontingente pro Minute und pro Tag, dazu eine gröbere Tagesobergrenze pro IP als Absicherung, falls eine IP mehrere Schlüssel durchprobiert. Hochladen, Auflisten und Löschen teilen sich dieselben Limits.

ZeitraumStandardlimitGeltungsbereich
Pro Minute20 Anfragenpro API-Schlüssel
Pro Tag500 Anfragenpro vollständigem API-Schlüssel
Pro Tag2.000 Anfragenpro Nur-Upload-Schlüssel (Plugins, die ganze Mediatheken auslagern)
Pro Tag2.000 Anfragenpro IP-Adresse
Pro Minute300 Teilepro API-Schlüssel, nur POST /api/chunk

Diese Limits können sich ändern. Jede Antwort enthält die üblichen Rate-Limit-Header:

X-RateLimit-Limit: 20
X-RateLimit-Remaining: 14

Wird ein Limit überschritten, kommt ein 429 mit einem Retry-After-Header, der dir sagt, wie viele Sekunden du warten sollst.

Fehler

Jede Fehlerantwort hat dieselbe Form, unabhängig von Endpunkt oder Ursache:

{ "type": "error", "errors": "A human-readable description of what went wrong." }
StatusBedeutung
401API-Schlüssel fehlt oder ist ungültig.
403Das Konto oder deine aktuelle IP wurde vom Hochladen gesperrt.
404Für diese ID wurde in diesem Konto kein passender Upload gefunden (Abrufen, Ändern, Löschen).
413Die Anfrage ist größer als 100MB. Sende die Datei stattdessen in Teilen (POST /api/chunk) oder einen Link dazu in url (bis zu 200MB).
422Validierungsfehler – keine Datei oder kein Link angegeben, nicht unterstützter Dateityp, nicht lesbare Bilddaten, Abmessungen über dem Limit von 30000x30000px, eine Datei über 200MB, eine nicht abgeschlossene oder abgelaufene upload_id oder eine url, die nicht heruntergeladen werden konnte (die Meldung nennt den Grund).
429Limit überschritten – siehe Limits oben.
500Auf dem Server ist unerwartet etwas fehlgeschlagen. Du kannst es gefahrlos erneut versuchen.

Client-Bibliotheken

Offizielle SDKs, die die obigen Endpunkte mit typisierten Ergebnissen kapseln und bei API-Fehlern Ausnahmen auslösen, statt dass du rohes HTTP behandeln musst.

JavaScript / TypeScript

Keine Abhängigkeiten, funktioniert in Node.js und Browsern. Auch auf JSR als @yourimageshare/yourimageshare – npx jsr add @yourimageshare/yourimageshare – derselbe Quellcode, direkt als TypeScript veröffentlicht.

npm install yourimageshare

Python

Eine Abhängigkeit (requests), Python 3.8+.

pip install yourimageshare

PHP

Keine Composer-Abhängigkeiten (nutzt PHPs eigene curl-Erweiterung), PHP 7.4+. Quellcode auf GitHub.

composer require yourimageshare/yourimageshare-php

Go

Keine Abhängigkeiten (nur Standardbibliothek), Go 1.18+. Die vollständige Referenz findest du auf pkg.go.dev.

go get github.com/yourimageshare/yourimageshare/go

Rust

Zwei Abhängigkeiten (ureq für blockierendes HTTP – es wird keine Async-Runtime eingebunden – plus serde), Rust 1.70+. Quellcode auf GitHub.

cargo add yourimageshare

Ruby

Keine Gem-Abhängigkeiten (Standardbibliothek Net::HTTP + json), Ruby 2.7+. Quellcode auf GitHub.

gem install yourimageshare

.NET

Eine Abhängigkeit (Microsofts eigenes System.Text.Json), zielt auf netstandard2.0, funktioniert also mit .NET Framework und modernem .NET. Quellcode auf GitHub. Gegen diese Live-API gebaut und geprüft; die Veröffentlichung auf NuGet folgt in Kürze.

dotnet add package YourImageShare

Dart / Flutter

Eine Abhängigkeit (http, das eigene Paket des Dart-Teams), Dart 2.17+. Quellcode auf GitHub. Gegen diese Live-API gebaut und geprüft; die Veröffentlichung auf pub.dev folgt in Kürze.

dart pub add yourimageshare

Elixir

Eine Abhängigkeit (Req), Elixir 1.14+. Gibt {:ok, result}| {:error, reason}-Tupel zurück – das direkte Gegenstück zur Fehlerbehandlung dieser API in allen anderen SDKs – plus Bang-Varianten, die Ausnahmen auslösen. Quellcode auf GitHub, Dokumentation auf HexDocs.

{:yourimageshare, "~> 1.1"}

MCP-Server

Für KI-Coding-Agenten (Claude Code, Cursor und andere MCP-kompatible Tools) – füge einen Screenshot in einen Fehlerbericht, eine PR-Beschreibung oder einen Support-Thread als echte URL ein statt als Base64-Blob oder manuellen Upload-Schritt. Funktioniert genauso mit Claude Desktop und jedem anderen MCP-Client.

Gehostet, nichts zu installieren: Füge ihn als Remote-MCP-Server hinzu (in Claude: Einstellungen › Konnektoren › Eigenen Konnektor hinzufügen; ebenso in ChatGPT, Cursor, VS Code und anderen Clients, die eine Server-URL annehmen), mit deinem API-Schlüssel in der URL:

https://yourimageshare.com/mcp?key=YOUR_API_KEY

Clients, in denen du Header setzen kannst, können stattdessen https://yourimageshare.com/mcp mit Authorization: Bearer YOUR_API_KEY verwenden. Die URL mit deinem Schlüssel funktioniert wie ein Passwort: Halte sie geheim und hole dir unter Mein Konto einen neuen Schlüssel, falls sie bekannt wird. Auf dem gehosteten Server nimmt upload_image einen öffentlichen Link (bis zu 200MB) oder Inline-Base64-Inhalt (bis zu 15MB). Ohne Schlüssel lädt https://yourimageshare.com/mcp weiterhin anonym hoch, wie die Website: nur nicht gelistet oder privat, niedrigere Limits, und der Upload wird mit der delete_url gelöscht, die zurückgegeben wird. Die anderen Tools brauchen einen Schlüssel.

Lokal: Starte ihn direkt mit npx, ohne Installationsschritt (er kann auch Dateien von deiner Festplatte lesen):

npx yourimageshare-mcp

Tools: upload_image (eine lokale Datei, Inline-Inhalt oder ein Link, bis zu 200MB, mit optionaler Sichtbarkeit, Titel und automatischem Löschen), list_uploads, get_upload, update_upload und delete_upload.

Auch in der offiziellen MCP-Registry (als io.github.yourimageshare/yourimageshare) und gelistet auf Smithery und Glama, falls dein MCP-Client von dort installiert.

Neu bei MCP? In So verbindest du Claude und ChatGPT per MCP mit dieser API findest du eine vollständige Einrichtungsanleitung.

Alle zehn stehen unter der MIT-Lizenz. Keine offizielle Bibliothek für deine Sprache? Die Codebeispiele unten zeigen, wie du die API direkt aufrufst.

Codebeispiele

curl

# Upload a file
curl "https://yourimageshare.com/api" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "uploads=@/path/to/photo.jpg"

# Upload from a link (files up to 200MB; one direct upload request stops at 100MB -
# bigger files go in pieces, see Large Files above)
curl "https://yourimageshare.com/api" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "url=https://example.com/video.mp4"

# Upload a file that auto-deletes after 1 hour
curl "https://yourimageshare.com/api" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "uploads=@/path/to/photo.jpg" \
  -F "expires_in=3600"

# List uploads
curl "https://yourimageshare.com/api" -H "X-API-Key: YOUR_API_KEY"

# Upload a file without a page of its own (file only) and give it a title
curl "https://yourimageshare.com/api" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "uploads=@/path/to/photo.jpg" \
  -F "visibility=private" \
  -F "title=Sunset"

# Look up one upload, then make it public
curl "https://yourimageshare.com/api/aB3xY9qRz1" -H "X-API-Key: YOUR_API_KEY"
curl -X PATCH "https://yourimageshare.com/api/aB3xY9qRz1" \
  -H "X-API-Key: YOUR_API_KEY" -d "visibility=public"

# Delete an upload
curl -X DELETE "https://yourimageshare.com/api/aB3xY9qRz1" -H "X-API-Key: YOUR_API_KEY"

JavaScript (fetch)

const API_KEY = 'YOUR_API_KEY';
const BASE = 'https://yourimageshare.com/api';

async function uploadFile(file) {
  const form = new FormData();
  form.append('uploads', file);

  const res = await fetch(BASE, {
    method: 'POST',
    headers: { 'X-API-Key': API_KEY },
    body: form,
  });
  const json = await res.json();
  if (json.type !== 'success') throw new Error(json.errors);
  return json.data;
}

async function listUploads(page = 1) {
  const res = await fetch(`${BASE}?page=${page}`, {
    headers: { 'X-API-Key': API_KEY },
  });
  return res.json();
}

async function deleteUpload(id) {
  const res = await fetch(`${BASE}/${id}`, {
    method: 'DELETE',
    headers: { 'X-API-Key': API_KEY },
  });
  return res.json();
}

Python (requests)

import requests

API_KEY = "YOUR_API_KEY"
BASE = "https://yourimageshare.com/api"

HEADERS = {"X-API-Key": API_KEY}

# Upload a file
with open("/path/to/photo.jpg", "rb") as f:
    res = requests.post(BASE, headers=HEADERS, files={"uploads": f})
res.raise_for_status()
upload = res.json()["data"]

# List uploads
res = requests.get(BASE, headers=HEADERS, params={"page": 1})
uploads = res.json()

# Delete an upload
res = requests.delete(f"{BASE}/{upload['id']}", headers=HEADERS)

PHP (curl)

<?php

$apiKey = 'YOUR_API_KEY';
$base = 'https://yourimageshare.com/api';

// Upload a file
$curl = curl_init($base);
curl_setopt_array($curl, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: $apiKey"],
    CURLOPT_POSTFIELDS => ['uploads' => new CURLFile('/path/to/photo.jpg')],
    CURLOPT_RETURNTRANSFER => true,
]);
$upload = json_decode(curl_exec($curl), true)['data'];
curl_close($curl);

// List uploads
$curl = curl_init("$base?page=1");
curl_setopt($curl, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$uploads = json_decode(curl_exec($curl), true);
curl_close($curl);

Go (net/http)

Das offizielle Go-SDK oben nimmt dir das ab – diese rohe Variante ist für alle da, die die Abhängigkeit lieber nicht hinzufügen möchten.

package main

import (
    "bytes"
    "encoding/json"
    "io"
    "mime/multipart"
    "net/http"
    "os"
)

const apiKey = "YOUR_API_KEY"
const base = "https://yourimageshare.com/api"

func uploadFile(path string) (map[string]any, error) {
    file, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer file.Close()

    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)
    part, _ := writer.CreateFormFile("uploads", path)
    io.Copy(part, file)
    writer.Close()

    req, _ := http.NewRequest("POST", base, body)
    req.Header.Set("Content-Type", writer.FormDataContentType())
    req.Header.Set("X-API-Key", apiKey)

    res, err := http.DefaultClient.Do(req)
    if err != nil {
        return nil, err
    }
    defer res.Body.Close()

    var result map[string]any
    json.NewDecoder(res.Body).Decode(&result)
    return result, nil
}

Screenshot-Tools

Eine Browser-Erweiterung plus fertige Konfigurationen und Skripte, mit denen du Screenshots direkt zu YourImageShare schickst, ganz ohne manuelles Hochladen. Alle laden über denselben oben dokumentierten /api-Endpunkt hoch.

Browser-Erweiterung (Chrome & Firefox)

Die Erweiterung YourImageShare Capture für Chrome und Firefox kommt ganz ohne Skripte und Konfigurationsdateien aus. Sie nimmt den sichtbaren Bereich, einen per Ziehen gewählten Ausschnitt oder eine ganze scrollende Seite auf und öffnet einen integrierten Editor für Pfeile, Text, Verpixeln/Schwärzen und andere Markierungen. Danach lädst du das Ergebnis herunter, kopierst es in die Zwischenablage oder veröffentlichst es mit einem Klick direkt auf YourImageShare. Das Veröffentlichen nutzt denselben oben dokumentierten /api-Endpunkt – trage deinen API-Schlüssel einmal in den Einstellungen der Erweiterung ein, und jede Veröffentlichung liefert danach sofort einen teilbaren Link. Funktioniert in Chrome am PC (und anderen Chromium-Browsern), Firefox am PC und Firefox für Android.

YourImageShare Capture für Firefox holen YourImageShare Capture für Chrome holen

ShareX

Lade den benutzerdefinierten Uploader unten herunter, geh dann in ShareX zu Destinations > Custom uploader settings > Import > from file, öffne die heruntergeladene .sxcu-Datei und ersetze YOUR_API_KEY im Feld Headers durch deinen echten Schlüssel. Lege sie als Ziel für Bilder/Dateien fest, und Aufnahmen werden automatisch hochgeladen.

YourImageShare.sxcu herunterladen

Löschen: Der „Delete“-Link von ShareX für jeden Upload öffnet unsere Löschseite in deinem Browser (die einmalige delete_url des Uploads), sodass du eine Aufnahme direkt aus dem Verlauf von ShareX entfernen kannst. Du kannst Uploads auch unter Mein Konto löschen. Hast du die Konfiguration vor Oktober 2026 heruntergeladen? Lade sie erneut herunter, um das zu bekommen.

Flameshot (Linux)

Ein kleines Shell-Skript, das flameshot gui startet, die Aufnahme hochlädt und den Link in deine Zwischenablage kopiert. Verknüpfe es in deiner Desktop-Umgebung mit einem Tastenkürzel anstelle des Standard-Kürzels von Flameshot.

yis-flameshot-upload.sh herunterladen

# One-time setup
chmod +x yis-flameshot-upload.sh
export YIS_API_KEY="YOUR_API_KEY"   # or add to ~/.config/yourimageshare/api_key

# Then bind this to a hotkey instead of calling flameshot directly:
/path/to/yis-flameshot-upload.sh

Greenshot (Windows)

Ein PowerShell-Skript für das eingebaute Ziel External command von Greenshot. Kompatibel mit der Windows PowerShell 5.1, die mit Windows ausgeliefert wird, keine zusätzliche Installation nötig.

yis-greenshot-upload.ps1 herunterladen

# One-time setup
setx YIS_API_KEY "YOUR_API_KEY"

# In Greenshot: Preferences > Destinations > External command > Settings
#   Command:   powershell.exe
#   Arguments: -ExecutionPolicy Bypass -File "C:\path\to\yis-greenshot-upload.ps1" "%1"

Forum-Plugins

Füge neben dem Beitragseditor deines Forums einen echten Button „Bild hochladen“ hinzu. Jedes Plugin lädt über denselben oben dokumentierten /api-Endpunkt hoch und fügt BBCode an der Cursorposition ein – kein separater Tab, kein manuelles Kopieren und Einfügen.

Verwende unten deinen Nur-Upload-Schlüssel, nicht deinen API-Schlüssel. Jedes Plugin schreibt den Schlüssel in den Seitenquelltext für jeden Besucher, und der Nur-Upload-Schlüssel (Mein Konto > Tab API) kann nur hochladen – er kann deine Uploads nicht auflisten oder löschen, selbst wenn ihn jemand aus der Seite kopiert.

Forum-Uploads sind standardmäßig privat: Das Bild funktioniert im Beitrag, aber YourImageShare legt dafür keine eigene Seite an (keine Kommentare, Reaktionen oder Werbung). Jedes Plugin hat eine Einstellung, um auf unlisted umzustellen, falls du auch eine Seite für alle mit dem Link möchtest.

phpBB

Eine echte Erweiterung für phpBB 3.2/3.3. Entpacke sie nach ext/, aktiviere sie unter Customise > Manage extensions und ersetze dann YOUR_UPLOAD_ONLY_KEY in der Template-Event-Datei der Erweiterung durch deinen echten Nur-Upload-Schlüssel.

Für phpBB herunterladen

SMF (Simple Machines Forum)

Ein echtes SMF-Paket – installiere es über Admin > Package Manager und ersetze dann YOUR_UPLOAD_ONLY_KEY in Sources/yis_forumupload.php durch deinen echten Nur-Upload-Schlüssel.

Für SMF herunterladen

MyBB

Ein echtes Plugin für MyBB 1.8. Kopiere es nach inc/plugins/, aktiviere es unter Configuration > Plugins und ersetze dann YOUR_UPLOAD_ONLY_KEY in der Plugin-Datei durch deinen echten Nur-Upload- Schlüssel.

Für MyBB herunterladen

FluxBB, PunBB & ZetaBoards

Diese haben kein formelles Plugin-System, daher ist es ein kleines Snippet, das du direkt in dein Template (FluxBB/PunBB) oder in das Admin-CP (ZetaBoards) einfügst – vollständige Anleitungen zum Kopieren und Einfügen für jedes:

Anleitung für FluxBB Anleitung für PunBB Anleitung für ZetaBoards

WordPress-Plugin

Lagere deine Mediathek zu YourImageShare aus, statt sie auf der lokalen Festplatte zu speichern. Neue Bild-/Video-Uploads laufen automatisch über denselben /api-Endpunkt, der oben dokumentiert ist, die lokale Datei (und jede erzeugte Vorschaugröße) wird gelöscht, sobald der Upload bestätigt ist, und jede WordPress- Anhangs-URL – im Block-Editor, bei Beitragsbildern, in Galerien und in der REST-API – zeigt auf die bei YourImageShare gehostete Datei. Kein Shortcode, keine Änderung im Ablauf.

  • Eine bestehende Mediathek im Hintergrund (oder mit wp yis offload --all) komplett auslagern, nicht nur neue Uploads
  • Bilder und Videos, die schon in Beiträgen stehen, funktionieren weiter, nachdem ihre lokalen Dateien entfernt wurden
  • Vorschaubilder und srcset nutzen unser 280px-Vorschaubild, sodass kleine Bildplätze keine Dateien in voller Größe laden
  • Dateien bis zu 200MB, in Teilen gesendet, damit große Videos einen Shared Host nie überlasten
  • Jede ausgelagerte Datei lässt sich jederzeit zurück in den lokalen Speicher holen
  • Eine Spalte in der Mediathek zeigt, was ausgelagert und was noch lokal ist
  • Ausgelagerte Dateien werden als privat gespeichert: Sie laden überall, wo deine Website sie nutzt, bekommen aber keine eigene Seite auf YourImageShare

Verwendet deinen Nur-Upload-Schlüssel, nicht deinen API-Schlüssel. Der optionale vollständige API-Schlüssel wird nur gebraucht, wenn ausgelagerte Dateien auch bei YourImageShare gelöscht werden sollen, sobald du sie in WordPress löschst.

Auf WordPress.org holen ZIP herunterladen

In WordPress: Plugins > Neu hinzufügen, suche nach YourImageShare Media Offload und wähle dann Installieren und Aktivieren.

Upload-Button für jede Website

Gib deinen Besuchern auf jeder Website einen Button „Hochladen“ – in einem Kommentarformular, auf einer Support- Seite, in einem Forum, für das wir kein Plugin haben, oder auf einer statischen Seite. Füge zwei Zeilen ein; kein Konto und kein Servercode nötig.

<a class="yis-upload" href="https://yourimageshare.com/" data-target="#message" data-format="bbcode">Image and video hosting by YourImageShare</a>
<script src="https://yourimageshare.com/w.js" async></script>

Beide Attribute sind optional: Ohne sie zeigt der Button die Links mit einer Schaltfläche „Kopieren“ an. Das Upload-Feld wird um den Link herum aufgebaut.

  • Hochgeladen wird direkt auf deiner Seite: Klicke auf den Button, ziehe Dateien darauf oder füge einen Screenshot ein – mehrere Dateien gleichzeitig, mit Fortschrittsbalken und Vorschaubild
  • Bilder, die du direkt in das unter data-target genannte Feld einfügst oder hineinziehst (jedes Textarea, Input oder bearbeitbare Feld), werden ebenfalls hochgeladen, und die Links werden in diesem Feld ergänzt; ohne Ziel erscheinen sie unter dem Button mit einer Schaltfläche „Kopieren“
  • data-format: url (direkter Dateilink, der Standard), page, bbcode, html oder markdown; data-label ändert den Text des Buttons
  • data-key (optional): dein Nur-Upload-Schlüssel (Mein Konto > API). Uploads landen dann in deinem Konto mit deinen eigenen Limits. Ohne Schlüssel sind Uploads anonym und nicht gelistet, mit einem Tageslimit pro Besucher und pro Website
  • Entwickler können auf das Ereignis yis:upload im Upload-Feld lauschen: event.detail.item enthält {id, type, page, url, thumb}
  • Dateien bis zu 95 MB über den Button (größere auf der Website). Unsere Moderation und Bedingungen gelten wie gewohnt; jeder Besucher erhält seinen eigenen Löschlink

Der Button wird in einem eigenen, isolierten Feld dargestellt, sodass das CSS deiner Website ihn nicht kaputt machen kann. Der kleine Link „Image and video hosting by YourImageShare“ bleibt im Upload-Feld sichtbar.

Kurzbefehl für iPhone & iPad

Lade über das Teilen-Menü jeder App hoch – Fotos, Dateien, Safari, ein Screenshot – und erhalte den Link in deiner Zwischenablage. Keine App zu installieren und kein Konto nötig.

So baust du ihn selbst in der App „Kurzbefehle“ (etwa zwei Minuten):

  1. Neuer Kurzbefehl, nenne ihn „Upload to YourImageShare“. Aktiviere in den Details Im Share Sheet anzeigen und akzeptiere Bilder und Medien.
  2. Füge Inhalte von URL abrufen hinzu: URL https://yourimageshare.com/api/widget, Methode POST, Anfragetext Formular mit zwei Feldern: uploads (Datei) = Kurzbefehl-Eingabe und client (Text) = ios-shortcut.
  3. Füge Wörterbuchwert abrufen für data hinzu, dann noch einen für src – das ist der direkte Link.
  4. Füge In Zwischenablage kopieren und Mitteilung anzeigen („Link kopiert“) hinzu.

Ohne Schlüssel sind Uploads anonym und nicht gelistet, mit einem Tageslimit. Füge einen Header X-API-Key mit deinem Nur-Upload-Schlüssel (Mein Konto > API) hinzu, um in dein Konto hochzuladen. Die Antwort enthält außerdem delete_url, falls du einen Löschlink aufbewahren möchtest.

PicGo & PicList

PicGo und PicList laden eingefügte oder hineingezogene Bilder für Markdown-Editoren hoch – Typora, VS Code, Obsidian, Joplin – und setzen den Link in deinen Text. Unser Plugin macht YourImageShare zu einem ihrer Bilderhoster.

  • In PicGo oder PicList: Plugins, suche nach yourimageshare, installiere es und wähle dann YourImageShare als Uploader. Kommandozeile: picgo install yourimageshare
  • Oder lade das Plugin herunter und importiere es als lokales Plugin (vorher entpacken)
  • Einstellungen: Nur-Upload-Schlüssel (optional – leer = anonyme, nicht gelistete Uploads), Sichtbarkeit und ob der direkte Bildlink (für Markdown) oder der Seitenlink zurückgegeben wird
  • Der zurückgegebene Link funktioniert weiter, wenn große Bilder später zu WebP optimiert werden

PicGo-Plugin herunterladen

Telegram-Bot

Hol dir einen Link für ein Foto, Video oder GIF, ohne Telegram zu verlassen. Schick es an @YourImageShare_bot, und der Link kommt direkt zurück – ohne Konto und ohne API-Schlüssel. Der Bot lädt über denselben oben dokumentierten /api-Endpunkt hoch.

  • Schick ein Foto, Video, GIF oder eine Bild- oder Videodatei; ein Album mit bis zu 10 Dateien kommt in einer Antwort zurück
  • Antworte in einer Gruppe mit /link auf ein Foto oder Video, und der Bot postet den Link für alle
  • /autodelete sorgt dafür, dass sich deine nächsten Uploads nach 1 Stunde, 1 Tag, 1 Woche oder 30 Tagen selbst löschen
  • Jedes Ergebnis hat einen Löschen-Button, der nur für die Person funktioniert, die die Datei hochgeladen hat
  • Links sind nicht gelistet: Nur Personen, die den Link haben, können die Datei sehen
  • Der Bot antwortet in deiner Telegram-Sprache, wenn die Website in dieser Sprache verfügbar ist

Volle Qualität behalten: Telegram komprimiert Fotos, die auf normalem Weg gesendet werden. Sende sie als Datei (📎 → Datei), dann wird das Original hochgeladen. Telegram lässt Bots Dateien bis zu 20 MB abrufen, lade größere Dateien also auf der Website hoch.

@YourImageShare_bot in Telegram öffnen

Discord-Bot

Mach aus jedem Bild, GIF oder Video in Discord einen dauerhaften Link. Die eigenen Anhangs-Links von Discord funktionieren nach einer Weile nicht mehr; YourImageShare-Links schon. Kein Konto und kein API-Schlüssel nötig. Der Bot lädt über denselben oben dokumentierten /api-Endpunkt hoch.

  • /upload mit einer Datei: optionales automatisches Löschen nach 1, 7 oder 30 Tagen und only_me, damit nur du den Link siehst
  • Rechtsklick auf eine Nachricht → Apps → Rehost on YourImageShare, um bis zu 6 Bilder oder Videos daraus in einer Antwort neu zu hosten
  • Füge ihn einem Server hinzu oder deinem eigenen Konto, um ihn in jedem Chat oder jeder DM zu nutzen
  • Jedes Ergebnis hat einen Löschen-Button, der nur für die Person funktioniert, die die Datei hochgeladen hat
  • Links sind nicht gelistet: Nur Personen, die den Link haben, können die Datei sehen

YourImageShare zu Discord hinzufügen

GitHub Action für Playwright & Cypress

Wenn End-to-End-Tests in einem Pull Request fehlschlagen, siehst du den Grund, ohne Artefakt-ZIPs herunterzuladen. Die Action lädt die Fehler-Screenshots und visuellen Diffs hoch und zeigt sie als Bilder in einem Pull-Request-Kommentar, der bei jedem Lauf aktualisiert wird.

  • Funktioniert mit Playwright und Cypress und erkennt selbst, welches das Projekt nutzt
  • Fehlgeschlagene visuelle Vergleiche erscheinen als Expected, Actual und Diff, mit einem Link zu einem Vorher/Nachher-Schieberegler (Playwrights toHaveScreenshot; bei Cypress die Plugins cypress-image-diff-js und cypress-visual-regression)
  • Der Kommentar ändert sich zu „all tests passed“, sobald die Tests repariert sind; derselbe Bericht geht in die Job-Zusammenfassung
  • Screenshots sind privat (nur Bilddateien, keine Seite) und werden standardmäßig nach 30 Tagen gelöscht
  • Braucht deinen Nur-Upload-Schlüssel als Repository-Secret YOURIMAGESHARE_API_KEY; die Action lässt deinen Build nie fehlschlagen
- uses: yourimageshare/playwright-pr-screenshots@v1
  if: always()
  with:
    api-key: ${{ secrets.YOURIMAGESHARE_API_KEY }}

Einrichtungsanleitung auf GitHub

Community-Projekte

Einige der besten YourImageShare-Integrationen stammen von den Menschen, die den Dienst nutzen. Diese Projekte wurden von Mitgliedern der Community mit der oben dokumentierten öffentlichen API gebaut. Sie werden von ihren Autoren gepflegt, bei Fragen oder Fehlerberichten wende dich also über die Seite des Projekts an den Autor.

  • YourImageShare Uploads for FlatBB – ein Plugin für das FlatBB-Forum von madromas (MadWay Inc.).
    • Fügt dem Beitragseditor von FlatBB einen Upload-Button hinzu: Wähle ein oder mehrere Bilder oder Videos, und das Markdown wird an der Cursorposition eingefügt
    • Fügt jeden Upload als anklickbares Vorschaubild, als Bild in voller Größe oder als einfachen Link ein (Videos als Link)
    • Uploads laufen über den Server deines Forums mit einem Nur-Upload-API-Schlüssel, sodass der Schlüssel nie in die Browser der Besucher gelangt
    • Dateien liegen bei YourImageShare statt auf der Festplatte deines Forums, mit einer von dir gewählten Standard-Sichtbarkeit (privat, nicht gelistet oder öffentlich)
    • Funktioniert neben dem eigenen Uploader von FlatBB, mit eigenem Dateigrößenlimit

    Quellcode auf GitHub · Seite im FlatBB Marketplace

Danke

Ein großes Dankeschön an alle, die mit YourImageShare bauen und ihre Arbeit mit anderen teilen. Community-Projekte bringen YourImageShare an Orte, die wir allein nie erreicht hätten. Hast du etwas mit der API gebaut? Erzähl uns davon, dann nehmen wir es gern hier auf.

Aus dem Blog

Bereit zum Ausprobieren?

API-Schlüssel holen →