• English
  • Deutsch
  • Nederlands
  • Español
  • Français
  • Italiano
  • Português
  • Русский
  • 中文
  • 日本語
  • 한국어

Stagify.ai › Documentation de l’API

Stagify API

Tableau de bord API

Mettez en scène une photo immobilière depuis votre propre code. Un appel HTTP renvoie une image meublée. Crédits prépayés à 0,15 $ l’image, sans abonnement, sans minimum et sans facture qui s’emballe.

URL de base
https://stagify.ai/api/v1
Authentification
Bearer stg_live_…
Type de contenu
multipart/form-data

Introduction

L’API expose une seule chose : le moteur de mise en scène derrière l’application web. Vous envoyez la photo d’une pièce, indiquez un type de pièce et un style de mobilier, et recevez l’image meublée dans la même réponse. Il n’y a pas de file d’attente ni rien à interroger sur le chemin normal.

Les crédits sont des images entières. Vous les achetez d’avance et chaque rendu réussi en consomme un. Un rendu qui échoue est remboursé automatiquement : vous ne payez que pour une photo que vous avez reçue. Et comme le solde est prépayé, une clé volée vous coûte au plus ce qu’il en reste. Aucune facture en fin de mois.

Les clés sont prévues pour un usage serveur à serveur. L’API n’envoie aucun en-tête CORS, donc un navigateur ne peut pas l’appeler directement ; c’est délibéré, et une clé accessible depuis du JavaScript de navigateur est une clé divulguée. Nous affichons une clé une seule fois, n’en stockons qu’un hachage et la révoquons immédiatement.

Démarrage rapide

Créez une clé sur votre page de clés d’API, achetez un pack de crédits, puis envoyez une photo. La réponse contient l’image meublée sous forme de data URL.

curl https://stagify.ai/api/v1/renders \
  -H "Authorization: Bearer $STAGIFY_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F "image=@living-room.jpg" \
  -F "roomType=Living room" \
  -F "furnitureStyle=modern" \
  -F "labelVirtuallyStaged=true"

Un rendu peut prendre quelques minutes. Réglez le délai de lecture de votre client sur 300 secondes et réessayez avec la même Idempotency-Key. C’est ce qui garantit que vous n’êtes jamais facturé deux fois pour une photo.

Packs de crédits

Chargement des tarifs…

Paramètres de la requête

POST /api/v1/renders, envoyé en multipart/form-data. Toutes les valeurs acceptées ci-dessous sont également servies en JSON par GET /api/v1/options, qui ne demande aucune clé d’API : un client peut donc remplir ses propres listes déroulantes au lieu de figer ce tableau dans son code.

ChampTypeNotes
imagefileObligatoire. La photo de la pièce. JPEG, PNG ou WebP, jusqu’à 25 Mo. C’est le type MIME qui est vérifié, pas l’extension du fichier.
roomTypeenum Bedroom, Living room, Dining room, Kitchen, Office, Bathroom, Outdoors, Dorm. Par défaut Living room. Sensible à la casse et aux espaces, et une valeur non reconnue n’est pas rejetée. Elle est écrite telle quelle dans le prompt, donc Living Room n’est pas Living room.
furnitureStyleenum standard, modern, midcentury, scandinavian, luxury, coastal, farmhouse, custom. Par défaut standard, qui est aussi ce que devient silencieusement une valeur non reconnue. custom utilise votre additionalPrompt à la place du texte de style intégré.
additionalPromptstringConsignes en texte libre pour ce rendu.
removeFurniturebooleanVider la pièce avant de la meubler. Envoyez true ou on ; tout le reste, y compris 1 et yes, vaut faux.
keepFurniturestringTexte libre indiquant ce qu’il faut conserver, par ex. keep the dining table and the built-in shelves. Lu uniquement lorsque removeFurniture est activé. 500 caractères.
furnitureImagefile[]Jusqu’à 5 photos de référence de mobilier à imiter. Mêmes formats et même limite de taille que image.
labelVirtuallyStagedbooleanGrave la mention « Virtually staged » dans l’image produite.
stampStyleenum dark, light, minimal, banner. Par défaut dark. Insensible à la casse ; une valeur non reconnue revient à la valeur par défaut.
stampScalenumber De 0.7 à 1.6, par défaut 1. Les valeurs hors plage sont ramenées à la borne plutôt que refusées.
stampLangenum La langue du badge : english, spanish, french, german, chinese, korean, portuguese, russian, italian, japanese, dutch. Par défaut english.
variationsintegerSeul 1 est accepté. Lancez des requêtes simultanées pour en obtenir davantage.

