Inszenieren Sie ein Immobilienfoto aus Ihrem eigenen Code. Ein HTTP-Aufruf liefert ein möbliertes Bild zurück. Guthaben im Voraus zu 0,15 $ pro Bild, ohne Abo, ohne Mindestmenge und ohne Rechnung, die aus dem Ruder läuft.
- Basis-URL
- https://stagify.ai/api/v1
- Authentifizierung
- Bearer stg_live_…
- Inhaltstyp
- multipart/form-data
Einführung
Die API stellt genau eine Sache bereit: die Staging-Pipeline hinter der Web-App. Sie senden ein Foto eines Raums, nennen einen Raumtyp und einen Möbelstil und erhalten das möblierte Bild in derselben Antwort. Es gibt keine Job-Warteschlange und auf dem normalen Weg nichts abzufragen.
Guthaben sind ganze Bilder. Sie kaufen sie im Voraus, und jedes erfolgreiche Rendering verbraucht eines. Ein fehlgeschlagenes Rendering wird automatisch erstattet, Sie zahlen also nur für ein Foto, das Sie erhalten haben. Und da das Guthaben vorausbezahlt ist, kostet ein gestohlener Schlüssel Sie höchstens das, was noch darauf ist. Keine Rechnung am Monatsende.
Schlüssel sind für die Server-zu-Server-Nutzung gedacht. Die API sendet keine CORS-Header, ein Browser kann sie also nicht direkt aufrufen; das ist Absicht, und ein aus Browser-JavaScript erreichbarer Schlüssel ist ein geleakter Schlüssel. Wir zeigen einen Schlüssel einmal, speichern nur einen Hash und widerrufen sofort.
Schnellstart
Erstellen Sie einen Schlüssel auf Ihrer API-Schlüssel-Seite, kaufen Sie ein Guthabenpaket und senden Sie ein Foto. Die Antwort enthält das möblierte Bild als 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"
Ein Rendering dauert bis zu ein paar Minuten. Stellen Sie das Lese-Timeout Ihres Clients auf 300 Sekunden und wiederholen Sie mit demselben Idempotency-Key. Genau das garantiert, dass Ihnen ein Foto nie zweimal berechnet wird.
Guthabenpakete
Preise werden geladen…
Anfrageparameter
POST /api/v1/renders, gesendet als multipart/form-data. Alle unten aufgeführten zulässigen Werte werden auch als JSON von GET /api/v1/options ausgeliefert, das keinen API-Schlüssel benötigt, ein Client kann damit eigene Auswahllisten füllen, statt diese Tabelle fest zu verdrahten.
| Feld | Typ | Hinweise |
|---|---|---|
image | file | Erforderlich. Das Foto des Raums. JPEG, PNG oder WebP, bis 25 MB. Geprüft wird der MIME-Typ, nicht die Dateiendung. |
roomType | enum | Bedroom, Living room, Dining room, Kitchen, Office, Bathroom, Outdoors, Dorm. Standard Living room. Groß-/Kleinschreibung und Leerzeichen zählen, und ein unbekannter Wert wird nicht abgelehnt. Er wird als freier Text in den Prompt geschrieben, Living Room ist also nicht Living room. |
furnitureStyle | enum | standard, modern, midcentury, scandinavian, luxury, coastal, farmhouse, custom. Standard standard, wozu ein unbekannter Wert auch stillschweigend wird. custom verwendet Ihren additionalPrompt anstelle des eingebauten Stiltexts. |
additionalPrompt | string | Freitext-Vorgaben für dieses Rendering. |
removeFurniture | boolean | Den Raum vor dem Staging leeren. Senden Sie true oder on; alles andere, auch 1 und yes, gilt als falsch. |
keepFurniture | string | Freitext, der benennt, was stehen bleiben soll, z. B. keep the dining table and the built-in shelves. Wird nur gelesen, wenn removeFurniture gesetzt ist. 500 Zeichen. |
furnitureImage | file[] | Bis zu 5 Referenzfotos von Möbeln, denen nachempfunden werden soll. Gleiche Formate und Größenbeschränkung wie image. |
labelVirtuallyStaged | boolean | Brennt den Hinweis „Virtually staged“ in das Ergebnisbild. |
stampStyle | enum | dark, light, minimal, banner. Standard dark. Groß-/Kleinschreibung egal; ein unbekannter Wert fällt auf den Standard zurück. |
stampScale | number | 0.7 bis 1.6, Standard 1. Werte außerhalb des Bereichs werden begrenzt statt abgelehnt. |
stampLang | enum | Die Sprache des Hinweises: english, spanish, french, german, chinese, korean, portuguese, russian, italian, japanese, dutch. Standard english. |
variations | integer | Nur 1 wird akzeptiert. Für mehr senden Sie parallele Anfragen. |
Idempotenz
Ein Rendering hält die Verbindung minutenlang offen. Der Fehler, der Sie wirklich trifft, ist deshalb ein abgebrochener Socket, nachdem die Arbeit fertig war: bezahlt und ohne Ergebnis. Senden Sie bei jeder Anfrage einen Idempotency-Key-Header und wiederholen Sie mit demselben Wert.
| Was bei uns gespeichert ist | Was ein erneuter Versuch bewirkt |
|---|---|
| Eine erfolgreiche Anfrage, gleiche Parameter | Liefert das gespeicherte Ergebnis mit X-Stagify-Replayed: true. Keine zweite Abbuchung. |
| Eine noch laufende Anfrage | 409 REQUEST_IN_FLIGHT. Warten, dann erneut versuchen. |
| Eine mitten im Rendering abgebrochene Anfrage | Läuft auf der bestehenden Abbuchung erneut, bis zu drei Versuche. |
| Derselbe Schlüssel mit anderen Parametern | 422 IDEMPOTENCY_KEY_REUSED. Nehmen Sie einen neuen Schlüssel. |
Den Header wegzulassen ist erlaubt und bedeutet keinen Wiederholungsschutz, das ist der ehrliche Standard. Wir leiten keinen Schlüssel aus Ihrem Foto ab: zwei wirklich getrennte Renderings desselben Raums würden kollidieren, und der zweite Aufrufer bekäme das Bild des ersten.
Kennzeichnungshinweise
Viele MLS- und NAR-Regeln verlangen, dass ein virtuell möbliertes Foto dies auch angibt. labelVirtuallyStaged brennt diesen Hinweis in die Pixel, statt ihn als Metadatum anzuhängen, das ein nachgelagertes Werkzeug entfernen kann.
Kann der Hinweis nicht angebracht werden, wird das Bild zurückgehalten statt unmarkiert ausgeliefert, der Aufruf antwortet 500 DISCLOSURE_STAMP_FAILED und Ihr Guthaben wird erstattet. Dieses Verhalten lässt sich nicht abschalten, und es gibt keinen Standard pro Schlüssel, der es still deaktiviert.
Fehler
Jeder Fehlschlag antwortet mit { "error": "…", "code": "…" }. Verzweigen Sie über code, nie über die Meldung. Meldungen ändern sich, Codes nicht.
| Status | Code | Was zu tun ist |
|---|---|---|
| 401 | API_KEY_MISSING / API_KEY_INVALID / API_KEY_REVOKED | Prüfen Sie den Authorization-Header oder erstellen Sie einen neuen Schlüssel. |
| 402 | INSUFFICIENT_CREDITS | Guthaben aufladen. Der Body enthält credits_remaining. |
| 403 | ACCOUNT_SUSPENDED | Wenden Sie sich an den Support. |
| 400 | VARIATIONS_UNSUPPORTED | Diese API rendert ein Bild pro Anfrage. Senden Sie stattdessen parallele Anfragen. |
| 409 | REQUEST_IN_FLIGHT | Dieser Idempotenzschlüssel läuft noch. Warten, dann erneut versuchen. |
| 409 | CONCURRENCY_LIMIT | Zu viele Renderings gleichzeitig. In ein paar Sekunden erneut versuchen. |
| 422 | IDEMPOTENCY_KEY_REUSED | Sie haben einen Schlüssel mit anderen Parametern wiederverwendet. Nehmen Sie einen neuen. |
| 422 | NO_IMAGE_GENERATED | Das Modell hat nichts geliefert. Erstattet; erneut versuchen oder ein anderes Foto nehmen. |
| 429 | RATE_LIMITED | Drosseln und erneut versuchen. |
| 500 | DISCLOSURE_STAMP_FAILED | Der Hinweis konnte nicht angebracht werden, das Bild wurde zurückgehalten. Erstattet. |
| 500 | RENDER_FAILED | Erstattet. Nennen Sie die ref, wenn Sie den Support kontaktieren. |
Weitere Endpunkte
GET /api/v1/options: die zulässigen Werte jeder Aufzählung oben. Kein API-Schlüssel nötig.GET /api/v1/me: funktioniert mein Schlüssel? Liefert Konto und Guthaben.GET /api/v1/credits: Guthaben und Gesamtsummen.GET /api/v1/renders/{id}: der Status eines Renderings.
Jede Antwort trägt X-Stagify-Credits-Remaining, sodass Sie das Guthaben sinken sehen, ohne es abzufragen.
Fragen, höhere Limits oder eine Rechnung statt Karte: team@stagify.ai.