matezIA

Guía de integración

La API que edita tus fotos con IA

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.
  • 201: user, token, token_type (Bearer), token_id.
curl -s -X POST "%ORIGIN%/api/auth/register.php" \
  -H "Content-Type: application/json" \
  -d '{"email":"cliente@ejemplo.com","password":"TuContraseñaSegura","display_name":"Mi app"}'
POST /api/auth/login.php

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

arreglar Corrige daños puntuales en paredes o techos (manchas, grietas, humedad…).
quitar_muebles Retira mobiliario y objetos movibles dejando la estancia vacía.
cambiar_colores Cambia el color de pintura de las paredes según tu prompt.
modernizar Moderniza el ambiente o inmueble (acabados, mobiliario, iluminación) manteniendo la estructura y composición originales. Prompt opcional para estilo o detalles.
personalizado Sin 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.
generar Genera 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.

Respuesta satisfactoria (200)

ok action mime saved_path image_url request_id? image_base64?
{
  "ok": true,
  "action": "arreglar",
  "mime": "image/png",
  "saved_path": "output/…/resultado.png",
  "image_url": "/output/…/resultado.png",
  "request_id": 42
}

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"
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ódigoSituación
200Éxito (login, me, process, logout correcto).
202process aceptado y encolado (ver queue_id, status_url).
201Recurso creado (registro, nuevo token API).
400Datos incompletos o inválidos (archivo, acción, máscara…).
401Falta token, token revocado o credenciales incorrectas.
405Método HTTP no permitido en esa ruta.
409Email ya registrado (solo registro).
429Cuota de ediciones del período agotada.
502El proveedor de IA no devolvió un resultado usable.
503Servicio temporalmente no disponible (por ejemplo validación de usuario no disponible).