Generor API-Dokumentation
Erstelle mit über 93 KI-Generatoren — Text, Bild, Video, Audio und mehr.
Eine einheitliche REST-API zum Erstellen, Durchsuchen und Verwalten von KI-Inhalten. Alle Anfragen verwenden JSON. Authentifiziere dich mit einem Bearer-Token.
Authentifizierung
Authentifizieren Sie sich mit einem Bearer-Token im Authorization-Header:
curl https://generor.com/api/v1/users/me \
-H "Authorization: Bearer gnr_live_your_api_key_here"
API-Keys beginnen mit gnr_live_, gefolgt von 40 Hex-Zeichen. Erstelle Keys über die API-Keys-Endpunkt oder deine Kontoeinstellungen.
Einige Endpunkte (Durchsuchen von Generatoren, öffentlichen Kreationen, Modellen) funktionieren ohne Authentifizierung. Mit AUTH markierte Endpunkte erfordern einen gültigen API-Schlüssel.
Geltungsbereiche
API-Keys können eingeschränkt werden, um den Zugriff zu begrenzen:
| Geltungsbereich | Erlaubt |
|---|---|
read | GET-Anfragen an alle Endpunkte |
write | POST-, PATCH-, DELETE-Operationen (Kommentare, Bewertungen, Profilaktualisierungen usw.) |
generate | Inhaltsgenerierung (kostet Credits) |
Schlüssel ohne angegebene Scopes haben vollen Zugriff.
Ratenbegrenzungen
Die Limits gelten pro API-Schlüssel. Jede Antwort enthält Rate-Limit-Header:
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 28
X-RateLimit-Reset: 1708444860
X-RateLimit-Tier: free
| Stufe | Pro Minute | Pro Stunde | Pro Tag |
|---|---|---|---|
| free | 30 | 500 | 5,000 |
| basic | 60 | 2,000 | 20,000 |
| pro | 120 | 5,000 | 50,000 |
| enterprise | 300 | 20,000 | 200,000 |
Nicht authentifizierte Anfragen sind auf 15/Minute pro IP begrenzt. Bei Drosselung erhältst du eine 429-Antwort mit einem Retry-After-Header.
Antwortformat
Alle Antworten verwenden einen einheitlichen JSON-Umschlag:
Erfolg
{
"success": true,
"data": { ... },
"meta": {
"page": 1,
"per_page": 20,
"total": 142,
"total_pages": 8,
"has_next": true,
"has_prev": false
}
}
Fehler
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Creation not found",
"status": 404
}
}
Seitennummerierung
List-Endpunkte unterstützen Paginierung über Query-Parameter:
| Parameter | Standard | Beschreibung |
|---|---|---|
page | 1 | Seitennummer (1-basiert) |
per_page | 20 | Einträge pro Seite (max. 100) |
sort | newest | Sortierreihenfolge: newest, oldest |
Generatoren
GET /generators
Listet alle verfügbaren Generatoren auf.
curl https://generor.com/api/v1/generators
Abfrageparameter: status (active, development, all)
Antwort: Array von Generatoren mit Slug, Titel, Beschreibung, Symbol und ähnlichen Generatoren.
GET /generators/{slug}
Detaillierte Informationen zu einem bestimmten Generator abrufen.
curl https://generor.com/api/v1/generators/image
POST /generators/{slug}/estimate
Zeigt die Credit-Kosten und die voraussichtliche Generierungszeit an, vorher /generate aufgerufen wird. Gleicher Body-Aufbau wie /generate — jedoch schreibgeschützt: es werden keine Credits berechnet und keine Kreation gespeichert. Dies ist genau dieselbe Zahl, die die UI neben dem Generieren-Button anzeigt.
curl -X POST https://generor.com/api/v1/generators/horoscope/estimate \
-H "Content-Type: application/json" \
-d '{
"model_id": 37,
"count": 5,
"parameters": {
"zodiac-sign": "aries",
"horoscope-length": "long"
}
}'
Antwort:
{
"success": true,
"data": {
"generator": "horoscope",
"model_id": 37,
"model_type": "text",
"model_name": "Gemini 3.5 Flash",
"credit_cost": {
"total": 15, // after bulk discount
"per_item": 3, // model base × length/quality multipliers
"count": 5,
"discount": 0, // credits saved
"discount_percent": 5 // % off applied (count% off, capped at 10%)
},
"time_estimate": {
"seconds": 50, // total wall-clock estimate
"per_item": 10,
"min_seconds": 8,
"max_seconds": 14,
"sample_count": 10, // recent generations averaged
"has_historical": true,
"source": "historical" // or "fallback" when sample_count < 3
},
"applied_parameters": { // what the API actually used (schema-filtered)
"zodiac-sign": "aries",
"horoscope-length": "long",
"model-text": "3",
"horoscope-count": "5"
}
}
}
Offen für nicht authentifizierte Aufrufer – Preise/Zeiten sind öffentliche Informationen und entsprechen dem, was die öffentliche Generatorseite anzeigt.
Eingerastete Videolängen
Wenn du einen seconds-Wert übergibst, der nicht in den supported_durations des Modells enthalten ist, rastet die API auf den nächstgelegenen unterstützten Wert ein (bei Gleichstand auf den niedrigeren) und weist die Änderung in einem adjustments-Block aus. Die Credit-Kosten und die Zeitschätzung in derselben Antwort spiegeln den eingerasteten Wert wider — das, was /generate tatsächlich tun wird — nicht die ursprüngliche Anfrage.
{
"success": true,
"data": {
"credit_cost": { "total": 30, ... },
"time_estimate": { "seconds": 60, ... },
"adjustments": {
"seconds": {
"requested": 3,
"used": 5,
"supported": [5, 6, 7, 8, 10, 12, 15],
"reason": "snapped to nearest provider-supported duration"
}
}
}
}
Wann du es verwenden solltest
- Vorab-Kostenprüfung — bestätigen Sie, dass ein Nutzer sich die Generierung leisten kann, bevor abgerechnet wird.
- Fortschritts-UI — speisen Sie
time_estimate.secondsin Ihren Ladebalken ein, damit Nutzer wissen, wie lange sie warten müssen. - Parameter-Feinabstimmung — rufen Sie es auf, wann immer ein Nutzer ein Dropdown ändert; die Kosten werden aktualisiert, ohne dass eine Generierung ausgelöst wird.
Beziehung zu /generate — /estimate ist ein separat, optional Aufruf. /generate gibt bereits die tatsächlichen credit_cost, die berechnet wurden, + credits_remaining im Nachhinein zurück. Wenn Sie also damit einverstanden sind, den aktuellen Preis zu zahlen, können Sie /estimate ganz überspringen.
Use the Generor API at https://generor.com/api/v1.
Before calling POST /generators/{slug}/generate, call
POST /generators/{slug}/estimate with the same body to get back:
- credit_cost.total (credits the next generate call will charge)
- time_estimate.seconds (expected wall-clock duration)
Show both to the user, then call /generate when they confirm.
The /generate response includes the real credit_cost charged and
credits_remaining — use those to update the user's balance.
Discover each generator's tweakable fields with GET /generators/{slug}
and pass them under the `parameters` object on both /estimate and
/generate (keys match the dropdown IDs you see on the public page).
POST /generators/{slug}/generate AUTH
Erstelle Inhalte mit KI. Dies ist ein synchroner Aufruf — die Antwort wird zurückgegeben, wenn die Generierung abgeschlossen ist. Kostet Credits je nach gewähltem Modell. Die Textgenerierung dauert in der Regel 5-30 Sekunden, die Bildgenerierung 10-60 Sekunden, und die Videogenerierung kann mehrere Minuten dauern.
# Text generation (joke with GPT 5 Nano)
curl -X POST https://generor.com/api/v1/generators/joke/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "Tell me a joke about programming",
"model_id": 37
}'
# Image generation (Flux Schnell, square)
curl -X POST https://generor.com/api/v1/generators/image/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "A sunset over mountains",
"model_id": 10003,
"aspect_ratio": 1
}'
# Image description (vision — Qwen VL Max, image-only input, prompt is optional)
curl -X POST https://generor.com/api/v1/generators/vision/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"model_id": 34,
"image_url": "https://example.com/photo.jpg",
"preference": "detailed"
}'
# Video generation (Happy Horse 1.0 R2V — multi-reference, 6s, wide)
curl -X POST https://generor.com/api/v1/generators/video/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "The character from [Image1] walks through the forest from [Image2]",
"model_id": 20050,
"aspect_ratio": "16:9",
"seconds": 6,
"reference_images": [
"https://example.com/character.jpg",
"https://example.com/forest.jpg"
]
}'
# Video generation (Happy Horse Video Edit — natural-language edit of an existing clip)
curl -X POST https://generor.com/api/v1/generators/video/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "Replace the sky with a stormy sunset",
"model_id": 20051,
"video_url": "https://example.com/source.mp4",
"seconds": 5
}'
Anfrage-Body:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
prompt | string | Ja | Der Generierungs-Prompt (max. 10.000 Zeichen) |
model_id | integer | Ja | KI-Modell-ID. Text: 1-9999, Bild: 10001-19999, Video: 20001-29999. Siehe Modelle. |
privacy_mode | integer | Nein | 0 = public (default), 1 = private, 2 = team, 3 = unlisted. |
team_id | integer | Nein | Unter einem Team erstellen |
count | integer | Nein | Anzahl der Elemente (1-10, Standard 1) |
language | string | Nein | Sprachcode für die Textgenerierung (z. B. "en-US", "nb-NO"). Standard: "auto" |
temperature | float | Nein | LLM-Kreativität (nur Textmodelle, 0.0-2.0) |
preference | string/int | Nein | Generatorspezifische Einstellung (z. B. Witztyp, Gedichtstil) |
preference_two | string/int | Nein | Generatorspezifische sekundäre Einstellung |
aspect_ratio | int or string | Nein | Akzeptiert numerische IDs oder Verhältnis-/Namens-Zeichenketten. Bild: 1 / "1:1" / "square", 2 / "3:4" / "vertical", 3 / "4:3" / "horizontal", 4 / "16:9" / "wide", 5 / "9:16" / "tall". Video: 1 / "16:9" / "wide", 2 / "9:16" / "tall". Tipp: Verwende Verhältnis-Strings wie "16:9" und die API ordnet die korrekte ID für den Modelltyp zu. |
image_url | string | Nein | Referenz-Bild-URL für Image-to-Image, Stilübertragung oder Image-to-Video (I2V). |
seconds | integer | Nein | Videolänge in Sekunden (nur Videomodelle). Jeder Anbieter akzeptiert nur eine bestimmte Auswahl — frage GET /models/video/{id} für supported_durations ab. Wenn du einen nicht unterstützten Wert übergibst, rundet die API ihn auf den nächstgelegenen unterstützten Wert und meldet die Anpassung in adjustments.seconds in der Antwort. |
generate_audio | boolean | Nein | Native-Audio-Schalter für Veo 3.1 und Seedance 1.5 Pro (Video). Andere Videomodelle integrieren das Audioverhalten fest und ignorieren diese Einstellung. |
ending_frame_url | string | Nein | Endbild-Anker für Modelle, die die Steuerung von Start- und Endbild unterstützen (Veo 3.1, Wan 2.6 I2V, Seedance Pro Lite, Kling v3). Kombinieren Sie ihn mit image_url für nahtlose Übergänge oder Schleifen. |
reference_images | array<string> | Nein | Bis zu 9 Referenz-Bild-URLs. Unterstützt von: Veo 3.1 (max. 3), Seedance 2.0 (max. 9), Happy Horse R2V (max. 9), Happy Horse Video Edit (max. 5). Die Reihenfolge bleibt erhalten und wird dem Modell als [Image1] … [ImageN] bereitgestellt, wenn Prompts darauf verweisen. |
reference_videos | array<string> | Nein | Bis zu 3 Referenz-Video-URLs. Verwendet von Seedance 2.0 (Replicate) und Dreamina Seedance 2.0 (BytePlus direkt) für Bewegungs-/Stilkohärenz. |
reference_audio | string | Nein | Referenz-Audio-URL für Musik-/Stimmkontinuität. Wird derzeit von Dreamina Seedance 2.0 verwendet (Modell 20060-20062, BytePlus direkt). |
video_url | string | Nein | Quell-Video-URL — erforderlich für Happy Horse Video Edit (Modell 20051) und verwendet von Dreamina Seedance 2.0 (20060-20062) für Video-Edit-/Video-Extend-Modi. |
parameters | object | Nein | Generatorspezifische Felder — dieselben Dropdowns, die das Frontend bereitstellt, indiziert nach ihren DOM-IDs. Siehe Generator-Parameter unten. Unbekannte / ungültige Schlüssel werden stillschweigend verworfen. |
Generator-Parameter
Der vollständige Satz anpassbarer Felder jedes Generators befindet sich in einem generatorspezifischen Schema (derselben Quelle, die die Dropdown-Menüs auf der Website und die URL-Vorbelegung nutzen). Übergeben Sie eines dieser Felder im parameters-Objekt einer Generierungsanfrage, um sie programmatisch zu steuern.
Rufe das Schema für einen beliebigen Generator unter GET /generators/{slug} ab — das parameters-Array in der Antwort listet jedes Feld mit seiner id, seinem type (enum, number oder model), seinen options (oder min/max), seinem default und seinen cost_multipliers auf.
# 1) Discover the parameters for the horoscope generator
curl https://generor.com/api/v1/generators/horoscope
# 2) Pass them on the generate call
curl -X POST https://generor.com/api/v1/generators/horoscope/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "Aries weekly reading",
"model_id": 37,
"parameters": {
"zodiac-sign": "aries",
"horoscope-timeframe": "weekly",
"horoscope-tone": "mystical",
"horoscope-length": "long",
"horoscope-focus": "career"
}
}'
# Image example — every dropdown in the UI is a key here
curl -X POST https://generor.com/api/v1/generators/wallart/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "Calm mountain lake at dawn",
"model_id": 10003,
"parameters": {
"wallart-type": "framed-print",
"wallart-orientation": "landscape",
"image-aspect-ratio": "4"
}
}'
Zusätzliche Felder zur Textgenerierung
Für Textgeneratoren (model_id 1-9999) werden diese Body-Felder der obersten Ebene bei Bedarf an den LLM-Endpunkt weitergeleitet:
| Feld | Typ | Beschreibung |
|---|---|---|
user_text | string | Freier Zusatztext (z. B. Quellinhalt zum Zusammenfassen / Umwandeln) |
user_text_two | string | Sekundärer Zusatztext (verwendet von Generatoren mit zwei Texteingaben) |
avoid_duplicates | boolean | Das Modell zu neuartigen Ausgaben über einen Batch hinweg neigen lassen |
thinking_mode | string | Für Modelle mit Reasoning-Fähigkeit: off, on oder high |
story_context | string | Quellgeschichte, die an story, story-part und storyboard übergeben wird, um markenkonforme Szenen zu schreiben |
character_context / character_name / character_id | string / int | Charakterkontinuität für Storyboards, Story-Teile und Folge-Kreationen |
support_for | integer | ID der übergeordneten Kreation – verknüpft diese Generierung als untergeordnete / begleitende Kreation |
mode | string | Generatorspezifischer Modusumschalter (z. B. Spielphase) |
model_speech | integer | Sprachmodell, das mit der Textausgabe kombiniert wird (verwendet für vorgelesene Horoskope, Podcasts usw.) |
item_index / total_count | integer | Hinweise zur sequenziellen Generierung (verwendet beim Generieren von Elementen in Reihenfolge, z. B. Lösungsschritten) |
translation_of / source_language | integer / string | Eine bestehende Erstellung übersetzen, statt von Grund auf neu zu generieren |
Antwort (201 Created) — Beispiel für Textgenerator:
{
"success": true,
"data": {
"generator": "joke",
"model_id": 37,
"model_type": "text",
"model_name": "Gemini 3.5 Flash",
"creations": [
{
"creation_id": 6144,
"text": "Why do programmers prefer dark mode? Because light attracts bugs!",
"illustration_desc": "a minimalist bug icon on a dark background"
}
],
"credit_cost": 1,
"credit_cost_estimated": 1,
"credits_remaining": 36024,
"time_taken_seconds": 4.18
}
}
Antwort (201 Created) — Beispiel für Bildgenerator:
{
"success": true,
"data": {
"generator": "image",
"model_id": 10003,
"model_type": "image",
"model_name": "black-forest-labs/flux-schnell",
"creations": [
{
"creation_id": 6147,
"image_url": "https://generor.com/users/2/img/image-6147.webp"
}
],
"credit_cost": 24,
"credit_cost_estimated": 6,
"credits_remaining": 35998,
"time_taken_seconds": 23.7
}
}
Eingerastete Videolängen — wenn die seconds des Aufrufers nicht in den supported_durations des Modells enthalten sind, rastet die API auf den nächstgelegenen unterstützten Wert ein, bevor sie den Anbieter aufruft, und fügt der Antwort einen adjustments.seconds-Block hinzu, der in der Struktur identisch mit dem auf /estimate ist. Dies verhindert, dass Anbieter nicht unterstützte Werte stillschweigend als Standard verwenden.
So funktionieren die Kostenfelder
credit_cost— der tatsächlich abgezogene tatsächlich-Betrag, berechnet alsbalance_before − balance_after. Dies ist die maßgebliche Quelle: Verwenden Sie sie für Protokollierung, Abrechnung und die Aktualisierung von Nutzerguthaben.credit_cost_estimated— die vorab erstellte Katalogschätzung (dieselbe Zahl, die/estimatevorhergesagt hätte). Aus Gründen der Transparenz und Drift-Überwachung enthalten. Weicht häufig voncredit_costbei Video- / Pro-Sekunde- / Pro-Zeichen-Preisen ab, wo die tatsächliche Gebühr innerhalb des Provider-Aufrufs berechnet wird.time_taken_seconds— tatsächliche Echtzeitdauer. Vergleichen Sie mittime_estimate.secondsaus/estimate, um die Vorhersage der historischen Zeit zu validieren.
text, illustration_desc bei Witzen; dish_name, ingredients bei Rezepten). Verwende GET /creations/{id}, um die vollständigen Kreationsdaten später abzurufen. Kreationen
GET /creations AUTH
Listet Ihre eigenen Werke auf.
curl https://generor.com/api/v1/creations \
-H "Authorization: Bearer gnr_live_..."
Abfrageparameter: generator (nach Slug filtern), page, per_page, sort
GET /creations/{id}
Eine einzelne Kreation mit allen Details, Bildern und generatorspezifischen Daten abrufen.
curl https://generor.com/api/v1/creations/12345
Erfordert eine Anmeldung als Eigentümer der Kreation oder die Mitgliedschaft im Team, mit dem sie geteilt wurde.
Die Antwort enthält:
{
"success": true,
"data": {
"creation_id": 12345,
"generator": "image",
"user_id": 42,
"username": "johndoe",
"prompt": "A sunset over mountains",
"created_at": "2026-02-20 12:00:00",
"privacy_mode": 1,
"type": "img",
"license": 1,
"images": [
{
"url": "/users/42/img/image-12345.png",
"width": 1024,
"height": 1024
}
],
"generator_data": { ... }
}
}
GET /creations/{id}/status AUTH
Prüfe den Generierungsstatus einer Kreation (nützlich, wenn du Generierungsdatensätze verfolgst).
curl https://generor.com/api/v1/creations/12345/status \
-H "Authorization: Bearer gnr_live_..."
Statuswerte: pending, generating, completed, failed, cancelled
PATCH /creations/{id} AUTH
Eine Erstellung aktualisieren, die dir gehört.
curl -X PATCH https://generor.com/api/v1/creations/12345 \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"privacy_mode": 1, "license": 2}'
| Feld | Werte |
|---|---|
privacy_mode | 0 (public), 1 (private), 3 (unlisted) |
license | Veraltet — wird aus Gründen der Abwärtskompatibilität akzeptiert, aber ignoriert. Ersteller behalten alle Rechte an ihren Kreationen; siehe /license. |
DELETE /creations/{id} AUTH
Löschen Sie eine Ihnen gehörende Kreation (Soft-Delete).
curl -X DELETE https://generor.com/api/v1/creations/12345 \
-H "Authorization: Bearer gnr_live_..."
Modelle
GET /models
Listet alle verfügbaren KI-Modelle gruppiert nach Typ auf.
curl https://generor.com/api/v1/models
GET /models/{type}
Listet Modelle für einen bestimmten Typ auf.
curl https://generor.com/api/v1/models/image
Gültige Typen: text, image, video, speech, music, soundeffect, upscale, vector, backgroundremoval
Antwort pro Modell:
{
"id": 10001,
"name": "Flux 1.1 Pro",
"type": "image",
"provider": "replicate",
"description": "High-quality image generation...",
"credit_cost": 80,
"supports_img2img": true,
"supports_aspect_ratio": true
}
Videomodelle fügen Sie zusätzlich die vollständige Provider-Capability-Struktur ein:
{
"id": 20061,
"name": "Dreamina Seedance 2.0 (720p)",
"type": "video",
"provider": "byteplus",
"credit_cost": 6,
// Duration constraints
"supported_durations": [5, 6, 7, 8, 10, 12, 15],
"default_duration": 8,
// Audio toggle
"supports_audio": true,
"audio_cost_multiplier": 1,
// End-frame anchoring (pass `ending_frame_url` on /generate)
"supports_end_frame": true,
// Resolution variants — same model at different qualities lives at
// different model_ids. Switch quality by picking the matching id.
"quality": "720p",
"default_quality": "720p",
"qualities": { "480p": 20060, "720p": 20061, "1080p": 20062 },
"group_slug": "dreamina-seedance-2-direct",
"group_name": "Dreamina Seedance 2.0",
// Aspect ratios accepted on /generate
"supports_aspect_ratio": true,
"aspect_ratios": [
{ "id": 1, "ratio": "16:9", "label": "Wide" },
{ "id": 2, "ratio": "9:16", "label": "Tall" }
]
}
Bildmodelle die das Seitenverhältnis variieren, enthalten ein entsprechendes aspect_ratios-Array (die Bildseite hat 6 Einträge: quadratisch, vertikal, horizontal, breit, hoch, plus match_input_image für img2img-Modi).
So verwendest du diese Felder
supported_durations— übergeben Sie hier einen beliebigen Wert überseconds. Nicht unterstützte Werte rasten serverseitig ein und werden unteradjustments.secondsgemeldet.qualities— Um die Auflösung zu wechseln, suchen Sie denmodel_idfür die gewünschte Auflösung und übergeben Sie diesen als Ihrenmodel_id. (Auflösungen sind eigenständige Modelle, kein Laufzeitparameter.)supports_audio— Wenntrue, können Sie"generate_audio": truean/generateübergeben. Wennfalse, wird das Flag ignoriert.supports_end_frame— Wenntrue, können Sieimage_url(Startbild) mitending_frame_urlkombinieren, um nahtlose Übergänge oder Schleifen zu erstellen.aspect_ratios— übergeben Sie dieid(Ganzzahl) oder dasratio(Zeichenkette) im Feldaspect_ratiobei/generate. Beide Formen funktionieren.
GET /models/{type}/{id}
Details und Preise eines bestimmten Modells abrufen.
curl https://generor.com/api/v1/models/image/10001
Nutzer
GET /users/me AUTH
Dein Profil, Credit-Guthaben und Statistiken abrufen.
curl https://generor.com/api/v1/users/me \
-H "Authorization: Bearer gnr_live_..."
Antwort:
{
"success": true,
"data": {
"user_id": 42,
"username": "johndoe",
"email": "[email protected]",
"avatar": null,
"bio": "I make things with AI",
"website": "https://example.com",
"joined": "2025-01-15 10:30:00",
"credits": {
"total": 1250,
"paid": 1000,
"free": 200,
"earned": 50,
"max": 250
},
"creation_count": 347,
"follower_count": 12,
"following_count": 5,
"teams": [...]
}
}
PATCH /users/me AUTH
Aktualisiere dein Profil.
curl -X PATCH https://generor.com/api/v1/users/me \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"bio": "Updated bio", "website": "https://example.com"}'
GET /users/{username}
Das öffentliche Profil eines Nutzers abrufen.
curl https://generor.com/api/v1/users/johndoe
GET /users/{username}/followers
Listet die Follower eines Benutzers auf. Unterstützt Paginierung.
GET /users/{username}/following
Listet auf, wem ein Benutzer folgt. Unterstützt Paginierung.
POST /users/{username}/follow AUTH
Einem Nutzer folgen.
curl -X POST https://generor.com/api/v1/users/johndoe/follow \
-H "Authorization: Bearer gnr_live_..."
DELETE /users/{username}/follow AUTH
Einem Nutzer nicht mehr folgen.
GET /users/{username}/follow AUTH
Prüfe, ob du einem Nutzer folgst. Gibt {"following": true/false} zurück.
Teams
Alle Team-Endpunkte erfordern eine Authentifizierung.
GET /teams AUTH
Listet Ihre Teams auf.
POST /teams AUTH
Ein neues Team erstellen.
curl -X POST https://generor.com/api/v1/teams \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "My Creative Team"}'
GET /teams/{id} AUTH
Team-Details mit Mitgliederliste abrufen.
DELETE /teams/{id} AUTH
Ein Team verlassen.
POST /teams/{id}/members AUTH
Mitglied per Benutzername hinzufügen: {"username": "janedoe"}
DELETE /teams/{id}/members/{user_id} AUTH
Ein Teammitglied entfernen (nur Eigentümer).
POST /teams/join/{invite_code} AUTH
Tritt einem Team über einen Einladungscode bei.
POST /teams/{id}/invite AUTH
Einladungscode neu generieren (nur Eigentümer).
GET /teams/{id}/creations AUTH
Listet Team-Werke auf. Unterstützt Paginierung.
Kommentare
GET /creations/{id}/comments
Listet Kommentare zu einem Werk auf. Unterstützt Paginierung.
curl https://generor.com/api/v1/creations/12345/comments
POST /creations/{id}/comments AUTH
Kommentar hinzufügen.
curl -X POST https://generor.com/api/v1/creations/12345/comments \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"text": "Great creation!", "parent_id": null}'
DELETE /comments/{id} AUTH
Löschen Sie Ihren eigenen Kommentar.
POST /comments/{id}/vote AUTH
Über einen Kommentar abstimmen: {"vote": "up"} oder {"vote": "down"}
Bewertungen
GET /creations/{id}/rating
Durchschnittliche Bewertung für eine Kreation abrufen.
// Response:
{"success": true, "data": {"creation_id": 12345, "average": 4.2, "count": 15}}
POST /creations/{id}/rating AUTH
Bewerte eine Kreation (1-5). Aktualisiert eine bestehende Bewertung, falls bereits bewertet.
curl -X POST https://generor.com/api/v1/creations/12345/rating \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"score": 5}'
Credits
Guthaben ist das Zahlungssystem für KI-Generierungen, angegeben in USD.
GET /credits/balance AUTH
Dein aktuelles Credit-Guthaben abrufen.
curl https://generor.com/api/v1/credits/balance \
-H "Authorization: Bearer gnr_live_..."
// Response:
{
"success": true,
"data": {
"total": 1250,
"paid": 1000,
"free": 200,
"earned": 50,
"max": 250
}
}
GET /credits/transactions AUTH
Verlauf der Credit-Transaktionen abrufen.
curl "https://generor.com/api/v1/credits/transactions?type=spend&page=1" \
-H "Authorization: Bearer gnr_live_..."
Abfrageparameter: type (spend, purchase, daily_bonus, weekly_bonus, signup_bonus, refund, gift_sent, gift_received), page, per_page
API-Schlüssel
Verwalten Sie Ihre eigenen API-Schlüssel programmatisch. Alle Endpunkte erfordern eine Authentifizierung.
GET /api-keys AUTH
Listet Ihre API-Schlüssel auf (zeigt das Präfix, nicht den vollständigen Schlüssel).
POST /api-keys AUTH
Erstelle einen neuen API-Schlüssel. Der vollständige Schlüssel wird in der Antwort nur einmal angezeigt.
curl -X POST https://generor.com/api/v1/api-keys \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "My App", "scopes": ["read", "generate"]}'
// Response (201):
{
"success": true,
"data": {
"key_id": 1,
"api_key": "gnr_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
"prefix": "gnr_live_a1b2c3d4",
"name": "My App",
"scopes": ["read", "generate"],
"message": "Save this API key now. It will not be shown again."
}
}
Maximal 10 aktive Schlüssel pro Konto.
DELETE /api-keys/{id} AUTH
Einen API-Schlüssel widerrufen (deaktiviert ihn sofort).
Fehlercodes
| Code | HTTP-Status | Beschreibung |
|---|---|---|
UNAUTHORIZED | 401 | Fehlender oder ungültiger API-Schlüssel |
FORBIDDEN | 403 | Gültiger Schlüssel, aber unzureichende Berechtigungen oder Geltungsbereich |
NOT_FOUND | 404 | Ressource existiert nicht |
METHOD_NOT_ALLOWED | 405 | HTTP-Methode für diesen Endpunkt nicht unterstützt |
VALIDATION_ERROR | 400 | Ungültige Eingabeparameter |
INSUFFICIENT_CREDITS | 402 | Nicht genügend Credits für die Generierung |
RATE_LIMIT_EXCEEDED | 429 | Zu viele Anfragen, prüfe den Retry-After-Header |
SERVER_ERROR | 500 | Interner Serverfehler |
MCP setup
Connect an AI assistant to Generor with the local PHP MCP server. It supports generator discovery, models, cost estimates, generation, credit balance, and your creations.
Install the MCP package dependencies with Composer in the mcp directory. Requires PHP 8.2 or newer with the cURL and fileinfo extensions.
cd mcp
composer install --no-dev
Add Generor to your MCP client configuration. Replace the path with the location of your local checkout and use your own API key from account settings.
{
"mcpServers": {
"generor": {
"command": "php",
"args": ["/absolute/path/to/generor/mcp/server.php"],
"env": {
"GENEROR_API_KEY": "YOUR_GENEROR_API_KEY"
}
}
}
}
Connect by URL
For MCP clients that support API-key headers, connect to the URL below and send your key in the Authorization header. Keep the trailing slash in the URL.
https://generor.com/mcp/
Authorization: Bearer YOUR_GENEROR_API_KEY
Hosted access uses API keys. Browser OAuth sign-in is not available yet. Keep your API key private; generation requires the generate scope and spends your account credits.
Estimate costs before generating. Long generations may take up to 16 minutes; configure your client timeout accordingly. After a timeout, check your creations before retrying because the generation may still complete and spend credits.
