Documentation de l'API Generor

Créez avec plus de 93 générateurs d'IA — texte, image, vidéo, audio, et plus encore.

URL de base v1
https://generor.com/api/v1

Une API REST unifiée pour générer, parcourir et gérer du contenu IA. Toutes les requêtes utilisent JSON. Authentifiez-vous avec un jeton Bearer.

Authentification

Authentifiez-vous avec un jeton Bearer dans l'en-tête Authorization :

curl https://generor.com/api/v1/users/me \
  -H "Authorization: Bearer gnr_live_your_api_key_here"

Les clés API commencent par gnr_live_ suivi de 40 caractères hexadécimaux. Créez des clés via le Point de terminaison des clés API ou les paramètres de votre compte.

Certains endpoints (parcourir les générateurs, créations publiques, modèles) fonctionnent sans authentification. Les endpoints marqués de AUTH nécessitent une clé API valide.

Portées

Les clés API peuvent être limitées en portée pour restreindre l'accès :

PortéeAutorise
readRequêtes GET vers tous les points de terminaison
writeOpérations POST, PATCH, DELETE (commentaires, évaluations, mises à jour de profil, etc.)
generateGénération de contenu (coûte des crédits)

Les clés sans portée spécifiée disposent d'un accès complet.

Limites de débit

Les limites s'appliquent par clé API. Chaque réponse inclut des en-têtes de limite de débit :

X-RateLimit-Limit: 30
X-RateLimit-Remaining: 28
X-RateLimit-Reset: 1708444860
X-RateLimit-Tier: free
NiveauPar minutePar heurePar jour
free305005,000
basic602,00020,000
pro1205,00050,000
enterprise30020,000200,000

Les requêtes non authentifiées sont limitées à 15/minute par IP. En cas de limitation de débit, vous recevrez une réponse 429 avec un en-tête Retry-After.

Format de réponse

Toutes les réponses utilisent une enveloppe JSON cohérente :

Succès

{
  "success": true,
  "data": { ... },
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 142,
    "total_pages": 8,
    "has_next": true,
    "has_prev": false
  }
}

Erreur

{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Creation not found",
    "status": 404
  }
}

Pagination

Les points de terminaison de liste prennent en charge la pagination via des paramètres de requête :

ParamètrePar défautDescription
page1Numéro de page (à partir de 1)
per_page20Éléments par page (max 100)
sortnewestOrdre de tri : newest, oldest

Générateurs

GET /generators

Lister tous les générateurs disponibles.

curl https://generor.com/api/v1/generators

Paramètres de requête : status (active, development, all)

Réponse : Tableau de générateurs avec slug, titre, description, icône et générateurs similaires.

GET /generators/{slug}

Obtenir des informations détaillées sur un générateur spécifique.

curl https://generor.com/api/v1/generators/image

GET /generators/{slug}/creations

Parcourez les créations publiques d'un générateur. Prend en charge la pagination.

curl "https://generor.com/api/v1/generators/joke/creations?page=1&per_page=10"

POST /generators/{slug}/estimate

Prévisualisez le coût en crédits et le temps de génération estimé avant d'appeler /generate. Même structure de corps que /generate — mais en lecture seule : aucun crédit débité, aucune création enregistrée. C'est exactement le même nombre que l'interface affiche à côté du bouton Générer.

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

Réponse :

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

Ouvert aux appelants non authentifiés — les tarifs et délais sont des informations publiques et correspondent à ce qu'affiche la page publique du générateur.

Durées de vidéo ajustées

Si vous transmettez une valeur seconds qui ne figure pas dans le supported_durations du modèle, l'API la cale sur la valeur prise en charge la plus proche (en cas d'égalité, la valeur inférieure l'emporte) et signale le changement dans un bloc adjustments. Le coût en crédits et l'estimation de durée dans la même réponse reflètent la valeur calée — ce que /generate fera réellement — et non la requête initiale.

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

Quand l'utiliser

  • Vérification du coût avant lancement — vérifiez que l'utilisateur peut se permettre la génération avant de le facturer.
  • Interface de progression — alimentez votre barre de chargement avec time_estimate.seconds pour que les utilisateurs sachent combien de temps attendre.
  • Réglage des paramètres — appelez-la chaque fois qu'un utilisateur modifie un menu déroulant ; le coût se met à jour sans lancer la génération.

