Autenticación sencilla, JSON claro y un único endpoint para enviar imágenes.
Pensado para apps web, móviles y automatizaciones.
01
Obtén un token
Registro o login devuelven un token iaimg_… que usarás en las siguientes llamadas.
02
Elige una acción
Tres modos de edición: reparar, vaciar mobiliario o cambiar color de paredes. Añade un texto libre para afinar el resultado.
03
Envía multipart
Un POST con la imagen y el campo action. Recibes URL de la imagen generada y, si quieres, base64.
Respuestas JSON
UTF-8 en todo el API
Casi todas las respuestas incluyen "ok": true o "ok": false.
Si algo falla, suele venir "error" con un mensaje legible para mostrar al usuario.
Desde el navegador puedes llamar a la API desde otro dominio: el servidor envía cabeceras CORS abiertas para métodos GET y POST con Authorization y Content-Type.
Cuenta y tokens
Identifica cada petición autenticada
Incluye siempre el token en la cabecera: Authorization: Bearer iaimg_xxxxxxxx
POST/api/auth/register.php
Crea una cuenta y devuelve el token de sesión listo para usar.
Cuerpo: JSON o formulario con email, password y, si quieres, display_name.
Mismo cuerpo que el registro (email, password). Respuesta idéntica en forma: token de acceso en 200.
GET/api/auth/me.php
Perfil, organización (nombre / email / estado) y quota del período actual (used_requests, max_requests, remaining, unlimited). También podés verlo en el panel de cliente.
GET/api/auth/tokens.php
Lista tokens del usuario (prefijo, nombre, fechas; nunca el secreto en claro). Marca el de la sesión con is_current.
POST/api/auth/tokens.php
Crea un token adicional para integraciones (por ejemplo una clave solo para tu servidor). Requiere Bearer válido.
Cuerpo JSON: { "name": "Producción — servidor X" } (opcional; si lo omites se usa un nombre por defecto).
201: el nuevo token en texto plano (solo en esta respuesta), más token_id y token_prefix.
DELETE/api/auth/tokens.php
Revoca un token: query ?token_id= o JSON { "token_id": 12 }. Si revocás el de la sesión actual, was_current será true.
POST/api/auth/logout.php
Invalida el token que envías en Authorization. Útil para “cerrar sesión” en el dispositivo actual.
GET/api/health.php
Sin autenticación. Sirve para comprobar que el backend responde y para leer la lista actual de valores válidos de action en el campo actions del JSON.
Editar una imagen
El corazón del producto
POST/api/process.php
Envía la foto y recibe la versión editada. El cuerpo va en multipart/form-data.
image (archivo): PNG, JPEG o WebP. Obligatorio para todas las acciones salvo generar. Con generar es opcional: si la envías, el servidor la usa como imagen de referencia/inspiración.
action (texto, obligatorio): uno de los valores permitidos (ver abajo).
prompt (texto): opcional para las acciones predefinidas; obligatorio y no vacío si action es personalizado o generar.
include_base64: envía 1 si quieres la imagen resultante también en base64 dentro del JSON.
mask (archivo, opcional): PNG con transparencia, mismo ancho y alto en píxeles que image. Las zonas transparentes son donde la IA puede modificar; el resto se preserva. No aplica a generar.
sync (texto): 1 fuerza procesamiento inmediato como antes (HTTP 200). Si no lo envías y la base de datos está configurada, el trabajo se encola (HTTP 202) y lo consume un worker en segundo plano.
webhook_url (texto, opcional): URL que recibirá un POST JSON al terminar (event: matezia.process.completed o matezia.process.failed). Si no la enviás, se usa la URL de webhook de la cuenta (configurable en el panel) o, en su defecto, PROCESS_WEBHOOK_URL del servidor.
webhook_secret (texto, opcional): si lo definís, el cuerpo JSON se firma con HMAC-SHA256 en el header X-matezIA-Signature: sha256=…. Misma cascada: request → cuenta → PROCESS_WEBHOOK_SECRET.
Acciones disponibles
arreglarCorrige daños puntuales en paredes o techos (manchas, grietas, humedad…).
quitar_mueblesRetira mobiliario y objetos movibles dejando la estancia vacía.
cambiar_coloresCambia el color de pintura de las paredes según tu prompt.
modernizarModerniza el ambiente o inmueble (acabados, mobiliario, iluminación) manteniendo la estructura y composición originales. Prompt opcional para estilo o detalles.
personalizadoSin plantilla del servidor: el prompt que envíes es el único texto de instrucción (obligatorio, no vacío). Si mandás máscara, se anteponen solo las reglas de respeto a la máscara.
generarGenera una imagen a partir de tu prompt. Podés omitir image o adjuntar una referencia opcional (mismos formatos que el resto del API); no se usa mask. Solo plan Enterprise: si el plan activo no es Enterprise, la API responde 403.
image_url es la ruta pública para mostrar o descargar la imagen. request_id identifica la petición cuando el servicio lo incluye (útil para soporte o trazas internas).
Límite de uso (429)
Si el plan del usuario agotó las ediciones del período, la respuesta trae "ok": false y un objeto quota con fechas de periodo, máximo y usado, para mostrar un mensaje claro en tu interfaz.
curl -s -X POST "%ORIGIN%/api/process.php" \
-H "Authorization: Bearer iaimg_TU_TOKEN" \
-F "action=arreglar" \
-F "prompt=Repair only the stain on the left wall." \
-F "image=@/ruta/local/foto.jpg"
const form = new FormData();
form.append("action", "arreglar");
form.append("prompt", "Repair only the stain on the left wall.");
form.append("image", fileInput.files[0]); // File desde <input type="file">
const r = await fetch("%ORIGIN%/api/process.php", {
method: "POST",
headers: { Authorization: "Bearer " + token },
body: form
});
const data = await r.json();
if (data.ok) window.open(data.image_url, "_blank");
GET/api/request_status.php?request_id=id
Estado de una petición (sobre todo si se encoló con 202): processing, completed, fila queue y, si ya hay resultado, image_url. Misma política de Bearer que process.php cuando corresponde.
Códigos HTTP
Qué esperar en tu cliente
Código
Situación
200
Éxito (login, me, process, logout correcto).
202
process aceptado y encolado (ver queue_id, status_url).
201
Recurso creado (registro, nuevo token API).
400
Datos incompletos o inválidos (archivo, acción, máscara…).
401
Falta token, token revocado o credenciales incorrectas.
405
Método HTTP no permitido en esa ruta.
409
Email ya registrado (solo registro).
429
Cuota de ediciones del período agotada.
502
El proveedor de IA no devolvió un resultado usable.
503
Servicio temporalmente no disponible (por ejemplo validación de usuario no disponible).