ChatGPT, Codex y GLM a través de una sola API.
Model.sale ofrece una base URL compatible con OpenAI, conocida, para modelos GPT compatibles con ChatGPT, clientes de Codex, GLM y DeepSeek. Mantén tu clave en el servidor, usa el ID de un modelo activo e inspecciona el ID de solicitud y el uso que se devuelven con cada llamada.
/v1/responses.Authorization: Bearer ms_live_…. Las claves se muestran una sola vez y se pueden revocar desde el panel.GET /v1/models. Una solicitud nunca se redirige en silencio a otro modelo.Endpoints
| Método | Ruta | Finalidad |
|---|---|---|
| GET | /v1/models | Catálogo activo publicado |
| GET | /v1/models/{id} | Un modelo invocable (models.retrieve de OpenAI) |
| GET | /v1/catalog | Registro completo con precios y estado activo/no disponible |
| POST | /v1/responses | Responses JSON y SSE (GPT/Codex) |
| POST | /v1/chat/completions | Chat Completions JSON y SSE (GPT/GLM/DeepSeek) |
| POST | /v1/messages | Solo cuando se publica la validación de Anthropic Messages |
/v1/models contiene intencionadamente solo los modelos admitidos ahora mismo para tráfico de clientes. /v1/catalog mantiene visibles todos los ID con precio, con su resultado de sonda y los endpoints compatibles, incluidos los modelos que pasaron una comprobación activa pero aún esperan una publicación auditada de precio/margen. Un modelo solo se admite tras una comprobación JSON/SSE reciente, el uso final y la aprobación de publicación; nunca se sustituye en silencio.Capacidades de los protocolos
Usa /v1/catalog para ver los supported_endpoints actuales de cada modelo. Codex requiere un modelo activo con /v1/responses; GLM y DeepSeek usan actualmente /v1/chat/completions. Los ID de Claude siguen visibles cuando tienen precio, pero el acceso por Messages solo se activa tras superar su validación.
Solicitud mínima de Responses
Ejemplo actual publicado de Responses: gpt-5.5. Confirma que sigue apareciendo en GET /v1/models.
curl https://api.model.sale/v1/responses \
-H "Authorization: Bearer $MODEL_SALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.5","input":"Reply exactly OK"}'Streaming
Establece stream: true. Los streams de Responses terminan con un evento final de response; los de Chat Completions, con [DONE]. La pasarela añade x-model-sale-request-id a cada respuesta. Se necesita el uso para una liquidación exacta; el uso incompleto se marca para conciliación.
Autenticación
Envía la clave como Authorization: Bearer ms_live_… (SDK de OpenAI, Codex) o x-api-key: ms_live_… (SDK de Anthropic). Las aplicaciones de navegador pueden llamar a la API directamente: CORS está activado para /v1/* sin cookies; entrega una clave solo a un navegador que controles.
Errores y límites
Los errores usan el formato de OpenAI {"error":{"message","type","param","code"}} (formato de Anthropic en /v1/messages). type es la categoría y code el motivo concreto.
| Estado | type | Código típico | Qué hacer |
|---|---|---|---|
| 400 | invalid_request_error | invalid_json, model_required | Corrige el cuerpo de la solicitud; el mensaje indica el problema. |
| 401 | authentication_error | invalid_api_key | Comprueba la clave o crea una nueva en el panel. |
| 402 | insufficient_quota | insufficient_balance | Recarga en Facturación y vuelve a intentarlo. |
| 403 | permission_error | model_not_allowed, ip_not_allowed | Ajusta las restricciones de modelo o de IP de la clave. |
| 404 | not_found_error | model_not_found | Usa un ID de GET /v1/models. |
| 413 | invalid_request_error | request_too_large | Los cuerpos de solicitud están limitados a 8 MB. |
| 429 | rate_limit_error | rate_limit_exceeded, spend_limit_exceeded | Espera Retry-After segundos o sube los límites de la clave. |
| 502/503 | server_error | upstream_error, model_unavailable | Reintenta con retroceso; las solicitudes fallidas no se cobran. |