Idempotence

Un rendu garde la connexion ouverte plusieurs minutes, ce qui veut dire que la panne qui vous touchera vraiment est un socket coupé après la fin du travail : facturé, les mains vides. Envoyez un en-tête Idempotency-Key à chaque requête et réessayez avec la même valeur.

Ce que nous avons en baseCe que fait une nouvelle tentative
Une requête réussie, mêmes paramètresRenvoie le résultat stocké avec X-Stagify-Replayed: true. Pas de second débit.
Une requête encore en cours409 REQUEST_IN_FLIGHT. Attendez, puis réessayez.
Une requête abandonnée en plein renduRelancée sur le débit existant, jusqu’à trois tentatives.
La même clé avec des paramètres différents422 IDEMPOTENCY_KEY_REUSED. Utilisez une nouvelle clé.

Omettre l’en-tête est autorisé et signifie aucune protection contre les rejeux, ce qui est le comportement honnête par défaut. Nous ne dérivons pas de clé à partir de votre photo : deux rendus réellement distincts de la même pièce entreraient en collision et le second appelant recevrait l’image du premier.

Mentions de mise en scène

De nombreuses règles MLS et NAR exigent qu’une photo meublée virtuellement le signale. labelVirtuallyStaged grave cette mention dans les pixels plutôt que de l’attacher en métadonnée qu’un outil en aval peut retirer.

Si la mention ne peut pas être appliquée, l’image est retenue plutôt que livrée sans étiquette, l’appel répond 500 DISCLOSURE_STAMP_FAILED et votre crédit est remboursé. Ce comportement ne peut pas être désactivé, et aucune valeur par défaut par clé ne le neutralise en silence.

Erreurs

Chaque échec répond { "error": "…", "code": "…" }. Branchez sur code, jamais sur le message. Les messages changent, pas les codes.

StatutCodeQue faire
401API_KEY_MISSING / API_KEY_INVALID / API_KEY_REVOKEDVérifiez l’en-tête Authorization, ou créez une nouvelle clé.
402INSUFFICIENT_CREDITSRechargez. Le corps contient credits_remaining.
403ACCOUNT_SUSPENDEDContactez le support.
400VARIATIONS_UNSUPPORTEDCette API produit une image par requête. Lancez plutôt des requêtes simultanées.
409REQUEST_IN_FLIGHTCette clé d’idempotence est encore en cours. Attendez, puis réessayez.
409CONCURRENCY_LIMITTrop de rendus en même temps. Réessayez dans quelques secondes.
422IDEMPOTENCY_KEY_REUSEDVous avez réutilisé une clé avec des paramètres différents. Utilisez-en une nouvelle.
422NO_IMAGE_GENERATEDLe modèle n’a rien renvoyé. Remboursé ; réessayez ou changez de photo.
429RATE_LIMITEDRalentissez, puis réessayez.
500DISCLOSURE_STAMP_FAILEDLa mention n’a pas pu être appliquée, l’image a donc été retenue. Remboursé.
500RENDER_FAILEDRemboursé. Indiquez le ref si vous contactez le support.

Autres points de terminaison

  • GET /api/v1/options : les valeurs acceptées de chaque énumération ci-dessus. Aucune clé d’API requise.
  • GET /api/v1/me : ma clé fonctionne-t-elle ? Renvoie le compte et le solde.
  • GET /api/v1/credits : solde et totaux cumulés.
  • GET /api/v1/renders/{id} : l’état d’un rendu.

Chaque réponse porte X-Stagify-Credits-Remaining, ce qui vous permet de voir le solde baisser sans l’interroger.

Questions, limites plus élevées ou facture au lieu d’une carte : team@stagify.ai.