Relation avec /generate/estimate est un appel distinct, facultatif. /generate renvoie déjà le credit_cost réel facturé + credits_remaining après coup, donc si vous acceptez de payer le prix en vigueur, vous pouvez ignorer /estimate entièrement.

Prompt d'intégration (à coller dans votre assistant IA lors de la configuration de Generor) :
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

Générez du contenu à l'aide de l'IA. Il s'agit d'un appel synchrone — la réponse est renvoyée une fois la génération terminée. Consomme des crédits selon le modèle sélectionné. La génération de texte prend généralement 5 à 30 secondes, la génération d'images 10 à 60 secondes, et la génération de vidéos peut prendre plusieurs minutes.

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

Corps de la requête :

ChampTypeObligatoireDescription
promptstringOuiL'invite de génération (10 000 caractères max)
model_idintegerOuiID du modèle IA. Texte : 1-9999, Image : 10001-19999, Vidéo : 20001-29999. Voir Modèles.
privacy_modeintegerNon0 = public (par défaut), 1 = privé
team_idintegerNonCréer au sein d'une équipe
countintegerNonNombre d'éléments (1-10, par défaut 1)
languagestringNonCode de langue pour la génération de texte (par ex. « en-US », « nb-NO »). Par défaut : « auto »
temperaturefloatNonCréativité du LLM (modèles texte uniquement, 0.0-2.0)
preferencestring/intNonPréférence spécifique au générateur (par ex. type de blague, style de poème)
preference_twostring/intNonPréférence secondaire spécifique au générateur
aspect_ratioint or stringNonAccepte des ID numériques ou des chaînes de ratio/nom. Image : 1 / "1:1" / "square", 2 / "3:4" / "vertical", 3 / "4:3" / "horizontal", 4 / "16:9" / "wide", 5 / "9:16" / "tall". Vidéo : 1 / "16:9" / "wide", 2 / "9:16" / "tall". Astuce : utilisez des chaînes de ratio comme "16:9" et l'API les associe à l'ID correct pour le type de modèle.
image_urlstringNonURL de l'image de référence pour l'image-vers-image, le transfert de style ou l'image-vers-vidéo (I2V).
secondsintegerNonDurée de la vidéo en secondes (modèles vidéo uniquement). Chaque fournisseur n'accepte qu'un ensemble discret de valeurs — interrogez GET /models/video/{id} pour supported_durations. Si vous transmettez une valeur non prise en charge, l'API la ramène à la valeur prise en charge la plus proche et signale l'ajustement dans adjustments.seconds de la réponse.
generate_audiobooleanNonOption audio natif pour Veo 3.1 et Seedance 1.5 Pro (vidéo). Les autres modèles vidéo intègrent le comportement audio et ignorent cette option.
ending_frame_urlstringNonAncrage d'image de fin pour les modèles qui prennent en charge le contrôle des images de début et de fin (Veo 3.1, Wan 2.6 I2V, Seedance Pro Lite, Kling v3). Associez-le à image_url pour des transitions ou des boucles fluides.
reference_imagesarray<string>NonJusqu'à 9 URL d'images de référence. Pris en charge par : Veo 3.1 (max 3), Seedance 2.0 (max 9), Happy Horse R2V (max 9), Happy Horse Video Edit (max 5). L'ordre est préservé et présenté au modèle sous la forme [Image1] … [ImageN] lorsque les prompts y font référence.
reference_videosarray<string>NonJusqu'à 3 URL de vidéos de référence. Utilisées par Seedance 2.0 (Replicate) et Dreamina Seedance 2.0 (BytePlus direct) pour la cohérence du mouvement/style.
reference_audiostringNonURL audio de référence pour la continuité de la musique/voix. Actuellement utilisée par Dreamina Seedance 2.0 (modèle 20060-20062, BytePlus direct).
video_urlstringNonURL de la vidéo source — requise par Happy Horse Video Edit (modèle 20051), et utilisée par Dreamina Seedance 2.0 (20060-20062) pour les modes video-edit / video-extend.
parametersobjectNonChamps spécifiques au générateur — les mêmes menus déroulants exposés par l'interface, indexés par leurs identifiants DOM. Voir Paramètres du générateur ci-dessous. Les clés inconnues ou invalides sont ignorées silencieusement.

