GPT, Codex, DeepSeek y GLM con una sola API.
Model.sale ofrece una base URL compatible con OpenAI, la que ya conoces. Mantén tu clave en el servidor, elige un identificador de modelo activo e inspecciona el ID de solicitud y el uso que devuelve cada llamada.
Endpoints
| Método | Ruta | Finalidad |
|---|---|---|
| GET | /v1/models | Modelos disponibles |
| GET | /v1/models/{id} | Un modelo disponible (models.retrieve de OpenAI) |
| GET | /v1/catalog | Registro completo con precios y estado en vivo |
| POST | /v1/responses | Responses, JSON y SSE (GPT/Codex) |
| POST | /v1/chat/completions | Chat Completions, JSON y SSE (GPT/GLM/DeepSeek) |
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 apps de navegador pueden llamar a la API directamente: CORS está habilitado para /v1/* sin cookies; entrega una clave solo a un navegador que controles.
Solicitud mínima
Sustituye el modelo por un identificador devuelto por 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
Define stream: true. Los streams de Responses terminan con un evento de respuesta final; los de Chat Completions terminan con [DONE]. Cada respuesta incluye el encabezado x-model-sale-request-id.
Errores y límites
Los errores usan el formato de OpenAI {error:{message,type,param,code}}. type es la categoría y code el motivo concreto.
| Estado | type | code habitual | 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 | Revisa 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 IP de la clave. |
| 404 | not_found_error | model_not_found | Usa un identificador de GET /v1/models. |
| 429 | rate_limit_error | rate_limit_exceeded | Espera los segundos de Retry-After 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. |