Documentación de la API

Una API compatible con OpenAI para usar distintos modelos de IA. URL base: https://api.modeltex.fashion/v1

Quickstart

De cero a tu primera respuesta:

  1. Creá tu cuenta (email y contraseña).
  2. Cargá saldo desde Facturación (si todavía no está habilitado, el panel te lo avisa).
  3. En API Keys, creá una key. Se muestra completa una sola vez.
  4. Guardala en una variable de entorno: export MODELTEX_API_KEY="mtx_live_…"
  5. Hacé tu primera llamada:

Consultá GET /v1/models para ver qué modelos están activos en este momento; el ejemplo usa modeltex-fast como nombre típico.

Si ya tenés código con el SDK de OpenAI, alcanza con definir OPENAI_BASE_URL=https://api.modeltex.fashion/v1 y OPENAI_API_KEY=mtx_live_….

Autenticación

Todas las solicitudes a /v1 llevan tu API Key como Bearer token:

Authorization: Bearer mtx_live_xxxx…

Modelos Modeltex

Cada modelo es un alias de Modeltex (por ejemplo modeltex-fast, modeltex-smart, modeltex-pro, modeltex-reasoning). El motor real (proveedor y modelo de origen) lo gestiona Modeltex y puede cambiar sin que tu código cambie; la API nunca lo expone. Los modelos activos, sus capacidades y sus precios son los que devuelve la API:

Respuesta (formato OpenAI con un campo extra modeltex):

{
  "object": "list",
  "data": [
    {
      "id": "modeltex-fast",
      "object": "model",
      "created": 0,
      "owned_by": "modeltex",
      "modeltex": {
        "display_name": "Modeltex Fast",
        "context_window": 128000,
        "max_output_tokens": 8192,
        "capabilities": ["chat", "streaming"],
        "category": "general",
        "requires_subscription": false,
        "knowledge_enabled": false,
        "pricing_usd_per_1m_tokens": { "input": "0.15", "output": "0.60" }
      }
    }
  ]
}

Los valores de arriba son un ejemplo de formato, no precios reales. Los precios vigentes se leen de la API.

GET /v1/models/{id} devuelve un solo modelo. Si tu key tiene modelos restringidos, solo ves los permitidos.

Modelos especializados

Un modelo especializado es un modelo de lenguaje al que Modeltex le agrega conocimiento propio y reglas de comportamiento para una especialidad. Se usa exactamente igual que cualquier otro: cambiás el nombre del modelo.

ModeloEstadoPara qué
modeltex-textilePrimer modelo especializado. Disponible cuando Modeltex lo activa (GET /v1/models).Industria textil e indumentaria: moldería, escalado, tablas de medidas, tolerancias, costura y confección, telas, consumo y tizado, corte, producción y fichas técnicas.
modeltex-patternmaker, modeltex-fashion, modeltex-production, modeltex-codeEn preparación. No están publicados.Moldería industrial, moda, producción y programación.

Qué puede esperar de un modelo especializado: responde con tono y criterio de su especialidad, distingue lo que sale de la base de Modeltex de lo que es conocimiento general, avisa cuando la base no cubre tu pregunta y no afirma haber realizado pruebas, cortes o fittings. No reemplaza ensayos de laboratorio, normas obligatorias ni a un profesional.

Conocimiento y RAG

Cuando un modelo tiene conocimiento asociado, cada solicitud pasa por una recuperación (RAG) antes de llegar al motor:

  1. Se toma tu último mensaje (y el anterior si es muy corto) como consulta.
  2. Se buscan en la base de conocimiento los fragmentos más relevantes (búsqueda por texto y, si está configurada, también por embeddings).
  3. Esos fragmentos se agregan como contexto, tratados como datos y no como instrucciones, junto con el comportamiento del modelo.
  4. El modelo responde citando los fragmentos con [1], [2]… cuando los usa.

Facturación del contexto: el contexto recuperado cuenta como tokens de entrada y se cobra al precio de entrada del modelo (por eso el usage.prompt_tokens es mayor que el de tu mensaje).

Fuentes: podés pedirlas con el campo de extensión modeltex. Solo se devuelven si la base de conocimiento permite mostrarlas; nunca se devuelve el texto de los documentos.

Con metadata la respuesta incluye un objeto modeltex con request_id, model, cost_usd (lo que se te cobra), latency_ms y knowledge.used; con sources, además, knowledge.sources (documento, fragmento y puntaje) cuando corresponde. Nunca incluye costos ni datos del proveedor.

Tu contenido no se usa para alimentar las bases de conocimiento de Modeltex. Las bases privadas por cliente (planes Business) están contempladas en la arquitectura pero todavía no están habilitadas.

Chat Completions

POST /v1/chat/completions

ParámetroTipoDescripción
modelstring, requeridoAlias del modelo, p. ej. modeltex-fast.
messagesarray, requeridoRoles system, developer, user, assistant. content es texto o una lista de partes {"type":"text"}.
max_tokens / max_completion_tokensenteroMáximo de tokens de salida. Si no lo enviás, se usa 4096 (o el máximo del modelo si es menor).
temperature, top_pnúmero0–2 y 0–1.
stopstring o array (máx. 4)Secuencias de corte.
stream, stream_options.include_usagebooleanoRespuesta por streaming (SSE). Ver abajo.
seed, presence_penalty, frequency_penalty, response_format, uservariosSe pasan al proveedor. n solo admite 1.
tools, tool_choicearray / stringSolo en modelos que declaran la capacidad tools (ver Tool calling).
modeltexobjetoExtensión de Modeltex: {"metadata": true, "sources": true}.