Paramètres du générateur

L'ensemble complet des champs ajustables de chaque générateur se trouve dans un schéma propre à chaque générateur (la même source utilisée par les menus déroulants du site et le préremplissage par URL). Transmettez n'importe lequel de ces champs dans l'objet parameters d'une requête de génération pour les piloter par programmation.

Obtenez le schéma de n'importe quel générateur sur GET /generators/{slug} — le tableau parameters de la réponse liste chaque champ avec son id, type (enum, number ou model), ses options (ou min/max), sa valeur default et ses cost_multipliers.

# 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"
    }
  }'
Pourquoi un point de terminaison de découverte ? La plateforme compte plus de 100 générateurs, chacun ayant ses propres paramètres. Plutôt que de les figer dans la spécification de l'API, vous récupérez le schéma en direct du générateur sur lequel vous développez, et l'API reflète exactement les menus déroulants que vous voyez sur la page publique.

Champs supplémentaires de génération de texte

Pour les générateurs de texte (model_id 1-9999), ces champs de corps de premier niveau sont transmis au point de terminaison LLM lorsque cela est pertinent :

ChampTypeDescription
user_textstringTexte complémentaire libre (par ex. contenu source à résumer / transformer)
user_text_twostringTexte secondaire complémentaire (utilisé par les générateurs à deux entrées de texte)
avoid_duplicatesbooleanOrienter le modèle vers des résultats originaux sur un lot
thinking_modestringPour les modèles capables de raisonnement : off, on, ou high
story_contextstringHistoire source transmise à story, story-part et storyboard pour une rédaction de scène fidèle à la marque
character_context / character_name / character_idstring / intContinuité des personnages pour les storyboards, les parties d'histoire et les créations de suivi
support_forintegerID de la création parente — relie cette génération en tant que création enfant / associée
modestringBascule de mode spécifique au générateur (par ex. phase de jeu)
model_speechintegerModèle de synthèse vocale à associer à la sortie texte (utilisé pour les horoscopes narrés, podcasts, etc.)
item_index / total_countintegerIndices de génération séquentielle (utilisés lors de la génération d'éléments dans l'ordre, par ex. les étapes d'une solution)
translation_of / source_languageinteger / stringTraduire une création existante plutôt que d'en générer une nouvelle

Réponse (201 Created) — exemple de générateur de texte :

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

Réponse (201 Created) — exemple de générateur d'images :

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

Durées de vidéo ajustées — si le seconds de l'appelant ne figure pas dans les valeurs supported_durations du modèle, l'API se cale sur la valeur prise en charge la plus proche avant d'invoquer le fournisseur et ajoute un bloc adjustments.seconds à la réponse, de forme identique à celui de /estimate. Cela empêche les fournisseurs d'appliquer silencieusement des valeurs par défaut non prises en charge.

Comment fonctionnent les champs de coût

  • credit_cost — le montant réel déduit, calculé comme balance_before − balance_after. C'est la source de vérité : utilisez-le pour la journalisation, la facturation et la mise à jour des soldes des utilisateurs.
  • credit_cost_estimated — l'estimation initiale du catalogue (le même nombre que /estimate aurait prédit). Inclus pour la transparence et le suivi des écarts. Diffère souvent de credit_cost pour la tarification vidéo / à la seconde / au caractère, où le coût réel est calculé lors de l'appel au fournisseur.
  • time_taken_seconds — durée réelle écoulée. Comparer avec time_estimate.seconds de /estimate pour valider la prédiction du temps historique.
Remarque : Les créations textuelles renvoient des champs propres au générateur (par exemple text, illustration_desc pour les blagues ; dish_name, ingredients pour les recettes). Utilisez GET /creations/{id} pour récupérer ultérieurement les données complètes de la création.

Créations

GET /creations AUTH

Lister vos propres créations.

curl https://generor.com/api/v1/creations \
  -H "Authorization: Bearer gnr_live_..."

Paramètres de requête : generator (filtrer par slug), page, per_page, sort

GET /creations/public

Parcourez toutes les créations publiques de tous les générateurs.

curl "https://generor.com/api/v1/creations/public?generator=image&page=1"

GET /creations/search

Rechercher des créations publiques par texte d'invite.

curl "https://generor.com/api/v1/creations/search?q=sunset+mountain"

GET /creations/{id}

Obtenir une seule création avec tous les détails, images et données spécifiques au générateur.

curl https://generor.com/api/v1/creations/12345

Les créations publiques sont accessibles à tous. Les créations privées nécessitent une authentification en tant que propriétaire.

La réponse inclut :

{
  "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": 0,
    "type": "img",
    "license": 1,
    "images": [
      {
        "url": "/users/42/img/image-12345.png",
        "width": 1024,
        "height": 1024
      }
    ],
    "generator_data": { ... }
  }
}

