Documentación API

Endpoints de schemas

Consulta, crea y elimina schemas de tu cuenta con la misma API key de extracción.

Schemas · Crear

Crear un schema por API

Endpoint

POSThttps://www.claix.dev/api/create-schema

Crea un schema en la cuenta de la API key, listo para usarse en los endpoints de extracción o Modo Agente. Equivale a crearlo desde el dashboard, con validación de tipos y definiciones.

Llama siempre a https://www.claix.dev/api/create-schema. No uses la URL interna de Supabase (https://yuhcusjiywsuzjwirarw.supabase.co/functions/v1/create-schema).

Está pensado para integraciones server-to-server. No se factura (no escribe en usage_logs).

1. Autenticación

Toda petición debe incluir tu API key. Es una credencial de servidor personal, distinta de cualquier token de sesión.

Opción A — Header dedicado (recomendado):

x-api-key: <TU_API_KEY>

Opción B — Header estándar Authorization:

Authorization: Bearer <TU_API_KEY>

Con uno de los dos es suficiente. Si envías ambos, x-api-key tiene prioridad.

El sistema valida que la key exista, esté activa y la cuenta no esté suspendida. Si falla, responde 401.

2. Formato de la petición

Método: POST · Content-Type: application/json

CampoTipoObligatorioDescripción
namestringNombre visible del schema (máx. 200).
typestringexcel-json, json-excel, pdf-json, doc-json o img-json.
schema_definitionobjetoCampos a extraer. Cada clave es el nombre JSON de salida.
is_agent_modebooleanNoActiva Modo Agente. Si omites el campo pero envías agent_definition, se asume true.
agent_definitionobjetoSi hay modo agenteParámetros a razonar. Obligatorio si is_agent_mode es true.
resumen_agentstringNoInstrucción extra para la fase agente (máx. 500).

Cada campo de schema_definition debe ser:

{
  "nombre_dni": {
    "type": "string",
    "description": "nombre de la persona del dni"
  }
}

Types permitidos en extracción: string, integer, number, boolean. La description es obligatoria.

Cada parámetro de agent_definition usa boolean, string, closed o integer. Si el type es closed, options debe ser un array con al menos una respuesta:

{
  "calidad_foto": {
    "type": "closed",
    "options": ["buena calidad", "mala calidad", "ilegible", "perfecta"],
    "description": "La calidad de la imagen y la legibilidad de sus datos"
  }
}

El tipo json-excel no admite Modo Agente.

3. Cómo construir la llamada

  1. Ten a mano tu API key.
  2. Construye un POST JSON a https://www.claix.dev/api/create-schema.
  3. Incluye name, type y schema_definition.
  4. Si quieres Modo Agente, añade is_agent_mode: true y agent_definition.
  5. Comprueba el código HTTP: 201 indica que se creó.

4. Ejemplos de llamada

Consulta el panel de la derecha para ver ejemplos en cURL, JavaScript, Node.js, Python, PHP y n8n.

5. Formato de la respuesta exitosa

201 Created · Content-Type: application/json

{
  "success": true,
  "schema": {
    "id": "b980cfe7-61ef-4a5a-9724-881c8a5541e2",
    "name": "DNI cliente",
    "type": "img-json",
    "schema_definition": {
      "nombre_dni": {
        "type": "string",
        "description": "nombre de la persona del dni"
      },
      "numero_dni": {
        "type": "string",
        "description": "numero de dni"
      },
      "fecha_caducidad": {
        "type": "string",
        "description": "fecha de caducidad del dni"
      }
    },
    "is_agent_mode": true,
    "agent_definition": {
      "edad": {
        "type": "integer",
        "description": "Edad exacta de la persona pero restale 3"
      },
      "calidad_foto": {
        "type": "closed",
        "options": ["buena calidad", "mala calidad", "ilegible", "perfecta"],
        "description": "La calidad de la imagen y la legibilidad de sus datos"
      },
      "es_mayor_edad": {
        "type": "boolean",
        "description": "Es mayor de edad actualmente la persona del dni?"
      },
      "fecha_vencimiento": {
        "type": "string",
        "description": "Cuado le vence el dni y cuanto tiempo queda para ello"
      }
    },
    "resumen_agent": null,
    "created_at": "2026-08-17T13:10:00.000Z"
  }
}
CampoTipoDescripción
successbooleanSiempre true cuando el HTTP es 201.
schemaobjetoSchema persistido, incluido su id UUID.
schema.iduuidÚsalo luego como schema_id en extracción.
schema.schema_definitionobjetoDefinición normalizada.
schema.agent_definitionobjeto | nullNull si is_agent_mode es false.

6. Códigos de error

{
  "error": "Descripción legible del problema.",
  "detalle": "Información técnica adicional (solo presente en algunos casos)."
}

400 — Payload inválido: falta name/type/definition, type desconocido, description vacía, closed sin options, o json-excel con Modo Agente.

401 — Autenticación fallida: key ausente, inexistente, desactivada o cuenta suspendida.

405 — Método distinto de POST. · 500 — Error interno.

7. Resumen de códigos

CódigoCategoría¿Reintentar?
201Creado
400Error del cliente (datos mal formados)No, corrige la petición primero
401Error de autenticaciónNo, corrige las credenciales primero
405Método HTTP incorrectoNo, corrige el método primero
500Error interno del servidorSí, con precaución

8. Buenas prácticas

  • Usa https://www.claix.dev/api/create-schema, nunca la URL de Supabase.
  • El type debe coincidir con el endpoint de extracción posterior.
  • Descriptions claras mejoran la precisión de la IA en extracción y agente.
  • No incluyas tu API key en frontend ni repositorios públicos.

Ejemplos de petición

curl -X POST "https://www.claix.dev/api/create-schema" \
  -H "x-api-key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{  "name": "DNI cliente",  "type": "img-json",  "schema_definition": {    "nombre_dni": {      "type": "string",      "description": "nombre de la persona del dni"    },    "numero_dni": {      "type": "string",      "description": "numero de dni"    },    "fecha_caducidad": {      "type": "string",      "description": "fecha de caducidad del dni"    }  },  "is_agent_mode": true,  "agent_definition": {    "edad": {      "type": "integer",      "description": "Edad exacta de la persona pero restale 3"    },    "calidad_foto": {      "type": "closed",      "options": ["buena calidad", "mala calidad", "ilegible", "perfecta"],      "description": "La calidad de la imagen y la legibilidad de sus datos"    },    "es_mayor_edad": {      "type": "boolean",      "description": "Es mayor de edad actualmente la persona del dni?"    },    "fecha_vencimiento": {      "type": "string",      "description": "Cuado le vence el dni y cuanto tiempo queda para ello"    }  }}'