Todavía no disponibles (la API responde 400 con el nombre del parámetro): functions (el formato viejo), function_call, logprobs, entradas de imagen o audio.

Respuesta:

{
  "id": "chatcmpl-req_…",
  "object": "chat.completion",
  "created": 1735689600,
  "model": "modeltex-fast",
  "choices": [{ "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" }],
  "usage": {
    "prompt_tokens": 12, "completion_tokens": 34, "total_tokens": 46,
    "prompt_tokens_details": { "cached_tokens": 0 },
    "completion_tokens_details": { "reasoning_tokens": 0 }
  }
}

El encabezado x-request-id identifica cada solicitud: citálo si necesitás soporte.

Streaming

Con "stream": true la respuesta llega como Server-Sent Events con chunks chat.completion.chunk y termina con data: [DONE]. Agregá "stream_options": {"include_usage": true} para recibir el uso en un chunk final. El cobro se hace al terminar el stream, con los tokens reales.

El respaldo entre proveedores solo ocurre antes de que empiece la respuesta; una vez iniciado el stream no cambia de proveedor.

Tool calling

Las herramientas (function calling) funcionan en formato OpenAI, solo en los modelos que declaran la capacidad tools en GET /v1/models (modeltex.capabilities). Si el modelo no la declara, la API responde 400 capability_not_supported: no se simula.

  1. Enviás tools (y opcionalmente tool_choice) con tu mensaje.
  2. Si el modelo decide usar una herramienta, responde con finish_reason: "tool_calls" y message.tool_calls.
  3. Ejecutás la función vos y enviás el resultado en un mensaje con role: "tool" y el tool_call_id correspondiente.

Si el modelo tiene rutas de respaldo, solo se usan las que también soportan herramientas: el comportamiento no cambia por caprichos de ruteo. También funciona con streaming (los fragmentos llegan en delta.tool_calls).

Embeddings

POST /v1/embeddings — disponible cuando existe un modelo con la capacidad embeddings activo en tu catálogo. Parámetros: model, input (texto o lista de hasta 64 textos de hasta 8.000 caracteres) y opcionalmente encoding_format: "float". No admite dimensions ni base64 por ahora. La respuesta es la de OpenAI (data[].embedding, usage.prompt_tokens) y se factura por tokens de entrada.

Errores

Todos los errores tienen el mismo formato JSON, con el request_id de la solicitud:

{
  "error": {
    "message": "Saldo insuficiente para esta solicitud. Recargá tu saldo desde Facturación.",
    "type": "billing_error",
    "code": "insufficient_balance",
    "param": null,
    "request_id": "req_…"
  }
}
HTTPcodeCuándo ocurre
400invalid_requestParámetros inválidos, JSON roto o parámetro no soportado.
401invalid_api_keyKey ausente, inválida, revocada o deshabilitada.
402insufficient_balanceEl saldo no alcanza para el costo máximo de la solicitud.
402spend_limit_exceededLa key llegó a su límite de gasto mensual.
403model_not_allowedLa key no tiene permiso para ese modelo.
403account_suspendedLa cuenta está suspendida.
400capability_not_supportedEl modelo no soporta lo pedido (p. ej. tools) o no es de chat.
400context_length_exceededLa conversación no entra en la ventana de contexto del modelo.
403subscription_requiredEl modelo requiere un plan de suscripción activo que lo incluya.
403plan_limit_reachedTu plan alcanzó un límite (p. ej. cantidad de API Keys).
404model_not_foundEl modelo no existe.
409idempotency_key_reusedYa se procesó una solicitud con ese Idempotency-Key.
429rate_limit_exceededDemasiadas solicitudes. Mirá el encabezado Retry-After.
500provider_errorFalló el proveedor del modelo (tras probar las rutas de respaldo). No se cobra.
501not_implementedEndpoint previsto pero todavía no disponible (responses, embeddings, images, audio).
503model_unavailableEl modelo está desactivado o no tiene proveedores disponibles.

Las solicitudes que terminan en error no se cobran.

Rate limits

Facturación

Suscripciones

Podés combinar suscripción + créditos + pay-as-you-go:

Los precios y características de los planes los publica Modeltex en Facturación; esta documentación no fija valores.

Ejemplos

Streaming

Con instrucciones de sistema y reintento seguro

Compatibilidad con OpenAI

FunciónEstado
GET /v1/models, GET /v1/models/{id}Disponible
POST /v1/chat/completions (texto, streaming)Disponible
POST /v1/responsesPrevisto — responde 501
POST /v1/embeddingsDisponible (con un modelo de embeddings activo)
POST /v1/images/generationsPrevisto — responde 501
POST /v1/audio/transcriptionsPrevisto — responde 501
Tools / function callingDisponible en modelos que lo declaran
Visión, audioNo disponible todavía
Extensión modeltex (metadata, fuentes)Disponible

Para migrar un proyecto existente: cambiá OPENAI_BASE_URL y OPENAI_API_KEY, y reemplazá el nombre del modelo por un alias de Modeltex.