GET /creations/{id}/status AUTH

Vérifiez le statut de génération d'une création (utile si vous suivez les enregistrements de génération).

curl https://generor.com/api/v1/creations/12345/status \
  -H "Authorization: Bearer gnr_live_..."

Valeurs de statut : pending, generating, completed, failed, cancelled

PATCH /creations/{id} AUTH

Mettez à jour une création que vous possédez.

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}'
ChampValeurs
privacy_mode0 (public), 1 (privé)
license1 (Open GO-1.0), 2 (Exclusive GE-1.0)

DELETE /creations/{id} AUTH

Supprimer une création dont vous êtes propriétaire (suppression réversible).

curl -X DELETE https://generor.com/api/v1/creations/12345 \
  -H "Authorization: Bearer gnr_live_..."

Modèles

GET /models

Lister tous les modèles d'IA disponibles regroupés par type.

curl https://generor.com/api/v1/models

GET /models/{type}

Lister les modèles d'un type spécifique.

curl https://generor.com/api/v1/models/image

Types valides : text, image, video, speech, music, soundeffect, upscale, vector, backgroundremoval

Réponse par modèle :

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

Modèles vidéo inclure en outre la structure complète des capacités du fournisseur :

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

Modèles d'image qui font varier le rapport d'aspect incluent un tableau aspect_ratios équivalent (côté image, il y a 6 entrées : carré, vertical, horizontal, large, haut, plus match_input_image pour les modes img2img).

