Arreda una foto immobiliare dal tuo codice. Una chiamata HTTP restituisce un’immagine arredata. Crediti prepagati a 0,15 $ per immagine, senza abbonamento, senza minimi e senza fatture fuori controllo.
- URL di base
- https://stagify.ai/api/v1
- Autenticazione
- Bearer stg_live_…
- Tipo di contenuto
- multipart/form-data
Introduzione
L’API espone una cosa sola: la pipeline di arredamento dietro l’app web. Invii la foto di una stanza, indichi un tipo di ambiente e uno stile di arredo e ricevi l’immagine arredata nella stessa risposta. Non c’è coda di lavori né nulla da interrogare sul percorso normale.
I crediti sono immagini intere. Li compri in anticipo e ogni render riuscito ne consuma uno. Un render fallito viene rimborsato automaticamente, quindi paghi solo per una foto che hai ricevuto. E poiché il saldo è prepagato, una chiave rubata ti costa al massimo quello che resta. Nessuna fattura a fine mese.
Le chiavi sono pensate per l’uso da server a server. L’API non invia header CORS, quindi un browser non può chiamarla direttamente; è voluto, e una chiave raggiungibile dal JavaScript del browser è una chiave compromessa. Mostriamo la chiave una sola volta, ne conserviamo solo un hash e la revochiamo subito.
Avvio rapido
Crea una chiave nella tua pagina delle chiavi API, acquista un pacchetto di crediti e invia una foto. La risposta contiene l’immagine arredata come 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 render può richiedere un paio di minuti. Imposta il timeout di lettura del tuo client a 300 secondi e riprova con la stessa Idempotency-Key. È questo che garantisce che non ti venga mai addebitata due volte la stessa foto.
Pacchetti di crediti
Caricamento prezzi…
Parametri della richiesta
POST /api/v1/renders, inviato come multipart/form-data. Tutti i valori accettati elencati sotto sono serviti anche in JSON da GET /api/v1/options, che non richiede una chiave API: un client può così popolare i propri menu a tendina invece di fissare questa tabella nel codice.
| Campo | Tipo | Note |
|---|---|---|
image | file | Obbligatorio. La foto della stanza. JPEG, PNG o WebP, fino a 25 MB. Viene controllato il tipo MIME, non l’estensione del file. |
roomType | enum | Bedroom, Living room, Dining room, Kitchen, Office, Bathroom, Outdoors, Dorm. Predefinito Living room. Distingue maiuscole e spazi, e un valore non riconosciuto non viene rifiutato. Viene scritto nel prompt come testo libero, quindi Living Room non è Living room. |
furnitureStyle | enum | standard, modern, midcentury, scandinavian, luxury, coastal, farmhouse, custom. Predefinito standard, che è anche ciò in cui si trasforma silenziosamente un valore non riconosciuto. custom usa il tuo additionalPrompt al posto del testo di stile integrato. |
additionalPrompt | string | Indicazioni in testo libero per questo render. |
removeFurniture | boolean | Svuota la stanza prima di arredarla. Invia true oppure on; qualsiasi altra cosa, compresi 1 e yes, vale falso. |
keepFurniture | string | Testo libero che indica cosa lasciare, ad es. keep the dining table and the built-in shelves. Letto solo quando removeFurniture è attivo. 500 caratteri. |
furnitureImage | file[] | Fino a 5 foto di riferimento dell’arredo da imitare. Stessi formati e stesso limite di dimensione di image. |
labelVirtuallyStaged | boolean | Imprime la dicitura “Virtually staged” sull’immagine prodotta. |
stampStyle | enum | dark, light, minimal, banner. Predefinito dark. Non distingue maiuscole; un valore non riconosciuto torna al predefinito. |
stampScale | number | Da 0.7 a 1.6, predefinito 1. I valori fuori intervallo vengono limitati anziché rifiutati. |
stampLang | enum | La lingua della dicitura: english, spanish, french, german, chinese, korean, portuguese, russian, italian, japanese, dutch. Predefinito english. |
variations | integer | È accettato solo 1. Per averne di più, invia richieste in parallelo. |
Idempotenza
Un render tiene aperta la connessione per minuti, quindi il guasto che ti colpirà davvero è un socket caduto dopo che il lavoro era già finito: addebitato e senza nulla in mano. Invia un header Idempotency-Key a ogni richiesta e riprova con lo stesso valore.
| Cosa risulta a noi | Cosa fa un nuovo tentativo |
|---|---|
| Una richiesta riuscita, stessi parametri | Restituisce il risultato salvato con X-Stagify-Replayed: true. Nessun secondo addebito. |
| Una richiesta ancora in corso | 409 REQUEST_IN_FLIGHT. Attendi, poi riprova. |
| Una richiesta abbandonata a metà render | Viene rieseguita sull’addebito esistente, fino a tre tentativi. |
| La stessa chiave con parametri diversi | 422 IDEMPOTENCY_KEY_REUSED. Usa una chiave nuova. |
Omettere l’header è consentito e significa nessuna protezione dai replay, che è il comportamento predefinito più onesto. Non ricaviamo una chiave dalla tua foto: due render davvero distinti della stessa stanza colliderebbero e il secondo chiamante riceverebbe l’immagine del primo.
Diciture di arredamento virtuale
Molte regole MLS e NAR richiedono che una foto arredata virtualmente lo dichiari. labelVirtuallyStaged imprime quella dicitura nei pixel invece di allegarla come metadato che uno strumento a valle può rimuovere.
Se la dicitura non può essere applicata, l’immagine viene trattenuta anziché consegnata senza etichetta, la chiamata risponde 500 DISCLOSURE_STAMP_FAILED e il tuo credito viene rimborsato. Non c’è modo di disattivare questo comportamento, né un valore predefinito per chiave che lo annulli in silenzio.
Errori
Ogni errore risponde { "error": "…", "code": "…" }. Ramifica su code, mai sul messaggio. I messaggi cambiano, i codici no.
| Stato | Codice | Cosa fare |
|---|---|---|
| 401 | API_KEY_MISSING / API_KEY_INVALID / API_KEY_REVOKED | Controlla l’header Authorization, oppure crea una nuova chiave. |
| 402 | INSUFFICIENT_CREDITS | Ricarica. Il corpo contiene credits_remaining. |
| 403 | ACCOUNT_SUSPENDED | Contatta l’assistenza. |
| 400 | VARIATIONS_UNSUPPORTED | Questa API produce un’immagine per richiesta. Invia invece richieste in parallelo. |
| 409 | REQUEST_IN_FLIGHT | Quella chiave di idempotenza è ancora in esecuzione. Attendi, poi riprova. |
| 409 | CONCURRENCY_LIMIT | Troppi render insieme. Riprova tra qualche secondo. |
| 422 | IDEMPOTENCY_KEY_REUSED | Hai riutilizzato una chiave con parametri diversi. Usane una nuova. |
| 422 | NO_IMAGE_GENERATED | Il modello non ha restituito nulla. Rimborsato; riprova o cambia foto. |
| 429 | RATE_LIMITED | Rallenta e riprova. |
| 500 | DISCLOSURE_STAMP_FAILED | Non è stato possibile applicare la dicitura, quindi l’immagine è stata trattenuta. Rimborsato. |
| 500 | RENDER_FAILED | Rimborsato. Cita il ref se contatti l’assistenza. |
Altri endpoint
GET /api/v1/options: i valori accettati di ogni enumerazione qui sopra. Nessuna chiave API richiesta.GET /api/v1/me: la mia chiave funziona? Restituisce account e saldo.GET /api/v1/credits: saldo e totali complessivi.GET /api/v1/renders/{id}: lo stato di un render.
Ogni risposta porta X-Stagify-Credits-Remaining, così puoi vedere il saldo scendere senza interrogarlo.
Domande, limiti più alti o fattura invece della carta: team@stagify.ai.