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

Stagify.ai › Documentación de la API

Stagify API

Panel de API

Escenifica una foto inmobiliaria desde tu propio código. Una llamada HTTP devuelve una imagen escenificada. Créditos prepago a 0,15 $ por imagen, sin suscripción, sin mínimo y sin facturas que se disparen.

URL base
https://stagify.ai/api/v1
Autenticación
Bearer stg_live_…
Tipo de contenido
multipart/form-data

Introducción

La API expone una sola cosa: el motor de escenificación que hay detrás de la aplicación web. Envías la foto de una habitación, indicas un tipo de estancia y un estilo de mobiliario, y recibes la imagen escenificada en la misma respuesta. No hay cola de trabajos ni nada que consultar en el camino normal.

Los créditos son imágenes enteras. Los compras por adelantado y cada renderizado correcto gasta uno. Un renderizado fallido se reembolsa automáticamente, así que solo pagas por una foto que has recibido. Y como el saldo es prepago, una clave robada te cuesta como mucho lo que quede en ella. No hay factura a fin de mes.

Las claves están pensadas para uso servidor a servidor. La API no envía cabeceras CORS, por lo que un navegador no puede llamarla directamente; es deliberado, y una clave accesible desde JavaScript de navegador es una clave filtrada. Mostramos la clave una sola vez, guardamos únicamente un hash y la revocamos de inmediato.

Inicio rápido

Crea una clave en tu página de claves de API, compra un paquete de créditos y envía una foto. La respuesta lleva la imagen escenificada como 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 renderizado puede tardar un par de minutos. Ajusta el tiempo de espera de lectura de tu cliente a 300 segundos y reintenta con la misma Idempotency-Key. Eso es lo que garantiza que nunca se te cobre dos veces por una foto.

Paquetes de créditos

Cargando precios…

Parámetros de la petición

POST /api/v1/renders, enviado como multipart/form-data. Todos los valores admitidos que aparecen abajo también se sirven en JSON desde GET /api/v1/options, que no requiere clave de API, para que un cliente pueda rellenar sus propios desplegables en lugar de fijar esta tabla en el código.

CampoTipoNotas
imagefileObligatorio. La foto de la habitación. JPEG, PNG o WebP, hasta 25 MB. Se comprueba el tipo MIME, no la extensión del archivo.
roomTypeenum Bedroom, Living room, Dining room, Kitchen, Office, Bathroom, Outdoors, Dorm. Por defecto Living room. Distingue mayúsculas y espacios, y un valor no reconocido no se rechaza. Se escribe en el prompt como texto libre, por lo que Living Room no es Living room.
furnitureStyleenum standard, modern, midcentury, scandinavian, luxury, coastal, farmhouse, custom. Por defecto standard, que es también en lo que se convierte silenciosamente un valor no reconocido. custom usa tu additionalPrompt en lugar del texto de estilo integrado.
additionalPromptstringIndicaciones en texto libre para este renderizado.
removeFurniturebooleanVaciar la habitación antes de escenificarla. Envía true u on; cualquier otra cosa, incluidos 1 y yes, se lee como falso.
keepFurniturestringTexto libre indicando qué conservar, p. ej. keep the dining table and the built-in shelves. Solo se lee cuando removeFurniture está activo. 500 caracteres.
furnitureImagefile[]Hasta 5 fotos de referencia de mobiliario a imitar. Mismos formatos y límite de tamaño que image.
labelVirtuallyStagedbooleanGraba el aviso “Virtually staged” en la imagen resultante.
stampStyleenum dark, light, minimal, banner. Por defecto dark. No distingue mayúsculas; un valor no reconocido vuelve al valor por defecto.
stampScalenumber De 0.7 a 1.6, por defecto 1. Los valores fuera de rango se ajustan al límite en vez de rechazarse.
stampLangenum El idioma del distintivo: english, spanish, french, german, chinese, korean, portuguese, russian, italian, japanese, dutch. Por defecto english.
variationsintegerSolo se acepta 1. Lanza peticiones simultáneas si quieres más.

Idempotencia

Un renderizado mantiene la conexión abierta durante minutos, lo que significa que el fallo que de verdad te afectará es un socket caído después de que el trabajo se completó: cobrado y sin nada en la mano. Envía una cabecera Idempotency-Key en cada petición y reintenta con el mismo valor.

Lo que tenemos registradoQué hace un reintento
Una petición correcta, con los mismos parámetrosDevuelve el resultado guardado con X-Stagify-Replayed: true. Sin segundo cobro.
Una petición todavía en curso409 REQUEST_IN_FLIGHT. Espera y reintenta.
Una petición abandonada a mitad del renderizadoSe vuelve a ejecutar con el cobro existente, hasta tres intentos.
La misma clave con parámetros distintos422 IDEMPOTENCY_KEY_REUSED. Usa una clave nueva.

Omitir la cabecera está permitido y significa que no hay protección frente a reintentos, que es el comportamiento honesto por defecto. No derivamos una clave a partir de tu foto: dos renderizados realmente distintos de la misma habitación colisionarían y quien llamase en segundo lugar recibiría la imagen del primero.

Avisos de escenificación

Muchas normas de MLS y NAR exigen que una foto escenificada lo indique. labelVirtuallyStaged graba ese aviso en los píxeles en lugar de añadirlo como metadatos que una herramienta posterior pueda eliminar.

Si el aviso no se puede aplicar, la imagen se retiene en vez de entregarse sin etiquetar, la llamada responde 500 DISCLOSURE_STAMP_FAILED y tu crédito se reembolsa. No hay forma de desactivar ese comportamiento, ni un valor por defecto por clave que lo anule sin avisar.

Errores

Todo fallo responde { "error": "…", "code": "…" }. Ramífica según code, nunca según el mensaje. Los mensajes cambian; los códigos no.

EstadoCódigoQué hacer
401API_KEY_MISSING / API_KEY_INVALID / API_KEY_REVOKEDRevisa la cabecera Authorization o crea una clave nueva.
402INSUFFICIENT_CREDITSRecarga. El cuerpo incluye credits_remaining.
403ACCOUNT_SUSPENDEDContacta con soporte.
400VARIATIONS_UNSUPPORTEDEsta API renderiza una imagen por petición. Lanza peticiones simultáneas en su lugar.
409REQUEST_IN_FLIGHTEsa clave de idempotencia sigue en curso. Espera y reintenta.
409CONCURRENCY_LIMITDemasiados renderizados a la vez. Reintenta en unos segundos.
422IDEMPOTENCY_KEY_REUSEDHas reutilizado una clave con parámetros distintos. Usa una nueva.
422NO_IMAGE_GENERATEDEl modelo no devolvió nada. Reembolsado; reintenta o prueba con otra foto.
429RATE_LIMITEDReduce el ritmo y reintenta.
500DISCLOSURE_STAMP_FAILEDNo se pudo aplicar el aviso, así que la imagen se retuvo. Reembolsado.
500RENDER_FAILEDReembolsado. Cita el ref si contactas con soporte.

Otros endpoints

  • GET /api/v1/options: los valores admitidos de cada enumeración anterior. No requiere clave de API.
  • GET /api/v1/me: ¿funciona mi clave? Devuelve la cuenta y el saldo.
  • GET /api/v1/credits: saldo y totales acumulados.
  • GET /api/v1/renders/{id}: el estado de un renderizado.

Cada respuesta lleva X-Stagify-Credits-Remaining, para que puedas ver bajar el saldo sin tener que consultarlo.

Preguntas, límites más altos o una factura en lugar de tarjeta: team@stagify.ai.