Comment utiliser ces champs

  • supported_durations — transmettez n'importe quelle valeur ici via seconds. Les valeurs non prises en charge sont calées côté serveur et signalées sous adjustments.seconds.
  • qualities — pour changer de résolution, recherchez le model_id de la résolution souhaitée et transmettez-le comme votre model_id. (Les résolutions sont des modèles frères, pas un paramètre d'exécution.)
  • supports_audio — lorsque true, vous pouvez transmettre "generate_audio": true lors de /generate. Lorsque false, l'indicateur est ignoré.
  • supports_end_frame — lorsque true, vous pouvez associer image_url (image de début) à ending_frame_url pour des transitions ou boucles fluides.
  • aspect_ratios — transmettez le id (entier) ou le ratio (chaîne) sous le champ aspect_ratio de /generate. Les deux formes fonctionnent.
Plages d'ID de modèle : texte (1-9999), image (10001-19999), vidéo (20001-29999), parole (30001-39999), musique (40001-49999), effets sonores (50001-59999).

GET /models/{type}/{id}

Obtenir les détails et la tarification d'un modèle spécifique.

curl https://generor.com/api/v1/models/image/10001

Utilisateurs

GET /users/me AUTH

Obtenir votre profil, votre solde de crédits et vos statistiques.

curl https://generor.com/api/v1/users/me \
  -H "Authorization: Bearer gnr_live_..."

Réponse :

{
  "success": true,
  "data": {
    "user_id": 42,
    "username": "johndoe",
    "email": "john@example.com",
    "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

Mettez à jour votre 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}

Obtenir le profil public d'un utilisateur.

curl https://generor.com/api/v1/users/johndoe

GET /users/{username}/creations

Lister les créations publiques d'un utilisateur. Prend en charge la pagination.

GET /users/{username}/followers

Lister les abonnés d'un utilisateur. Prend en charge la pagination.

GET /users/{username}/following

Lister les personnes qu'un utilisateur suit. Prend en charge la pagination.

POST /users/{username}/follow AUTH

Suivre un utilisateur.

curl -X POST https://generor.com/api/v1/users/johndoe/follow \
  -H "Authorization: Bearer gnr_live_..."

DELETE /users/{username}/follow AUTH

Ne plus suivre un utilisateur.

GET /users/{username}/follow AUTH

Vérifie si vous suivez un utilisateur. Renvoie {"following": true/false}.

Équipes

Tous les points de terminaison d'équipe nécessitent une authentification.

GET /teams AUTH

Lister vos équipes.

POST /teams AUTH

Créer une nouvelle équipe.

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

Obtenir les détails de l'équipe avec la liste des membres.

DELETE /teams/{id} AUTH

Quitter une équipe.

POST /teams/{id}/members AUTH

Ajouter un membre par nom d'utilisateur : {"username": "janedoe"}

DELETE /teams/{id}/members/{user_id} AUTH

Supprimer un membre de l'équipe (propriétaire uniquement).

POST /teams/join/{invite_code} AUTH

Rejoignez une équipe à l'aide d'un code d'invitation.

POST /teams/{id}/invite AUTH

Régénérer le code d'invitation (propriétaire uniquement).

GET /teams/{id}/creations AUTH

Lister les créations de l'équipe. Prend en charge la pagination.

Commentaires

GET /creations/{id}/comments

Lister les commentaires d'une création. Prend en charge la pagination.

curl https://generor.com/api/v1/creations/12345/comments

POST /creations/{id}/comments AUTH

Ajouter un commentaire.

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

Supprimer votre propre commentaire.

POST /comments/{id}/vote AUTH

Voter sur un commentaire : {"vote": "up"} ou {"vote": "down"}

Notes

GET /creations/{id}/rating

Obtenir la note moyenne d'une création.

// Response:
{"success": true, "data": {"creation_id": 12345, "average": 4.2, "count": 15}}

POST /creations/{id}/rating AUTH

Noter une création (1-5). Met à jour la note existante si déjà notée.

curl -X POST https://generor.com/api/v1/creations/12345/rating \
  -H "Authorization: Bearer gnr_live_..." \
  -H "Content-Type: application/json" \
  -d '{"score": 5}'

Crédits

Les crédits constituent le système de paiement utilisé pour les générations par IA, libellés en USD.

GET /credits/balance AUTH

Obtenir votre solde de crédits actuel.

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

Obtenir l'historique des transactions de crédits.

curl "https://generor.com/api/v1/credits/transactions?type=spend&page=1" \
  -H "Authorization: Bearer gnr_live_..."

Paramètres de requête : type (spend, purchase, daily_bonus, weekly_bonus, signup_bonus, refund, gift_sent, gift_received), page, per_page

Fil

GET /feed AUTH

Obtenir les créations publiques des utilisateurs que vous suivez.

curl "https://generor.com/api/v1/feed?generator=image&page=1" \
  -H "Authorization: Bearer gnr_live_..."

Paramètres de requête : generator (filtrer par slug), page, per_page

Clés API

Gérez vos propres clés API par programmation. Tous les points d'accès nécessitent une authentification.

GET /api-keys AUTH

Lister vos clés API (affiche le préfixe, pas la clé complète).

POST /api-keys AUTH

Créez une nouvelle clé API. La clé complète est affichée une seule fois dans la réponse.

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

Maximum 10 clés actives par compte.

DELETE /api-keys/{id} AUTH

Révoquer une clé API (la désactive immédiatement).

Codes d'erreur

CodeStatut HTTPDescription
UNAUTHORIZED401Clé API manquante ou invalide
FORBIDDEN403Clé valide mais autorisations ou portée insuffisantes
NOT_FOUND404La ressource n'existe pas
METHOD_NOT_ALLOWED405Méthode HTTP non prise en charge pour ce point de terminaison
VALIDATION_ERROR400Paramètres d'entrée invalides
INSUFFICIENT_CREDITS402Crédits insuffisants pour la génération
RATE_LIMIT_EXCEEDED429Trop de requêtes, vérifiez l'en-tête Retry-After
SERVER_ERROR500Erreur interne du serveur